一、概述
随着软件行业的迅猛发展,软件测试也逐渐受到越来越多的软件公司所重视,然而开发出来的软件直接就可以拿出来做测试吗?根据近几年来的实践证明,在设计软件时事先没有对软件的可测试性进行周密设计和部署的软件在测试时总是很难于进行,直到测试无法进行下去为止。被测软件在编码时需要考虑给测试和后期的产品维护提供必要的手段和接口支持,即要求软件具有可测试性。基于可测试性的目标考虑,良好的架构设计,完备的接口,使得软件测试更加高效和可行,同时产品维护也更加便利。
本文描述的范围:可测试性定义、可测试性特征、可测试性设计。
读者对象:系统分析和设计人员、开发人员、测试人员。
参考文献:
1、《软件可测试性需求设计》 Vince
2、《高质量C++/C编程指南》 林锐
3、《软件工程思想》 林锐
二、软件可测试性定义
2.1 可测试性定义
软件的可测试性是指在一定的时间和成本前提下,进行测试设计、测试执行以此来发现软件的问题,以及发现故障并隔离、定位其故障的能力特性。简单的说,软件的可测试性就是一个计算机程序能够被测试的容易程度。
一般来说可测试性很好的软件必然是一个强内聚、弱耦合、接口明确、意图明晰的软件,而不具可测试性的软件往往具有过强的耦合和混乱的逻辑。
2.2 可测试性特征
1、可操作性:“运行得越好,被测试的效率越高。”
1)系统的错误很少;
2)没有阻碍测试执行的错误;
3)产品在功能阶段的演化(允许同时的开发和测试)。
2、可观察性:“你所看见的就是你所测试的。”
1)每个输入有唯一的输出;
2)系统状态和变量可见,或在运行中可查询;
3)过去的系统状态和变量可见,或在运行中可查询(例如:事务日志);
4)所有影响输出的因素都可见;
5)容易识别错误输出;
6)通过自测机制自动侦测内部错误;
7)自动报告内部错误;
8)可获取源代码。
3、可控制性:“对软件的控制越好,测试越能够被自动执行与优化。”
1)所有可能的输出都产生于某种输入组合;
2)通过某种输入组合,所有的代码都可能被执行;
3)测试工程师可直接控制软件和硬件的状态及变量;
4)输入和输出格式保持一致且有结构;
5)能够便利地对测试进行说明、自动化和再生;
6)接口和模块易控制;
7)业务流程和场景易控制。