【软件构造】第一章(2)
二.软件构造的质量目标
软件系统的质量特性
-外部和内部质量因素
-重要的外部质量因素
-质量因素之间的权衡
软件建设的五大质量目标
-易于理解:优雅和美丽的代码/易于理解
-随时准备变更:可维护性和适应性
-开发成本低:设计用于/与重用:可重用性
-安全的bug:健壮性
-高效运行:性能
外部质量因素:质量,如速度或易用性,其在软件产品中的存在或不存在可能被其用户发现(不仅是与最终产品实际交互的人,还包括购买软件或将其开发外包出去的人)。外部质量因素影响用户
内部因素适用于软件产品的其他特性,如模块化或可读性,只有能够访问实际软件文本的计算机专业人员才能感觉到。内部质量因素影响软件本身及其开发人员
最后,只有外部因素才重要,但是,实现这些外部因素的关键在于内部因素:为了让用户享受可见的质量,设计人员和实现人员必须应用内部技术来确保隐藏的质量
1.外部质量因素
(1)正确性
是软件产品执行它们的精确任务的能力,由它们的规范定义。
正确是首要的品质。假设软件系统是分层开发的。每一层都保证它的正确性,前提是它的下层也是正确的。
(2)健壮性
健壮性是软件系统对异常情况作出适当反应的能力。
-健壮性是正确性的补充。
-正确性处理系统在其规格所涵盖的情况下的行为;
-健壮性描述了规范之外发生的事情。
健壮性是确保在出现这种情况时,系统不会引起灾难性事件;它应该生成适当的错误消息,干净地终止执行,或者输入一个所谓的“优雅降级”模式。
(3)可扩展性:
可扩展性是使软件产品适应规格变更的便利性。
提高可扩展性有两个基本原则:
-设计简单:简单的架构总是比复杂的架构更容易适应变化。
-分散化:模块越自治,一个简单的变更只影响一个模块或少量模块的可能性就越大,而不是触发整个系统的变更连锁反应。
(4)可重用性
可重用性是软件元素为许多不同应用程序的构建服务的能力。对可重用性的需求来自于对软件系统经常遵循类似模式的观察;应该有可能利用这种共性,避免对以前遇到的问题重新发明解决方案。通过捕获这样的模式,可重用软件元素将适用于许多不同的开发。
(5)兼容性
兼容性是将软件元素与其他元素轻松地结合在一起。
·使用标准文件格式、数据结构、接口,保持一致性
·定义一套标准的访问协议
(6)效率
效率是软件系统对硬件资源的需求尽可能少的能力,例如处理器时间、内存和外部内存占用的空间、通信设备使用的带宽。
(7)可移植性
可移植性是将软件产品转移到各种硬件和软件环境的便利性。可移植性不仅解决了物理硬件的变化,而且更一般地解决了硬件-软件机器的变化,我们真正编程的机器,包括操作系统、窗口系统(如果适用的话)和其他基本工具。
(8)易用性
易用性是指具有不同背景和资格的人能够轻松地学习使用软件产品并将其应用于解决问题。它还包括易于安装、操作和监视。
(9)功能性
软件提供功能的多少
(10)及时性
及时性是指软件系统能够在用户需要的时候或之前发布。
(11)其他
可验证性:保证软件的效果
完整性是软件系统保护其各种组件(程序、数据)免受未经授权的访问和修改的能力。
可修性是指促进缺陷修复的能力
节约是与及时性相伴而生的,是一个系统在其指定的预算上或低于预算的情况下完成任务的能力。
2.内部质量因素
(1)代码可读性、可理解性和清晰性
(2)圈复杂度:用来衡量一个模块判定结构的复杂程度
(3)耦合度/内聚度:追求低耦合、高内聚
3. 均衡决策
质量因素之间的权衡可能是必要的,但有一个因素比其他因素突出:正确性。
(1)经济性与功能性相矛盾
(2)性能与可移植性、可复用性相矛盾
(3)及时性与延展性相矛盾
4. 重要属性
(1)可读性
·构建-代码-时刻
- 代码的可理解性(命名标准、代码布局与风格、注释、复杂度)
- 函数规约
- 评审、演练
·构建-组件-时刻:构建/项目的可理解性(包、文件的组织和命名空间)
·构建-代码-周期:重构
·运行-代码-时刻:日志跟踪
(2)可复用性
·构建-代码-时刻
- ADT/OOP
- 接口与实现分离
- 继承/重载/重写
- 组合/代理
- 多态
- 子类型与泛型编程
- OO设计模式
·构建-组件-时刻
- API设计
- 类库
- 框架(可复用)
(3)可扩展性
·构建-代码-时刻
- 模块化设计
- 聚合度/耦合度
- OO设计模式
-表格的编程;
-基于状态的编程;
-基于语法的编程
·构建-组件-时刻:面向对象设计
·构建-组件-周期:软件版本控制
(4)可靠性(正确性 && 健壮性)
·构建-代码-时刻
错误处理;
异常处理;
断言;
防御性编程;
测试优先编程
·构建-组件-时刻:
- 单元测试
- 集成测试
·构建-周期:回归测试
·运行-时刻:调试转储
·运行-周期:日志跟踪