Android软件测试理论与方法解析课件_第1页
Android软件测试理论与方法解析课件_第2页
Android软件测试理论与方法解析课件_第3页
Android软件测试理论与方法解析课件_第4页
Android软件测试理论与方法解析课件_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件测试的目标与原则Myers在其软件测试著作中对软件测试的目标提出以下观点: 软件测试是为了发现错误而运行程序的过程; 一个好的测试用例能够发现至今尚未发现的 错误; 一个成功的测试是发现了至今尚未发现的错 误的测试。软件测试的目标与原则Myers在其软件测试著作中对软件测试的软件测试的步骤在本书中,从软件工程的角度:将单元测试与详细设计对应起来,即在详细设计阶段就应制定出单元测试计划;而集成测试又称为综合测试,可以把概要设计和集成测试对应起来,在概要设计阶段就可以制定集成测试计划;将功能测试、性能(行为)测试、验收测试统称为验收测试(也称确认测试),与软件系统需求分析阶段对应起来,在需求分

2、析阶段就应制定出验收准则和验收测试计划,验收测试应提交经用户确认的软件产品;最后,将软件、硬件等要素构成一个完整的基于计算机的系统,再进行系统测试,使系统测试与系统定义相对应,即在系统定义阶段就应制定系统测试计划。软件测试的步骤在本书中,从软件工程的角度:软件测试的步骤测试步骤部件代码部件代码单元测试单元测试单元测试部件代码集成测试功能测试性能测试验收测试安装测试设计规格说明系统功能需求其他软件需求用户需求规格说明用户环境集成后的模块功能系统验证,生效的软件被接受的系统在使用中的系统测试后的模块软件测试的步骤测试步骤部件部件单元测试单元测试单元测试部件软件测试的步骤软件工程的开发与测试的关系系

3、统工程需求分析概要设计设计、编码单元测试集成测试验收测试系统测试软件测试的步骤软件工程的开发与测试的关系系统工程需求分析概要测试阶段的信息流测试阶段的信息流测试评价排错可靠性模型软件配置测试配置测试结果错误错误统计预期结果正确的程序可靠性预测测试阶段的信息流测试阶段的信息流测试评价排错可靠性软件配置测14.1.3 测试阶段的信息流测试的输入流有软件配置和测试配置。软件配置由需求规格说明、设计说明、源代码等组成;测试配置包括测试计划、测试用例(其中包括预期的结果)、测试工具等组成。 14.1.3 测试阶段的信息流测试的输入流有软件配置和测试测试结果评价经常发现严重的错误并需要修改软件,则软件的质

4、量和可靠性一定不高,需要进一步测试;如果测试所发现的错误不多且易于改正,软件功能看起来也较完善,则需考虑两种可能:1)软件质量和可靠性确实令人满意;2)测试不全面,很可能还潜伏着严重错误;如果测试过程没有发现任何错误,则很有可能是测试配置不合理。测试结果评价经常发现严重的错误并需要修改软件,则软件的质量和软件测试中常见的错误类型按照错误的影响和造成的后果进行分类,可分为:较小错误,中等错误,较严重错误,严重错误,非常严重的错误,最严重的错误。按照软件生存周期各个阶段分类,可分为:问题定义错误、需求分析规格说明错误、设计错误、编码错误等等。这里重点介绍一种按照错误的性质和范围进行分类的方法,可以

5、将错误分为如下几类:软件测试中常见的错误类型按照错误的影响和造成的后果进行分类,按照错误的性质和范围进行分类1功能错误 需求规格说明错误。主要是指其中有错误、多余或遗漏的功能,有二义性或自相矛盾。设计实现错误。设计或实现的功能不是规格说明或用户所要求的功能。按照错误的性质和范围进行分类1功能错误 按照错误的性质和范围进行分类2系统错误 外部接口错误。如与打印机的接口错误。内部接口错误。指各程序模块间的联系存在错误。如输入/输出、数据保护、子程序访问等。硬件结构错误。如错误地理解I/O指令、中断处理、设备启动和初始化等而引起的错误。软件结构错误。由于软件结构不合理或不清晰所引起的错误。往往在系统

