第6章 实现(ok)课件_第1页
第6章 实现(ok)课件_第2页
第6章 实现(ok)课件_第3页
第6章 实现(ok)课件_第4页
第6章 实现(ok)课件_第5页
已阅读5页,还剩160页未读 继续免费阅读

下载本文档

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

文档简介

1、导入导入Secure Site-to-Site Network ConnectivityWindows Azure Virtual Network实现实现提纲提纲编码编码软件测试软件测试基础基础单元测试单元测试集成测试集成测试确认测试确认测试白盒测试白盒测试技术技术黑盒测试黑盒测试技术技术调试调试软件可靠软件可靠性性 “ “编程即是一门科学编程即是一门科学, ,也是一门艺术也是一门艺术”这是一项很有艺术性、独创性、技巧性的实践工作这是一项很有艺术性、独创性、技巧性的实践工作 编程技巧像艺术技巧一样,编程技巧像艺术技巧一样, 深不可测、奥妙无穷深不可测、奥妙无穷; ; 程序员像艺术家一样,程序员

2、像艺术家一样, 有发挥创造性的无限空间。有发挥创造性的无限空间。6.16.1编码编码6.16.1编码编码程序设计语言是指用于书写计算机程序的语程序设计语言是指用于书写计算机程序的语言,它是一种实现性的软件语言言,它是一种实现性的软件语言语法(语法(syntaxsyntax)用来表示构成语言的各个记)用来表示构成语言的各个记号之间的组合规则,它是构成语言结构正确号之间的组合规则,它是构成语言结构正确成分所需遵循的规则集合成分所需遵循的规则集合如如C C语言中语言中forfor语句的构成规则是:语句的构成规则是:forfor(表达式(表达式1 1;表达式;表达式2 2;表达式;表达式3 3)语句)

3、语句语法中不涉及到这些记号的含义,也不涉及使用语法中不涉及到这些记号的含义,也不涉及使用者者语义(语义(semanticsemantic)用来表示按照各种表示方式所表)用来表示按照各种表示方式所表示的各个记号的特定含义,但它不涉及到使用者。示的各个记号的特定含义,但它不涉及到使用者。如上述如上述forfor语句中:表达式语句中:表达式1 1表示循环初值;表达式表示循环初值;表达式2 2表示表示循环条件;表达式循环条件;表达式3 3表示循环的增量;语句为循环体。表示循环的增量;语句为循环体。整个语句的语义是:整个语句的语义是:(1 1)计算表达式)计算表达式1 1(2 2)计算表达式)计算表达式

4、2 2,若计算结果为,若计算结果为0 0,则终止循环;否则转,则终止循环;否则转(3 3)(3 3)执行循环体)执行循环体(4 4)计算表达式)计算表达式3 3(5 5)转向()转向(2 2)6.16.1编码编码语用(语用(pragmaticpragmatic)用来表示构成语言的各个记号和)用来表示构成语言的各个记号和使用者的关系。使用者的关系。如:如:语言是否允许递归?语言是否允许递归?是否要规定递归层数的上界?是否要规定递归层数的上界?这种上界如何确定?这种上界如何确定?这些都属于语用上的问题。这些都属于语用上的问题。6.16.1编码编码6.1.1 6.1.1 选择程序设计语言选择程序设计

5、语言影响人的思维和解题方式影响人的思维和解题方式影响人和计算机通信的方式和质量影响人和计算机通信的方式和质量必必要要性性影响其他人阅读和理解程序的难易程度影响其他人阅读和理解程序的难易程度6.1.1 6.1.1 选择程序设计语言选择程序设计语言使根据设计去完成编码时困难最少使根据设计去完成编码时困难最少减少需要的程序测试量减少需要的程序测试量重重要要性性得出更容易阅读和更容易维护的程序得出更容易阅读和更容易维护的程序6.1.1 6.1.1 选择程序设计语言选择程序设计语言用户要求用户要求所含成分所含成分应用范围应用范围低级语言低级语言高级语言高级语言语言级别语言级别通用语言通用语言专用语言专用

6、语言过程语言过程语言非过程语言非过程语言顺序语言顺序语言并发语言并发语言分布式语言分布式语言选择高级语言还是低级语言选择高级语言还是低级语言优先选择高级语言优先选择高级语言 开发和维护高级语言程序比开发和维护低级语言开发和维护高级语言程序比开发和维护低级语言程序容易得多程序容易得多必要时使用低级语言必要时使用低级语言 高级语言程序经编译后所产生的目标程序的功效高级语言程序经编译后所产生的目标程序的功效要比完成相同功能的低级语言程序低得多,所以在要比完成相同功能的低级语言程序低得多,所以在有些情况下会部分或全部使用低级语言有些情况下会部分或全部使用低级语言6.1.1 6.1.1 选择程序设计语言

7、选择程序设计语言使用低级语言的情况:使用低级语言的情况:对运行时间和存储空间有过高要求的项目,如学对运行时间和存储空间有过高要求的项目,如学习机中的软件习机中的软件在某些不能提供高级语言编译程序的计算机上开在某些不能提供高级语言编译程序的计算机上开发程序,如单片机上的软件发程序,如单片机上的软件大型系统中对系统执行时间起关键作用的模块大型系统中对系统执行时间起关键作用的模块6.1.1 6.1.1 选择程序设计语言选择程序设计语言6.1.1 6.1.1 选择程序设计语言选择程序设计语言选择语言时除了考虑理论上的标准,还必须同时考选择语言时除了考虑理论上的标准,还必须同时考虑主要的实用标准:虑主要

