软件测试是为了发现故障而执行程序的过程。其目的是以尽可能少的时间和人力发现并改正软件中潜在的各种故障及缺陷。因此,软件测试与软件可靠性紧密相关。软件中隐藏的故障数目,直接决定软件的可靠性。所以,在软件投入运行之前必须进行软件测试,以尽可能多地发现软件中的故障,提高软件可靠性。而在软件运行过程中,则需要软件维修测试。
随着人们对软件测试重要性认识的加深以及软件系统的日益复杂,软件测试在整个软件开发周期中所占的比例日益增大。目前,许多软件开发机构已将研制力量的40%以上花费在软件测试上。特殊情况下,对于要求高可靠性的软件,例如飞行控制、核反应堆监控软件等,其软件测试费用甚至高达软件开发其它阶段所用费用总和的3-5倍。
1. 软件测试工程
软件测试的实质是根据软件开发各阶段的规格说明和程序的内部结构精心选取一批测试数据,形成测试用例,并用这些测试用例去驱动被测程序,观察程序的执行结果,验证所得结果与预期结果是否一致,然后做相应的调整。所以,软件测试本身是一个工程。软件测试的团队必须不同于该软件的设计团队,它必须独立地确定软件测试规范、生成测试数据、进行测试结果分析、写出测试报告。这一过程可能要反复进行多次,以达到预定的可靠性。在此过程中,测试数据生成是软件测试的核心与关键。不同测试数据对发现软件故障的能力差别很大。某些测试数据能够有效地发现故障,而其他一些测试数据也可能完全是徒劳。为了节约时间和资源,提高测试效率,必须从大量的输入数据中精心挑选出少数有代表性的测试数据,使得采用这些测试数据能够达到最佳的测试效果,高效地把隐藏的故障揭露出来。为此,探讨如何生成高质高效的测试数据,至关重要。而软件测试生成与被测软件的性质、功能和可靠性要求紧密相关。
2.基于程序结构的测试生成
基于规范的功能测试又称黑盒测试,是以检查程序功能来检测程序是否按照规格说明书的规定正确地运行,它以规范说明为依据,选择和设计测试用例。基于程序的结构测试又称白盒测试,则根据程序的内部结构设计测试用例,检测程序在各种不同的情况下是否都按预定的要求正确地运行。基于规范的测试数据生成和基于程序的测试数据生成是两类常用的软件测试数据生成方法。
结构测试要求对被测程序的结构特性作到一定程度的覆盖。覆盖准则一般有以下几种:
① 语句覆盖
希望用测试数据运行被测程序时,被测程序的每一个语句都能被执行。至少说明每一个语句都是可达的,在该测试条件下,程序是正确的。当然我们并不能保证在其他条件下,程序执行该语句时是否也能正确。
② 分支覆盖
在If … then … else …语句中,条件语句测试执行一次是不够的。因为必须让条件为真和为假,至少执行两次。而在Case语句中必须运行所有的情况,而且,还要运行不属于所列情况的default情况。所以,对这些分支语句,必须覆盖所有可能的分支。分支覆盖率就是考察测试数据覆盖了百分之多少的分支。
③路径覆盖
由于程序中有分支、循环、递归、调用、跳变等语句,一个程序可以用一个控制流或数据流图来表示。程序的每一次运行都是沿着某一条路径走的。程序在运行这些测试数据时,沿着许多路径都运行过。如果能沿着所有路径都运行一遍,当然很好。如果能做到完全的路径覆盖,就必然达到100%的分支覆盖和语句覆盖。但是,对于较大的程序,基本上不可能沿着所有路径都运行一遍,因为路径数太多了。运行过的路径数对所有路径数的百分比就是路径覆盖率。
文章来源于领测软件测试网 https://www.ltesting.net/