《软件工程第七讲实现幻灯片.ppt》由会员分享,可在线阅读,更多相关《软件工程第七讲实现幻灯片.ppt(133页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程第七讲实现软件工程第七讲实现第1页,共133页,编辑于2022年,星期三目标理解语用的重要性理解测试的目的理解软件可靠性掌握测试技术设计测试用例第2页,共133页,编辑于2022年,星期三第7章 实现(I)通常把编码和测试统称为实现。程序的质量主要取决于软件设计的质量。所选用的程序设计语言的特点及编码风格也将对程序的可靠性、可读性、可测试性和可维护性产生深远的影响。第3页,共133页,编辑于2022年,星期三第7章 实现(II)测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。软件测试
2、在软件生命周期中横跨两个阶段。单元测试:通常在编写出每个模块之后就对它做必要的测试综合测试:在这个阶段结束之后,对软件系统还应该进行各种综合测试第4页,共133页,编辑于2022年,星期三第7章 实现(III)通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。调试是测试阶段最困难的工作。软件可靠性模型使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠性。第5页,共133页,编辑于2022年,星期三7.1 编码7.1.1 选择程序设计语言7.1.2 编码风格第6页,共133页,编辑于2022年,星期三7.1.1 选择程序设计语言(I)编码之前的一项重要工作就是选择一种适当的程序
3、设计语言。在选择的时候我们要考虑各种方面的限制。下面是主要的实用标准:(1)系统用户的要求。(2)可以得到的软件工具。(3)程序员的知识。(4)软件可移植性要求。(5)软件的应用领域。第7页,共133页,编辑于2022年,星期三7.1.1 选择程序设计语言(I)编码之前的一项重要工作就是选择一种适当的程序设计语言。在选择的时候我们要考虑各种方面的限制。下面是主要的实用标准:(1)系统用户的要求。(2)可以得到的软件工具。(3)程序员的知识。(4)软件可移植性要求。(5)软件的应用领域。第8页,共133页,编辑于2022年,星期三7.1.2 编码风格(I)1、程序内部的文档2、数据说明3、语句构
4、造4、输入输出5、效率第9页,共133页,编辑于2022年,星期三7.1.2.1 程序内部文档(I)所谓程序内部的文档包括恰当的标识符、适当的注解和程序的视觉组织等等。1、标识符开发小组采取统一的命名规则(匈牙利命名法)使用可以准确说明变量/字段/类的完整的英文描述符。比如firstName,少用单变量名称如l,t这样的名字。采用该领域的术语。尽量不要生造词汇。第10页,共133页,编辑于2022年,星期三7.1.2.1 程序内部文档(II)采用大小写混合,提高名字的可读性。一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。如类名DBConnection,方法
5、名getFirstName(),isAtEnd(),setFirstName(String aName)等等尽量少用缩写,但如果一定要使用,就要谨慎地使用。例如,想对单词“number”采用缩写,可从 no 或者 num 中选取一个,且只用这种形式。避免使用下划线作为名字的首末字母。第11页,共133页,编辑于2022年,星期三7.1.2.1 程序内部文档-注释(I)在每个模块开始前有一段序言性的注释,简要描述模块的功能、主要算法、接口、重要数据、版本、编写(修改)时间、作者等。/*INETAn implementation of the TCP/IP protocol suite for t
6、he LINUX operating system.INET is implemented using the BSD Socket interface as the means of communication with the user level.*The Internet Protocol(IP)module.*Version:$Id:ip_input.c,v 1.40 1999/06/09 10:10:55 davem Exp$*Authors:Ross Biro,*Fred N.van Kempen,*Donald Becker,*Alan Cox,,*/第12页,共133页,编辑
7、于2022年,星期三7.1.2.1 程序内部文档-注释(II)插在程序中间与一段程序代码有关的注解,主要解释包含这段代码的必要性。/*Deliver IP Packets to the higher protocol layers.*/int ip_local_deliver(struct sk_buff*skb)/*All protocols checked.*If this packet was a broadcast,we may*not*reply to it,since that*causes(proven,grin)ARP storms and a leakage of memor
8、y(i.e.all*ICMP reply messages get queued up for transmission.)*/第13页,共133页,编辑于2022年,星期三7.1.2.1 程序内部文档-注释(III)应该用空格或空行清楚地区分注解和程序。程序清单的布局对于程序的可读性也有很大影响,应该利用适当的阶梯形式使程序的层次结构清晰明显。第14页,共133页,编辑于2022年,星期三7.1.2.2 数据说明数据说明的次序应该标准化。有次序就容易查阅,因此能够加速测试、调试和维护的过程。当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。如果设计时使用了一个复杂的数据结构,则应该
9、用注解说明用程序设计语言实现这个数据结构的方法和特点。第15页,共133页,编辑于2022年,星期三7.1.2.3 语句构造(I)构造语句时应该遵循的原则是,每个语句都应该简单而直接。采用下述规则:不要为了节省空间而把多个语句写在同一行;FOR I:=1 TO N1 DO BEGIN T:=I;FOR J:=I1 TO N DO IF AJAT THEN T:=J;IF TI THEN BEGIN WORK:=AT;AT:=AI;AI:=WORK;END END;第16页,共133页,编辑于2022年,星期三7.1.2.3 语句构造(II)FOR I:=1 TO N-1 DO /改进布局改进布
10、局 BEGIN T:=I;FOR J:=I1 TO N DO IF AJAT THEN T:=J;IF TI THEN BEGIN WORK:=AT;AT:=AI;AI:=WORK;END END;第17页,共133页,编辑于2022年,星期三7.1.2.3 语句构造(III)程序编写首先应当考虑清晰性 AI=AIAT;AT=AIAT;AI=AIAT;WORK=AT;AT=AI;AI=WORK;第18页,共133页,编辑于2022年,星期三7.1.2.3 语句构造(IV)尽量避免复杂的条件;尽量减少对“非”条件;避免大量使用循环嵌套和条件嵌套;利用括号使逻辑表达式或算术表达式的运算次序清晰直观
11、。第19页,共133页,编辑于2022年,星期三7.1.2.4 输入输出在设计和编写程序时应该考虑下述有关输入输出风格的规则:对所有输入数据都进行检验;保持输入格式简单;明确提示交互式输入的请求,详细说明可用的选择或边界数值;当程序设计语言对格式有严格要求时,应保持输入格式一致;设计良好的输出报表;第20页,共133页,编辑于2022年,星期三7.1.2.5 效率(I)效率主要指处理机时间和存储器容量两个方面。应该记住3条原则:首先,效率是性能要求。其次,效率是靠好设计来提高的。第三,程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率。第21页,共133页,编辑
12、于2022年,星期三7.1.2.5 效率(II)(1)程序运行时间应用下述规则:写程序之前先简化算术的和逻辑的表达式;仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;尽量避免使用多维数组;尽量避免使用指针和复杂的表;使用执行时间短的算术运算;不要混合使用不同的数据类型;尽量使用整数运算和布尔表达式。第22页,共133页,编辑于2022年,星期三main()main()int i,j;int i,j;long sum=0;long sum=0;for(i=1;i=20;i+)for(i=1;i=20;i+)for(j=1;j=3;j+)for(j=1;j=3;j+)sum=sum+(i+1
13、)*(i+1)*(j+2);sum=sum+(i+1)*(i+1)*(j+2);printf(“sum=%dn”,sum);printf(“sum=%dn”,sum);内循环次数 20X4=80 外循环次数 21 总循环次数 101 (i+1)(j+2)20 320 3 i=1 j=1i=1 j=1第23页,共133页,编辑于2022年,星期三main()main()int i,j;int i,j;long sum=0;long sum=0;for(j=1;j=for(j=1;j=3 3;j+);j+)for(i=1;i=for(i=1;i=2020;i+);i+)sum=sum+(i+1)*
14、(i+1)*(j+2);sum=sum+(i+1)*(i+1)*(j+2);printf(“sum=%dn”,sum);printf(“sum=%dn”,sum);内循环次数 3X21=63 外循环次数 4 总循环次数 67第24页,共133页,编辑于2022年,星期三main()main()int i,j;int i,j;long sum=0;long sum=0;for(j=for(j=1 1;j=;j=3 3;j+);j+)for(i=1;i=for(i=1;i=2020;i+);i+)sum=sum+(i+1)*(i+1)*(sum=sum+(i+1)*(i+1)*(j+2j+2);)
15、;printf(“sum=%dn”,sum);printf(“sum=%dn”,sum);j+2 共计执行了 3X20=60次 第25页,共133页,编辑于2022年,星期三应尽量把与循环变量无关的运算移到循环外去。应尽量把与循环变量无关的运算移到循环外去。main()main()int i,j,k;int i,j,k;long sum=0;long sum=0;for(j=1;j=3;j+)for(j=1;j=3;j+)k=j+2k=j+2;for(i=1;i=for(i=1;iValidation Criteria Configuration reviewDeficiency List第5
16、7页,共133页,编辑于2022年,星期三7.5.2 Alpha和Beta测试(I)Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。Alpha测试是在受控的环境中进行的。Beta测试是软件在开发者不能控制的环境中的“真实”应用。第58页,共133页,编辑于2022年,星期三7.6 白盒测试法关注软件内部逻辑结构(control structure)测试每条逻辑通路,检查断点(break point)状态测试方案对程序逻辑的覆盖程度决定测试的完全性程度Use the structure of the program to test.Structural testi
17、ngStructural testing白盒测试白盒测试第59页,共133页,编辑于2022年,星期三可能的执行通路=5 51 1+5+52 2+5+52020 loop=20 X123453170年年年年!365 365 24 24小时小时小时小时/年年年年1 1 1 1 毫秒毫秒毫秒毫秒/条条条条10101414条条=101014条条365 365 24 24小时小时小时小时/年年年年穷尽测试(complete test)第60页,共133页,编辑于2022年,星期三 一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。逻辑覆盖逻辑覆盖(Logical coverage)4.白
18、盒法测试方案的设计穷尽测试不可能 选少量“最有效”的test cases,做到尽可能完备的测试第61页,共133页,编辑于2022年,星期三Error!Error!选择足够多的测试数据,使程选择足够多的测试数据,使程序中每个可执行的序中每个可执行的语句语句至少执至少执行一次。行一次。a a(1)语句覆盖(Statement coverage)第62页,共133页,编辑于2022年,星期三例例:PROCEDURE SAMPAL(A,B:REAL;VAR X:REAL);BEGIN IF(A1)AND(B=0)THEN X:=X/A IF(A=2)OR(X1)THEN X:=X+1 END;入口入
19、口入口入口A 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE E第63页,共133页,编辑于2022年,星期三入口入口入口入口A 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE ETest case 1:A=2,B=0,X=3 覆盖路径覆盖路径SabcdEA 1 AND B=0T TA=2 OR X 1T T语句覆盖第64页,共133页,编辑于2022年
20、,星期三语句覆盖入口入口入口入口A 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE E问题:问题:只只测测试试了了判判定定表表达达式式=T,为为F时如有错误无法发现!时如有错误无法发现!只只关关心心判判定定表表达达式式的的值值,不不关关心心判判定定表表达达式式中中每每个个条条件件的的取取不同值的情况。不同值的情况。Test case 1:A=2,B=0,X=3 很弱的逻辑覆盖很弱的逻辑覆盖若若A1 AND B=0 错写成错写成 A1 OR B=0,无法测试出!,无法测试出!
21、同样,若同样,若A=2 OR X 1 错写成错写成 A=2 OR X 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE E两种方案:两种方案:1.SabcdE+SacE(TT)(FF)2.SabcE+SacdE(TF)(FT)(2)判定覆盖(Branch coverage)第66页,共133页,编辑于2022年,星期三入口入口入口入口A 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS
22、Sa ab bc cd dE ETest cases 3:A=4,B=0,X=4 (SabcE)A=2,B=1,X=3 (SacdE)问题:问题:任一方案都只检查了全任一方案都只检查了全部路径的一半部路径的一半(2/4)无法判断内部条件的错无法判断内部条件的错误误(如(如X1错写为错写为X 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE EA 1 T TA 1F FB=0 T TB0F FA=2 T TA2F FX 1 T TX 1F F测试用例必须覆盖这测试用例必须覆盖这
23、8种可能的结果种可能的结果!选择足够多的测试数据,使每个判定选择足够多的测试数据,使每个判定表达式中的每个表达式中的每个条件条件条件条件都取到各种可能的都取到各种可能的结果。结果。(3)条件覆盖(Condition coverage)第68页,共133页,编辑于2022年,星期三入口入口入口入口A 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE ETest cases 4:A=2,B=0,X=4SabcdE(满足(满足A1,B=0;A=2,X1)TTTTA=1,B=1,X=
24、1 SacE (满足满足A 1,B 0;A 2,X 1)FFFF条件覆盖条件覆盖 判定覆盖判定覆盖 条件覆盖第69页,共133页,编辑于2022年,星期三入口入口入口入口A 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE ETest cases 5:A=2,B=0,X=1 SabcdE(满足(满足A1,B=0;A=2,X 1)TTTF A=1,B=1,X=2 SacdE (满足满足A 1,B 0;A 2,X1)FFFT表达式表达式(A=2 OR X 1)始始终为终为T,没有
25、覆盖分,没有覆盖分支支cE,不是判定覆盖!不是判定覆盖!条件覆盖不一定包含判定覆盖条件覆盖不一定包含判定覆盖条件覆盖不一定包含判定覆盖条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含,判定覆盖也不一定包含,判定覆盖也不一定包含,判定覆盖也不一定包含条件覆盖!条件覆盖!条件覆盖!条件覆盖!条件覆盖第70页,共133页,编辑于2022年,星期三选择足够多的测试数据,使判定表达式中的每选择足够多的测试数据,使判定表达式中的每选择足够多的测试数据,使判定表达式中的每选择足够多的测试数据,使判定表达式中的每个个个个条件条件条件条件都取到各种可能的值,而且每个都取到各种可能的值,而且每个都取到各种可能的值
26、,而且每个都取到各种可能的值,而且每个判定表判定表判定表判定表达式达式达式达式也都取到各种可能的结果。也都取到各种可能的结果。也都取到各种可能的结果。也都取到各种可能的结果。(4)判定-条件覆盖第71页,共133页,编辑于2022年,星期三入口入口入口入口A 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE ETest cases 6:A=2,B=0,X=4SabcdE(满足(满足A1,B=0;A=2,X1)TTTTA=1,B=1,X=1 SacE (满足满足A 1,B 0;
27、A 2,X 1)FFFFTest cases 4问题:问题:没没能能覆覆盖盖判判定定表表达达式式中中各各条条件取值的所有可能组合!件取值的所有可能组合!若若A1 AND B=0 错写成错写成 A1 OR B=0,无法测试出!,无法测试出!同样,若同样,若A=2 OR X 1 错写成错写成 A=2 AND X 1,无法测试出!,无法测试出!不不一一定定能能发发现现判判定定表表达达式式中中的的逻辑错误!逻辑错误!判定-条件覆盖第72页,共133页,编辑于2022年,星期三选择足够多的测试数据,使每个判选择足够多的测试数据,使每个判定表达式中定表达式中条件的各种可能组合条件的各种可能组合都都至少出现
28、一次。至少出现一次。满足满足满足满足条件组合覆盖条件组合覆盖条件组合覆盖条件组合覆盖 一定能满足一定能满足一定能满足一定能满足判定覆盖判定覆盖判定覆盖判定覆盖、条件覆盖条件覆盖条件覆盖条件覆盖和和和和判定判定判定判定条件覆盖条件覆盖条件覆盖条件覆盖。(5)条件组合覆盖第73页,共133页,编辑于2022年,星期三全部可能的条件组合为:全部可能的条件组合为:A1,B=0 TT A1,B 0 TF A 1,B=0 FT A 1,B 0 FF A=2,X1 TT A=2,X 1 TF A 2,X1 FT A 2,X 1 FFTest cases 7:A=2,B=0,X=4 (T T)SabcdE A
29、=2.B=1,X=1 (F T)SacdE A=1,B=0,X=2 (F T)SacdE A=1,B=1,X=1 (F F)SacE问题:不能保证覆盖程序中的每一条路径!问题:不能保证覆盖程序中的每一条路径!没有测试到路径没有测试到路径SabcESabcE(表达式表达式T F,条件,条件和和的组合)的情形的组合)的情形入口入口入口入口A 1A 1AND B=0AND B=0TA=2A=2OR X 1OR X 1TX=X/AX=X/AX=X+1X=X+1返回返回返回返回FFS Sa ab bc cd dE E最强的逻辑覆盖最强的逻辑覆盖条件组合覆盖第74页,共133页,编辑于2022年,星期三5
30、.5.条件组合覆盖条件组合覆盖条件组合覆盖条件组合覆盖4.4.判定判定判定判定-条件覆盖条件覆盖条件覆盖条件覆盖3.3.条件覆盖条件覆盖条件覆盖条件覆盖2.2.判定覆盖判定覆盖判定覆盖判定覆盖1.1.语句覆盖语句覆盖语句覆盖语句覆盖测试充分性测试代价逻辑覆盖的关系第75页,共133页,编辑于2022年,星期三7.6.2 控制结构测试(I)1.基本路径测试步骤如下:第一步,根据过程设计结果画出相应的流图第二步,计算流图的环形复杂度。第三步,确定线性独立路径的基本集合。第四步,设计可强制执行基本集合中每条路径的测试用例。第76页,共133页,编辑于2022年,星期三图7.6 求平均值过程的流图第7
31、7页,共133页,编辑于2022年,星期三图7.6 求平均值过程的流图环形复杂度=6路径1:1-2-10-11-13路径2:1-2-10-12-13路径3:1-2-3-10-11-13路径4:1-2-3-4-5-8-9-2-路径5:1-2-3-4-5-6-8-9-2-路径6:1-2-3-4-5-6-7-8-9-2-12345678910111213第78页,共133页,编辑于2022年,星期三当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例;对于连锁型分支结构,若有n个判定语句,需要有2n个测试用例,
32、覆盖它的2n条路径。7.6.2.2条件测试路径选择第79页,共133页,编辑于2022年,星期三第80页,共133页,编辑于2022年,星期三循环分为4种不同类型:简单循环、连锁循环、嵌套循环和非结构循环。(1)简单循环 零次循环:从循环入口到出口 一次循环:检查循环初始值 二次循环:检查多次循环 m次循环:检查在多次循环 最大次数循环、比最大次数多一次、少一次的循环。7.6.2.3循环测试路径选择第81页,共133页,编辑于2022年,星期三例:求最小值k=i;for(j=i+1;j=n;j+)if(Aj Ak)k=j;第82页,共133页,编辑于2022年,星期三k=i;j=i+1;j=n
33、?Aj5THEN X=10ELSE X=1END IFIF B10THEN Y=20ELSE Y=2END IFIF C15THEN Z=30ELSE Z=3END IFPRINT(X,Y,Z)STOP习题:设计下列伪码程序的语句覆盖和路径覆盖测试用例:习题:设计下列伪码程序的语句覆盖和路径覆盖测试用例:注意路径覆盖指把程序的每条路径执行一次,与基本路径测试不同(考虑独立路径)第88页,共133页,编辑于2022年,星期三STARTINPUT(A,B,C)IF A5THEN X=10ELSE X=1END IFIF B10THEN Y=20ELSE Y=2END IFIF C15THEN Z=
34、30ELSE Z=3END IFPRINT(X,Y,Z)STOP(1)语句覆盖的测试用例有三个判断表达式,并且每个表达式为真和为假都有语句执行,因此需要两组测试数据,使每个判定的真假各一次,这样才能使每条语句都至少执行一次。第一组,使三个判定全假:输入:A=1,B=1,C=1预期的输出:X=1,Y=2,Z=3第二组,使三个判定全真:输入:A=10,B=20,C=30预期的输出:X=10,Y=20,Z=30第89页,共133页,编辑于2022年,星期三STARTINPUT(A,B,C)IF A5THEN X=10ELSE X=1END IFIF B10THEN Y=20ELSE Y=2END I
35、FIF C15THEN Z=30ELSE Z=3END IFPRINT(X,Y,Z)STOP(2)路径覆盖测试用例:该程序共有2*2*2=8条可能的路径,为了能覆盖每条路径,需要8组测试数据,刚才的全真和全假已经有了,只需补充剩余6个:第三组,真真假:输入:A=10,B=20,C=10预期的输出:X=10,Y=20,Z=3第四组,真假假:输入:A=10,B=10,C=10预期的输出:X=10,Y=2,Z=3第五组,真假真:输入:A=10,B=10,C=30预期的输出:X=10,Y=2,Z=30其余的依次类推,不再赘述。第90页,共133页,编辑于2022年,星期三习题:设计下列伪码的分支覆盖和
36、条件组合覆盖测试用例习题:设计下列伪码的分支覆盖和条件组合覆盖测试用例STARTINPUT(A,B,C,D)IF(A0)AND(B0)THEN X=A+B ELSE X=A-BENDIF(CA)OR(D0)AND(B0)THEN X=A+B ELSE X=A-BENDIF(CA)OR(D0)AND(B0)THEN X=A+B ELSE X=A-BENDIF(CA)OR(D0,B0 CA,D0,BA,D=BA0 C=A,DBA=0,B=0 C=B对应组合之。具体不再赘述。第93页,共133页,编辑于2022年,星期三习题:使用基本路径测试方法,设计测试下面习题:使用基本路径测试方法,设计测试下面
37、列出的伪码程序的测试用例:列出的伪码程序的测试用例:1:START INPUT(A,B,C,D)2:IF(A0)3:AND(B0)4:THEN X=A+B5:ELSE X=A-B6:END7:IF(CA)8:OR(DB)9:THEN Y=C-D10:ELSE Y=C+D11:END12:PRINT(X,Y)STOP第94页,共133页,编辑于2022年,星期三123647911125810用基本路径测试方法设计测试用例有用基本路径测试方法设计测试用例有4步:步:(1)画出流图)画出流图(2)计算环形复杂度为)计算环形复杂度为5(3)确定独立路径的基本集合)确定独立路径的基本集合路径路径1:1-
38、2-3-4-6-7-9-11-12路径路径2:1-2-3-4-6-7-8-9-11-12路径路径3:1-2-3-4-6-7-8-10-11-12路径路径4:1-2-5-6-7-9-11-12路径路径5:1-2-3-5-6-7-9-11-12(4)设计测试用例,不再赘述)设计测试用例,不再赘述第95页,共133页,编辑于2022年,星期三7.7 黑盒测试技术黑盒测试着重测试软件功能。它很可能发现白盒测试不易发现的其他类型的错误。黑盒测试力图发现下述类型的错误:功能不正确或遗漏了功能;界面错误;数据结构错误或外部数据库访问错误;性能错误;初始化和终止错误。第96页,共133页,编辑于2022年,星
39、期三7.7 黑盒测试技术1、等价划分2、边界值分析3、错误推测第97页,共133页,编辑于2022年,星期三7.7.1 等价划分(I)等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。等价类测试的关键就是选择确定类的等价关系。第98页,共133页,编辑于2022年,星期三(1)等价划分思想:将程序的所有输入数据划分为不同的区域,同一区域中各个输入数据对于揭露程序中的错误是等价的,称为等价类。然后从每一个等价类中选取少数有代表性的数据做为测试用例。等价类 有效等价类 无效等价类输出等价类优点:可以滤掉同类数据,提高测试效率划分:试探性、经验第99页,共133
40、页,编辑于2022年,星期三划分等价类的启发式规则 值的范围xa,bxb 值的个数x=axa 值约束xA=a1,a2,anxA 值的规则x|P(x)x|P(x)等价类的细化xZ Z+,0,Z-表格 空表、一行、多行第100页,共133页,编辑于2022年,星期三建立等价类表输入条件输入条件有效等价类有效等价类无效等价类无效等价类.第101页,共133页,编辑于2022年,星期三设计步骤划分等价类,建立等价类表设计测试用例设计一新测试方案,尽可能多覆盖尚未被覆盖的有效等价类,重复,直至全部覆盖 减少test cases设计一新测试方案,覆盖且仅覆盖一个无效等价类,重复,直至全部覆盖 避免无效测试
41、例:文件名 以字母为首的字母数字串 test case:9A*B第102页,共133页,编辑于2022年,星期三设变量x1和x2和函数F联系起来。设X1,x2有以下边界以及边界内的区间:a=x1=d,区间a,b),b,c),c,de=x2=g,区间e,f),(f,gX1,x2的无效值是x1d,x2g.第103页,共133页,编辑于2022年,星期三7.7.1.1 弱一般等价类测试弱一般等价类测试通过使用一个测试用例中的每个等价类的一个变量实现。第104页,共133页,编辑于2022年,星期三7.7.1.2 强一般等价类测试强一般等价类测试基于多缺陷假设第105页,共133页,编辑于2022年,
42、星期三7.7.1.1 弱健壮等价类测试弱:单缺陷假设健壮:考虑了无效值第106页,共133页,编辑于2022年,星期三7.7.1.2 强健壮等价类测试强:多缺陷假设健壮:考虑无效值第107页,共133页,编辑于2022年,星期三7.7.1 例(I)NextDate:月日年等价类M1=1.12 M2=12D1=1.31 D2=31Y1=1912.2112 Y2=2112有效类的数量等于独立变量个数强弱一般等价类用例相同用例ID月份日期年预期输出WN1,SN16152012 2012年6月16第108页,共133页,编辑于2022年,星期三7.7.1 例(II)弱健壮等价类用例用例ID月份日期年预
43、期输出WR16152012 2012年6月16WR2-1152012 月份不在WR313152012 月份不在WR46-12012 日期不在WR56322012 日期不在WR66151911 年份不在WR76152113 年份不在第109页,共133页,编辑于2022年,星期三7.7.1 例(III)额外强健壮等价类用例用例ID月份日期年预期输出SR1-1152012 月份不在SR26-12012 日期不在SR313151911 年份不在SR4-1-12012 日期不在、月份不在SR56-11911 日期不在、年份不在SR6-1151911 年份不在、月份不在SR7-1-11911 年月日不在
44、第110页,共133页,编辑于2022年,星期三7.7.1 例(IV)NextDate:月日年等价类M1=每月有30天 M2=每月有31天 M3=2月M4=12D1=1.28 D2=29 D3=30 D4=31D5=31Y1=2000年 Y2=闰年 Y3=平年 Y4=2112第111页,共133页,编辑于2022年,星期三7.7.1 例(V)强一般等价类用例个数=3*4*3=36个(略)强健壮等价类用例个数=5*6*5=150个(略)用例ID月份日期年预期输出WN16142000 2000年6月15WN27291996 1996年7月30WN32302002 不可能的日期WN46312000
45、不可能的输入日期弱等价类测试用例第112页,共133页,编辑于2022年,星期三等价划分法的评价选用等价类中典型值/任意值作为test cases没有选用某些高效率的测试方案第113页,共133页,编辑于2022年,星期三7.7.2 边界值分析(Boundary Value Analysis,BVA)处理边界情况最易出错选择边界值作test cases,暴露error的可能性大 刚好等于等价类边界值 稍小于 稍大于Bugs lurk in corners and congregate at boundaries.Boris Beizer第114页,共133页,编辑于2022年,星期三边界值分析
46、的规则 值的范围 xa,ba-1,a,b,b+1 值的个数aba-1,a,b,b+1 输出等价类 sin x1/200-1-/2 有序集1,n0,n-1错位_ _ 2 21 10 0-1-1 2 2第115页,共133页,编辑于2022年,星期三【例】string integer(计算机字长16位,二进制补码表示)合法输出等价类-32768,0)内的负整数0(0,32767内的正整数非法输出等价类32767函数说明函数说明Function strtoint(dstr:shortstr):integer;参数类型说明参数类型说明type shortstr=array 1.6 of char;假设
47、不考虑假设不考虑PASCAL编译程序可过滤的错误编译程序可过滤的错误-32769 错错!下溢下溢 32768 错错!上溢上溢-32768 -32768000000 0 32767 32767第116页,共133页,编辑于2022年,星期三边界值分析方法的评价边界值test cases,易发现错误考虑输出等价类联合使用等价划分、边界值分析方法第117页,共133页,编辑于2022年,星期三7.7.3 错误推测法特殊的容易出错的情况 test cases凭经验、直觉,根据程序的特点着重测试已发现了较多错误的程序段(错误的群集现象)测试数据的组合(等价划分&边界值分析:孤立测试数据)0,空数据结构负
48、边界:栈上溢、下溢未赋初值的变量排序:空,一个元素 全等已排序判定表(树)选择测试数据的组合判定表(树)选择测试数据的组合第118页,共133页,编辑于2022年,星期三7.8 调试Debugging an art for removing errorsExecution of casesTestcasesResultsDebuggingAdditional testsSuspected causesIdentified causesCorrectionsRegression tests第119页,共133页,编辑于2022年,星期三1.调试的步骤1)1)确定程序中可疑错误的确切性质、位置和确
49、定程序中可疑错误的确切性质、位置和原因。原因。2)2)对程序(设计,编码)进行修改。对程序(设计,编码)进行修改。3)3)进行回归测试进行回归测试4)4)分析、总结分析、总结 第120页,共133页,编辑于2022年,星期三主要从以下几个方面进行分析和总结:出错的时间。谁造成的错误。出错原因。如何才能防止错误。怎样才能更早地发现错误。错误是怎样被发现的。第121页,共133页,编辑于2022年,星期三2.调试的途径硬性纠错(brute force/testing)回溯法纠错(backtracking)原因排除法(cause elimination)对分查找法 归纳法 演绎法第122页,共133
50、页,编辑于2022年,星期三归纳法演绎法第123页,共133页,编辑于2022年,星期三3.纠错的原则群集现象纠正错误的根源允许修改失败 多次反复过程新的错误是否被引入第124页,共133页,编辑于2022年,星期三7.9 软件可靠性 开发过程中,利用测试的统计数据来估算软件的可靠性,以控制软件的质量。推测错误的产生频度推测残留在程序中的错误数第125页,共133页,编辑于2022年,星期三基本概念软件可靠性和可用性系统平均故障时间MTTF、平均维修时间MTTR、平均故障间隔时间MTBF可靠性估算推测错误的产生频度推测残留在程序中的错误数评价测试的精确度和覆盖率第126页,共133页,编辑于2