8、的实用标准: 系统用户的要求系统用户的要求可以使用的编译程序可以使用的编译程序可以得到的软件工具可以得到的软件工具工程规模工程规模程序员的知识程序员的知识软件可移植性要求软件可移植性要求软件的应用领域软件的应用领域项目所属的应用领域常常是首要的标准项目所属的应用领域常常是首要的标准COBOLCOBOL适用于商业领域适用于商业领域FORTRANFORTRAN适用于工程和科学计算领域适用于工程和科学计算领域PrologProlog、LispLisp适用于人工智能领域适用于人工智能领域SmalltalkSmalltalk、C+C+适用于适用于OOOO系统的开发系统的开发有些语言适用于多个应用领域,如

9、有些语言适用于多个应用领域,如C C若有多种语言都适合于某项目的开发时,也可若有多种语言都适合于某项目的开发时,也可考虑选择开发人员比较熟悉的语言考虑选择开发人员比较熟悉的语言6.1.1 6.1.1 选择程序设计语言选择程序设计语言编程规范的格式是写程序入门的基础。编程规范的格式是写程序入门的基础。总的说程序设计风格应从追求总的说程序设计风格应从追求“聪明和技巧聪明和技巧”转为提倡转为提倡“简明和直接简明和直接”。在在The Elements of Programming StyleThe Elements of Programming Style一书中说一书中说明程序正确性、清晰性和效率之间

10、关系可概括为明程序正确性、清晰性和效率之间关系可概括为: : 先求正确后求快; 先求清楚后求快; 求快不忘保持程序正确; 保持程序简单以求快; 书写清晰,不要为效率牺牲清晰6.1.2 6.1.2 编码风格编码风格6.1.2 6.1.2 编码风格编码风格(1 1)源程序文档化)源程序文档化 标识符标识符 注解注解 视觉组织视觉组织a.标识符标识符符号名即标识符,包括符号名即标识符,包括模块名、变量名、模块名、变量名、 常量名、标号名、常量名、标号名、子程序名、子程序名、 数据区名数据区名 以及以及缓冲区名缓冲区名等。等。符号名应能反映它所代表的实体,意义明确。符号名应能反映它所代表的实体,意义明

11、确。 如,如, 表示次数的量用表示次数的量用Times, 表示总量的用表示总量的用Total, 表示平均值的用表示平均值的用Average, 表示和的量用表示和的量用Sum等。等。(1 1)源程序文档化)源程序文档化名字名字应当应当非形式的、精炼的、易记的非形式的、精炼的、易记的,必要时可使用必要时可使用缩写缩写名字,名字,但缩写规则要一致,并且要给每一个名字加但缩写规则要一致,并且要给每一个名字加注释注释。在一个程序中,一个变量只应用于一种用途。在一个程序中,一个变量只应用于一种用途。说明性的名字说明性的名字,应当足够长应当足够长局部变量用短名字局部变量用短名字注意现实中的约定或本地习惯,如

12、注意现实中的约定或本地习惯,如: 指针常用以指针常用以p结尾的变量名结尾的变量名; 全局变量用大写开头的变量名全局变量用大写开头的变量名; 常量完全用大写字母拼写的变量名常量完全用大写字母拼写的变量名;a.标识符标识符(1 1)源程序文档化)源程序文档化函数采用动作性名字函数采用动作性名字 now = date.getTime(); putchar(n); 对返回布尔类型值的函数命名对返回布尔类型值的函数命名,应反映返回值情况应反映返回值情况 if (checkoctal(c) if (isoctal(c)a.标识符标识符(1 1)源程序文档化)源程序文档化注释是不可缺少的注释是不可缺少的,是

13、程序员与程序读者之间通是程序员与程序读者之间通信的重要手段信的重要手段 一些正规的程序文本中,注释行的数量占到整一些正规的程序文本中,注释行的数量占到整个源程序的个源程序的13到到12,甚至更多。,甚至更多。 注释分为注释分为序言序言性注释和性注释和功能功能性注释性注释。(1 1)源程序文档化)源程序文档化b.注释注释序言性注释序言性注释通常置于每个程序模块的开头部分,通常置于每个程序模块的开头部分,给出程序的整给出程序的整体说明体说明,对于理解程序本身具有引导作用。,对于理解程序本身具有引导作用。包括:包括:程序标题;程序标题;有关本模块有关本模块功能功能和和目的目的的说明;的说明;主要算法

14、主要算法;接口说明接口说明: 包括调用形式,参数描述,子程序清单;包括调用形式,参数描述,子程序清单;有关数据描述有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关:重要的变量及其用途,约束或限制条件,以及其它有关信息;信息;给函数和全局数据加注释给函数和全局数据加注释模块位置模块位置:在哪一个源文件中,或隶属于哪一个软件包;:在哪一个源文件中,或隶属于哪一个软件包;开发简历开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。:模块设计者,复审者,复审日期,修改日期及有关说明等。(1 1)源程序文档化)源程序文档化b.注释注释功能性注释功能性注释嵌在源程序体中,用以描述其

