目录
一、概念
Testability:指软件可以通过(通常是基于执行的)测试来演示其故障。
1、具体来说,可测试性是指假设软件至少有一个故障,那么它在下一次测试执行中失败的概率。
2、如果系统中存在故障,那么我们希望它在测试过程中尽快失败。
3、为了使系统能够正确地进行测试,必须能够控制每个组件的输入(并可能操作其内部状态),然后观察其输出(也可能是其内部状态)
二、场景
1、通用场景
刺激源 | 单元测试人员、集成测试人员、系统测试人员、验收测试人员、最终用户,可以手动运行测试或使用自动测试工具 |
刺激 | 如类、层或服务,由于完成了编码增量而执行一组测试;子系统的完整集成;系统的完整实现;或将系统交付给客户。 |
制品 | 系统中被测试的部分 |
环境 | 设计时、开发时、编译时、集成时、部署时、运行时 |
响应 | 以下一个或多个操作: 1)执行测试套件和捕获结果; 2)捕获导致故障的活动; 3)控制和监控系统的状态 |
响应衡量 | 以下一个或多个: 1)查找故障或故障类别的花费,达到给定的状态空间覆盖百分比的花费; 2)下一次测试发现故障的概率; 3)执行测试的时间; 4)检测故障的花费; 5)测试中最长依赖链的长度; 6)准备测试环境的时间长度; 7)风险暴露的减少(size(loss) * prob(loss)) |
——翻译自《软件架构实践》第3版
2、特定场景
单元测试人员在开发过程中完成一个代码单元,并执行一个测试序列,测试结果被捕获,在测试3小时内提供85%的路径覆盖率。
——翻译自《软件架构实践》第3版
刺激源 | 单元测试人员 |
刺激 | 执行单元的测试序列 |
制品 | 被测试的代码单元 |
环境 | 开发时 |
响应 | 执行一个测试序列,测试结果被捕获 |
响应衡量 | 3小时内提供85%的路径覆盖率 |
三、可测试性的策略
1、目标
在软件开发的增量完成时允许更容易的测试。
2、策略
1)Control and Observe System State(控制和观察系统状态)
Specialized Interfaces: 通过自动化测试工具 或正常执行来控制或捕获组件的变量值。- Record/Playback:捕获跨越接口的信息,并将其作为进一步测试的输入。
Localize State Storage:要以任意状态启动系统、子系统或模块以进行测试,如果该状态存储在单个位置,则最方便。
- Abstract Data Sources:抽象这些接口可以让您更容易地替换测试数据。
Sandbox:将系统从现实世界中分离出来,使实验不受担心必须撤销实验后果的影响。 Executable Assertions:断言(通常)手工编码并放置在所需的位置,以指示程序何时和何处处于错误状态。
2)Limit Complexity(限制复杂性)
Limit Structural Complexity(限制结构复杂性):避免或解决组件之间的循环依赖关系,隔离和封装对外部环境的依赖关系,以及减少一般组件之间的依赖关系。
Limit Non-determinism(限制不确定性):找到非决定性的所有来源,如无约束并行性,并尽可能地淘汰它们。