可维护性(Maintainability)是指软件产品可被修改的能力。修改可能包括修正、改进或软件 对环境、需求和功能规格说明变化的适应。 可维护性包括五个子特性:易分析性、易改变性、稳定性、易测试性和维护依从性。
(1)易分析性(Analyzability) 易分析性(Analyzability)是指软件产品诊断软件中的缺陷或失效原因或识别待修改部分的能 力。易分析性最终目的是降低定位缺陷的成本,或者说是降低缺陷修复成本,因为定位缺陷是修复 缺陷的一个过程。 例如:很多系统都有一个日志系统,用于跟踪系统运作的情况,复杂的系统日志还会分为很多 种类型,如一般日志、安全性日志等。这样做的目的很简单,就是如果哪天系统运行出问题了,可 以迅速地进行定位,进而找到系统失效的原因。 (2)易改变性(Changeability) 易改变性(Changeability)是指软件产品使指定的修改可以被实现的能力。实现包括编码、设 计和文档的更改。设计上封装性好、高内聚(同层次设计时,一个实体只完成一个功能)、低耦合, 为未来可能的变化留有扩充余地。这样做的目的是可以更好地提高产品的可扩展性,进而降低缺陷 出现的可能性。 (3)稳定性(Stability) 稳定性(Stability)是指软件产品避免由于软件修改而造成意外结果的能力。易改变则较稳定, 减少频繁修改而导致的不稳定。例如:代码中有物理含义的数字,一定用宏代替。 上面的三个特性主要是针对开发需要考虑的特性,主要影响软件的内部质量。
(4)易测试性(Testability)
易测试性(Testability)是指软件产品使已修改软件能被确认的能力。软件的可测试性是指软 件发现故障并隔离、定位其故障的能力特性,以及在一定的时间和成本前提下,进行测试设计、测试执行的能力。软件的可测试性通常包含可操作性、可观察性、可控制性、可分解性、简单性、稳 定性和易理解性。但在实际软件设计中,通常考虑其可观察性和可控制性。可测试性主要是考虑如 何方便测试执行,以及发现问题后如何方便问题定位。在进行可测试性分析之前,通常要分析被测 特性,然后根据各被测特性的观察和控制来提出测试人员的可测试性需求。简单地说,就是研究如 何打点、打什么点和如何进行流程控制。我们通常使用的方法是在关键的位置(模块输入/输出、 错误、关键数据更新等)上执行输出,引入输出过滤,在线修改模块变量等。业界还有不少其他算 法,如哨兵算法:通过一个独立的程序周期去读被测试程序 P 的状态数据,并转储出来。易测试 的目的是降低发现缺陷的成本。 第一:软件可控制。 软件系统提供辅助手段帮助测试工程师控制该系统的运行,实现其测试执行步骤的能力(通 过打点、改变内部状态、值等手段)。 第二:可观察。 软件系统提供辅助手段帮助测试工程师获得充分的系统运行信息,以正确判断系统运行状态 和测试执行结果的能力。 设计单独的测试模式; 提供单独的测试版本。 测试部(一般指测试系统工程师)应该在需求分析阶段就提出可测试性需求,可测试性需求 和软件产品其他需求一起纳入需求包被分析设计并实现。
(5)维护依从性(Maintainability Compliance)
维护依从性(Maintainability Compliance)是指软件产品遵循与维护性相关的标准或约定的能力。