15、语句或程序段嵌在源程序体中,用以描述其语句或程序段做什做什么么,而不是怎么做。,而不是怎么做。 例如,例如, /* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNTTOTAL如果把月销售额计入年度总额,下面的写法易理解:如果把月销售额计入年度总额,下面的写法易理解: / /* * ADD MONTHLY-SALES TO ANNUAL-TOTAL ADD MONTHLY-SALES TO ANNUAL-TOTAL * */ / TOTAL = AMOUNT TOTAL = AMOUNTTOTALTOTAL(1 1)源程序文档化)源程序文档化b.注释注释要点要点 描述一

16、段程序,而不是每一个语句;描述一段程序,而不是每一个语句; 用缩进和空行,使程序与注释容易用缩进和空行,使程序与注释容易 区别;区别; 注释要正确注释要正确, ,不要与代码矛盾。不要与代码矛盾。(1 1)源程序文档化)源程序文档化b.注释注释恰当地利用恰当地利用空格空格,可以,可以突出运算的优先性突出运算的优先性,避,避免发生运算的错误免发生运算的错误例如例如 ,将表达式,将表达式 (A17)ANDNOT(B49)ORC 写成写成 (A17) AND NOT (B49) OR C自然的程序段之间可用自然的程序段之间可用空行空行隔开。隔开。(1 1)源程序文档化)源程序文档化c.视觉组织视觉组织

17、 IF() THEN IF() THEN ELSE ENDIF ELSE ENDIF(1 1)源程序文档化)源程序文档化c.视觉组织视觉组织6.1.2 6.1.2 编码风格编码风格在设计阶段已经确定了数据结构的组织及其复杂性。在编在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。写程序时,则需要注意数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下为了使程序中数据说明更易于理解和维护,必须注意以下几点。几点。数据说明的次序应当规范化数据说明的次序应当规范化说明语句中变量安排有序化说明语句中变量安排有序化使用注释说明复杂数据结构使用注释说明复杂

18、数据结构(2 2)数据说明)数据说明数据说明的次序应当规范化数据说明的次序应当规范化: : 常量说明常量说明 简单变量类型说明简单变量类型说明 数组说明数组说明 公用数据块说明公用数据块说明 所有的文件说明所有的文件说明在类型说明中,可按如下顺序排列:在类型说明中,可按如下顺序排列: 整型量说明整型量说明 实型量说明实型量说明 字符量说明字符量说明 逻辑量说明逻辑量说明(2 2)数据说明)数据说明说明语句中变量安排有序化说明语句中变量安排有序化: :当当多个变量名出现在一个说明语句中多个变量名出现在一个说明语句中时,应当将时,应当将这些变量这些变量按字母的顺序排列按字母的顺序排列。intege

19、r size, length, width, cost, price写成写成cost, integer ,length, price , size, width (2 2)数据说明)数据说明使用注释说明复杂数据结构使用注释说明复杂数据结构: :如果数据结构复杂,应当使用注释来说明在程如果数据结构复杂,应当使用注释来说明在程序实现时这个数据结构的固有特点。序实现时这个数据结构的固有特点。如如, 链表结构及用户自定义的数据类型,应当在链表结构及用户自定义的数据类型,应当在注释中做必要的补充说明。注释中做必要的补充说明。(2 2)数据说明)数据说明6.1.2 6.1.2 编码风格编码风格 (3 3)

20、 语句结构语句结构设计期间确定了软件的逻辑结构,然而个别语句的设计期间确定了软件的逻辑结构,然而个别语句的构造却是编写程序的一个主要任务。构造却是编写程序的一个主要任务。构造语句时应该遵循的原则是,每个语句都应该简构造语句时应该遵循的原则是,每个语句都应该简单而直接,不能为了提高效率而使程序变得过分复单而直接,不能为了提高效率而使程序变得过分复杂。杂。 如,一段排序程序如,一段排序程序: 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:=WO

21、RK;END END;由于一行中包括了多个语句,掩盖了程序的循环由于一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性变得很差。结构和条件结构,使其可读性变得很差。(3 3) 语句结构语句结构FOR I:=1 TO N- -1 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;(3 3) 语句结构语句结构(3 3) 语句结构语句结构如如: x +=(xp=(2*k n-m) ? Ck+1:dk-1); 分解为分

22、解为: if (2*k 1) AND (B=0) THEN X : = X / A; IF (A=2) OR (X1) THEN X : = X + 1 END入口入口返回返回A1 and B=0A=2 or X1X=X/AX=X+1sabdceTTFF1234567 选取测试用例:选取测试用例: 程序执行路径为:程序执行路径为:sacbed,预期输出,预期输出X=3 没有分别测试判定表达式中每个没有分别测试判定表达式中每个条件取不同值时的情况条件取不同值时的情况练习:设计左侧伪码程序的语句覆盖用例。练习:设计左侧伪码程序的语句覆盖用例。STARTINPUT(A,B,C)IF A5THEN X

23、=10ELSE X=1END IFIF B10THEN Y=20ELSE Y=1END IFIF C15THEN Z=30ELSE Z=3END IFPRINT(X,Y,Z)STOP因为每个判定表达式为真或为假时均有赋因为每个判定表达式为真或为假时均有赋值语句,为了使得每个语句都至少执行一值语句,为了使得每个语句都至少执行一次,共需要两组测试数据,以便使得每个次,共需要两组测试数据,以便使得每个判定表达式取值为真或为假各一次。判定表达式取值为真或为假各一次。使使3 3个判定表达式的值都为假个判定表达式的值都为假输入:输入:A=1,B=1A=1,B=1,C=1C=1预期输出:预期输出:X=1X=

