【文档说明】Android软件测试理论与方法解析课件.ppt,共(100)页,1.009 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45240.html
以下为本文档部分文字说明:
软件测试的目标与原则Myers在其软件测试著作中对软件测试的目标提出以下观点:①软件测试是为了发现错误而运行程序的过程;②一个好的测试用例能够发现至今尚未发现的错误;③一个成功的测试是发现了至今尚未发现的错误的测试。软件测试的步骤在本书中,从软件工程
的角度:将单元测试与详细设计对应起来,即在详细设计阶段就应制定出单元测试计划;而集成测试又称为综合测试,可以把概要设计和集成测试对应起来,在概要设计阶段就可以制定集成测试计划;将功能测试、性能(行为)测试、验收测试统称为验收测试(也称确认测试),与
软件系统需求分析阶段对应起来,在需求分析阶段就应制定出验收准则和验收测试计划,验收测试应提交经用户确认的软件产品;最后,将软件、硬件等要素构成一个完整的基于计算机的系统,再进行系统测试,使系统测试与系统定义相对应,即在系统定义阶段就应制定系统测试
计划。软件测试的步骤测试步骤部件代码部件代码单元测试单元测试单元测试…部件代码集成测试功能测试性能测试验收测试安装测试设计规格说明系统功能需求其他软件需求用户需求规格说明用户环境集成后的模块功能系统验证,生
效的软件被接受的系统在使用中的系统测试后的模块软件测试的步骤软件工程的开发与测试的关系系统工程需求分析概要设计设计、编码单元测试集成测试验收测试系统测试测试阶段的信息流测试阶段的信息流测试评价排错可靠性模型软件配置测试配置测试结果错误错误统计预期结果正确的程序可靠性
预测14.1.3测试阶段的信息流测试的输入流有软件配置和测试配置。软件配置由需求规格说明、设计说明、源代码等组成;测试配置包括测试计划、测试用例(其中包括预期的结果)、测试工具等组成。测试结果评价经常发现严重的错误并需要修改软件,则软件
的质量和可靠性一定不高,需要进一步测试;如果测试所发现的错误不多且易于改正,软件功能看起来也较完善,则需考虑两种可能:1)软件质量和可靠性确实令人满意;2)测试不全面,很可能还潜伏着严重错误;如果测试过程
没有发现任何错误,则很有可能是测试配置不合理。软件测试中常见的错误类型按照错误的影响和造成的后果进行分类,可分为:较小错误,中等错误,较严重错误,严重错误,非常严重的错误,最严重的错误。按照软件生存周期各个阶段分类,可分为:问题定义错误、需求分
析规格说明错误、设计错误、编码错误等等。这里重点介绍一种按照错误的性质和范围进行分类的方法,可以将错误分为如下几类:按照错误的性质和范围进行分类1.功能错误①需求规格说明错误。主要是指其中有错误、多余或遗漏的功
能,有二义性或自相矛盾。②设计实现错误。设计或实现的功能不是规格说明或用户所要求的功能。按照错误的性质和范围进行分类2.系统错误①外部接口错误。如与打印机的接口错误。②内部接口错误。指各程序模块间的联系存在错误。如输入/输出、数据保护、
子程序访问等。③硬件结构错误。如错误地理解I/O指令、中断处理、设备启动和初始化等而引起的错误。④软件结构错误。由于软件结构不合理或不清晰所引起的错误。往往在系统满载时才能发现。⑤操作系统错误。该类错误是由于不了解操作系统而引起的,操作系统本身也有
错误。⑥控制与顺序错误。包括事件的时间顺序不正确、等待一个不可能发生的事件等等。⑦资源管理错误。既资源使用不当。资源死锁等。按照错误的性质和范围进行分类3.加工错误(算法错误)①计算与操作错误。指计算、函数求值和
一般操作过程中的错误。②初始化错误。如忘记了初始化工作区、数据区,错误地对循环变量赋初值,不正确的初始化等等。③局部控制和次序错误。如遗漏路径、不可达到的代码段、循环嵌套或终止条件不正确、死循环等等。④逻辑错误。如多分支、判断条件不正确等。按照错误的性质和范
围进行分类4.数据错误①动态数据错误。②静态数据错误。静态数据指直接或间接地出现在程序或数据库中的数据,其内容和格式都是固定的。因此在内容或格式上都可能存在错误。③数据内容错误。是指由于内容被破坏或被错误地解释
而造成的错误。④数据结构错误。包括数据结构说明错误和数据结构使用错误。⑤数据属性错误。数据属性是指数据内容的含义或语义,如整数、字符等。数据属性错误是指对数据属性的错误解释和错误使用而导致的错误。按照错误的性质和范围进行分类5.代码错误代码错误主要包
括语法错误、键入错误、对语句的理解错误等。例如,Myers(1976)指出,美国第一个去金星的太空任务的失败是由于在一个Fortrando循环中缺少一个逗号。软件测试的常用方法1.静态测试静态测试是采用人工检测和计算机辅助静态分析的方法对程序进行检测。人工检测是指靠人工走查
程序或评审软件。这种走查与评审主要针对编码的质量和软件开发各个阶段的文档,特别是总体设计和详细设计阶段的错误。能发现30%~70%的逻辑设计和编码错误。计算机辅助静态分析是指利用静态分析软件工具对程序进行静态分析,主要检测
变量是否用错、参数是否匹配、循环嵌套是否有错、是否有死循环和永远执行不到的死代码等等。同时,它还可对程序的特性进行分析。软件测试的常用方法2.动态测试动态测试是指事先设计好一组测试用例,然后通过运行程序来发现错误。动态测试有两种测试方法:黑盒测试;白盒测试。•用
黑盒法测试时,必须在所有可能的输入条件和输出条件中确定测试数据。是否要对每个数据都进行穷举测试呢?例如测试一个程序,需输入3个整数值。微机上,每个整数可能取值有216个,3个整数值的排列组合数为216×216×216=248≈3×1
014。假设此程序执行一次为1毫秒,用这些所有的数据去测试要用1万年!但这还不能算穷举测试,还要输入一切不合法的数据。可见,穷举地输入测试数据进行黑盒测试是不可能的。白盒测试又称为结构测试或逻辑驱动测试,此方法是将测试对象比
作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构和相关信息来设计或选择测试用例,对穿过软件的逻辑路径进行测试,可以在不同点检查程序的状态,以确定实际状态与预期状态是否一致。表面看来,白盒测试是可以进行完全的测试的,从
理论上讲也应该如此。只要能确定测试模块的所有逻辑路径,并为每一条逻辑路径设计测试用例,并评价所得到的结果,就可得到100%正确的程序。但实际测试中,这种穷举法是无法实现的,因为即使是很小的程序,也可能会出现数目惊人的逻辑路径。如图所示是一个小程序
的流程图。循环小于等于20次•图中,一个圆圈代表一行源程序代码(或一个语句块)。其中有五条通路,左边曲线箭头表示执行次数不超过20次循环。这样的执行路径就有520个,近似为1014个可能的路径。如果1ms完成一个测试,由此测试程序需3170
年。•由此看出,即使精确地实现了白盒测试,也不能断言测试过的程序全正确,因为实行穷举测试,由于工作量过大,需用时间过长,实施起来是不现实的。这就是程序测试的经济学问题。既然在测试阶段穷举法测试是不可行的,那么为了节省时间和资源,提高测试效率,就必须精心设计测试用例。需从大量的可
用测试用例中精选出少量的测试数据,使得采用这些测试数据能够达到最佳的测试效果,即能高效地、尽可能多地发现隐藏的错误。测试只能发现错误,并不能保证程序没有错误。测试用例——为了进行有效的测试而设计的输入数据和预期的输出结果数
据。测试用例设计的基本目的是确定一组最有可能发现某个错误或某类错误的测试数据。无论是黑盒测试(下节内容介绍),还是白盒测试都不可能进行穷举测试,所以测试用例的设计只能在周期和经费允许的条件下,使用最少数目的测试用例,发现最大数目可能的错误。6种覆盖标准的对比语句覆盖每
条语句至少执行一次判定覆盖每个判定的每个分支至少执行一次条件覆盖每个判定的每个条件应取到各种可能的值判定/条件覆盖同时满足判定覆盖和条件覆盖条件组合覆盖每个判定中各条件的每一种组合至少出现一次弱发现错误能力强路径覆盖使程序中每一条可能的
路径至少执行一次•语句覆盖发现错误能力最弱。判定覆盖包含了语句覆盖,但它可能会使一些条件得不到测试。条件覆盖对每一条件进行单独检查,一般情况下它的检错能力较判定覆盖强,但有时达不到判定覆盖的要求。判定/条件覆盖包含了判定覆盖和条件覆盖的要求,但由于计算机系统软
件实现方式的限制,实际上不一定达到条件覆盖的标准。条件组合覆盖发现错误能力较强,凡满足其标准的测试用例,也必然满足前4种覆盖标准。•前5种覆盖标准把注意力集中在单个判定或判定的各个条件上,可能会使程序某些路径没有执行到。路
径测试根据各判定表达式取值的组合,使程序沿着不同的路径执行,查错能力强。但由于它是从各判定的整体组合出发设计测试用例的,可能使测试用例达不到条件组合覆盖的要求。在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例,以达到路径覆盖
测试标准。条件测试路径选择•当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。•对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例;•对于连锁型分支结构,若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径。判定结构分析•当程序
中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。•对于嵌套型分支结构,若有n个判定语句,则存在n+1条路径,需要n+1个测试用例;•对于连锁型分支结构,若有n个判定语句,则存在2n条路径,需要有2n个测试用例,覆盖所有的路径。嵌套型分支
结构连锁型分支结构s1s2s3s4p1p2p3s1s2s3s4s5s6p1p2p3•对于连锁型分支结构,当n较大时将无法测试。•为减少测试用例的数目,可采用试验设计法,抽取部分路径进行测试。•由于抽样服从均匀分布,因此,在假定各条路径
的重要性相同,或暂不明确各条路径的重要性的情况下可以做到均匀抽样。如果明确了各条路径的重要性,还可以采取加权的办法,筛选掉部分路径,再用如下的措施进行抽样。•设连锁型分支结构中有n个判定,计算满足关系式n+1≤2m的最小自然数m;•设t=2m,取正交表Lt,并利用它
设计测试数据。•例如,一个连锁型分支结构中有三个判定语句p1,p2,p3。全部路径是23=8条。先计算3+1≤2m=t的t,得t=4。取正交表L4,把每一列当做一个判定,每一行当做可取的测试用例,可得4个测试用例。•用各个判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的
“1”,就建立起一个测试路径矩阵。这样,测试路径数目从23=8条减少到3+1=4条。L40001010111101231234用例s1s3s5s2s3s6s1s4s6s2s4s5p1p2p31234s1–s3–s5s2–s3–s6s1–s4–s6s2–s
4–s5路径s1s3s5p1p2p3s2s3s6p1p2p3s1s4s6p1p2p3s2s4s5p1p2p3L201112L40001010111101231234L80000000101010101100111100110000111110
1101001111001101001123456712345678L22L4LL4循环覆在逻辑覆盖的测试技术中,以上只讨论了程序内部有判定存在的逻辑结的测试用例设计技术。而循环也是程序的主要逻辑结构,要覆盖含有循结构的所有路径是不可能的,但可通过限制循环次数来测试循环测试路径选择
•循环分为4种不同类型:简单循环、连锁循环、嵌套循环和非结构循环。(1)简单循环①零次循环:从循环入口到出口②一次循环:检查循环初始值③二次循环:检查多次循环④m次循环:检查在多次循环⑤最大次数循环、比最大次数多一次、少一次的循环。例:求最小值k=i;for(j=i+1
;j<=n;j++)if(A[j]<A[k])k=j;k=i;j=i+1;j<=n?A[j]<A[k]?k=jj++fdcabe循环inA[i]A[i+1]A[i+2]k路径01211iac1212iabefc21i+1abdfc13123iabefefc231
i+2abefdfc321i+2abdfdfc312i+1abdfefcd改改kk的的值值,,ee不不改改kk的的值值测试用例选择①对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值;②逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变
量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。。③反复进行,直到所有各层循环测试完毕。(2)嵌套循环④对全部各层循环同时取最小循环次数,或者同时取最大循环次数(3)连锁循环如果各个循环互相独立,则可以用与简
单循环相同的方法进行测试。但如果几个循环不是互相独立的,则需要使用测试嵌套循环的办法来处理。(4)非结构循环这一类循环应该使用结构化程序设计方法重新设计测试用例。某工厂公开招工,规定报名者年龄应在16~35周
岁之间(到1995年6月30日为止),即出生年月不早于1960年7月,不晚于1979年6月。报名程序具有自动检验输入数据的功能。如出生年月不在上述范围内,将拒绝接受,并显示“年龄不合格”等出错信息。请试用等价分类法,设计出生年月的等价分类表。二、请利用等价分类法为以下提供的内容设计测试
用例假定已知出生年月是由6位数字字符表示,前4位代表年,后2位代表月,则可以划分为3个有效等价类和7个无效等价类。1、划分出生年月等价分类表输入数据有效等价类无效等价类出生年月①6位有效数字字符②有非数字字符③少于6个数字字符④多于6个数字字符对应数值⑤196007-19790
6⑥<196007⑦>197906月份对应数值⑧在1-12之间⑨等于“0”⑩>122、设计有效等价类需要的测试用例输入数据有效等价类无效等价类出生年月①6位有效数字字符②有非数字字符③少于6个数字字符④多于6个数字字符对应数值⑤196007-197906⑥<196007⑦>197906月份对应数值
⑧在1-12之间⑨等于“0”⑩>12测试数据期望结果测试范围197011输入有效①、⑤、⑧输入数据有效等价类无效等价类出生年月①6位有效数字字符②有非数字字符③少于6个数字字符④多于6个数字字符对应数值⑤196007-197906⑥<196007⑦>197906月份对应数
值⑧在1-12之间⑨等于“0”⑩>12测试数据期望结果测试范围MAY,70输入无效②有非数字字符19705输入无效输入无效③少于6个数字字符1968011196008195512196200197222年龄不合格年龄不合格输入无效输入无
效④多于6个数字字符⑥<196007⑦>197906⑨等于“0”⑩>123、为每一个无效等价类至少设计一个测试用例二、边界值分析法采用边界值分析法来选择测试用例,可使得被测程序能在边界值及其附近运行,从而更有效地暴露程序中潜藏的错误。•人们从长期的测试工作经验得知,大量的错误是发生在输入
或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。•例如,有一段用C编写的小程序:intA[20];inti;for(i=1;i<=10;i++)A[i]=-1;•因为C语言中数组下标从0开始
,而本程序中从1开始赋值,如果以后用户不了解,可能从0开始使用,就会出错。所以边界值可能查出更多的问题来。•如何确定边界?通常的边界检查原则:a)类型:数字、字符、位置、质量、大小、速度、方位、尺寸、空间等。b)边界值:最大/最小、首位/末位、上/下、最大/最小、最快/最慢、最高/最低
、最短/最长、空/满等。•使用边界值分析,最重要的是确定正确的边界值域。对于输入/输出等价类,选取正好等于、刚刚大于和刚刚小于边界值的数据作为测试数据。•选取测试用例的原则:(1)如果输入条件规定了值的范围,则应取刚刚到达这个范围边界的值,以及刚刚超
过这个范围边界的值作为测试输入数据。例如,某数据的取值范围为-1.0~1.0,测试数据可取-1.0、1.0,以及-1.1、1.1。(2)如果输入条件规定了值的个数,则应取最大个数、最小个数、比最大个数多1,比最小个数少1的数作为测试输入数据。例如,某文件有255个记录,测
试数据可取1、255,以及0、256。(3)根据规格说明和每个输出条件,使用原则(1)。例如,研究生录取分数范围84~150,测试数据可取84、150,以及83、151。(4)根据规格说明和每个输出条件,使用原则(2)。例如,研究生录取人数34人,测试数据可取1、34、以及
0、35。(5)如果程序的规格说明给出的输入域或输出域是有序集合(如有序表),则选取集合的第一个元素和最后一个元素作为测试用例。例如,学生文件的学生记录按学号存放,班上总共30人,测试数据可取第1、第30个学生。(6)如果程序中使用了一个内部
数据结构,则应选择此数据结构的边界上的值作为测试用例。(7)分析规格说明,找出其他可能的边界条件。If(196007<=value(birthdate)<=197906)Thenread(birthday)Elsewrite“invalidage!”<为了接受年龄合
格的报名者则程序中可能设有语句为:输入等价类测试用例说明测试数据期望结果出生年月1个数字字符5个数字字符7个数字字符有1个非数字字符全是非数字字符519705196801119705AUGUST输入无效对应数值35周岁16周岁196007197906合格年龄>35周
岁<16周岁196006197907不合格年龄月份对应数值月份值为1月月份值为12月196701197412输入有效月份值<1月份值>12196700197413输入无效1、等价分类法的测试数据是在各个等价类允许的值域内任意选取的,而
边界值分析法的测试数据必须在边界值附近选取。2、在公开招工的例子中,采用等价分类法设计了8个测试用例而边界值分析法则设计了13个,所以,一般来说,用边界值分析法设计的测试用例要比等价分类法的代表性更广,发现错误的能力也更强。但是对边界的分析与确定比较复杂,它要求测试人员具有更多的经验和长找性
。等价分类法与边界值分析法的比较•错误推测•在测试程序时,人们根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。•错误推测法没有确定的步骤,凭经验进行。它的基本思想是列出程序中可能发生错误的情况,根据这些情况选择测试用例。如输入、输出数
据为零是容易发生错误的情况;又如,输入表格为空或输入表格只有一行是容易出错的情况等。•例如对于一个排序程序,列出以下几项需特别测试的情况:•(1)输入表为空。•(2)输入表只含一个元素。•(3)输入表中所有元素均相同。
•(4)输入表中已排好序。•又如,测试一个采用二分法的检索程序,考虑以下情况:•(1)表中只有一个元素。•(2)表长是2的幂。•(1)在任何情况下都应使用边界值分析法,用这种方法设计的用例暴露程序错误能
力强。设计用例时,应该既包括输入数据的边界情况又包括输出数据的边界情况。•(2)必要时用等价类划分方法补充一些测试用例。•(3)再用错误推测法补充测试用例。•(4)检查上述测试用例的逻辑覆盖程度,如未满足所要求的覆盖标准,再增加
例子。•(5)如果需求说明中含有输入条件的组合情况,则一开始就可使用因果图法。功能图测试•功能图测试是一种黑盒测试方法,它是基于状态迁移图和判定表来设计测试用例的。•状态迁移图是一种动态说明,它由输入条件和当前状态决定输出数据和后续状态。•判定表则是一种静态说明,它用于表示
在状态中输入与输出的对应关系。•在这种环境下,测试用例是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成。•下面是简化的自动取款机ATM的状态图。a)初始时ATM显示“请插入卡片”。b)当插入卡片后ATM显示“
请输入密码”。c)ATM检查输入的密码与文件中保存的密码。若相同,则ATM显示“请输入金额”;若不同,ATM检查是否三次都打错了:如是,则ATM显示“停止处理”,消去这个记录,重新显示“请插入卡片”;若未达到三次,则ATM显示“请输入密码”。d)打入一个钱数后
ATM检查它是否小于等于余额,若大于余额,ATM显示“请输入金额”,等待再次输入金额;否则ATM付给要求的现金,报告余额,显示“请插入卡片”。判定表TS0S1S2S3T“请插入卡片”“请输入密码”“请输入金额”给付钱款显示余额M1:插入卡片M2M3M4M
5M6M7密码=记录YNN错输=三次NYNM2M3M4S0S1S2输出输入状态输入金额后判断if(金额>余额)M5elseM6M1:插入卡片M2:输入密码M3:密码匹配M4:错输三次M5:输入金额M6:金
额不多于余额M7:回归初始状态从状态图生成测试用例•若用结点表示状态,用弧表示迁移,则状态迁移图就可以转换为一个程序的控制流图,问题就转化为程序的路径测试问题。•状态图的覆盖准则有覆盖所有状态(C0覆盖)和覆盖所有迁移(C1覆盖)。•通常采用基本路径覆盖方法设计测试用例。对于循环,应包含
0次循环(先判断循环情形)和1次循环的情形。•在计算路径时要注意状态图本身已经构成强连通图,区域外的部分不计入环路复杂性。测试路径S0S1S2S3S0S0S1S0S0S0S1S1S2S3S0S0S1S2S2S3S0S1S2S3TM3M4M5M6M7M2基于图的测试方法•黑盒测试的
一个重要思想是首先创建描述重要的程序对象(模块或语句集)及其相互关系的图,然后导出测试序列以检查对象及其关系并发现错误。•图中用结点表示对象,用边(或连接)表示对象间的关系,用结点权值表示结点的属性,
用边上的权值表示连接的特征。•在基本路径测试方法就有这样的图。•使用图进行行为测试的方法有:1)事务流建模结点是事务的每一步骤,边是步骤之间的逻辑连接。2)有限状态建模结点是用户可见的软件的不同状态,边是状态之间的
转换。(可利用状态迁移图辅助建立这种图)3)数据流建模结点是数据对象,边是将数据对象转换为其他数据对象时发生的变换。4)时序建模结点是程序对象,边是对象间的顺序连接。边上权值用于表示执行时间。•基于图的测试可以仿照基本路径测试的方法设计测试用例。但图中可能有环
,可能要考虑循环测试。•对于图中的传递关系、对称(双向的有向边)关系、自反关系也需要进行检查。•在设计测试用例时,第一个目标是结点的覆盖度。必须确保不遗漏某个结点,而且结点的权值(对象属性)是正确的。第二个目标是边的覆盖度。要设计测试以证实权值是否有效,最后加入循环测试。接口测试•当
模块或子系统集成为更大的系统时就需要进行接口测试。•接口测试的目的是检测那些由于接口有误或对接口做出了无效假设而造成的系统缺陷。•程序构件的接口类型有:1)参数接口2)共享内存接口3)程序接口4)消息传递接口•接口错误是常见的系统错误,有3种接口错误:1)接口误用:构件
调用时接口使用不当造成的错误。例如,在参数接口情形,使用的参数类型、排列顺序或参数个数不匹配。2)接口误解:调用者构件误解了被调用构件的接口描述,或对被调用者的行为作了错误的假设而造成的错误。例如,调用折半搜索例程时使用了未排序的数组导致搜索失败。3)
计时错误:在实时系统中,系统使用了共享内存接口或消息传递接口可能产生的错误。原因在于数据的生产和消费的速度可能不同。接口测试的一般准则1)检查接口并明确地列出对外部构件的调用。设计一组测试用例,为传送给其他构件的参数选择紧靠取值范围边界的
值,以暴露接口的不一致错误。2)当有指针通过接口传递时,可用空指针参数来测试。3)当通过程序接口来调用一个构件时,设计一些容易引起构件执行失效的假设进行测试,以检查接口误解的错误。4)在有消息传递的系统中进行
强度测试,即加大消息传递的量,增加系统的负荷。因此,设计测试用例,产生比平时多得多的消息,以暴露计时错误。5)当构件之间通过共享内存交互时,可以设计一种测试,改变正常的激活构件的顺序。通过这些测试用以暴露程序员暗自对共享数据的生产和消费顺序所做的假设。•在接口测试
方面,利用程序静态分析的方法比动态测试更有效。基本路径测试•【例】试用基本路径测试法对如下的PDL描述或如图所示的程序流程图设计测试用例。该例子描述了最多输入50个值(以–1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。PROCEDUREav
erageINTERFACERETURNSaverage,sum,n1;*n1为有效成绩的个数。*INTERFACEACCEPTSscore;TYPEscore[1,50]ISSCALARARRAY;TYPEav
erage,n1,n2,sumISSCALAR;*n2为输入值的个数。*TYPEiISINTEGER;i=1;n1=n2=0;sum=0;DOWHILE(score[i]<>–1)AND(n2<50)n2加1;IF(score[i]>=0)AND(score[i]<=100)TH
ENn1加1;sum=sum+score[i];ENDIF;i加1;ENDDO;IFn1>0THENaverage=sum/n1;ELSEaverage=–1;ENDIF;ENDaverage过程average的程序流程图开始i=1,
n1=n2=0,sum=0Score[i]<>-1ANDn2<50n2=n2+1n1=n1+1,sum=sum+score[i]Score[i]>0ANDscore[i]<100i=i+1n1>0average=sum/n1average
=–1返回FFFTTT12和345和6789101112【例】解:可按如下步骤设计测试用例:步骤1:根据详细设计或代码导出过程average的流图。123456789111012R1R2R3R4R5R6步骤2:据流图确定环形复杂性度量V(
G):1)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是谓词结点。步骤3:确定基本路径集合
(即独立路径集合)。一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。于是可确定6条独立的路径:路径1:1—2—…—2—9—10—12路径2:1—2—9—11
—12路径3:1—2—3—9—10—12路径4:1—2—3—4—5—8—2…路径5:1—2—3—4—5—6—8—2…路径6:1—2—3—4—5—6—7—8—2…步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。1)路径1的测试用例:score[k
]=有效分数值,当k<i;score[i]=–1,2≤i≤50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。2)路径2的测试用例:score[1]=–1;期望的结果:average=–1,其
他量保持初值。3)路径3的测试用例:输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。4)路径4的测试用例:score[i]=有效分数,当i<50;score[k]<0,k<i;期望结果:根据输入的有效分数算出正确的分数个数n1
、总分sum和平均分average。5)路径5的测试用例:score[i]=有效分数,当i<50;score[k]>100,k<i;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。6
)路径6的测试用例:score[i]=有效分数,当i<50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。7.2.2判定结构分析•当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。•对于嵌套型分支结构,若有n个判定语句,则
存在n+1条路径,需要n+1个测试用例;•对于连锁型分支结构,若有n个判定语句,则存在2n条路径,需要有2n个测试用例,覆盖所有的路径。嵌套型分支结构连锁型分支结构s1s2s3s4p1p2p3s1s2s3s4s5
s6p1p2p3•对于连锁型分支结构,当n较大时将无法测试。•为减少测试用例的数目,可采用试验设计法,抽取部分路径进行测试。•由于抽样服从均匀分布,因此,在假定各条路径的重要性相同,或暂不明确各条路径的重要性的情况下
可以做到均匀抽样。如果明确了各条路径的重要性,还可以采取加权的办法,筛选掉部分路径,再用如下的措施进行抽样。•设连锁型分支结构中有n个判定,计算满足关系式n+1≤2m的最小自然数m;•设t=2m,取正交表Lt,并利用它设计测试数据。•例如,一个
连锁型分支结构中有三个判定语句p1,p2,p3。全部路径是23=8条。先计算3+1≤2m=t的t,得t=4。取正交表L4,把每一列当做一个判定,每一行当做可取的测试用例,可得4个测试用例。•用各个判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建
立起一个测试路径矩阵。这样,测试路径数目从23=8条减少到3+1=4条。L40001010111101231234用例s1s3s5s2s3s6s1s4s6s2s4s5p1p2p31234s1–s3–s5s2–s3–s6s1–s4–s6s2–s4–s5路径s1s3s5p1p2p3s2s3s6p1p2
p3s1s4s6p1p2p3s2s4s5p1p2p3L201112L40001010111101231234L8000000010101010110011110011000011111011010011110011010011234567123456
78L22L4LL4•下图描述了某个子程序的处理流程,根据判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖等五种覆盖标准,从供选择的答案中分别找出满足相应标准的最小的测试数据组。(1)a=5b=1(2)a=5b=-1(3)a=5b=1(4)a=5b=1a=-5b=-
1a=0b=-1(5)a=5b=-1(6)a=5b=1a=-5b=1a=0b=0a=-5b=-1a=-5b=-1(7)a=5b=1(8)a=5b=1a=0b=1a=0b=-1a=0b=-1a=-5b=1a=-5b=1a=-5b=-1•达到判定覆盖为(4);达到条件覆盖为(3)
;达到判定/条件覆盖为(6);达到条件组合覆盖为(8);达到路径覆盖为(7)。•在结构测试用例设计中,有语句覆盖、条件覆盖、判定覆盖(即分支覆盖)、路径覆盖等,其中(1)是最强的覆盖标准,为了对图所示的程序段进行覆盖测试,必须适当地选取测试数据集,如X,Y是两个变量,可供选择的
测试数据集有(1)、(2)、(3)、(4)四组(表4-3),则实现判定覆盖至少采用的测试数据集是(2),实现条件覆盖至少采用的测试数据集是(3),实现路径覆盖至少应采用的测试数据集是(4)或(5)。•输入三个正整数作为边长,判断该三条边构成的三角形是等边、等腰还是一般三角形。解:如图:•请分别
用黑盒法与白盒法对该程序设计测试用例。用边界值法设计测试用例:由于AND或OR运算可能使某些条件抑制其他条件的测试,有些错误查不出来,因此应与条件组合覆盖结合起来。这里在某些路径上用增加例子的办法克服以上缺陷。•供选择的答案(1):A.语句覆盖B.条件覆盖C.判定覆盖D
.路径覆盖(2)~(5):A.①和②B.②和③C.③和④D.①和④E.①、②和③F.②、③和④G.①、③和④H.①、②和④•⑴D⑵~⑸A.D.E.H