6、满载时才能发现。操作系统错误。该类错误是由于不了解操作系统而引起的,操作系统本身也有错误。控制与顺序错误。包括事件的时间顺序不正确、等待一个不可能发生的事件等等。资源管理错误。既资源使用不当。资源死锁等。按照错误的性质和范围进行分类2系统错误 按照错误的性质和范围进行分类3加工错误(算法错误)计算与操作错误。指计算、函数求值和一般操作过程中的错误。初始化错误。如忘记了初始化工作区、数据区,错误地对循环变量赋初值,不正确的初始化等等。局部控制和次序错误。如遗漏路径、不可达到的代码段、循环嵌套或终止条件不正确、死循环等等。逻辑错误。如多分支、判断条件不正确等。按照错误的性质和范围进行分类3加工错误

7、(算法错误)按照错误的性质和范围进行分类4数据错误 动态数据错误。静态数据错误。静态数据指直接或间接地出现在程序或数据库中的数据,其内容和格式都是固定的。因此在内容或格式上都可能存在错误。数据内容错误。是指由于内容被破坏或被错误地解释而造成的错误。数据结构错误。包括数据结构说明错误和数据结构使用错误。数据属性错误。数据属性是指数据内容的含义或语义,如整数、字符等。数据属性错误是指对数据属性的错误解释和错误使用而导致的错误。按照错误的性质和范围进行分类4数据错误 按照错误的性质和范围进行分类5代码错误 代码错误主要包括语法错误、键入错误、对语句的理解错误等。 例如,Myers(1976)指出,美

8、国第一个去金星的太空任务的失败是由于在一个Fortran do循环中缺少一个逗号。按照错误的性质和范围进行分类5代码错误 软件测试的常用方法1静态测试静态测试是采用人工检测和计算机辅助静态分析的方法对程序进行检测。人工检测是指靠人工走查程序或评审软件。这种走查与评审主要针对编码的质量和软件开发各个阶段的文档,特别是总体设计和详细设计阶段的错误。能发现30%70%的逻辑设计和编码错误。计算机辅助静态分析是指利用静态分析软件工具对程序进行静态分析,主要检测变量是否用错、参数是否匹配、循环嵌套是否有错、是否有死循环和永远执行不到的死代码等等。同时,它还可对程序的特性进行分析。软件测试的常用方法1静态

9、测试软件测试的常用方法2动态测试 动态测试是指事先设计好一组测试用例,然后通过运行程序来发现错误。动态测试有两种测试方法: 黑盒测试; 白盒测试。软件测试的常用方法2动态测试 用黑盒法测试时,必须在所有可能的输入条件和输出条件中确定测试数据。是否要对每个数据都进行穷举测试呢? 例如测试一个程序,需输入 3 个整数值。微机上,每个整数可能取值有216个,3个整数值的排列组合数为216216216=24831014。假设此程序执行一次为1毫秒,用这些所有的数据去测试要用1万年!但这还不能算穷举测试,还要输入一切不合法的数据。可见,穷举地输入测试数据进行黑盒测试是不可能的。用黑盒法测试时,必须在所有

10、可能的输入条件和输出条件中确定白盒测试又称为结构测试或逻辑驱动测试,此方法是将测试对象比作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构和相关信息来设计或选择测试用例,对穿过软件的逻辑路径进行测试,可以在不同点检查程序的状态,以确定实际状态与预期状态是否一致。白盒测试又称为结构测试或逻辑驱动测试,此方法是将测试对象比作表面看来,白盒测试是可以进行完全的测试的,从理论上讲也应该如此。只要能确定测试模块的所有逻辑路径,并为每一条逻辑路径设计测试用例,并评价所得到的结果,就可得到100%正确的程序。但实际测试中,这种穷举法是无法实现的,因为即使是很小的程序,也可能会出现数目惊人的逻辑路径。如图