24、1,Y=2Y=2,Z=3Z=3使使3 3个判定表达式的值都真个判定表达式的值都真输入:输入:A=20,B=40A=20,B=40,C=60C=60预期输出预期输出:X=10X=10,Y=20Y=20,Z=30Z=30又称为分支覆盖:又称为分支覆盖:选取足够的测试选取足够的测试用例,使得程序用例,使得程序中每个判断的可中每个判断的可能结果都至少执能结果都至少执行一次,也就是行一次,也就是说使程序的每个说使程序的每个判断分支至少通判断分支至少通过一次。过一次。 (2 2)判定覆盖)判定覆盖(覆盖覆盖sacbd) (覆盖覆盖sabed) 只覆盖了程序全部路径的一半只覆盖了程序全部路径的一半练习:设计

25、左侧伪码程序的判定覆盖用例。练习:设计左侧伪码程序的判定覆盖用例。STARTINPUT(A,B,C,D)IF (A0) AND (B0)THEN X= A + BELSE X= A - BEND IFIF (CA) OR (D1,B=0,A=2和和X1,执执行路径为行路径为sacbed)II. (满满足足A1,B0,A2和和X1,执行路径为执行路径为sabd) 不一定能够满足判定覆盖不一定能够满足判定覆盖条件覆盖是指:条件覆盖是指:选择足够的测试选择足够的测试用例,使得程序用例,使得程序中每个判定表达中每个判定表达式的每个条件都式的每个条件都取到各种可能的取到各种可能的结果。结果。 (3 3)

26、条件覆盖)条件覆盖使得使得a点出现如下结果:点出现如下结果: 在在b点出现如下结果:点出现如下结果:选取如下测试用例:选取如下测试用例:I. (满足满足A1,B=0,A=2和和X1,执执行路径为行路径为sacbed)II. (满满足足A1,B0,A2和和X1 ,执行路径为执行路径为sabed) 不一定能够满足判定覆盖不一定能够满足判定覆盖选取足够的测试选取足够的测试用例使得同时满用例使得同时满足判定覆盖和条足判定覆盖和条件覆盖的要求。件覆盖的要求。(4 4)判定)判定/ /条件覆盖条件覆盖使得使得a点出现如下结果:点出现如下结果: 在在b点出现如下结果:点出现如下结果:选取如下测试用例:选取如

27、下测试用例:I. (满足满足A1,B=0,A=2和和X1,执执行路径为行路径为sacbed)II. (满满足足A1,B0,A2和和X1,执行路径为执行路径为sabd) 有时,判定有时,判定/ /条件覆盖并不比条件覆盖并不比条件覆盖强条件覆盖强(5 5)条件组合覆盖)条件组合覆盖选取足够的测试选取足够的测试用例,使得每个用例,使得每个判定表达式中条判定表达式中条件的各种可能的件的各种可能的组合都至少出现组合都至少出现一次。一次。 对于上例,共有对于上例,共有8种可能的条件组合:种可能的条件组合: 1)A1,B=0 2)A1,B0 3)A1,B=0 4)A1,B0 5)A=2,X1 6)A=2,X

