软件可测试性是由可观察性、可控制性和可预见性组成的,前面对“可观察性、可控制性”做了较为详细的说明,而且“可观察性、可控制性”比较容易理解,容易对其做出判断。但可预见性则相对比较难理解,所以DavidCatlett想用“简单性(Simplicity)”和“预期结果所具有的知识”来代替“可预见性”,提出了软件可测试性的SOCK模型,即:
●Simplicity(简单性)
●Observability(可观察性)
●Control(可控性)
●Knowledge of expected results(预期结果所具有的知识)
简单性可以在需求定义、设计和代码各个方面得到体现,尤其在系统设计上要力求简单。系统越简单,就越容易验证。
软件测试大师级人物James Bach在对可测试性的论述中,提到6个方面,其中也包括可控性、可观察性和简单性。所不同的是,增加了“有效性、稳定性和信息”3项内容。这些特性可以做如下解释。
1) 可控性 。软件系统越能被控制,更多的测试越能被自动化和优化。当系统具有可控性,测试人员就可以直接控制系统的状态和变量,也就可以建立相应的测试脚本接口或自动化测试框架。
2) 可观察性 。不能看到的东西就无法验证,我们只能验证所能看到的内容。例如,如果能浏览或查询系统的状态和变量,那么我们就可以验证这些状态和变量。这也就是黑盒测试所要求的,必须有明确的输入,有什么输入,就有什么输出,从而就给定的输入,我们容易验证这些输出。进一步理解系统的可观察性,我们就能够了解影响系统输出的各种因素,这也就是前面所说的“可隔离性”能够隔离出导致问题的原因,也就是说,能发现或确定系统的内部错误,从而消除错误的原因、解决问题。
3) 有效性 。如果有些地方去不了,当然就无法对这些地方进行测试。系统的缺陷越少,不能测试的地方就越少。因此,至少要求系统不存在任何妨碍测试执行的严重缺陷。软件产品是经过不同的功能阶段逐渐演化而成的,系统的有效性可以保证软件开发和测试可以同步进行。
4) 简单性 。系统越简单,我们要测试的东西越少。对于一个复杂的系统,理解起来就很困难,其观察性就差,要控制它就更难。系统越简单,越容易被我们观察,也就越容易被控制。软件系统的简单性,包括系统结构的简单性、功能的简单性和代码的简单性。
5) 稳定性 。系统发生变化,不仅会使测试停顿下来、做出改变,以适应变化,而且可能导致测试脚本的废弃。系统越稳定,测试越顺利,越有利于对系统进行更深入、更充分的测试。
6) 信息 。我们获得越多的信息,就越了解系统,包括用户的实际需求、实现的技术、测试环境、系统各个部分之间的依赖关系,等等。我们越了解系统,就越能有针对性地进行测试,测试的方法就越有效。信息有助于我们进行更彻底的测试,有助于采取更明智的方法进行测试。
通过上述细致的解释,我们对软件可测试性有了更好的理解,下面将讨论如何提高软件的可测试性,如何通过需求评审、设计评审等手段来保持软件的可测试性。