11、所示是一个小程序的流程图。表面看来,白盒测试是可以进行完全的测试的,从理论上讲也应该如Android软件测试理论与方法解析课件图中,一个圆圈代表一行源程序代码(或一个语句块)。其中有五条通路,左边曲线箭头表示执行次数不超过20次循环。这样的执行路径就有520个,近似为1014个可能的路径。如果1 ms完成一个测试,由此测试程序需3170年。 由此看出,即使精确地实现了白盒测试,也不能断言测试过的程序全正确,因为实行穷举测试,由于工作量过大,需用时间过长,实施起来是不现实的。这就是程序测试的经济学问题。既然在测试阶段穷举法测试是不可行的,那么为了节省时间和资源,提高测试效率,就必须精心设计测试用

12、例。需从大量的可用测试用例中精选出少量的测试数据,使得采用这些测试数据能够达到最佳的测试效果,即能高效地、尽可能多地发现隐藏的错误。测试只能发现错误,并不能保证程序没有错误。图中,一个圆圈代表一行源程序代码(或一个语句块)。其中有五条测试用例为了进行有效的测试而设计的输入数据和预期的输出结果数据。测试用例设计的基本目的是确定一组最有可能发现某个错误或某类错误的测试数据。无论是黑盒测试(下节内容介绍),还是白盒测试都不可能进行穷举测试,所以测试用例的设计只能在周期和经费允许的条件下,使用最少数目的测试用例,发现最大数目可能的错误。测试用例为了进行有效的测试而设计的输入数据和预期的输出结6种覆盖标

13、准的对比6种覆盖标准的对比语句覆盖发现错误能力最弱。判定覆盖包含了语句覆盖,但它可能会使一些条件得不到测试。条件覆盖对每一条件进行单独检查,一般情况下它的检错能力较判定覆盖强,但有时达不到判定覆盖的要求。判定/条件覆盖包含了判定覆盖和条件覆盖的要求,但由于计算机系统软件实现方式的限制,实际上不一定达到条件覆盖的标准。条件组合覆盖发现错误能力较强,凡满足其标准的测试用例,也必然满足前4种覆盖标准。语句覆盖发现错误能力最弱。判定覆盖包含了语句覆盖,但它可能会前5种覆盖标准把注意力集中在单个判定或判定的各个条件上,可能会使程序某些路径没有执行到。路径测试根据各判定表达式取值的组合,使程序沿着不同的路

14、径执行,查错能力强。但由于它是从各判定的整体组合出发设计测试用例的,可能使测试用例达不到条件组合覆盖的要求。在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例,以达到路径覆盖测试标准。前5种覆盖标准把注意力集中在单个判定或判定的各个条件上,可能条件测试路径选择当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例;对于连锁型分支结构, 若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径。条件测试路径选择当程序中判定多于一个时,形成的分支结构可Android软件测试理论与方

15、法解析课件判定结构分析当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。对于嵌套型分支结构,若有 n 个判定语句,则存在 n+1 条路径,需要 n+1 个测试用例;对于连锁型分支结构, 若有 n 个判定语句,则存在2n 条路径,需要有 2n 个测试用例,覆盖所有的路径。判定结构分析当程序中判定多于一个时,形成的分支结构可以分为两嵌套型分支结构连锁型分支结构s1s2s3s4p1p2p3s1s2s3s4s5s6p1p2p3嵌套型分支结构连锁型分支结构s1s2s3s4p1p2p3s1对于连锁型分支结构,当 n 较大时将无法测试。为减少测试用例的数目,可采用试验设计法

16、,抽取部分路径进行测试。由于抽样服从均匀分布,因此,在假定各条路径的重要性相同,或暂不明确各条路径的重要性的情况下可以做到均匀抽样。如果明确了各条路径的重要性,还可以采取加权的办法,筛选掉部分路径,再用如下的措施进行抽样。对于连锁型分支结构,当 n 较大时将无法测试。设连锁型分支结构中有 n 个判定,计算满足关系式 n+12m 的最小自然数m; 设t = 2m,取正交表Lt,并利用它设计测试数据。例如,一个连锁型分支结构中有三个判定语句p1,p2,p3。全部路径是238 条。先计算3+12m = t 的 t,得 t = 4。取正交表L4,把每一列当做一个判定,每一行当做可取的测试用例,可得4个

