本篇博客的基本内容:
——软件测试的基本概念
——软件测试的主要目的
——软件测试的基本原则
——测试分类和组件
——白盒测试与黑盒测试
——测试优先的编程习惯
一、软件测试的基本概念
软件测试是指在规定的条件下对程序进行操作,寻找程序错误,评判软件质量,并对其是否能满足设计要求进行评估的过程。它具体是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
二、软件测试的主要目的
(1)测试是程序的执行过程,目的在于发现错误;
(2)一个好的测试用例在于能发现至今未发现的错误;
(3)一个成功的测试是发现了至今未发现的错误的测试。
三、软件测试的基本原则
(1)测试的最基本目的是寻找错误。测试应主旨于错误,而不是妄图检查软件还未实现的目的。
(2)测试应该依据将软件对象进行等价类划分,针对每个等价类作不重不漏的测试。
(3)测试应该采取“用最少的语句测最全面的内容”思想,不能过于复杂或简单。
四、软件测试等级
包括单元测试、集成测试、系统测试和验收测试等。它们的层次为:
它们之间的回归测试示意图如下:
五、动态测试与静态测试
静态测试:简单直观地用阅读、评审、浏览的方法检查。
动态测试:使用测试用例集进行测试。
六、测试组件
单元测试(Unit Test):针对软件设计对象的最小单元模型进行测试,从而使得各个功能模块的测试相互独立,容易定位错误从而修正。使用JUnit工具进行单元测试。
覆盖度分析(Coverage):覆盖指标提供了测试的完全程度,最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖。具体地,这个测试应包含函数覆盖、语句覆盖、分支覆盖、条件覆盖、路径覆盖等内容。使用EclEmma进行覆盖度测试。
七、调试与测试
测试:旨在发现软件程序是否存在错误。
调试:能够识别程序的错误根源,消除错误。
八、白盒测试与黑盒测试
白盒测试:它是对程序内部代码结构进行测试,并个根据程序的执行路径进行测试。白盒测试需要较早进行。它要求测试用例必须确保模块中所有独立路径都至少执行过一次,并对结果进行assert判断,此外还要测试程序内部的数据结构。
黑盒测试:它是对程序的外部表现进行测试,它不关心代码细节,只注重代码功能。它能够测出软件那些遗失或出错的功能、错误的接口、错误的数据结构、以及错误的初始化和行为等。这时,黑盒测试的测试用例来自于外部对软件的陈述。此时我们的测试应该基于等价类划分、边界值分析、极端情况检查三方面设计。它们的概念是:
等价类划分—将被测函数的输入值域按照软件的设计目的划分为等价类,再从等价类中提取出测试用例;或者针对程序中的约束条件划分等价类。
边界值分析—软件错误通常发生在边界情况(例如0/0),所以这个方法实际上是等价类划分的一个补充,将边界值作为额外的等价类进行测试。
九、养成测试优先的编程的习惯
建议的编程流程为先写函数规范,再写符合这个规范的测试用例。然后写代码、执行测试,有问题就改代码、再测试,不断重复,直到代码测试通过。这就相当于,先通过测试设计出一个钥匙孔,然后对代码进行打磨直到合乎这个钥匙孔。
测试优先编程习惯的优点是,越早发现问题就越容易修正,而且在编写测试时,我们能更早理解设计需求,更早暴露设计问题。另外,程序的可测试性也得到了保证。
十、记录测试策略
在代码评审过程中,我们应该及时记录较为详尽的测试策略,让人可以理解你的测试,并评判你的测试是否充分。