文章目录
可维护性的度量和设计原则(1)
软件维护和演化
软件维护
- 软件维护指在软件发布后对软件中的错误进行修改以提升性能或者其他特性的活动。
- 软件维护是软件产品最困难的方面,因为它与其他所有的软件开发阶段都相关。
- 修复代码后
- 测试修改是否正常:使用特殊构造的测试用例
- 检查回归性错误:使用存储的测试数据,并将特殊构造的测试用例添加到存储的测试数据中,以便将来进行回归测试
- 记录所有更改
- 软件维护的种类
- 纠正性维护(Corrective maintenance):纠正软件产品中的问题
- 适应性维护(Adaptive maintenance):对软件产品进行修改,以使软件产品能够适应新的变化的环境
- 完善性维护(Perfective maintenance):增强软件产品以提高性能或增加可维护性
- 预防性维护(Preventive maintenance):修改软件产品,以便在软件产品成为有效故障之前检测并纠正软件产品中的潜在故障。
软件演化
- 软件演化是在软件维护中使用的一个概念,指最初开发软件的过程,然后由于各种原因反复更新软件。
- 典型系统的90%以上的成本出现在维护阶段,并且任何成功的软件都将不可避免地得到维护。
- Lehman’s Laws:一个软件是为了解决现实世界中的问题而产生的,它如何表现应该和它运行的环境紧密相关,因此这样的软件需要适应不同的需求和环境。
可维护性的指标
可维护性的几个名字
- Maintainability:软件易于被修改以纠正错误、提升性能或者其他特性、适应变化的环境的能力。
- Extensibility:一个软件易于增加新的功能的能力。
- Flexibility:软件对于用户的需求、外部技术和社会环境而易于改变的能力。
- Adaptability:一个交互系统能够根据用户或环境提供的信息改变它的行为的能力。
- Manageability:可以高效,轻松地监控和维护软件系统,以保持系统的正常、安全地运行。
- Supportability:在软件部署后还有多大的受支持程度。
关于可维护性的问题
- 结构和设计简单性:改变事物有多容易
- 紧密或松散耦合的事物(即关注点分离)
- 包装/模块中的所有要素是否具有凝聚力,其责任是否明确且密切相关
- 它是否具有过于深入的继承层次结构,还是有利于组合而不是继承
- 方法定义中有多少独立的执行路径(即圈复杂度)
- 存在多少代码重复
一些可维护性的指标
- Cyclomatic Complexity:度量软件的结构复杂性
- 计算程序流中独立路径的个数
- 程序流越复杂,需要的测试就更多,可维护性也更低
- 计算公式:CC = E-N+2, CC=P+1, CC=number of areas
- Lines of Code
- 很高的代码行数预示着可能有些类或者方法尝试实现太多的功能,而这些功能应该被分开
- 也可能意味着类或者方法难以维护
- Halstead Volume:基于源代码中运算符和操作数的个数
- Maintainability Index(MI):计算一个0到100的指标,代表了软件维护的相对容易程度,基于以下几个指标计算:
- Halstead Volume (HV)
- Cyclomatic Complexity (CC)
- The average number of lines of code per module (LOC)
- The percentage of comment lines per module (COM)