17、测试用例。 设连锁型分支结构中有 n 个判定,计算满足关系式 n+12用各个判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一个测试路径矩阵。这样,测试路径数目从238条减少到314条。 L40 0 01 0 10 1 11 1 01 2 31234用例s1 s3 s5s2 s3 s6s1 s4 s6s2 s4 s5p1 p2 p31234s1 s3 s5s2 s3 s6s1 s4 s6s2 s4 s5路 径用各个判定的取假分支取代正交表L4中的“0”,用取真分支取代s1s3s5p1p2p3s2s3s6p1p2p3s1s4s6p1p2p3s2s4s5p1p2p3

18、s1s3s5p1p2p3s2s3s6p1p2p3s1s4s6L201112L40 0 01 0 10 1 11 1 01 2 31234L80 0 0 0 0 0 01 0 1 0 1 0 10 1 1 0 0 1 11 0 0 1 1 00 0 0 1 1 1 10 1 1 0 1 00 1 1 1 1 0 01 1 0 1 0 0 11 2 3 4 5 6 712345678L2L4L2011L40 0 01 2 31L80 循环覆盖在逻辑覆盖的测试技术中,以上只讨论了程序内部有判定存在的逻辑结构的测试用例设计技术。而循环也是程序的主要逻辑结构,要覆盖含有循环结构的所有路径是不可能的,但可

19、通过限制循环次数来测试。循环测试路径选择循环分为4种不同类型:简单循环、连锁循环、嵌套循环和非结构循环。 (1) 简单循环 零次循环:从循环入口到出口 一次循环:检查循环初始值 二次循环:检查多次循环 m次循环: 检查在多次循环 最大次数循环、比最大次数多一次、少一次的循环。循环覆盖在逻辑覆盖的测试技术中,以上只讨论了程序内部有判定例:求最小值k = i;for ( j = i+1; j = n; j+ ) if ( Aj Ak ) k = j; 例:求最小值k = i;k = i ; j = i+1;j = n?AjAk?k = jj +fdcabek = i ; j = i+1;j = n

20、?AjA测试用例选择测试用例选择 对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值; 逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。 反复进行,直到所有各层循环测试完毕。(2) 嵌套循环 对最内层循环做简单循环的全部测试。所有其它Android软件测试理论与方法解析课件 对全部各层循环同时取最小循环次数,或者同时取最大循环次数(3) 连锁循环如果各个循环互相独立,则可以用与简单循环相同的方法进行测试。但如果几个循环不是互相独立的,则需要使用测试嵌套循环的办法来处理。(4) 非结构循环这一类循环应该使用结

21、构化程序设计方法重新设计测试用例。 对全部各层循环同时取最小循环次练习 某工厂公开招工,规定报名者年龄应在1635 周岁之间(到1995年6月30日为止),即出生年月不早于1960年7月,不晚于1979年6月。 报名程序具有自动检验输入数据的功能。如出生年月不在上述范围内, 将拒绝接受,并显示“年龄不合格”等出错信息。 请试用等价分类法, 设计出生年月的等价分类表 。二、请利用等价分类法为以下提供的内容设计测试用例练习 某工厂公开招工,规定报名者年龄应在1635 周 假定已知出生年月是由 6 位数字字符表示,前4 位代表年,后2 位代表月,则可以划分为 3 个有效等价类和 7 个无效等价类。1

