系统测试、实施与维护.ppt
《系统测试、实施与维护.ppt》由会员分享,可在线阅读,更多相关《系统测试、实施与维护.ppt(119页珍藏版)》请在三一办公上搜索。
1、第6章 系统测试、实施与维护,6.1 软件测试 6.2 调试 6.3 系统实施 6.4 系统维护 6.5 实验五 习题,6.1 软 件 测 试,6.1.1 测试的基本概念 软件测试是对软件计划、软件设计、软件编码进行查错和纠错的活动。测试的目的是为了找出软件开发过程中各个阶段的错误,以便分析错误的性质和确定错误的位置,并纠正错误。,软件测试伴随着程序设计的出现而出现,随着软件技术的发展,人们对软件测试的认识也在不断加深。通常人们认为“软件测试是为了证明软件是正确的”。实际上这种认识是错误的。1983年,IEEE提出的软件工程标准术语中软件测试的定义是:“使用人工或自动手段来运行或测定某个系统的
2、过程,其目的在于检验它是否满足规定的需求,或弄清预期结果与实际结果之间的差别”。则认为“程序测试是为了发现错误而执行程序的过程”。,上面的两种定义有不同的强调方面,关于软件测试的概念,我们要注意以下两点:(1)软件测试是为了发现程序中的错误而不是证明程序的正确性。按照Myers的观点,“成功的测试是发现了至今尚未发现的错误的测试”。当然测试的目的不仅仅是发现错误,还包含检验、评价等。(2)软件测试方法不仅仅是执行程序,也包括人工方法。事实上,人工测试在某些测试阶段可以发现大部分的错误。,6.1.2 测试的基本原则要高质量地完成测试工作,找出软件中的错误,应该遵守下面的一些基本原则:(1)测试队
3、伍与开发队伍应分别建立。开发和测试工作两者在思想和方法上都是不一样的,为了保证测试的质量,应分别建立开发和测试队伍。开发工作是建设性的,而在测试阶段,人们设计出一系列的输入数据(称为测试用例),目的是为了“破坏”已经建造好的软件。就像给硬件产品做高低温试验、震动试验、破坏性试验一样。而且一般程序编写者往往认为自己编写的程序是正确的,要他们找出自己程序中的错误是十分困难的。,(2)设计测试用例时,要给出测试的预期结果。一个测试用例应由两部分组成:对程序进行测试的一组输入数据的描述;由这一组输入数据所产生的程序的预期输出结果的描述。预期输出结果不一定是精确的输出结果,对于一些复杂的计算,人工计算结
4、果可能需要很大的工作量,可以给出一个对输出结果有效范围的描述。,(3)设计测试用例时,应包括对有效的和期望的输入条件的测试,也应包括对无效的和非期望的输入条件的测试。一个程序不仅当输入合法时能正确运行,而且当有非法输入时,应该能够拒绝这些非法输入,并给出适当的提示信息。(4)在程序修改之后,要进行回归测试。对程序的任何修改都有可能引入新的错误,所以必须进行回归测试,即将以前的所有测试用例再次输入测试,而不是仅仅测试以前结果不正确的测试用例。回归测试有助于发现由于修改程序而引入的新错误。,(5)对发现错误较多的程序段,应进行深入的测试。如果发现某个程序段错误较多,则表明这个程序段质量很低,有可能
5、隐藏有更多的错误,应该进行深入的测试。,6.1.3 测试方法软件测试方法有多种,这些测试方法具有不同的思路和出发点。总的来说,测试方法可分为静态测试方法和动态测试方法两大类。所谓静态测试方法,是指不在计算机上运行被测试程序,而是采用其他手段达到对程序进行检测目的的测试方法。静态测试方法包括人工测试方法和计算机辅助静态分析方法。所谓动态测试方法,是指在计算机上运行被测试程序,并用所设计的测试用例对程序进行检测的方法。动态测试方法根据设计测试用例的思想不同可分为白盒测试、黑盒测试以及穷举测试等。,下面分别介绍各种测试方法。1.人工测试方法人工测试方法是指依靠人而不是计算机来对程序进行检测的方法。人
6、工测试可以找出计算机测试不容易发现的错误,可以减少系统测试的总工作量。根据统计,人工测试能有效地发现30%70%的逻辑设计和编码错误。人工测试可以采用人工运行和代码审查的方式。代码审查可以由程序编写者本人非正式地进行,也可以由审查小组正式进行。代码审查主要是对照常见程序错误清单对程序代码进行分析审查,并将发现的错误记录下来。,表6.1是由Myers提供的常见程序错误清单,该表主要针对FORTRAN一类的程序设计语言所编写的程序,其他的程序设计语言编写的程序也可参照该清单。表中的参数相当于C语言中函数的形式参数,而变元相当于C语言中函数调用时的实际参数。,表6.1 Myers提供的常见程序错误清
7、单,表6.1 Myers提供的常见程序错误清单,表6.1 Myers提供的常见程序错误清单,表6.1 Myers提供的常见程序错误清单,表6.1 Myers提供的常见程序错误清单,2.计算机辅助静态分析方法计算机辅助静态分析方法是利用计算机测试工具对被测程序的特性进行分析方法的总称。静态分析工具主要有下面几种形式:(1)静态确认工具:对程序进行静态分析和确认,收集一些程序中的信息,以查找程序中的各种缺陷和可疑的程序构造。例如,使用了一个尚未赋值的变量,或者赋了值的变量一直没有使用等。,(2)符号执行工具:以符号值作为程序的输入,使程序符号执行,对程序的运算规律加以检验。(3)程序验证工具:交互
8、式程序验证系统是证明程序正确性的一种工具。它通过系统内部基于符号的逻辑变换和结构归纳,提取程序的语义和结构的要点来分析证明程序的正确性。,3.黑盒测试黑盒测试又称功能测试,即不管程序内部是如何编制的,只考虑程序输入和输出之间的关系,或只考虑程序的功能。因此,测试者必须根据软件的规格说明书来确定和设计测试用例。黑盒测试也被称为数据驱动测试或基于规格说明书的测试。黑盒测试适合于对内部结构未知的软件进行测试,例如对于外购的软件包,只能根据软件包的功能说明书进行测试。另外,用户对系统的验收测试也使用黑盒测试方法,因为用户关心的是软件能否实现所需的功能。也可以说,黑盒测试是从用户观点进行的测试。,4.白
9、盒测试白盒测试也称为结构测试,它是根据被测试程序的逻辑结构设计测试用例。使用白盒测试方法需要了解程序的内部结构,对程序的不同逻辑路径进行测试。由于采用不同方法设计测试用例对程序的逻辑路径覆盖的程度不一,因此白盒测试又被称为基于“覆盖”的测试。覆盖率越高,测试越充分。,5.穷举测试软件测试的主要目的是查找软件中存在的错误,而不能证明软件的正确性。实际上采用一般的测试方法根本无法证明软件的正确性。有人主张通过白盒或黑盒测试方法对所有可能的情况进行测试,如果所有的情况都是正确的,则可证明程序是正确的。这种方法被称为穷举测试,实际上除了一些简单的程序外,它是无法实现的。,使用黑盒测试进行穷举测试,必须
10、穷举所有可能的输入数据。举一个简单的例子,假设输入三个无符号整数作为三角形的三条边长,判断该三角形是否为直角三角形。C语言中无符号整数的范围为0216?1,如果要穷举所有的输入数据,则测试用例数为216*216*2163*1014,假定程序每执行一次需要1 ms,则需要一万年。白盒测试要实现穷举测试同样难以实现,当程序中包含有较复杂的循环和条件语句嵌套时,可能的执行路径数目同样很多,测试用例要覆盖所有的执行路径是根本不可能的。,6.1.4 设计测试用例使用白盒测试和黑盒测试都需要设计测试用例,上一节中已经提到要将所有可能的情况穷举出来是不可能的,因此在设计测试用例时必须依据一定的原则,以保证既
11、能对程序进行充分的测试,而测试用例的数目又不能太大。本节将介绍常用的白盒和黑盒测试用例设计的方法。1.白盒测试白盒测试根据模块设计阶段对模块内部逻辑结构的描述设计测试用例。根据测试用例对模块所有可能执行路径的覆盖程度,可将其分为语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。,1)语句覆盖语句覆盖要求所设计的用例使程序中的每一条语句至少执行一次,这是覆盖程度很低的一种覆盖标准。下面是一个简单的例子。假设程序的流程图如图6.1所示,对应的C语言源程序片段如下:X=0;if(A1|B2)X=A+B;printf(%d,X);,图6.1 被测试程序的流程图,现在按语句覆盖标准设计
12、测试用例,只需设计一组测试用例使条件“A1 or B2”成立即可,例如:输入数据:A=2,B=0;输出数据:X=2。这组测试用例虽然覆盖了所有的语句,但对条件语句的分支测试不充分,只测试了条件为真的分支。如果条件表达式中的第一个条件表达式A1误写为A=1(C语言中该表达式值为真),则这组测试用例无法检测该错误。同样,如果条件表达式中的第二个条件表达式B2写错,则这组测试用例也不能检测出程序的错误。,2)判定覆盖判定覆盖要求对程序中所有判定的分支都必须能够执行到。对于上面的例子,可设计两组测试用例。第一组输入数据:A=2,B=0;输出数据:X=2;第二组输入数据:A=1,B=0;输出数据:X=0
13、。这两组测试用例分别使条件语句中的条件表达式取“真”和“假”,很显然也是语句覆盖,但对程序的测试比语句覆盖更充分。判定覆盖也是一种较弱的覆盖,这里的例子对条件表达式中B2的测试很不充分,没有测试该表达式为真的情况。,3)条件覆盖条件覆盖是指设计的测试用例能使程序中判定的每一个条件的可能取值都满足一次。对于上面的例子,判定中有两个条件,每个条件的可能取值为:条件1:A1 真记为T1假(A1)记为F1条件2:B2真记为T2假(B2)记为F2,可以设计两组测试用例:第一组输入数据:A=2,B=3;输出数据:X=2;满足T1、T2;第二组输入数据:A=1,B=0;输出数据:X=0;满足F1、F2。,在
14、大部分情况下,条件覆盖比判定覆盖强,因为它使判定表达式中每个条件都取得了可能的值,而判定覆盖只关心整个判定的取值。读者可以很容易地看出,这里的两组测试用例也满足判定覆盖的要求。但条件覆盖并不一定总是满足判定覆盖的要求,对上面的例子,我们看下面的两组测试用例:第一组输入数据:A=2,B=0;输出数据:X=2;满足T1、F2;第二组输入数据:A=1,B=3;输出数据:X=4;满足F1、T2。这两组测试用例虽然满足条件覆盖的要求,但它不满足判定覆盖的要求。,4)判定/条件覆盖判定/条件覆盖是指设计足够的测试用例,使其既满足条件覆盖的要求,又满足判定覆盖的要求。要求判定中每一个条件所有的取值都能满足一
15、次,而且保证判定的每个分支都能执行到一次。很显然,判定/条件覆盖比前面的几种覆盖标准更强。判定/条件覆盖仍然有一定的不足,表面看起来它测试了所有条件的所有可能取值,但实际上往往有某些条件掩盖了另一些条件。假设判定由两个条件构成,例如“x and y”,如果x取值为“假”,则不管此时y的取值为“真”还是为“假”,整个判定的值均为“假”。,5)条件组合覆盖条件组合覆盖是指设计足够的测试用例,使得判定中各种条件可能的取值组合都能满足一次。对上面例子中的程序,判定中共有两个条件表达式,每个条件都有两种取值,因此共有四种取值组合,它们是:(1)A1,B2;(2)A1,B2;(3)A1,B2;(4)A1,
16、B2。,图6.2 被测程序的流程图,6)路径覆盖路径覆盖是指设计足够的测试用例,使其覆盖程序中所有可能的路径。前面在介绍穷举测试时,我们提到对于一些含有复杂条件和循环嵌套的程序,其可能路径的数目很大,路径覆盖是无法实现的。对于一些简单的程序,路径覆盖还是可以实现的,我们看图6.2所示的程序流程示意图。,该流程图中共有两个判定,程序执行的所有可能的路径共有4种:sace、sade、sbce和sbde。对于一些含有循环及条件嵌套的程序,由于其可能的执行路径数目巨大,要实行真正的路径覆盖是不可能的。对于这样一些程序,可以采取一些方法来简化测试用例的设计,例如通常可以将循环简化为进入循环和不进入循环的
17、分支操作,则执行路径的数目将大大减少。,2.黑盒测试黑盒测试是根据功能说明书进行的测试,测试者只知道程序的输入和输出之间的关系或程序的功能。测试者必须仔细地研究程序的功能说明,找出程序的功能信息或输入和输出之间的关系,然后设计测试用例并推断测试结果的正确性。常用的黑盒测试方法有等价类划分、边界值分析等。1)等价类划分等价类划分是黑盒测试常用的一种方法。它的基本思想是:将所有可能的输入情况划分为若干个等价类,然后为每一个等价类设计一个测试用例,如果这个测试用例程序的输出结果是正确的,则认为对该类的所有数据该程序都能得到正确的输出结果。,等价类划分方法测试的质量取决于等价类划分是否合理,这往往依赖
18、于测试人员的经验。下面是等价类划分经常采用的一些规则:(1)如果规定了输入值的范围或值的个数,则取一个有效等价类、两个无效等价类。例如,功能说明书规定“项数为110”,则取一个有效等价类“项数在110之间”,两个无效等价类“项数10”。(2)如果输入项规定了值的集合,则取一个有效等价类和一个无效等价类。例如规定电话号码“以数字开头”,则取一个有效等价类“以数字开头”,一个无效等价类“以字母或其他字符开头”。,(3)如果规定了输入数据的一组值,而且程序对不同输入值进行不同处理,则每个允许的输入值分别是一个有效等价类,此外还有一个无效等价类。(4)如果规定了输入数据的规则,则取符合规则的一个有效等
19、价类和若干不符合规则的无效等价类。(5)如果规定了输入数据是整形,则可以划分出负整数、零、正整数三个等价类。以上只是一些可供参考的规则,实际工作中应仔细分析程序输入数据的要求,划分出有代表性的有效等价类和无效等价类。,在确定输入数据的等价类时,常常还需要分析输出数据的等价类,以便根据输出数据等价类导出输入数据的等价类。例如,输入三角形的三条边长,判断三角形是普通三角形、等腰三角形还是等边三角形,在设计等价类时显然应根据输出结果进行等价类的划分。在划分有效等价类之后,按照等价类设计测试用例时应该注意:(1)设计一个测试用例,使其覆盖尽可能多的尚未覆盖的有效等价类。(2)设计一个测试用例,使其只覆
20、盖一个无效等价类。,之所以如此要求,是因为经验表明,程序员往往更注意有效输入,而忽视对无效输入数据的处理。现在来看一个简单的例子。假设程序要求输入某城市的电话号码,电话号码由三个部分构成。这三个部分的名称与内容分别是:地区码:空白或三位数字;前缀:非“0”或“1”开头的三位数字;后缀:四位数字。,假定被测试的程序接收符合上述规则的所有号码,拒绝所有不符合规则的号码。现在使用等价类划分法来对其进行测试。第一步,划分等价类。划分的等价类以表格形式(表6.2)给出,并给每个等价类一个惟一的编号。,表6.2 电话号码的等价类划分,第二步,确定测试用例。表中有四个有效等价类,可使用下面两个测试用例:测试
21、数据测试范围期望结果()276-2345等价类(1)(3)(4)有效(635)805-9321等价类(2)(3)(4)有效对于11个无效等价类,应选择11个测试用例。,2)边界值分析法在等价类划分法中,代表一个等价类的测试数据可以在这个类的允许值范围内任意选择。假设输入数据x的有效范围为1.0,10.0,则设计测试用例时,有效等价类的输入数据可为110之间的任意数据,例如2.0。如果程序员将x=1.0错写为x1.0,则所选定的测试用例将不能检测到这类错误。如果选择有效范围的边界上的测试用例,则对这类错误的测试效果将很好,这就是边界值分析的基本思想。,各种资料和经验也表明,程序员在程序设计过程中
22、往往对输入输出数据有效范围的边界不够重视,在处理边界情况时,程序最容易发生错误。使用边界值分析方法设计测试用例,暴露程序错误的可能性将更大。在对边界值进行分析,进行测试用例设计时,可参考下面的一些规则:(1)如果输入条件规定了取值范围,则应对该范围的边界内附近、恰好在边界上和边界外附近设计测试用例。例如,规定输入值的有效范围为1.0,10.0,则应对0.9、1.0、1.1、9.9、10.0、10.1设计测试用例。,(2)如果输入条件规定了数据的个数,则应对最小个数、最大个数、比最小个数少1、比最大个数多1等情况设计测试用例。(3)对软件规格说明中的每一个输出条件仿照前面对输入条件使用的(1)、
23、(2)原则设计测试用例。边界值分析法通常不作为一种独立的测试方法,而是作为其他测试方法的一种补充。例如,使用等价类划分法设计测试用例后,再使用边界值分析法补充部分测试用例对边界情况进行测试。,6.1.5 测试过程与步骤,图6.3 软件测试的过程,图6.3中的输入有两类,即:(1)软件,即待测试的软件,包括设计阶段相关的文档和源程序清单等。(2)测试构造,包括测试计划、测试用例及预期的测试结果。将得到的测试结果与预期结果比较,如果不符,则意味着错误,需要纠正,经过纠错后的软件需要再进行回归测试,如此反复地进行;如果相符,则根据测试过程中错误发生的情况建立可靠性模型,作为系统付诸实施后的维护工作的
24、依据。这一点正如前面所讲的,测试的目的并不是证明软件的正确性,测试通过的软件仍然可能含有错误。,6.1.6 模块测试程序模块是构成信息系统中软件部分的基本单位,模块的测试是信息系统软件测试的第一步。模块测试又叫单元测试,经验表明模块测试发现的错误占错误总数的65%,其重要性显而易见。一个模块具有以下属性:(1)名字;(2)应完成的功能;(3)实现功能所应采用的算法;(4)内部使用的数据结构;(5)模块接口。,1.模块测试的内容模块测试针对模块的各项属性进行检验测试,主要内容有:1)模块接口测试在测试模块的其他属性之前,首先应对穿过模块接口的数据进行测试。如果数据不能正确地在模块之间传递,其他的
25、动态测试将不能正常进行。在对模块接口进行测试和检验时,应着重参照Myers提供的常见程序错误清单中的“模块接口检查表”和“完成外部输入/输出时的检查表”来逐项检查。,2)局部数据结构对于一个模块来说,局部数据结构通常是错误的发源地,应该设计相应的测试用例,以便发现下列类型的错误:(1)不一致或不正确的说明;(2)错误的初始化或错误的缺省值;(3)不相容的数据类型;(4)上溢、下溢和地址异常。除了局部数据结构外,如有可能,在模块测试期间也应检查全局数据对模块的影响。,3)覆盖条件和路径测试在单元测试期间,必须对重要模块的基本路径进行测试。应设计测试用例,用来发现由于不正确的计算、比较或不适当的控
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 测试 实施 维护
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6597672.html