24 质量管理
- 24.1软件质量
- 24.2 软件标准
- 24.3 复查与审查
质量保证团队:在大多数公司负责管理版本测试过程,即负责软件的测试,检查系统是否满足需求,以及维护测试过程记录
质量规划:为项目制定一个质量计划的过程。应当列出要达到的软件质量,并且描述怎么评估这些质量
质量文档:记录项目中的每个子小组所做的工作的文件
- 帮助检查,以避免遗忘重要的任务,或避免团队的一部分会对其他团队所做的工作做出错误的假设
- 贯穿一个系统生命周期的沟通手段
- 允许对系统进化负责的小组追踪测试以及开发团队所做的工作
24.1软件质量
- 软件质量管理的一个通用假设:按照需求测试系统。根据测试结果判断是否实现了要求的功能
- 系统的主观质量很大部分依赖于非功能特性:安全性、可理解性、可移植性、信息安全性、可测试性、可用性、可靠性、可调节性、可复用性、适应力、模块化、效率、鲁棒性、复杂度、学习能力
- 开发过程对于软件质量有明显的影响:好的过程更有可能得到好的软件。过程质量的管理和改进能够减少软件开发过程中产生的缺陷
24.2 软件标准
重要性 | 描述 |
---|---|
智慧的结晶 | 软件标准封装了对于机构来说最成功的或最恰当的软件开发实践。制定为标准可避免重犯错误 |
为定义特定环境中的“质量”含义提供了一个框架 | 通过使用标准,为判断软件是否达到要求的质量水平建立基础 |
有助于工作的连续性 | 由一个人着手进行的工作别人可以接着做。软件标准确保一个机构中所有的工程人员采用相同的做法 |
类型 | 描述 |
---|---|
产品标准 | 用于开发的软件产品。包括文档标准,如需求文档格式,文档编写标准,编码标准 |
过程标准 | 定义了软件开发必须遵循的过程。应将良好的开发方法封装其中。过程标准包括对描述、设计和有效性验证过程、过程支持工具以及对在这些过程中产生的文档的描述的定义 |
- 为了减少不满情绪,设定标准的质量管理人员要采取以下步骤
- 让软件工程人员参与产品标准的选择
- 定期评审和修改标准,以反映技术的变化
- 尽可能提供支持软件标准的软件工具
24.3 复查与审查
- 质量复查:检查文档和代码的一致性和完整性,确保遵循质量标准
- 用来发现软件和项目文档的问题和遗漏
- 复查的结果应当作为质量管理过程的一部分被正式记录
- 过程复查:将软件工程的实际过程和计划过程对比。关注点是工程是否能够按时并在预算范围内发布有用的软件
- 复查和审查的目的是提升软件的质量,不是评估开发团队成员的表现
- 项目管理人员必须对个人的关注保持敏感。必须营造一种文化,发现错误时不责备当事人
- 复查过程
- 1 复查前活动:复查前工作关心复查的计划和复查的准备工作
- 复查计划:包括建立一个复查团队,安排复查的时间地点,分发要被复查的文档
- 复查准备工作:复查团队见到要复查的软件的一个综述
- 部分复查团队成员需要阅读并理解软件、文档及相关标准
- 他们独立工作,依靠标准找出错误、遗漏和违背的地方
- 不能参加会议的复查人员,可以提供书面的软件意见
- 2 复查会议:会议期间,被复查文档或程序的作者和复查团队一起把文档从头到尾浏览一遍
- 复查时间不超过两个小时
- 包含一个复查主席,负责保证所有的书面意见被考虑在内。在复查期间写西安一个达成共识的意见和行动的记录
- 包含一个成员正式记录所有复查决议和要采取的行动
- 3 复查后活动:会议结束后,必须解决在复查期间提出的问题
- 比如修复软件漏洞,重构软件以使它和质量标准一致,重写文档
- 敏捷过程的复查
- Scrum:每次迭代完成后,会有一个复查会议(冲刺复查),讨论质量问题
- 极限编程:配对编程确保另一个团队成员经常检查和复查代码。极限编程依赖于个人主动性来提升和重构代码
- 程序审查:同行评审,团队成员合作发现开发程序中的漏洞
- 不同背景的团队成员,对程序源码进行精心、一行一行的复查
- 寻找错误和问题(逻辑错误,代码异常等),并在审查会议中描述出来
- 审查时,经常使用一份常见编程错误的检查表。且不同的语言有不同的检查表
- 每个机构应当根据部门标准和实践开发自己的检查表,并经常更新检查表
24.4 软件度量和量度
中文 | 英文 | 描述 | 目标 |
---|---|---|---|
软件度量 | measurement | 对软件组织、系统或过程的某种属性进行量化 | 长期目标是利用度量代替复查,评判软件质量。度量之后达到所需质量阈值就可以不通过复查而被接受 |
软件量度 | metric | 能被客观度量的软件系统、系统文档或开发过程有关的特性 | 软件量度影响管理决策的制度 |
软件量度分类 | 描述 | 举例 | 影响 |
---|---|---|---|
控制量度 | 支持过程管理,常与软件过程相关 | 修复发现的缺陷所需平均工作量和时间 | 决定是否做出过程改变 |
预言者量度(产品量度) | 与软件本身相关 | 模块的回路复杂性,程序中标识符的平均长度,在设计中与对象有关的属性和操作的数量 | 用来估计软件变更所需的成本 |
软件产品量度可能用到的方法:
- 给系统质量属性赋值:通过度量系统组件的特性(如回路复杂性),并综合这些量度,评估系统质量属性(如可维护性)
- 找出质量低于标准的系统组件:度量能识别哪些特性背离某些规范的个别组件。比如找出有着高复杂性的问题组件,因为复杂度高难于理解,组件更可能包含错误
CK 面向对象的量度套件
面向对象量度 | 描述 |
---|---|
每个类加权后的方法 | 每个类的方法数,是对每个方法根据复杂度进行加权后计算所得。度量值越大,对象类越复杂 |
继承树的深度(DIT) | 在继承树中的具体层数。继承树越深,设计越复杂 |
孩子数(NOC) | 度量类的直接子类数,NOC 度量类层次结构的宽度,DIT 代表它的深度。NOC 高意味着更多的复用 |
对象类间耦合度(CBO) | 当一个类中的方法使用在另一个类中定义的方法或实例时,类间就是耦合的。CBO 意味着类是高度依赖的 |
对类的响应(RFC) | 当类的对象接收到消息时潜在可能的对此做出相应的方法数的度量。RFC 越高,类的复杂度越高 |
方法追你个缺乏内聚力(LCOM) | 通过计算类中各对方法而得。LCOM 是两个数的差,一个数是方法间没有共享属性的方法对数,一个数是方法间共享属性的方法对数。此亮度值的意义有争议 |
- 软件组件分析的关键阶段
- 选择要做的度量
- 选择要评估的组件
- 度量组件特性
- 识别异常度量
- 分析异常组件