还是第一章 有质量的软件构造
- 保证质量的指标
- 易于理解
- 留有改进空间
- 易于升级
- 安全
- 高性能
1.3软件系统的质量特性 内部质量和外部质量
- 外部质量是用户能够感受到的,影响用户的使用
- 内部质量影响使用代码的相关人员,影响软件本身和开发者
1.3.1外部质量
- 正确性
- 定义:程序总是能够给出约定中的行为
- 保证方法:
- Testing
- debugging
- 鲁棒性(健壮性):
- 定义:对于异常输入,程序能够给出合理的反应,对于正确性的关系如下
- 异常的界定:判断是否是异常的标准,不取决于客观的正确标准,而取决于程序的规格说明
- 可拓展性:
- 定义:可扩展性是指软件易于调整以适应变化的能力。
- 保证方法:
- Design simplicity(设计简单化):简单的体系结构总是比复杂的体系更容易适应变化。
- Decentralization(离散化)::模块自治性越强,变化时对其余模块影响越小。
- 可复用性:
- 定义:软件经常遇到相似的模式,利用共性,避免重复实现。
- 保证方法:通过捕获这样的模式,可重用的软件元素将适用于许多不同的开发
- 兼容性:
- 定义:兼容性是将本软件与其他部分(操作系统,其它代码等)结合起来的能力。
- 难点:不同软件有不同的设定/规定
- 保证办法:统一标准
- 标准化文件格式
- 标准化数据结构
- 标准化用户接口
- 有时候通过协议来实现更通用的兼容性
- 效率
- 定义:效率是软件系统对硬件资源尽可能少的需求的能力(首先应保证正确)
- 保证方法:将会在后面提到
- 可移植性
- 定义:可移植性是指便于将软件产品转移到各种硬件和软件环境。
- 便于使用
- 定义:用户可以轻松掌握软件的使用,也包括安装、运行和监控的容易度
- 功能性
- 定义:程序功能的强大程度
- 时效性
- 时效性是指软件系统在用户需要时或之前发布的能力。
更多的还有:可验证性,完整性,可维护性,经济性等
1.3.2 内部质量
内部质量有着如下想评判标准
- 圈复杂度,用来衡量一个模块判定结构的复杂程度
- 高内聚度,低耦合度
- 代码的易于理解,可读性,简洁度
- 代码的复杂程度
- 代码的体积
PS.内部质量因素通常用作外部质量因素的部分度量
1.4软件构造的五个关键目标
- 易于理解
- Code level Moment Build-time 代码的可理解性(变量/子程序/语句的命名与构造标准、代码布局与风格、注释、复杂度)Review; Walkthrough; 函数规约
- Component-level Moment Build-time 构件/项目的可理解性(包的组织、文件的组织、命名空间)
- Code level Period Build-time 重构
- Code level Period Run-time 日志
- 可复用性
- Code level Moment Build-time ADT/OOP;接口与实现分离;重载;继承/重载/重写;组合/代理;多态;子类型与泛型编程;OO设计模式
- Component-level Moment Build-time API design; Library; Framework(for/with reuse)
- 可维护性和适应性
- Code level Moment Build-time 模块化设计;聚合度/耦合度;SOLID;OO设计模式;
- Component-level Moment Build-time SOLID;GRASP(见第八张)
- Component-level Period Build-time SCM Version Control
- 鲁棒性
- Code level Moment Build-time Error handling;Exception handling;Assertion;Defensive programming;Test-first programming
- Component-level Moment Build-time Unit Testing Integration Testing
- Period Build-time Regression Testing
- Moment Run-time Debug Dumping
- Period Run-time Logging Tracing
- 高性能
- Code level Moment Build-time 设计模式
- Code level Moment Run-time 空间复杂性(内存管理);时间复杂性(算法性能);代码调优
- Component-level Moment Run-time 分布式系统
- Code level Period Run-time Performance analysis and tuning(调整)
* Component-level Period Run-time 并行/多线程程序