22、、划分出生年月等价分类表输入数据有效等价类无效等价类出生年月 6位有效数字字符 有非数字字符 少于6个数字字符 多于6个数字字符 对应数值 196007-197906 197906月份对应数值 在1-12之间 等于 “0” 12 假定已知出生年月是由 6 位数字字符表示,前4 位12、设计有效等价类需要的测试用例输入数据有效等价类无效等价类出生年月 6位有效数字字符 有非数字字符 少于6个数字字符 多于6个数字字符 对应数值 196007-197906 197906月份对应数值 在1-12之间 等于 “0” 12测试数据期望结果测试范围 197011输入有效、2、设计有效等价类需要的测试用例输

23、入数据有效等价类无效等价类输入数据有效等价类无效等价类出生年月 6位有效数字字符 有非数字字符 少于6个数字字符多于6个数字字符 对应数值 196007-197906 197906月份对应数值 在1-12之间 等于 “0” 12测试数据期望结果测试范围 MAY,70输入无效 有非数字字符19705输入无效输入无效 少于6个数字字符1968011196008195512196200197222年龄不合格年龄不合格输入无效输入无效 多于6个数字字符 197906 等于 “0” 123、为每一个无效等价类至少设计一个测试用例输入数据有效等价类无效等价类出生年月 6位有效数字字符 二、边界值分析法 采

24、用边界值分析法来选择测试用例,可使 得被测程序能在边界值及其附近运行,从而更 有效地暴露程序中潜藏的错误。二、边界值分析法 采用边界值分析法来选择测试用例,可使人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。例如,有一段用C编写的小程序: int A20; int i; for ( i = 1; i = 10; i+ ) Ai = -1;Android软件测试理论与方法解析课件因为C语言中数组下标从 0 开始,而本程序中从 1 开始赋值,如果以后用户不了解,可能从 0 开始使用,就会出错。所以

25、边界值可能查出更多的问题来。如何确定边界?通常的边界检查原则:类型:数字、字符、位置、质量、大小、速度、方位、尺寸、空间等。边界值:最大最小、首位末位、上下、最大最小、最快最慢、最高最低、最短最长、空满等。因为C语言中数组下标从 0 开始,而本程序中从 1 开始赋值使用边界值分析,最重要的是确定正确的边界值域。对于输入输出等价类,选取正好等于、刚刚大于和刚刚小于边界值的数据作为测试数据。选取测试用例的原则:(1)如果输入条件规定了值的范围,则应取刚刚到达这个范围边界的值,以及刚刚超过这个范围边界的值作为测试输入数据。例如,某数据的取值范围为-1.01.0,测试数据可取-1.0、1.0,以及-1