28、1 7)A2,X1 8)A2,X1 (5 5)条件组合覆盖)条件组合覆盖 对于上例,共有对于上例,共有8种可能的条件组合:种可能的条件组合: 1)A1,B=0 2)A1,B0 3)A1,B=0 4)A1,B0 5)A=2,X1 6)A=2,X1 7)A2,X1 8)A2,X1 选取如下测试用例:选取如下测试用例:I(满足满足1、5组合:组合:A1,B=0,A=2,X1,执行路径执行路径sacbed)II(满足满足2、6组合:组合:A1,B0,A=2,X1,执行路径执行路径sabed)III(满满足足3、7组合:组合:A1,B=0,A2,X1,执行路径执行路径sabed)IV(满满足足4、8组合

29、:组合:A1,B0,A2,X1,执行路径执行路径sabd)不一定每条路径都覆盖不一定每条路径都覆盖练习:设计左侧伪码程序的条件组合覆盖练习:设计左侧伪码程序的条件组合覆盖用例。用例。STARTINPUT(A,B,C,D)IF (A0) AND (B0)THEN X= A + BELSE X= A - BEND IFIF (CA) OR (D01 A0,B0B02 A02 A0,B B03 A3 A0,B04 A4 A0,B05 CA,DA,DA,D6 CA,D B7 C7 CA,D BA,D5THEN X=10ELSE X=1END IFIF B10THEN Y=20ELSE Y=2END I

30、FIF C15THEN Z=30ELSE Z=3END IFPRINT(X,Y,Z)STOP本程序共有本程序共有8 8条执行通路,为做到路径覆条执行通路,为做到路径覆盖共需要盖共需要8 8组测试数据。组测试数据。三个判定条件的值都为假三个判定条件的值都为假输入:输入:A=1,B=1A=1,B=1,C=1C=1预期输出:预期输出:X=1X=1,Y=2Y=2,Z=3Z=3三个判定条件的值依次为假、假、真三个判定条件的值依次为假、假、真输入输入:A=1,B=1A=1,B=1,C=60C=60预期输出:预期输出:X=1X=1,Y=2Y=2,Z=30Z=30三个判定条件的值依次为假、真、假三个判定条件的

31、值依次为假、真、假输入:输入:A=1,B=40A=1,B=40,C=1C=1预期输出:预期输出:X=1X=1,Y=20Y=20,Z=3Z=3练习:设计左侧伪码程序的路径覆盖用例。练习:设计左侧伪码程序的路径覆盖用例。STARTINPUT(A,B,C)IF A5THEN X=10ELSE X=1END IFIF B10THEN Y=20ELSE Y=2END IFIF C15THEN Z=30ELSE Z=3END IFPRINT(X,Y,Z)STOP三个判定条件的值依次为假、真、真三个判定条件的值依次为假、真、真输入输入:A=1,B=40A=1,B=40,C=90C=90预期输出:预期输出:X

32、=1X=1,Y=20Y=20,Z=30Z=30三个判定条件的值依次为真、假、假三个判定条件的值依次为真、假、假输入输入:A=20,B=1A=20,B=1,C=1C=1预期输出:预期输出:X=10X=10,Y=2Y=2,Z=3Z=3三个判定条件的值依次为真、假、真三个判定条件的值依次为真、假、真输入:输入:A=20,B=1A=20,B=1,C=60C=60预期输出:预期输出:X=10X=10,Y=2Y=2,Z=30Z=30练习:设计左侧伪码程序的路径覆盖用例。练习:设计左侧伪码程序的路径覆盖用例。STARTINPUT(A,B,C)IF A5THEN X=10ELSE X=1END IFIF B1

33、0THEN Y=20ELSE Y=1END IFIF C15THEN Z=30ELSE Z=3END IFPRINT(X,Y,Z)STOP三个判定条件的值依次为真、真、假三个判定条件的值依次为真、真、假输入输入:A=20,B=40A=20,B=40,C=1C=1预期输出:预期输出:X=10X=10,Y=20Y=20,Z=3Z=3三个判定条件的值全为真三个判定条件的值全为真输入:输入:A=20,B=40A=20,B=40,C=60C=60预期预期输出:输出:X=10X=10,Y=20Y=20,Z=30Z=30提纲提纲白盒测试白盒测试技术技术黑盒测试黑盒测试技术技术调试调试软件可靠软件可靠性性6.

34、7 6.7 黑盒测试技术黑盒测试技术力图发力图发现如下现如下类型的类型的错误错误功能不正确或遗漏了功能;功能不正确或遗漏了功能;界面错误;界面错误; 数据结构错误或外部数据库访问错误;数据结构错误或外部数据库访问错误;性能错误;性能错误;初始化和终止错误初始化和终止错误。测试方测试方案考虑案考虑问题问题(1 1) 怎样测试功能的有效性?怎样测试功能的有效性?(2 2) 哪些类型的输入可构成好测试用例?哪些类型的输入可构成好测试用例?(3 3) 系统是否对特定的输入值特别敏感?系统是否对特定的输入值特别敏感?(4 4) 怎样划定数据类的边界?怎样划定数据类的边界?(5 5) 系统能够承受什么样的

35、数据率和数据量?系统能够承受什么样的数据率和数据量?(6 6) 数据的特定组合将对系统运行产生什么影响?数据的特定组合将对系统运行产生什么影响?6.7 6.7 黑盒测试技术黑盒测试技术测试用测试用例满足例满足条件条件(1 1) 所设计出的测试用例能够减少为达到合理测试所设计出的测试用例能够减少为达到合理测试所需要设计的测试用例的总数;所需要设计的测试用例的总数;(2 2) 所设计出的测试用例能够告诉我们,是否存在所设计出的测试用例能够告诉我们,是否存在某些类型的错误,而不是仅仅指出与特定测试相关的某些类型的错误,而不是仅仅指出与特定测试相关的错误是否存在。错误是否存在。常用常用方法方法等价等价

36、划分划分边界值边界值分析分析错误错误推测推测6.7.1 6.7.1 等价划分等价划分等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。一个理想的测试用例能独自若干个数据类,据此导出测试用例。一个理想的测试用例能独自发现一类错误。发现一类错误。等价类划分的思想等价类划分的思想:如果将所有可能的输入数据(有效的和无效的)划分为若干个如果将所有可能的输入数据(有效的和无效的)划分为若干个等价类,就可以假定用每一个等价类中的代表值作为测试用例等价类,就可以假定用每一个等价类中的代表值作为测试用例来进行测试时,

37、等价于用该类中所有值进行了测试。因此,可来进行测试时,等价于用该类中所有值进行了测试。因此,可以从每个等价类中只取一组数据作为测试数据。以从每个等价类中只取一组数据作为测试数据。等价类划分的步骤等价类划分的步骤:划分输入数据的等价类(有效、无效),并进一步设计测试用划分输入数据的等价类(有效、无效),并进一步设计测试用例例6.7.1 6.7.1 等价划分等价划分等价类划分的启发性规则等价类划分的启发性规则(1 1) 如果规定了输入值的范围,则可划分出一个有效的等如果规定了输入值的范围,则可划分出一个有效的等价类价类( (输入值在此范围内输入值在此范围内) ),两个无效的等价类,两个无效的等价类

38、( (输入值小于最输入值小于最小值或大于最大值小值或大于最大值) );(2 2) 如果规定了输入数据的个数,则类似地也可以划分出如果规定了输入数据的个数,则类似地也可以划分出一个有效的等价类和两个无效的等价类;一个有效的等价类和两个无效的等价类;(3 3) 如果规定了输入数据的一组值,而且程序对不同输入如果规定了输入数据的一组值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个有效的等价类,值做不同处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类此外还有一个无效的等价类( (任一个不允许的输入值任一个不允许的输入值) );6.7.1 6.7.1 等价划分等价划分等价

39、类划分的启发性规则等价类划分的启发性规则(4 4) 如果规定了输入数据必须遵循的规则,则可以划分出如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类一个有效的等价类( (符合规则符合规则) )和若干个无效的等价类和若干个无效的等价类( (从各种从各种不同角度违反规则不同角度违反规则) );(5 5) 如果规定了输入数据为整型,则可以划分出正整数、如果规定了输入数据为整型,则可以划分出正整数、零和负整数等零和负整数等3 3个有效类;个有效类;(6 6) 如果程序的处理对象是表格,则应该使用空表,以及如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。含一项或多项的表。A给

40、每个等价类规定一个唯一的编号;给每个等价类规定一个唯一的编号;B设计一个新的测试用例,使其尽可能多地覆盖未被覆盖过设计一个新的测试用例,使其尽可能多地覆盖未被覆盖过的有效等价类。重复此步,直至所有有效等价类被覆盖;的有效等价类。重复此步,直至所有有效等价类被覆盖;C设计一个新的测试用例,使其覆盖而且只覆盖一个尚未被设计一个新的测试用例,使其覆盖而且只覆盖一个尚未被覆盖的无效等价类。重复此步,直到所有无效等价类被覆盖。覆盖的无效等价类。重复此步,直到所有无效等价类被覆盖。通常程序发现一类错误后,就报出错信息,不再检查其它类通常程序发现一类错误后,就报出错信息,不再检查其它类错误,所以设计测试用例

41、时,一次只覆盖一个无效等价类。错误,所以设计测试用例时,一次只覆盖一个无效等价类。6.7.1 6.7.1 等价划分等价划分确定测试用例的步骤确定测试用例的步骤实例:一个把数字串变成整数的函数。实例:一个把数字串变成整数的函数。 计算机字长:计算机字长:16 bits ,函数由函数由PASCAL语言编写。语言编写。 function strtoint ( dstr: shortstr ): integer type shortstr = array1.6 of char; /字符串字符串6位位/被处理的数字串是右对齐的,也就是说,如果数字串比被处理的数字串是右对齐的,也就是说,如果数字串比6个字

42、符短,则在个字符短,则在它的左边补空格。如果数字串是负的,则负号和最高位数字紧相邻它的左边补空格。如果数字串是负的,则负号和最高位数字紧相邻(负号负号在最高位数字左边一位在最高位数字左边一位) (16位字长能表示的整型数范围是位字长能表示的整型数范围是-215, 215-1,即,即-32768, 32767 )6.7.1 6.7.1 等价划分等价划分考虑到考虑到Pascal编译程序固有的检错功能,测试时不需要使用长编译程序固有的检错功能,测试时不需要使用长度不等于度不等于6的数组作实在参数,更不需要使用任何非字符数组的数组作实在参数,更不需要使用任何非字符数组类型的实在参数。类型的实在参数。有

43、效输入的等价类有:有效输入的等价类有:(1)16个数字字符组成的数字串(最高位数字不为零);个数字字符组成的数字串(最高位数字不为零); 如:如: 0 , 999999 (2)最高位数字是零的数字串;)最高位数字是零的数字串; 如:如:“012345”(3)最高位数字左邻是负号的数字串;)最高位数字左邻是负号的数字串; 如:如:“12345”6.7.1 6.7.1 等价划分等价划分无效输入的等价类有:无效输入的等价类有:(4)空字符串(全是空格);如)空字符串(全是空格);如“ ”;(5)左部填充的字符既不是零,又不是空格;)左部填充的字符既不是零,又不是空格; 如:如:“A12345”(6)