26、.1、1.1。使用边界值分析,最重要的是确定正确的边界值域。对于输入输出(2)如果输入条件规定了值的个数,则应取最大个数、最小个数、比最大个数多1,比最小个数少1的数作为测试输入数据。例如,某文件有255个记录,测试数据可取1、255,以及0、256。根据规格说明和每个输出条件,使用原则(1)。例如,研究生录取分数范围84150,测试数据可取84、150,以及83、151。根据规格说明和每个输出条件,使用原则(2)。例如,研究生录取人数34人,测试数据可取1、(2)如果输入条件规定了值的个数,则应取最大个数、最小个数34、以及0、35。(5)如果程序的规格说明给出的输入域或输出域是有序集合(如

27、有序表),则选取集合的第一个元素和最后一个元素作为测试用例。例如,学生文件的学生记录按学号存放,班上总共30人,测试数据可取第1、第30个学生。如果程序中使用了一个内部数据结构,则应选择此数据结构的边界上的值作为测试用例。分析规格说明,找出其他可能的边界条件。34、以及0、35。 If (196007 = value(birthdate) = 197906) Then read(birthday) Else write “invalid age!” 为了接受年龄合格的报名者则程序中可能设有语句为: If (196007 35 周岁 16周岁196006197907不合格年龄月份对应数值月份值为

28、 1 月月份值为 12 月 196701 197412输入有效月份值 12 196700 197413 输入无效输入测试用例说明测试数据期望结果出1 个数字字符5输入无效对1、等价分类法的测试数据是在各个等价类允许的值域内 任意选取的,而边界值分析法的测试数据必须在边界 值附近选取。2、在公开招工的例子中,采用等价分类法设计了 8个测试 用例而边界值分析法则设计了13 个, 所以,一般来说 ,用边界值分析法设计的测试用例要比等价分类法的代 表性更广,发现错误的能力也更强。但是对边界的分析 与确定比较复杂,它要求测试人员具有更多的经验和长 找性。等价分类法与边界值分析法的比较1、等价分类法的测试

29、数据是在各个等价类允许的值域内2、在公开错误推测在测试程序时,人们根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。错误推测法没有确定的步骤,凭经验进行。它的基本思想是列出程序中可能发生错误的情况,根据这些情况选择测试用例。如输入、输出数据为零是容易发生错误的情况;又如,输入表格为空或输入表格只有一行是容易出错的情况等。错误推测例如对于一个排序程序,列出以下几项需特别测试的情况:(1) 输入表为空。(2) 输入表只含一个元素。(3) 输入表中所有元素均相同。(4) 输入表中已排好序。又如,测试一个采用二分法的检索程序,考虑以下情况:(1)

30、表中只有一个元素。(2) 表长是2的幂。(3) 表长为2的幂减1或2的幂加1因此,要根据具体情况具体分析。例如对于一个排序程序,列出以下几项需特别测试的情况:(1) 在任何情况下都应使用边界值分析法,用这种方法设计的用例暴露程序错误能力强。设计用例时,应该既包括输入数据的边界情况又包括输出数据的边界情况。(2) 必要时用等价类划分方法补充一些测试用例。(3) 再用错误推测法补充测试用例。(4) 检查上述测试用例的逻辑覆盖程度,如未满足所要求的覆盖标准,再增加例子。(5) 如果需求说明中含有输入条件的组合情况,则一开始就可使用因果图法。(1) 在任何情况下都应使用边界值分析法,用这种方法设计的用

31、功能图测试功能图测试是一种黑盒测试方法,它是基于状态迁移图和判定表来设计测试用例的。状态迁移图是一种动态说明,它由输入条件和当前状态决定输出数据和后续状态。判定表则是一种静态说明,它用于表示在状态中输入与输出的对应关系。在这种环境下,测试用例是由测试中经过的一系列状态和在每个状态中必须依靠输入输出数据满足的一对条件组成。下面是简化的自动取款机ATM的状态图。功能图测试功能图测试是一种黑盒测试方法,它是基于状态迁移图和初始时ATM显示“请插入卡片”。当插入卡片后 ATM 显示“请输入密码” 。ATM 检查输入的密码与文件中保存的密码。若相同,则ATM显示“请输入金额”;若不同,ATM检查是否三次

32、都打错了:如是,则ATM显示“停止处理”,消去这个记录,重新显示“请插入卡片”;若未达到三次,则ATM显示“请输入密码”。打入一个钱数后ATM检查它是否小于等于余额,若大于余额,ATM显示“请输入金额”,等待再次输入金额;否则ATM付给要求的现金,报告余额,显示“请插入卡片”。初始时ATM显示“请插入卡片”。 判定表 TS0S1S2S3T“请插入卡片”“请输入密码”“请输入金额”给付钱款显示余额M1:插入卡片M2M3M4M5M6M7密码=记录YNN错输=三次NYNM2M3M4S0S1S2输出输入状态输入金额后判断 if (金额 余额) M5 else M6M1:插入卡片 M2:输入密码 M3:

33、密码匹配 M4:错输三次M5:输入金额 M6:金额不多于余额 M7:回归初始状态 判定表 TS0S1S2S3T“请插入卡片”“请输入密码”“从状态图生成测试用例若用结点表示状态,用弧表示迁移,则状态迁移图就可以转换为一个程序的控制流图,问题就转化为程序的路径测试问题。状态图的覆盖准则有覆盖所有状态(C0覆盖)和覆盖所有迁移(C1覆盖)。通常采用基本路径覆盖方法设计测试用例。对于循环,应包含 0 次循环(先判断循环情形)和 1 次循环的情形。在计算路径时要注意状态图本身已经构成强连通图,区域外的部分不计入环路复杂性。从状态图生成测试用例若用结点表示状态,用弧表示迁移,则状态迁测试路径S0S1S2

34、S3S0S0S1S0S0S0S1S1S2S3S0S0S1S2S2S3S0S1S2S3TM3M4M5M6M7M2测试路径S0S1S2S3S0S0S1S0S0S0S1S1S2基于图的测试方法黑盒测试的一个重要思想是首先创建描述重要的程序对象(模块或语句集)及其相互关系的图,然后导出测试序列以检查对象及其关系并发现错误。图中用结点表示对象,用边(或连接)表示对象间的关系,用结点权值表示结点的属性,用边上的权值表示连接的特征。在基本路径测试方法就有这样的图。使用图进行行为测试的方法有:基于图的测试方法黑盒测试的一个重要思想是首先创建描述重要的程事务流建模 结点是事务的每一步骤,边是步骤之间的逻辑连接。

35、有限状态建模 结点是用户可见的软件的不同状态,边是状态之间的转换。(可利用状态迁移图辅助建立这种图)数据流建模 结点是数据对象,边是将数据对象转换为其他数据对象时发生的变换。时序建模 结点是程序对象,边是对象间的顺序连接。边上权值用于表示执行时间。事务流建模 结点是事务的每一步骤,边是步骤之间的逻辑连基于图的测试可以仿照基本路径测试的方法设计测试用例。但图中可能有环,可能要考虑循环测试。对于图中的传递关系、对称(双向的有向边)关系、自反关系也需要进行检查。在设计测试用例时,第一个目标是结点的覆盖度。必须确保不遗漏某个结点,而且结点的权值(对象属性)是正确的。第二个目标是边的覆盖度。要设计测试以

36、证实权值是否有效,最后加入循环测试。基于图的测试可以仿照基本路径测试的方法设计测试用例。但图中可接口测试当模块或子系统集成为更大的系统时就需要进行接口测试。接口测试的目的是检测那些由于接口有误或对接口做出了无效假设而造成的系统缺陷。程序构件的接口类型有:参数接口共享内存接口程序接口消息传递接口接口测试当模块或子系统集成为更大的系统时就需要进行接口测试。接口错误是常见的系统错误,有3种接口错误:接口误用:构件调用时接口使用不当造成的错误。例如,在参数接口情形,使用的参数类型、排列顺序或参数个数不匹配。接口误解:调用者构件误解了被调用构件的接口描述,或对被调用者的行为作了错误的假设而造成的错误。例

37、如,调用折半搜索例程时使用了未排序的数组导致搜索失败。计时错误:在实时系统中,系统使用了共享内存接口或消息传递接口可能产生的错误。原因在于数据的生产和消费的速度可能不同。接口错误是常见的系统错误,有3种接口错误:接口测试的一般准则检查接口并明确地列出对外部构件的调用。设计一组测试用例,为传送给其他构件的参数选择紧靠取值范围边界的值,以暴露接口的不一致错误。当有指针通过接口传递时,可用空指针参数来测试。当通过程序接口来调用一个构件时,设计一些容易引起构件执行失效的假设进行测试,以检查接口误解的错误。接口测试的一般准则检查接口并明确地列出对外部构件的调用。设计在有消息传递的系统中进行强度测试,即加

38、大消息传递的量,增加系统的负荷。因此,设计测试用例,产生比平时多得多的消息,以暴露计时错误。当构件之间通过共享内存交互时,可以设计一种测试,改变正常的激活构件的顺序。通过这些测试用以暴露程序员暗自对共享数据的生产和消费顺序所做的假设。在接口测试方面,利用程序静态分析的方法比动态测试更有效。在有消息传递的系统中进行强度测试,即加大消息传递的量,增加系基本路径测试【例】试用基本路径测试法对如下的PDL描述或如图所示的程序流程图设计测试用例。该例子描述了最多输入50个值(以1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。基本路径测试【例】试用基本路径测试法对如下的PDL描述或如图

39、PROCEDURE averageINTERFACE RETURNS average,sum,n1;*n1为有效成绩的个数。* INTERFACE ACCEPTS score; TYPE score1,50 IS SCALAR ARRAY; TYPE average,n1,n2,sum IS SCALAR;*n2为输入值的个数。* TYPE i IS INTEGER; i = 1;n1=n2=0;sum=0; DO WHILE (score i 1)AND(n2=0)AND(score i 0 THEN average = sum/n1; ELSE average = 1; END IF;EN

40、D average PROCEDURE average过程average的程序流程图开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112过程average的程序流程图开始 i =1,n1=n2=0【例】解:可按如下步骤设计测试用例: 步骤1:根据详细设计或代码导出过程average的流图。123456789111012R1R2R3R4R5R6【例】解:可按如下步骤设计测试用例:123456789111步骤2:据流图确定环形复杂性度量V(G):1)

41、V(G)=E N +2 = 16 12 + 2 = 6 ; 其中E为流图中的边数,N为结点数;2)V(G)= 6 (个区域);3)V(G)= P + 1 = 5 + 1 = 6 ; 其中P为谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。步骤2:据流图确定环形复杂性度量V(G):步骤3:确定基本路径集合(即独立路径集合)。一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。于是可确定6条独立的路径:路径1:12291012路径2:1291112路径3:12391012路径4:1234582路径5:12345