44、最高位数字右面由数字和空格混合而成;最高位数字右面由数字和空格混合而成; 如:如:“123 45”(7)最高位数字右面由数字和其他字符混合而成;)最高位数字右面由数字和其他字符混合而成; 如:如:“12A345”(8)负号与最高位数字之间有空格;负号与最高位数字之间有空格; 如:如:“- 1234”6.7.1 6.7.1 等价划分等价划分合法输出的等价类有:合法输出的等价类有:(9)在计算机能表示的最小负整数和零之间的负整数;)在计算机能表示的最小负整数和零之间的负整数; 如:如: -32768 , 0 )(10)零;)零;(11)在零和计算机能表示的最大正整数之间的正整数;)在零和计算机能表

45、示的最大正整数之间的正整数; 如:如: (0 , 32767 非法输出的等价类有:非法输出的等价类有:(12)比计算机能表示的最小负整数还小的负整数;)比计算机能表示的最小负整数还小的负整数; 如:如:“32769”(13)比计算机能表示的最大正整数还大的正整数;)比计算机能表示的最大正整数还大的正整数; 如:如:“123456”6.7.1 6.7.1 等价划分等价划分根据划分的等价类,设计出测试方案根据划分的等价类,设计出测试方案11个:个:(1)16个数字组成的字符串;个数字组成的字符串; 输入:输入: 1 预期的输出:预期的输出:1(2)最高位数字是零的数字串;最高位数字是零的数字串;