42、682路径6:123456782步骤3:确定基本路径集合(即独立路径集合)。一条独立路径是指步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。1)路径1的测试用例: scorek=有效分数值,当k i ; score i = 1 , 2i50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。2)路径2的测试用例: score 1 = 1 ; 期望的结果:average = 1 ,其他量保持初值。步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着3)路径3的测试用例: 输入多于50个有效分数,即试图处理51个分数,要求

43、前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。4)路径4的测试用例: score i =有效分数, 当i50; score k 0 , k i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。3)路径3的测试用例:5)路径5的测试用例: score i =有效分数, 当i100 , k i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。6)路径6的测试用例: score i =有效分数, 当i50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。5)路径

44、5的测试用例:7.2.2 判定结构分析当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。对于嵌套型分支结构,若有 n 个判定语句,则存在 n+1 条路径,需要 n+1 个测试用例;对于连锁型分支结构, 若有 n 个判定语句,则存在2n 条路径,需要有 2n 个测试用例,覆盖所有的路径。7.2.2 判定结构分析当程序中判定多于一个时,形成的分支结嵌套型分支结构连锁型分支结构s1s2s3s4p1p2p3s1s2s3s4s5s6p1p2p3嵌套型分支结构连锁型分支结构s1s2s3s4p1p2p3s1对于连锁型分支结构,当 n 较大时将无法测试。为减少测试用例的数目,

45、可采用试验设计法,抽取部分路径进行测试。由于抽样服从均匀分布,因此,在假定各条路径的重要性相同,或暂不明确各条路径的重要性的情况下可以做到均匀抽样。如果明确了各条路径的重要性,还可以采取加权的办法,筛选掉部分路径,再用如下的措施进行抽样。对于连锁型分支结构,当 n 较大时将无法测试。设连锁型分支结构中有 n 个判定,计算满足关系式 n+12m 的最小自然数m; 设t = 2m,取正交表Lt,并利用它设计测试数据。例如,一个连锁型分支结构中有三个判定语句p1,p2,p3。全部路径是238 条。先计算3+12m = t 的 t,得 t = 4。取正交表L4,把每一列当做一个判定,每一行当做可取的测试用例,可得4个测试用例。 设连锁型分支结构中有 n 个判定,计算满足关系式 n+12用各个判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一个测试路径矩阵。这样,测试路径数目从238条减少到314条。 L40 0 01 0 10 1 11 1 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论