46、输入:输入:000001 预期的输出:预期的输出:1(3)负号与最高位数字相邻;)负号与最高位数字相邻; 输入:输入:00001 预期的输出:预期的输出:16.7.1 6.7.1 等价划分等价划分(4)最高位数字是零的特例;)最高位数字是零的特例; 输入:输入:000000 预期的输出:预期的输出:0(5)太小的负整数;)太小的负整数; 输入:输入:47561 预期的输出:错误无效输入预期的输出:错误无效输入(6)太大的正整数;)太大的正整数; 输入:输入:132767 预期的输出:错误无效输入预期的输出:错误无效输入6.7.1 6.7.1 等价划分等价划分(7)空字符串;)空字符串; 输入:

47、输入: 预期的输出:错误没有数字预期的输出:错误没有数字(8)字符串左部字符既不是零又不是空格;)字符串左部字符既不是零又不是空格; 输入:输入:AAAAA1 预期的输出:错误非数字预期的输出:错误非数字(9)最高位数字后面有空格;)最高位数字后面有空格; 输入:输入:1 2 预期的输出:错误无效输入预期的输出:错误无效输入6.7.1 6.7.1 等价划分等价划分(10)最高位数字后面有其他字符;)最高位数字后面有其他字符; 输入:输入:1AAA23 预期的输出:错误无效输入预期的输出:错误无效输入(11)负号和最高位数字之间有空格;负号和最高位数字之间有空格; 输入:输入: 12 预期的输出

48、:错误负号位置错。预期的输出:错误负号位置错。6.7.1 6.7.1 等价划分等价划分练习:练习:某报表处理系统要求用户输入处理报表的日期,日某报表处理系统要求用户输入处理报表的日期,日期限制在期限制在20052005年年1 1月至月至20092009年年1212月,即系统只能对该段期间月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的误信息。系统日期规定由年、月的6 6位数字字符组成,前四位数字字符组成,前四位代表年,后两位代表月。位代表年,后两位代表月。 如何用等价类划分法设计测试用例如

49、何用等价类划分法设计测试用例, ,来测试程序的日期来测试程序的日期检查功能?检查功能?第一步:等价类划分第一步:等价类划分第二步:为有效等价类设计测试用例。(多个有效等价类第二步:为有效等价类设计测试用例。(多个有效等价类可使用一个测试用例)可使用一个测试用例)第三步:为每一个无效等价类设至少设计一个测试用例第三步:为每一个无效等价类设至少设计一个测试用例第一步:等价类划分第一步:等价类划分输入等价类输入等价类 有效等价类有效等价类 无效等价类无效等价类 报表日期的报表日期的类型及长度类型及长度6位数字字符位数字字符(1)有非数字字符有非数字字符 (4)少于少于6个数字字符个数字字符 (5)多

50、于多于6个数字字符个数字字符 (6)年份范围年份范围在在20052009之间之间 (2)小于小于2005 (7)大于大于2009 (8)月份范围月份范围在在112之间之间(3)“报表日期报表日期”输入条件的等价类表输入条件的等价类表小于小于1 (9)大于大于12 (10)第二步:为有效等价类设计测试用例对表中编号为第二步:为有效等价类设计测试用例对表中编号为1 1,2 2,3 3的的3 3个有效等价类用一个测试用例覆盖:个有效等价类用一个测试用例覆盖: 测试数据 期望结果 覆盖范围200705等价类等价类(1)(2)(3)输入有效输入有效第三步:为每一个无效等价类设至少设计一个测试用例第三步:

51、为每一个无效等价类设至少设计一个测试用例 测试数据测试数据 期望结果期望结果 覆盖范围覆盖范围001MAY等价类等价类(4)输入无效输入无效20065等价类等价类(5)输入无效输入无效2007005等价类等价类(6)输入无效输入无效200405等价类等价类(7)输入无效输入无效201005等价类等价类(8)输入无效输入无效200800等价类等价类(9)输入无效输入无效200613等价类等价类(10)输入无效输入无效程序通常在处理边缘情况时容易出现错误,如等价类与等价类程序通常在处理边缘情况时容易出现错误,如等价类与等价类之间的边界值。之间的边界值。所以在设计测试用例时,使用正好等于、正好大于、

52、正好小于所以在设计测试用例时,使用正好等于、正好大于、正好小于边界值的数据进行测试,发现程序错误的概率较大。边界值的数据进行测试,发现程序错误的概率较大。 边界值分析测试法属黑盒测试。在实际设计测试方案时,常常边界值分析测试法属黑盒测试。在实际设计测试方案时,常常结合使用等价划分和边界值分析两种技术,把一些等价类的边结合使用等价划分和边界值分析两种技术,把一些等价类的边界值作为测试用例进行测试。界值作为测试用例进行测试。6.7.2 6.7.2 边界值分析边界值分析上例中设计了上例中设计了11个测试用例,还应该用边界值分析补充测试个测试用例,还应该用边界值分析补充测试用例:用例:(12)使输出刚

53、好等于最小负整数;)使输出刚好等于最小负整数; 输入:输入:32768 预期的输出:预期的输出:32768(13)使输出刚好等于最大的正整数;)使输出刚好等于最大的正整数; 输入:输入: 32767 预期的输出:预期的输出:327676.7.2 6.7.2 边界值分析边界值分析(14)使输出刚刚小于最小的负整数;)使输出刚刚小于最小的负整数; 输入:输入:32769 预期的输出:错误无效输入预期的输出:错误无效输入(15)使输出刚刚大于最大正整数;)使输出刚刚大于最大正整数; 输入:输入: 32768 预期的输出:错误无效输入预期的输出:错误无效输入6.7.2 6.7.2 边界值分析边界值分析

54、错误推测法在很大程度上靠直觉和经验进行。错误推测法在很大程度上靠直觉和经验进行。基本思想:列举出程序中可能的错误和容易发生错误的特殊情基本思想:列举出程序中可能的错误和容易发生错误的特殊情况,且根据它们选择测试方案。况,且根据它们选择测试方案。如:输入、输出为如:输入、输出为0时容易出错;输出记录为时容易出错;输出记录为0条时容易出错;条时容易出错;等等。等等。6.7.3 6.7.3 错误推断错误推断对软件系统进行实际测试时,应该联合使用各种设计测试对软件系统进行实际测试时,应该联合使用各种设计测试方案的方法,形成一种综合策略。具体可以使用如下策略:方案的方法,形成一种综合策略。具体可以使用如

55、下策略: 1)在任何情况下都应该进行边界值分析;)在任何情况下都应该进行边界值分析; 2)必要时用等价划分法补充测试方案;)必要时用等价划分法补充测试方案;3)必要时再用错误推测法补充测试方案;)必要时再用错误推测法补充测试方案;4)对照程序逻辑,检查已经设计出的测试方案。可以根据)对照程序逻辑,检查已经设计出的测试方案。可以根据对程序可靠性的要求采用不同的逻辑覆盖标准。对程序可靠性的要求采用不同的逻辑覆盖标准。6.7.4 6.7.4 实用测试策略实用测试策略 实例实例:程序:程序TRIANGLE读入三个整数值,这三个读入三个整数值,这三个整数代表同一个三角形三条边的长度,程序根据这三整数代表

56、同一个三角形三条边的长度,程序根据这三个值判断三角形属于不等边、等腰或是等边三角形。个值判断三角形属于不等边、等腰或是等边三角形。 6.7.4 6.7.4 实用测试策略实用测试策略开始开始停止停止AB+CBA+CCA+BA=BA=CB=CB=C输出:等边三输出:等边三角形角形输出:不等边输出:不等边三角形三角形输出:等腰三输出:等腰三角形角形输出:不是三输出:不是三角形角形abcdefghijklmnop12345678910111213141516171819202122TFTFTFTTFFFTTF 综合使用边界值分析、等价值划分和错误推测等综合使用边界值分析、等价值划分和错误推测等技术,可

57、以设计出技术,可以设计出10种应该测试的情况:种应该测试的情况: (1)正常的等边三角形)正常的等边三角形;(2)正常的等腰三角形,包括两条相等边的三种不)正常的等腰三角形,包括两条相等边的三种不同排列方法同排列方法;(3)正常的不等边三角形)正常的不等边三角形;(4)三条边不能构成三角形(即两边之和小于第三)三条边不能构成三角形(即两边之和小于第三边),包括三种不同排列方法;边),包括三种不同排列方法;(5)退化的三角形(即两边的和等于第三边),包)退化的三角形(即两边的和等于第三边),包括三种不同排列方法;括三种不同排列方法;(6)零数据)零数据一条边的长度为零,包括三种不同的排列方法;一

58、条边的长度为零,包括三种不同的排列方法;两条边的长度为零,包括三种不同的排列方法;两条边的长度为零,包括三种不同的排列方法;三条边的长度全为零;三条边的长度全为零;(7)输入数据中包含负整数;)输入数据中包含负整数;(8)遗留数据,输入数据不全(不足三个正整数);)遗留数据,输入数据不全(不足三个正整数);(9)无效输入,输入数据中包含非整数型的数据;)无效输入,输入数据中包含非整数型的数据;(10)边界值)边界值程序程序TRIANGLETRIANGLE的测试数据的测试数据测试功能测试功能测试数据测试数据abc1.等边等边2.等腰等腰3.不等边不等边4.非三角形非三角形5.退化情况退化情况6.

59、零数据零数据10,10,1010,10,178,10,1210,10,2110,5,50,0,00,0,170,10,12,10,17,108,12,1010,21,105,10,5,0,17,012,0,10,17,10,1010,12,821,10,105,5,10,17,0,012,10,0测试功能测试功能测试数据测试数据abc7.负数据负数据8.遗留数据遗留数据9.无效输入无效输入10.边界值边界值-10,-10,-10-10,-10,17-8,10,17,10, ,8,10, A,B,C=,+,*8,10,A7E3 , 10.5 , A32767,32766,8-32768,8,32

60、766-32768,8,-32769,-10,17,-1017,-8,10,10,8,10, ,8,A,1010.5, 7E3, A32766,8,3276732768,8,-327698,-32767,-32768,17,-10,-1010,17,-8,10,8,10,A,10,8A , 10.5, 7E332768,8,32767-32769,8,32767-32767,8,-32769 最后,检查测试数据的覆盖程度,通常应该做最后,检查测试数据的覆盖程度,通常应该做到边覆盖。到边覆盖。 测试数据覆盖程度检验表中列出的四种测试数测试数据覆盖程度检验表中列出的四种测试数据已经做到了边覆盖(覆

温馨提示

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

评论

0/150

提交评论