软件工程课件教案7_实现

上传人:鲁** 文档编号:570055266 上传时间:2024-08-01 格式:PPT 页数:231 大小:1.63MB
返回 下载 相关 举报
软件工程课件教案7_实现_第1页
第1页 / 共231页
软件工程课件教案7_实现_第2页
第2页 / 共231页
软件工程课件教案7_实现_第3页
第3页 / 共231页
软件工程课件教案7_实现_第4页
第4页 / 共231页
软件工程课件教案7_实现_第5页
第5页 / 共231页
点击查看更多>>
资源描述

《软件工程课件教案7_实现》由会员分享,可在线阅读,更多相关《软件工程课件教案7_实现(231页珍藏版)》请在金锄头文库上搜索。

1、l教学目标教学目标 了解程序设计语言对编码的重要性,掌握软了解程序设计语言对编码的重要性,掌握软件测试的基础知识件测试的基础知识l教学重点教学重点 各种软件测试方法及其特性及使用场景各种软件测试方法及其特性及使用场景l教学难点教学难点 黑盒测试、白盒测试黑盒测试、白盒测试第7章实现通常把编码和测试统称为实现。通常把编码和测试统称为实现。程程序序的的质质量量主主要要取取决决于于软软件件设设计计的的质质量量, ,但但是是,所所选选用用的的程程序序设设计计语语言言的的特特点点及及编编码码风风格格也也将将对对程程序序的的可可靠靠性性、可可读读性性、可可测测试试性性和和可可维维护护性性产产生深远的影响。

2、生深远的影响。测测试试的的目目的的就就是是在在软软件件投投入入生生产产性性运运行行之之前前,尽尽可可能能多多地地发发现现软软件件中中的的错错误误。目目前前软软件件测测试试仍仍然然是是保保证证软软件件质质量量的的关关键键步步骤骤,它它是是对对软软件件规规格格说明、设计和编码的最后复审。说明、设计和编码的最后复审。第7章实现软软件件测测试试在在软软件件生生命命周周期期中中横横跨跨两两个个阶阶段段。通通常常在在编编写写出出每每个个模模块块之之后后就就对对它它做做必必要要的的测测试试( (称称为为单单元元测测试试) ),模模块块的的编编写写者者和和测测试试者者是是同同一一个个人人,编编码码和和单单元元

3、测测试试属属于于软软件件生生命命周周期期的的同同一一个阶段。个阶段。在在这这个个阶阶段段结结束束之之后后,对对软软件件系系统统还还应应该该进进行行各各种种综综合合测测试试,这这是是软软件件生生命命周周期期中中的的另另一一个个独独立的阶段,通常由专门的测试人员承担这项工作。立的阶段,通常由专门的测试人员承担这项工作。第7章实现大大量量统统计计资资料料表表明明,软软件件测测试试的的工工作作量量往往往往占占软件开发总工作量的软件开发总工作量的40%40%以上以上. .在在极极端端情情况况,测测试试那那种种关关系系人人的的生生命命安安全全的的软软件件所所花花费费的的成成本本,可可能能相相当当于于软软件

4、件工工程程其其他他开开发发步骤总成本的步骤总成本的3 3倍到倍到5 5倍。倍。通通过过测测试试发发现现错错误误之之后后还还必必须须诊诊断断并并改改正正错错误误,这这就就是是调调试试的的目目的的。调调试试是是测测试试阶阶段段最最困困难难的的工工作。作。第7章实现第第7章章 实现实现l7.1 编码编码l7.2 软件测试基础软件测试基础l 单元测试单元测试l7.4 集成测试集成测试l 确认测试确认测试l 软件测试方法软件测试方法l 小结与作业小结与作业7.1 编码编码7.1.1选择程序设计语言程序设计语言是的特点会影响人的思维和解题程序设计语言是的特点会影响人的思维和解题方式,会影响人和计算机通信的

5、方式和质量,也方式,会影响人和计算机通信的方式和质量,也会影响其他人阅读和理解程序的难易程度。会影响其他人阅读和理解程序的难易程度。编码之前的选择一种适当的程序设计语言是一编码之前的选择一种适当的程序设计语言是一项重要工作。项重要工作。高级语言明显优于汇编语言,在需要效率的某高级语言明显优于汇编语言,在需要效率的某些场合,需要汇编语言,或者大型系统中执行时些场合,需要汇编语言,或者大型系统中执行时间非常关键的间非常关键的( (或直接依赖于硬件的或直接依赖于硬件的) )一小部分代一小部分代码需要用汇编语言书写之外,其他程序应该一律码需要用汇编语言书写之外,其他程序应该一律用高级语言书写。用高级语

6、言书写。有理想的模块化机制,以及可读性好的控制结有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,序中的错误;为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。选用的高级语言应该有良好的独立编译机制。7.1.1选择程序设计语言n n机器语言,几乎不使用。机器语言,几乎不使用。n n汇编语言,特殊场合使用。汇编语言,特殊场合使用。n n高级语言,明显优于汇编语言。高级语言,明

7、显优于汇编语言。 7.1.1选择程序设计语言程序设计语言的划代:程序设计语言的划代: 划代划代语言言特点特点级别1GL机器机器语言言程序不直程序不直观,编程出程出错率高率高运行效率高运行效率高低低级2GL汇编语言言比机器比机器语言直言直观,减少了出,减少了出错率率与机器与机器码一一样长特殊情况下才使用特殊情况下才使用3GLBASICPASCALC、C+等等利用利用类英英语的的语句和命令句和命令一条一条语句相当于句相当于5-10条机器条机器码要要规定定详细的算法的算法过程程高高级4GL数据数据库查询语言言程序生成器程序生成器图形形语言言与自然与自然语言接近言接近一条一条语句相当于句相当于30-5

8、0条机器条机器码非非过程化程化问题定定义运行开运行开销大,效率低大,效率低(1) (1) 系统用户的要求。如果所开发的系统由用户系统用户的要求。如果所开发的系统由用户负责维护,用户通常要求用他们熟悉的语言书写程负责维护,用户通常要求用他们熟悉的语言书写程序。序。(2) (2) 可以使用的编译程序。运行目标系统的环境可以使用的编译程序。运行目标系统的环境中可以提供的编译程序往往限制了可以选用的语言中可以提供的编译程序往往限制了可以选用的语言的范围。的范围。(3) (3) 可以得到的软件工具。如果某种语言有支持可以得到的软件工具。如果某种语言有支持程序开发的软件工具可以利用,则目标系统的实现程序开

9、发的软件工具可以利用,则目标系统的实现和验证都变得比较容易。和验证都变得比较容易。(4) (4) 工程规模。如果工程规模很庞大,现有的语工程规模。如果工程规模很庞大,现有的语言又不完全适用,那么设计并实现一种供这个工程言又不完全适用,那么设计并实现一种供这个工程项目专用的程序设计语言,可能是一个正确的选择。项目专用的程序设计语言,可能是一个正确的选择。选择语言的主要实现标准(5) (5) 程序员的知识。虽然对于有经验的程序员来程序员的知识。虽然对于有经验的程序员来说,学习一种新语言并不困难,但是要完全掌握一说,学习一种新语言并不困难,但是要完全掌握一种新语言却需要实践。如果和其他标准不矛盾,那

10、种新语言却需要实践。如果和其他标准不矛盾,那么应该选择一种已经为程序员所熟悉的语言。么应该选择一种已经为程序员所熟悉的语言。(6) (6) 软件可移植性要求。如果目标系统将在几台软件可移植性要求。如果目标系统将在几台不同的计算机上运行,或者预期的使用寿命很长,不同的计算机上运行,或者预期的使用寿命很长,那么选择一种标准化程度高、程序可移植性好的语那么选择一种标准化程度高、程序可移植性好的语言就是很重要的。言就是很重要的。(7) (7) 软件的应用领域。所谓的通用程序设计语言软件的应用领域。所谓的通用程序设计语言实际上并不是对所有应用领域都同样适用。因此,实际上并不是对所有应用领域都同样适用。因

11、此,选择语言时应该充分考虑目标系统的应用范围。选择语言时应该充分考虑目标系统的应用范围。7.1.1选择程序设计语言源程序代码的逻辑简明清晰、易读易懂应该遵源程序代码的逻辑简明清晰、易读易懂应该遵循下述规则:循下述规则:1.1.程序内部的文档程序内部的文档包括恰当的标识符、适当的注解和程序的视觉包括恰当的标识符、适当的注解和程序的视觉组织等等。组织等等。选取含义鲜明的名字,使它能正确地提示程序选取含义鲜明的名字,使它能正确地提示程序对象所代表的实体,这对于帮助阅读者理解程序对象所代表的实体,这对于帮助阅读者理解程序是很重要的。如果使用缩写,那么缩写规则应该是很重要的。如果使用缩写,那么缩写规则应

12、该一致,并且应该给每个名字加注解。一致,并且应该给每个名字加注解。7.1.2编码风格注解非常有助于对程序的理解。注解非常有助于对程序的理解。每个模块开始处有序言性的注解:简要描述模每个模块开始处有序言性的注解:简要描述模块的功能、主要算法、接口特点、重要数据以及块的功能、主要算法、接口特点、重要数据以及开发简史;开发简史;程序中间与一段程序代码有关的注解:主要解程序中间与一段程序代码有关的注解:主要解释包含这段代码的必要性。释包含这段代码的必要性。不能滥用注释,应利用注解提供一些额外的信不能滥用注释,应利用注解提供一些额外的信息。注解的内容一定要正确。息。注解的内容一定要正确。程序清单的布局对

13、于程序的可读性也有很大影程序清单的布局对于程序的可读性也有很大影响,应该利用适当的阶梯形式使程序的层次结构响,应该利用适当的阶梯形式使程序的层次结构清晰明显。清晰明显。7.1.2编码风格2.2.数据说明数据说明数据说明的次序应该标准化。有次序就容易查数据说明的次序应该标准化。有次序就容易查阅,因此能够加速测试、调试和维护的过程。阅,因此能够加速测试、调试和维护的过程。当多个变量名在一个语句中说明时,应该按字当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。母顺序排列这些变量。如果设计时使用了一个复杂的数据结构,则应如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现

14、这个数据结构该用注解说明用程序设计语言实现这个数据结构的方法和特点。的方法和特点。7.1.2编码风格3. 3. 语句构造语句构造构造语句时应该遵循的原则是,每个语句都应构造语句时应该遵循的原则是,每个语句都应该简单而直接,不能为了提高效率而使程序变得该简单而直接,不能为了提高效率而使程序变得过分复杂。下述规则有助于使语句简单明了:过分复杂。下述规则有助于使语句简单明了:不要为了节省空间而把多个语句写在同一行;不要为了节省空间而把多个语句写在同一行;尽量避免复杂的条件测试;尽量避免复杂的条件测试;尽量减少对尽量减少对“非非”条件的测试;条件的测试;避免大量使用循环嵌套和条件嵌套;避免大量使用循环

15、嵌套和条件嵌套;利用括号使逻辑表达式或算术表达式的运算次利用括号使逻辑表达式或算术表达式的运算次序清晰直观。序清晰直观。7.1.2编码风格4. 4. 输入输出输入输出在设计和编写程序时应该考虑下述有关输入输出风格的在设计和编写程序时应该考虑下述有关输入输出风格的规则:规则:对所有输入数据都进行检验;对所有输入数据都进行检验;检查输入项重要组合的合法性;检查输入项重要组合的合法性;保持输入格式简单;保持输入格式简单;使用数据结束标记,不要要求用户指定数据的数目;使用数据结束标记,不要要求用户指定数据的数目;明确提示交互式输入的请求,详细说明可用的选择或边明确提示交互式输入的请求,详细说明可用的选

16、择或边界数值;界数值;当程序设计语言对格式有严格要求时,应保持输入格式当程序设计语言对格式有严格要求时,应保持输入格式一致;一致;设计良好的输出报表;设计良好的输出报表;给所有输出数据加标志。给所有输出数据加标志。7.1.2编码风格5. 5. 效率效率效率主要指处理机时间和存储器容量两个方面。效率主要指处理机时间和存储器容量两个方面。应该清晰应该清晰3 3条概念:条概念:首先,效率是性能要求,因此应该在需求分析阶段确定首先,效率是性能要求,因此应该在需求分析阶段确定效率方面的要求。软件应该像对它要求的那样有效,而不效率方面的要求。软件应该像对它要求的那样有效,而不应该如同人类可能做到的那样有效

17、(应该如同人类可能做到的那样有效(需求分析相关需求分析相关););其次,效率是靠好设计来提高的(其次,效率是靠好设计来提高的(设计相关设计相关););第三,程序的效率和程序的简单程度是一致的,不要牺第三,程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率(牲程序的清晰性和可读性来不必要地提高效率(效率不是效率不是第一位的第一位的)。)。下面从三个方面进一步讨论效率问题。下面从三个方面进一步讨论效率问题。7.1.2编码风格(1)程序运行时间程序运行时间详细设计确定的算法的效率决定系统的效率。详细设计确定的算法的效率决定系统的效率。程序的风格也能对程序的执行速度和存

18、储器要程序的风格也能对程序的执行速度和存储器要求产生影响。求产生影响。为此应当知道下述规则:为此应当知道下述规则:写程序之前先简化算术的和逻辑的表达式;写程序之前先简化算术的和逻辑的表达式;仔细研究嵌套的循环,以确定是否有语句可以仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;从内层往外移;尽量避免使用多维数组;尽量避免使用多维数组;尽量避免使用指针和复杂的表;尽量避免使用指针和复杂的表;7.1.2编码风格 使用执行时间短的算术运算;使用执行时间短的算术运算; 不要混合使用不同的数据类型不要混合使用不同的数据类型;尽量使用整数运算和布尔表达式。尽量使用整数运算和布尔表达式。在效率是决定性

19、因素的应用领域,尽量使用有在效率是决定性因素的应用领域,尽量使用有良好优化特性的编译程序,以自动生成高效目标良好优化特性的编译程序,以自动生成高效目标代码。代码。7.1.2编码风格(2)存储器效率存储器效率在大型计算机中必须考虑操作系统页式调度的在大型计算机中必须考虑操作系统页式调度的特点,一般说来,使用能保持功能域的结构化控特点,一般说来,使用能保持功能域的结构化控制结构,是提高效率的好方法。制结构,是提高效率的好方法。在微处理机中如果要求使用最少的存储单元,在微处理机中如果要求使用最少的存储单元,则应选用有紧缩存储器特性的编译程序,在非常则应选用有紧缩存储器特性的编译程序,在非常必要时可以

20、使用汇编语言。必要时可以使用汇编语言。提高执行效率的技术通常也能提高存储器效率。提高执行效率的技术通常也能提高存储器效率。提高存储器效率的关键同样是提高存储器效率的关键同样是“简单简单”。7.1.2编码风格7.1.2编码风格(3) (3) 输入输出的效率输入输出的效率硬件之间的通信效率是很复杂的问题,但是,从写硬件之间的通信效率是很复杂的问题,但是,从写程序的角度看,却有些简单的原则可以提高输入输程序的角度看,却有些简单的原则可以提高输入输出的效率。例如:出的效率。例如:所有输入输出都应该有缓冲,以减少用于通信的额所有输入输出都应该有缓冲,以减少用于通信的额外开销;外开销;对二级存储器对二级存

21、储器( (如磁盘如磁盘) )应选用最简单的访问方法;应选用最简单的访问方法;二级存储器的输入输出应该以信息组为单位进行;二级存储器的输入输出应该以信息组为单位进行;这些简单原则对于软件工程的设计和编码两个阶段这些简单原则对于软件工程的设计和编码两个阶段都适用。都适用。小结:编码规范规范范项规范内容范内容1 排版排版排版格式,如排版格式,如缩进、块语句、分行等句、分行等2 注注释规范注范注释的格式的格式3 标识符命名符命名规范范标识符的命名符的命名规则4 可可读性性为提高可提高可读性所作的性所作的规范,如禁止使用技巧性高的范,如禁止使用技巧性高的语句句5 变量、量、结构构规范范变量和量和结构的定

22、构的定义,如禁止局部与全局,如禁止局部与全局变量同名等量同名等6 函数、函数、过程程规范函数的定范函数的定义,如,如“不要不要设计多用途面面俱到的函数多用途面面俱到的函数”7 可可测性性为提高可提高可测性的性的规范,如范,如“用断言确用断言确认函数的参数函数的参数”等等8 程序效率程序效率为程序效率所作的程序效率所作的规范,如范,如“循循环体内工作量最小化体内工作量最小化”9 质量保量保证为提高提高软件件质量所作的量所作的规范,如范,如“防止内存操作越界防止内存操作越界”例例1 1:注释:注释/*ADDAMOUNTTOTOTAL*/*ADDAMOUNTTOTOTAL*/TOTAL=AMOUNT

23、+TOTALTOTAL=AMOUNT+TOTAL/*ADDMONTHLY-SALESTOANNUAL-TOTAL*/*ADDMONTHLY-SALESTOANNUAL-TOTAL*/TOTAL=AMOUNT+TOTALTOTAL=AMOUNT+TOTAL例例2 2:视觉组织:视觉组织空格空格(A(A17)ANDNOT(B17)ANDNOT(B49)ORC49)ORC(A(A17)ANDNOT(B17)ANDNOT(B49)ORC49)ORC例例3 3:视觉组织:视觉组织移行移行IF()THENIF()THENIF()THENIF()THENELSEELSEENDIFENDIFELSEELSEE

24、NDIFENDIF例例4 4:数据说明标准化:数据说明标准化INTEGERsizeINTEGERsize,lengthlength,widthwidth,costcost,pricepriceINTEGERcostINTEGERcost,lengthlength,priceprice,sizesize,widthwidth例例5 5:一行一条语句:一行一条语句FORI:=1TON-1DOBEGINT:=I;FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOFORJ:=I+1TONDOIFAJATTHENT:=J;IFTIIFAJATTHENT:=J;IFTITHENB

25、EGINWORK:=AT;THENBEGINWORK:=AT;AT:=AI;AI:=WORK;ENDEND;AT:=AI;AI:=WORK;ENDEND;FORI:=1TON-1DOFORI:=1TON-1DOBEGINBEGINT:=I;T:=I;FORJ:=I+1TONDOFORJ:=I+1TONDOIFAJATTHENT:=J;IFAJATTHENT:=J;IFTITHENIFTITHENBEGINBEGINWORK:=AT;WORK:=AT;AT:=AI;AT:=AI;AI:=WORK;AI:=WORK;ENDENDEND;END;例例6 6:强调清晰性:强调清晰性AI=AI+AT;A

26、I=AI+AT;AT=AI-AT;AT=AI-AT;AI=AI-AT;AI=AI-AT;WORK=AT;WORK=AT;AT=AI;AT=AI;AI=WORK;AI=WORK;例例7 7:简单直接:简单直接 for(i=1;i=n;i+)for(i=1;i=n;i+)for(j=1;j=n;j+)for(j=1;j=n;j+)Vij=(i/j)*(j/i)Vij=(i/j)*(j/i) for(i=1;i=n;i+)for(i=1;i=n;i+)for(j=1;j=n;j+)for(j=1;j=n;j+)if(i=j)if(i=j)Vij=1;Vij=1;elseelseVij=0;Vij=0

27、;例例8 8:避免不必要的转移:避免不必要的转移IF(XY)GOTO30IF(XY)GOTO30IF(YZ)GOTO50IF(YZ)GOTO50SMALL=ZSMALL=ZGOTO70GOTO7030IF(XZ)GOTO6030IF(XZ)GOTO60AMALL=ZAMALL=ZGOTO70GOTO7050SMALL=Y50SMALL=YGOTO70GOTO7060SMALL=X60SMALL=X70CONTINUE70CONTINUESMALL=X;SMALL=X;IF(YSMALL)IF(YSMALL)SMALL=Y;SMALL=Y;IF(ZSMALL)IF(Z=a)if(char=a)i

28、f(char=z)if(char=z)cout“Thisisaletter.”;cout“Thisisaletter.”;elseelsecout“Thisisnotaletter.”;cout=a&char=a&char=z)cout“Thisisaletter.”;cout“Thisisaletter.”;elseelsecout“Thisisnotaletter.”;cout“Thisisnotaletter.”;例例1010:少用否定条件:少用否定条件if(!(char9)if(!(char9)if(char=0&char=0&charshouldbe=2003/11/14line28

29、shouldbe=2003/11/15line29.2003/11/15line29.*/*/程序文档的例子/*-/*-includestdio&socketlibararyincludestdio&socketlibarary-*/-*/#include#include#include#include /*-/*-GlobalvarareaGlobalvararea-*/-*/intiUserCountintiUserCount;程序文档的例子/*-/*-InitializeSocketSubsystemInitializeSocketSubsysteminputinput: nonenon

30、eoutputoutput:DLLinitializeresultDLLinitializeresult0 0:faultfaultotherother:successsuccess-*/-*/软件测试基础软件开发过程必须伴有质量保证活动。 软件测试是软件质量保证的关键元素,代表了规约、设计和编码的最终检查。 软件产品最大的成本是检测软件错误、修正软件错误的成本。 在整个软件开发中,测试工作量一般占30%40%,甚至50%。 在人命关天的软件(如飞机控制、核反应堆等)测试所花费的时间往往是其它软件工程活动时间之和的三到五倍软件是人编的所以不完美实例实例: :IntelIntel的的pentiu

31、mpentium处理器处理器 19941994年浮点除法缺陷年浮点除法缺陷 20002000年年8 8月月2828日,日,处理器一个可能导致运行程序被挂起的执处理器一个可能导致运行程序被挂起的执行指令问题行指令问题19991999年年1212月月3 3日日, ,美国航天局火星极地登陆飞船失踪美国航天局火星极地登陆飞船失踪19911991年爱国者导弹防御系统系统时钟错误积累造成跟踪系年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度统失去精确度千年虫千年虫, ,世界各地解决世界各地解决20002000年错误超过数亿美元年错误超过数亿美元测试的定义:为了发现程序中的错误而执行程序的过程。具

32、体地说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并利用测试用例来运行程序,以发现程序错误的过程。软件测试中常见的错误类型按照错误的影响和造成的后果进行分类,可分按照错误的影响和造成的后果进行分类,可分为:较小错误,中等错误,较严重错误,严重为:较小错误,中等错误,较严重错误,严重错误,非常严重的错误,最严重的错误。错误,非常严重的错误,最严重的错误。按照软件生存周期各个阶段分类,可分为:问按照软件生存周期各个阶段分类,可分为:问题定义错误、需求分析规格说明错误、设计错题定义错误、需求分析规格说明错误、设计错误、编码错误等等。误、编码错误等等。这里重点介绍

33、一种按照错误的性质和范围进行这里重点介绍一种按照错误的性质和范围进行分类的方法,可以将错误分为如下几类:分类的方法,可以将错误分为如下几类:按照错误的性质和范围进行分类1功能错误需求规格说明错误。主要是指其中有错误、多余或遗漏的功能,有二义性或自相矛盾。设计实现错误。设计或实现的功能不是规格说明或用户所要求的功能。按照错误的性质和范围进行分类2 2系统错误系统错误 外部接口错误。如与打印机的接口错误。外部接口错误。如与打印机的接口错误。内部接口错误。指各程序模块间的联系存在错误。如输入内部接口错误。指各程序模块间的联系存在错误。如输入/ /输输出、数据保护、子程序访问等。出、数据保护、子程序访

34、问等。硬件结构错误。如错误地理解硬件结构错误。如错误地理解I/OI/O指令、中断处理、设备启动指令、中断处理、设备启动和初始化等而引起的错误。和初始化等而引起的错误。软件结构错误。由于软件结构不合理或不清晰所引起的错误。软件结构错误。由于软件结构不合理或不清晰所引起的错误。往往在系统满载时才能发现。往往在系统满载时才能发现。操作系统错误。该类错误是由于不了解操作系统而引起的,操作系统错误。该类错误是由于不了解操作系统而引起的,操作系统本身也有错误。操作系统本身也有错误。控制与顺序错误。包括事件的时间顺序不正确、等待一个不控制与顺序错误。包括事件的时间顺序不正确、等待一个不可能发生的事件等等。可

35、能发生的事件等等。资源管理错误。既资源使用不当。资源死锁等。资源管理错误。既资源使用不当。资源死锁等。按照错误的性质和范围进行分类3 3加工错误(算法错误)加工错误(算法错误)计算与操作错误。指计算、函数求值和一般操作过计算与操作错误。指计算、函数求值和一般操作过程中的错误。程中的错误。初始化错误。如忘记了初始化工作区、数据区,错初始化错误。如忘记了初始化工作区、数据区,错误地对循环变量赋初值,不正确的初始化等等。误地对循环变量赋初值,不正确的初始化等等。局部控制和次序错误。如遗漏路径、不可达到的代局部控制和次序错误。如遗漏路径、不可达到的代码段、循环嵌套或终止条件不正确、死循环等等。码段、循

36、环嵌套或终止条件不正确、死循环等等。逻辑错误。如多分支、判断条件不正确等。逻辑错误。如多分支、判断条件不正确等。按照错误的性质和范围进行分类4 4数据错误数据错误 动态数据错误。动态数据错误。静态数据错误。静态数据指直接或间接地出现在程序或数据静态数据错误。静态数据指直接或间接地出现在程序或数据库中的数据,其内容和格式都是固定的。因此在内容或格式库中的数据,其内容和格式都是固定的。因此在内容或格式上都可能存在错误。上都可能存在错误。数据内容错误。是指由于内容被破坏或被错误地解释而造成数据内容错误。是指由于内容被破坏或被错误地解释而造成的错误。的错误。数据结构错误。包括数据结构说明错误和数据结构

37、使用错误。数据结构错误。包括数据结构说明错误和数据结构使用错误。数据属性错误。数据属性是指数据内容的含义或语义,如整数据属性错误。数据属性是指数据内容的含义或语义,如整数、字符等。数据属性错误是指对数据属性的错误解释和错数、字符等。数据属性错误是指对数据属性的错误解释和错误使用而导致的错误。误使用而导致的错误。按照错误的性质和范围进行分类5 5代码错误代码错误 代码错误主要包括语法错误、键入错误、对语代码错误主要包括语法错误、键入错误、对语句的理解错误等。句的理解错误等。例如,例如,MyersMyers(19761976)指出,美国第一个去金)指出,美国第一个去金星的太空任务的失败是由于在一个

38、星的太空任务的失败是由于在一个FortrandoFortrando循环中缺少一个逗号。循环中缺少一个逗号。软件测试基础7.2.17.2.1软件测试的目标软件测试的目标关于测试的一些规则:关于测试的一些规则:(1)(1)测试是为了发现程序中的错误而执行程序的过程;测试是为了发现程序中的错误而执行程序的过程;(2)(2)好的测试方案是极可能发现迄今为止尚未发现的好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;错误的测试方案;(3)(3)成功的测试是发现了至今为止尚未发现的错误的成功的测试是发现了至今为止尚未发现的错误的测试。测试。由于测试的目标是暴露程序中的错误,从心理学角度由于测试的目

39、标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,看,由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测在综合测试阶段通常由其他人员组成测试小组来完成测试工作。试工作。“程序测试能证明错误的存在,但不能证明错误不存在.”测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错.预防错误:几乎不可实现唯一方法:发现错误为了能设计出有效的测试方案,主要的测试准则:为了能设计出有效的测试方案,主要的测试准则:(1 1)所所有有测测试试都都应应该该能能追追溯溯到到用用户户需需求求。正正如如上上一一小小节节讲讲过过的的

40、,软软件件测测试试的的目目标标是是发发现现错错误误。从从用用户户的的角角度度看看,最最严严重重的的错错误误是是导导致致程程序序不不能能满满足足用用户户需需求的那些错误。求的那些错误。(2 2)应该远在测试开始之前就制定出测试计划。)应该远在测试开始之前就制定出测试计划。完完成成需需求求模模型型可可着着手手制制定定测测试试计计划划,在在建建立立了了设设计模型之后就可以立即开始设计详细的测试方案。计模型之后就可以立即开始设计详细的测试方案。(3 3)ParetoPareto原原理理:测测试试发发现现的的错错误误中中的的80%80%很很可可能能是是由由程程序序中中20%20%的的模模块块造造成成的的

41、。当当然然,问问题题是是怎怎样找出这些可疑的模块并彻底地测试它们。样找出这些可疑的模块并彻底地测试它们。7.2.2软件测试准则(4 4)应该从)应该从“ “小规模小规模” ”“ “大规模大规模” ”测试。测试。首首先先重重点点测测试试单单个个程程序序模模块块,然然后后把把测测试试重重点点转转向向在在集集成成的的模模块块簇簇中中寻寻找找错错误误,最最后后在在整整个个系系统统中中寻寻找错误。找错误。(5 5)穷举测试是不可能的。)穷举测试是不可能的。所所谓谓穷穷举举测测试试就就是是把把程程序序所所有有可可能能的的执执行行路路径径都都检查一遍的测试。此路不通!检查一遍的测试。此路不通!因因此此,测测

42、试试只只能能证证明明程程序序中中有有错错误误,不不能能证证明明程程序序中中没没有有错错误误。但但是是,精精心心地地设设计计测测试试方方案案,有有可可能能充分覆盖程序逻辑并使程序达到所要求的可靠性。充分覆盖程序逻辑并使程序达到所要求的可靠性。(6 6)为为了了达达到到最最佳佳的的测测试试效效果果,应应该该由由独独立立的的第第三方从事测试工作。三方从事测试工作。7.2.2软件测试准则用黑盒测试发现程序中的错误,必须在所有可能的输用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。都能产生正确的

43、输出。但这是不可能的。假设一个程序但这是不可能的。假设一个程序P P有有输入量输入量X X和和Y Y及输及输出量出量Z Z。在字长为在字长为3232位的计算机上运行。若位的计算机上运行。若X X、Y Y取整数,取整数,按黑盒方法进行穷举测试:可能采用的测试数据组:按黑盒方法进行穷举测试:可能采用的测试数据组:2 232322 232 32 2 26464 如果测试一组数据需要如果测试一组数据需要1 1毫秒,一年工作毫秒,一年工作365365 24 24小小时,完成所有测试需时,完成所有测试需5 5亿年亿年。穷举测试是不现实的。如上图,设循环体应执行穷举测试是不现实的。如上图,设循环体应执行30

44、30次,次,循环体中有循环体中有4 4个独立的分支,则最多有个独立的分支,则最多有44303010101818个逻个逻辑路径,假设每运行一个测试用例平均花费辑路径,假设每运行一个测试用例平均花费1 1毫秒,则毫秒,则需花费需花费3 3千多万年。一般选用少量最有效的测试用例,千多万年。一般选用少量最有效的测试用例,以便覆盖每一个条件、每一个路径和每一个语句,从以便覆盖每一个条件、每一个路径和每一个语句,从而以最少的代价发现尽可能多的错误。而以最少的代价发现尽可能多的错误。开始开始结束结束测试有两种方法测试有两种方法, ,即黑盒测试和白盒测试:即黑盒测试和白盒测试:如如果果已已经经知知道道了了产产

45、品品应应该该具具有有的的功功能能,可可以以通通过过测试来检验是否每个功能都能正常使用测试来检验是否每个功能都能正常使用黑盒测试;黑盒测试;如如果果知知道道产产品品的的内内部部工工作作过过程程,可可以以通通过过测测试试来来检检验验产产品品内内部部动动作作是是否否按按照照规规格格说说明明书书的的规规定定正正常常进进行行白盒测试。白盒测试。7.2.3测试方法黑盒测试黑盒测试 闭着眼睛测试软件闭着眼睛测试软件软件输入输入 不深入代码细节的测试方法称为动态黑盒测试。不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用它。软件测试员充当客户来使用它。输出输出白盒测试 带上X光眼镜测试软件?

46、假如知道一个盒子包含一台计算机假如知道一个盒子包含一台计算机, ,而另一个而另一个盒子是人用纸笔计算盒子是人用纸笔计算, ,就会选择不同的测试用例就会选择不同的测试用例了解软件的运作方式会影响测试手段黑黑盒盒测测试试法法把把程程序序看看作作一一个个黑黑盒盒子子,完完全全不不考考虑虑程程序序的的内内部部结结构构和和处处理理过过程程。黑黑盒盒测测试试又又称称为为功功能能测测试。试。白白盒盒测测试试法法与与黑黑盒盒测测试试法法相相反反,它它的的前前提提是是可可以以把把程程序序看看成成装装在在一一个个透透明明的的白白盒盒子子里里,测测试试者者完完全全知知道道程程序序的的结结构构和和处处理理算算法法。这

47、这种种方方法法按按照照程程序序内内部部的的逻逻辑辑测测试试程程序序,检检测测程程序序中中的的主主要要执执行行通通路路是是否否都都能能按预定要求正确工作。白盒测试又称为结构测试。按预定要求正确工作。白盒测试又称为结构测试。7.2.3测试方法黑盒测试与白盒测试比较 黑盒测试是从用户观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,是根据程序外部特征进行测试。 白盒测试是根据程序内部逻辑结构进行测试。 黑盒测试与白盒测试优缺点比较 黑盒测试 白盒测试 优点缺点性质适用于各阶段测试适用于各阶段测试从产品功能角度测试从产品功能角度测试容易入手生成测试数容易入手生成测试数 据据可构成测试数

48、据使特定程可构成测试数据使特定程 序部分得到测试序部分得到测试有一定的充分性度量手段有一定的充分性度量手段可或较多工具支持可或较多工具支持某些代码得不到测试某些代码得不到测试如果规格说明有误,如果规格说明有误, 则无法发现则无法发现不易进行充分性测试不易进行充分性测试不易生成测试数据不易生成测试数据( (通常通常) )无法对未实现规格说明的无法对未实现规格说明的 部分进行测试部分进行测试工作量大,通常只用于单工作量大,通常只用于单 元测试,有应用局限元测试,有应用局限是一种是一种确认确认技术,回答技术,回答“ “我们在构造一个正确我们在构造一个正确 的系统吗?的系统吗?” ”是一种是一种验证验

49、证技术,回答技术,回答“ “我们在正确地构造一个系我们在正确地构造一个系 统吗?统吗?” ”根根据据第第4 4条条测测试试准准则则,应应该该从从“ “小小规规模模” ”“ “大大规规模模” ”测测试试,测测试试过过程程也也必必须须分分步步骤骤进进行行。大大型型软软件件系系统通常的测试过程基本上由下述几个步骤组成:统通常的测试过程基本上由下述几个步骤组成:1.模块测试模块测试模模块块测测试试的的目目的的是是保保证证每每个个模模块块作作为为一一个个单单元元能能正确运行,所以模块测试通常又称为单元测试。正确运行,所以模块测试通常又称为单元测试。在在这这个个测测试试步步骤骤中中所所发发现现的的往往往往

50、是是编编码码和和详详细细设设计的错误。计的错误。2. 子系统测试子系统测试将将若若干干经经单单元元测测试试的的模模块块放放在在一一起起形形成成一一个个子子系系统统,进进行行的的测测试试称称为为子子系系统统测测试试。这这个个步步骤骤着着重重测测试试模块的接口。模块的接口。7.2.4测试步骤3. 系统测试系统测试将将经经过过测测试试的的子子系系统统装装配配成成一一个个完完整整的的系系统统来来的的测试。测试。在在这这个个过过程程中中不不仅仅应应该该发发现现设设计计和和编编码码的的错错误误,还还应应该该验验证证系系统统确确实实能能提提供供需需求求说说明明书书中中指指定定的的功功能能,而而且且系系统统的

51、的动动态态特特性性也也符符合合预预定定要要求求。在在这这个个测测试试步步骤骤中中发发现现的的往往往往是是软软件件设设计计中中的的错错误误,也也可可能能发发现现需求说明中的错误。需求说明中的错误。不不论论是是子子系系统统测测试试还还是是系系统统测测试试,都都兼兼有有检检测测和和组装两重含义,通常称为集成测试。组装两重含义,通常称为集成测试。7.2.4测试步骤4.验收测试验收测试验验收收测测试试内内容容与与系系统统测测试试基基本本类类似似,但但是是它它是是在在用用户户积积极极参参与与下下进进行行的的,而而且且可可能能主主要要使使用用实实际际数数据据( (系统将来要处理的信息系统将来要处理的信息)

52、)进行测试。进行测试。验验收收测测试试的的目目的的是是验验证证系系统统确确实实能能够够满满足足用用户户的的需需要要,在在这这个个测测试试步步骤骤中中发发现现的的往往往往是是系系统统需需求求说说明明书中的错误。验收测试也称为确认测试。书中的错误。验收测试也称为确认测试。7.2.4测试步骤5.平行运行平行运行平平行行运运行行就就是是同同时时运运行行新新开开发发出出来来的的系系统统和和将将被被它它取取代代的的旧旧系系统统,以以便便比比较较新新旧旧两两个个系系统统的的处处理理结结果果。这样做的具体目的有如下几点:。这样做的具体目的有如下几点:(1)(1)可以在准生产环境中运行新系统而又不冒风险;可以在

53、准生产环境中运行新系统而又不冒风险;(2)(2)用户能有一段熟悉新系统的时间;用户能有一段熟悉新系统的时间;(3)(3)以验证用户指南和使用手册之类的文档;以验证用户指南和使用手册之类的文档;(4)(4)能能够够以以准准生生产产模模式式对对新新系系统统进进行行全全负负荷荷测测试试,可以用测试结果验证性能指标。可以用测试结果验证性能指标。7.2.4测试步骤软件测试的过程被测模块单元单元测试测试设计信息集成测试被测模块单元单元测试测试被测模块单元单元测试测试测试过的模块确认测试系统测试软件需求其它系统元素装配好的软件 确认的软件可运行的软件如如图图所所示示描描绘绘了了测测试试阶阶段段的的信信息息流

54、流,输输入入信信息息有有两类:两类:(1)(1)软软件件配配置置,包包括括需需求求说说明明书书、设设计计说说明明书书和和源源程序清单等;程序清单等;(2)(2)测测试试配配置置,包包括括测测试试计计划划和和测测试试方方案案(测测试试用用例、预定要检验的功能以及预期的正确输出);例、预定要检验的功能以及预期的正确输出);比比较较测测试试的的实实际际结结果果和和预预期期结结果果,若若两两者者不不一一致致则很可能是程序中有错误。则很可能是程序中有错误。设设法法确确定定错错误误的的准准确确位位置置并并且且改改正正它它,这这就就是是调调试试的的任任务务。与与测测试试不不同同,通通常常由由程程序序的的编编

55、写写者者负负责责调调试。试。7.2.5测试阶段的信息流如如果果出出现现要要求求修修改改设设计计的的严严重重错错误误,软软件件的的质质量量和可靠性是值得怀疑的,应该进一步仔细测试;和可靠性是值得怀疑的,应该进一步仔细测试;同同上上述述相相反反,功功能能完完成成得得很很正正常常,遇遇到到的的错错误误也也很容易改正,则仍然应该考虑两种可能:很容易改正,则仍然应该考虑两种可能:(1)(1) 软件的可靠性是可以接受的;软件的可靠性是可以接受的;(2)(2) 所进行的测试尚不足以发现严重的错误。所进行的测试尚不足以发现严重的错误。这这些些错错误误最最终终将将被被用用户户发发现现,而而且且需需要要在在维维护

56、护阶阶段段改改正正它它们们( (但但是是改改正正同同一一个个错错误误需需要要付付出出的的代代价价比比在开发阶段高出许多倍在开发阶段高出许多倍) )。7.2.5测试阶段的信息流7.3 单元测试单元测试单元测试:测试模块。单元测试:测试模块。单元测试和编码属于软件过程的同一个阶段。单元测试和编码属于软件过程的同一个阶段。在在编编写写出出源源程程序序代代码码并并通通过过了了编编译译程程序序的的语语法法检检查查之之后后,就就可可以以用用详详细细设设计计作作指指南南,对对重重要要的的执行通路进行测试,以便发现模块内部的错误。执行通路进行测试,以便发现模块内部的错误。可可用用人人工工测测试试和和计计算算机

57、机测测试试两两种种测测试试方方法法,完完成单元测试工作。成单元测试工作。单单元元测测试试主主要要使使用用白白盒盒测测试试技技术术,而而且且对对多多个个模块的测试可以并行地进行。模块的测试可以并行地进行。模块错误处理模块接口局部数据结构 重要的执行路径边界条件单元测试着重从单元测试着重从5 5个方面对模块进行测试:个方面对模块进行测试:1. 1. 模块接口模块接口首首先先应应该该对对通通过过模模块块接接口口的的数数据据流流进进行行测测试试,主要检查下述几个方面:主要检查下述几个方面:参参数数的的数数目目、次次序序、属属性性或或单单位位系系统统与与变变元元是是否一致;否一致;是否修改了只作输入用的

58、变元;是否修改了只作输入用的变元;全局变量的定义和用法在各个模块中是否一致。全局变量的定义和用法在各个模块中是否一致。7.3.1测试重点2. 2. 局部数据结构局部数据结构对对于于模模块块来来说说,局局部部数数据据结结构构是是常常见见的的错错误误来来源源。应应该该仔仔细细设设计计测测试试方方案案,以以便便发发现现局局部部数数据据说明、初始化、默认值等方面的错误。说明、初始化、默认值等方面的错误。3. 3. 重要的执行通路重要的执行通路由由于于通通常常不不可可能能进进行行穷穷尽尽测测试试,因因此此,在在单单元元测测试试期期间间选选择择最最有有代代表表性性、最最可可能能发发现现错错误误的的执执行通

59、路进行测试就是十分关键的。行通路进行测试就是十分关键的。应应该该设设计计测测试试方方案案用用来来发发现现由由于于错错误误的的计计算算、不正确的比较或不适当的控制流而造成的错误。不正确的比较或不适当的控制流而造成的错误。7.3.1测试重点4. 4. 出错处理通路出错处理通路好的设计适当的处理错误的通路。好的设计适当的处理错误的通路。应应该该认认真真测测试试这这种种通通路路。当当评评价价出出错错处处理理通通路路时,应该着重测试下述一些可能发生的错误:时,应该着重测试下述一些可能发生的错误:(1) (1) 对错误的描述是难以理解的;对错误的描述是难以理解的;(2) (2) 记下的错误与实际遇到的错误

60、不同;记下的错误与实际遇到的错误不同;(3) (3) 在在对对错错误误进进行行处处理理之之前前,错错误误条条件件已已经经引引起系统干预;起系统干预;(4) (4) 对错误的处理不正确;对错误的处理不正确;(5) (5) 描描述述错错误误的的信信息息不不足足以以帮帮助助确确定定造造成成错错误误的位置。的位置。7.3.1测试重点5. 5. 边界条件边界条件边边界界测测试试是是单单元元测测试试中中最最后后的的也也可可能能是是最最重重要要的任务。的任务。使使用用刚刚好好小小于于、刚刚好好等等于于和和刚刚好好大大于于最最大大值值或或最最小小值值的的数数据据结结构构、控控制制量量和和数数据据值值的的测测试

61、试方方案案,非常可能发现软件中的错误。非常可能发现软件中的错误。7.3.1测试重点代代码码审审查查即即人人工工测测试试源源程程序序,由由审审查查小小组组正正式式进进行行,它它是是一一种种非非常常有有效效的的程程序序验验证证技技术术,对对于于典典型型的的程程序序来来说说,可可以以查查出出30%30%70%70%的的逻逻辑辑设设计计错误和编码错误。审查小组最好由下述错误和编码错误。审查小组最好由下述4 4人组成:人组成:(1) (1) 组组长长,应应该该是是一一个个很很有有能能力力的的程程序序员员,而而且没有直接参与这项工程;且没有直接参与这项工程;(2) (2) 程序的设计者;程序的设计者;(3

62、) (3) 程序的编写者;程序的编写者;(4) (4) 程序的测试者。程序的测试者。7.3.2代码审查审审查查之之前前,小小组组成成员员应应该该先先研研究究设设计计说说明明书书,力求理解这个设计。力求理解这个设计。一一般般先先由由设设计计者者扼扼要要地地介介绍绍他他的的设设计计,再再由由程程序序的的编编写写者者解解释释他他是是怎怎样样用用程程序序代代码码实实现现这这个个设设计计的的,小小组组其其他他成成员员仔仔细细倾倾听听并并力力图图发发现现其其中中的的错误。错误。另另外外一一项项工工作作,是是对对照照程程序序设设计计常常见见错错误误清清单单,分分析析审审查查这这个个程程序序。当当发发现现错错

63、误误时时由由组组长长记记录录下下来来,审审查查会会继继续续进进行行( (审审查查小小组组的的任任务务是是发发现现错错误误而不是改正错误而不是改正错误) )。7.3.2代码审查代代码码审审查查比比计计算算机机测测试试优优越越的的是是:一一次次审审查查会会上可以发现许多错误。上可以发现许多错误。实实践践表表明明,对对于于查查找找某某些些类类型型的的错错误误来来说说,人人工工测测试试比比计计算算机机测测试试更更有有效效;对对于于其其他他类类型型的的错错误来说则刚好相反。误来说则刚好相反。因因此此,人人工工测测试试和和计计算算机机测测试试是是互互相相补补充充,相相辅辅相相成成的的,缺缺少少其其中中任任

64、何何一一种种方方法法都都会会使使查查找找错错误的效率降低。误的效率降低。7.3.2代码审查n n代码审查的主要项目代码审查的主要项目n n变量交叉引用表变量交叉引用表n n标号交叉引用表标号交叉引用表n n子程序、宏、函数子程序、宏、函数n n等价性检查等价性检查n n常量检查常量检查n n标准检查标准检查n n风格检查风格检查n n比较控制流比较控制流n n程序的规格说明程序的规格说明7.3.2代码审查7.3.2代码审查n n代码审查的规则代码审查的规则n n代码缺陷审查表代码缺陷审查表.命名规则命名规则程序版式程序版式文件结构文件结构结论结论审查项审查项重要性重要性7.3.2代码审查单单元

65、元测测试试必必须须为为每每个个单单元元测测试试开开发发驱驱动动软软件件和和( (或或) )存根软件。存根软件。通通常常驱驱动动程程序序也也就就是是一一个个“主主程程序序”,它它接接收收测测试试数数据据,把把这这些些数数据据传传送送给给被被测测试试的的模模块块,并并且印出有关的结果。且印出有关的结果。存存根根程程序序代代替替被被测测试试的的模模块块所所调调用用的的模模块块。因因此此存存根根程程序序也也可可以以称称为为“虚虚拟拟子子程程序序”。它它使使用用被被它它代代替替的的模模块块的的接接口口,可可能能做做最最少少量量的的数数据据操操作作,印印出出对对入入口口的的检检验验或或操操作作结结果果,并

66、并且且把把控控制制归还给调用它的模块。归还给调用它的模块。7.3.3计算机测试7.4 集成测试集成测试集集成成测测试试是是测测试试和和组组装装软软件件的的系系统统化化技技术术,有有同同子子系系统统测测试试,主主要要目目标标是是发发现现与与接接口口有有关关的的问问题。例如:题。例如:数据穿过接口时可能丢失;数据穿过接口时可能丢失;一一个个模模块块对对另另一一个个模模块块可可能能由由于于疏疏忽忽而而造造成成有有害影响;害影响;把子功能组合起来可能不产生预期的主功能;把子功能组合起来可能不产生预期的主功能;个个别别看看来来是是可可以以接接受受的的误误差差可可能能积积累累到到不不能能接接受的程度;受的

67、程度;全程数据结构可能有问题等等。全程数据结构可能有问题等等。不幸的是,可能发生的接口问题多得不胜枚举。不幸的是,可能发生的接口问题多得不胜枚举。由模块组装成程序时有两种方法:由模块组装成程序时有两种方法:非渐增式测试方法:非渐增式测试方法:这这种种方方法法是是先先分分别别测测试试每每个个模模块块,再再把把所所有有模模块块按按设设计计要要求求放放在在一一起起结结合合成成所所要要的的程程序序进进行行测测试;试;渐增式测试方法:渐增式测试方法:是是把把下下一一个个要要测测试试的的模模块块同同已已经经测测试试好好的的那那些些模模块块结结合合起起来来进进行行测测试试,测测试试完完以以后后再再把把下下一

68、一个个应该测试的模块结合进来测试。应该测试的模块结合进来测试。这这两两种种方方法法哪哪种种更更好好一一些些呢呢? ?下下面面对对比比它它们们的的主主要优缺点:要优缺点:7.4集成测试7.4集成测试非非渐渐增增式式测测试试一一下下子子把把所所有有模模块块放放在在一一起起,极极端困难,难于定位,难于改正。端困难,难于定位,难于改正。渐渐增增式式测测试试比比较较容容易易定定位位和和改改正正错错误误;对对接接口口可可以以进进行行更更彻彻底底的的测测试试;可可以以使使用用系系统统化化的的测测试试方法。方法。因因此此,目目前前在在进进行行集集成成测测试试时时普普遍遍采采用用渐渐增增式式测试方法。测试方法。

69、当当使使用用渐渐增增方方式式把把模模块块结结合合到到程程序序中中去去时时,有有自顶向下和自底向上两种集成策略。自顶向下和自底向上两种集成策略。7.4.1自顶向下集成以以主主控控模模块块作作为为驱驱动动模模块块,其其直直接接调调用用的的下下属属模块都用模块都用“ “桩模块桩模块” ”代替;代替;依依据据所所选选用用的的集集成成策策略略(深深度度优优先先或或广广度度优优先先)所所规规定定的的次次序序,每每次次只只用用一一个个实实际际模模块块替替代代一一个对应的桩模块;个对应的桩模块;每结合进一个模块立即测试一遍;每结合进一个模块立即测试一遍;为为了了检检测测加加入入新新模模块块是是否否引引入入了了

70、新新的的错错误误,每每次次都都需需要要进进行行回回归归测测试试(即即部部分分或或全全部部地地重重复复以前做过的测试)。以前做过的测试)。重复执行步骤重复执行步骤、,每重复一次,增加,每重复一次,增加一个模块,直至构造起整个软件结构为止。一个模块,直至构造起整个软件结构为止。第第2 2步:根据深度优先或宽度优先的策略,每次用一个实步:根据深度优先或宽度优先的策略,每次用一个实际模块代换一个际模块代换一个stubstub。第第3 3步:在结合进一个模块的同时进行测试。步:在结合进一个模块的同时进行测试。MMS S1 1S S2 2MM1 1S S3 3S S4 4MM2 2S S2 2第第4 4步

71、:回归测试步:回归测试(regressiontesting)(regressiontesting)全部或部分地全部或部分地重复以前做过的测试。重复以前做过的测试。第第1 1步:测试顶端模块,用存根程序步:测试顶端模块,用存根程序(stub)(stub)代替直接附属代替直接附属的下层模块的下层模块图图: :被测软件系统结构图被测软件系统结构图深度优先策略:以M1作为驱动模块,首先将模块M2加入其中,此时模块M3、M4、M5、M6分别以桩模块S3、S4、S5、S6代替,于是对由M1、M2、S3、S4、S5、S6组成的子系统测试一遍;M1M1M2M2M4M4M5M5M6M6M7M7M8M8M3M3M

72、1M1M2M2S4S4S3S3S5S5S6S6深度优先策略:用M5代替S5,并将M8用桩模块S8代替,对由M1、M2、M5、S3、S4、S8、S6组成的子系统再测试一遍;M1M1M2M2M4M4M5M5M6M6M7M7M8M8M3M3M1M1M2M2S4S4S3S3M5M5S6S6S8S8深度优先策略:用M8代替S8,对由M1、M2、M5、M8、S3、S4、S6组成的子系统再测试一遍;M1M1M2M2M4M4M5M5M6M6M7M7M8M8M3M3M1M1M2M2S4S4S3S3M5M5S6S6M8M8深度优先策略:用M6代替S6,对由M1、M2、M5、M8、M6、S3、S4组成的子系统再测试

73、一遍;M1M1M2M2M4M4M5M5M6M6M7M7M8M8M3M3M1M1M2M2S4S4S3S3M5M5M6M6M8M8深度优先策略:用M3代替S3,并以S7代替M7,对由M1、M2、M5、M8、M6、M3、S7、S4组成的子系统再测试一遍;M1M1M2M2M4M4M5M5M6M6M7M7M8M8M3M3M1M1M2M2S4S4M3M3M5M5M6M6M8M8S7S7深度优先策略:用M7代替S7,对由M1、M2、M5、M8、M6、M3、M7、S4组成的子系统再测试一遍;M1M1M2M2M4M4M5M5M6M6M7M7M8M8M3M3M1M1M2M2S4S4M3M3M5M5M6M6M8M8

74、M7M7深度优先策略:用M4代替S4,对由M1、M2、M5、M8、M6、M3、M7、M4组成的子系统再测试一遍;至此,整个系统测试完。M1M1M2M2M4M4M5M5M6M6M7M7M8M8M3M3M1M1M2M2M4M4M3M3M5M5M6M6M8M8M7M7自顶向下集成的优缺点自顶向下集成的特点是不需要驱动模块,但需要大量的桩模块。优点是能够尽早地验证程序的主要控制和判断机制,可以较早发现此类错误,从而减少以后的返工。缺点是在测试较高层模块时,低层模块采用较简单的桩模块来代替,不能反映实际情况,测试可能不充分。7.4.2自底向上集成即从程序结构的最底层模块开始组装和测试。这种测即从程序结构

75、的最底层模块开始组装和测试。这种测试需要一定数量的驱动模块,而不需要桩模块。试需要一定数量的驱动模块,而不需要桩模块。自底向上集成测试的具体步骤:自底向上集成测试的具体步骤: 把把低低层层模模块块组组织织成成实实现现某某个个特特定定的的软软件件子子功功能能的的模模块块群(群(moduleclustermodulecluster);); 为为每每一一个个模模块块群群开开发发一一个个驱驱动动模模块块,控控制制测测试试数数据据的的输入和测试结果的输出;输入和测试结果的输出; 对每个模块群进行测试;对每个模块群进行测试; 去去掉掉测测试试用用的的驱驱动动模模块块,用用较较高高层层模模块块将将几几个个模

76、模块块群群组成新的更大的模块群。组成新的更大的模块群。上述的上述的、步重复执行,直至整个程序构造完步重复执行,直至整个程序构造完毕。毕。自底向上集成自底向上集成Bottom-uptestingBottom-uptesting第第1 1步:把低层模块组合成族,每族实现一个子功能。步:把低层模块组合成族,每族实现一个子功能。第第2 2步:用驱动程序步:用驱动程序(Driver)(Driver)协调测试数据的协调测试数据的IOIO,测试子功能,测试子功能族。族。D DMM1 1MM2 2第第3 3步:去掉步:去掉DriverDriver,自下而上把子功能族合成,自下而上把子功能族合成更大的子功能族。

77、更大的子功能族。MMMMMMMMMMMMMMMMMMMMMMMMD DD DD DD DD DD D注意:注意:两种策略两种策略的优、缺点刚好的优、缺点刚好互补,但单用其互补,但单用其中任一种都不实中任一种都不实际,通常根据软际,通常根据软件的特点将二者件的特点将二者混用。混用。7.4.2自底向上集成自底向上集成优缺点优点:优点:只需设计驱动模块,不需要设计桩模块,测试只需设计驱动模块,不需要设计桩模块,测试用例的设计也相对简单。用例的设计也相对简单。由于涉及到复杂算法和直接输入输出的模块最由于涉及到复杂算法和直接输入输出的模块最先得到组装和测试,可以在早期解决这些最容先得到组装和测试,可以在

78、早期解决这些最容易出问题的部分;易出问题的部分;自底向上集成可以实施多个模块并行测试。自底向上集成可以实施多个模块并行测试。缺点:缺点:对高层控制与判断进行测试的时间较晚,如果对高层控制与判断进行测试的时间较晚,如果到测试的后期才发现整体存在较严重问题,就到测试的后期才发现整体存在较严重问题,就不得不进行较大的返工,此时代价将是巨大的。不得不进行较大的返工,此时代价将是巨大的。7.4.3 不同集成测试策略的比较集成测试策略非渐增式渐增式自顶向下自底向上深度优先宽度优先不同集成测试方法的比较:不同集成测试方法的比较:方法方法优点点缺点缺点非非渐增式增式没有没有错误隔离手段隔离手段主要主要设计错误

79、发现迟潜在可重用代潜在可重用代码测试不充分不充分需要需要驱动程序和存根程序程序和存根程序自自顶向下向下具有具有错误隔离手段隔离手段主要主要设计错误发现早早不需要不需要驱动程序程序潜在可重用代潜在可重用代码测试不充分不充分需要存根程序需要存根程序自底自底向上向上具有具有错误隔离手段隔离手段潜在可重用代潜在可重用代码能充分能充分测试不需要存根程序不需要存根程序主要主要设计错误发现迟需要需要驱动程序程序混合混合具有具有错误隔离手段隔离手段主要主要设计错误发现早早潜在可重用代潜在可重用代码能充分能充分测试混合策略:混合策略:n n改进的自顶向下测试方法改进的自顶向下测试方法n n基本上使用自顶向下的测

80、试方法,但是在早期使用基本上使用自顶向下的测试方法,但是在早期使用自底向上的方法测试软件中的少数关键模块。自底向上的方法测试软件中的少数关键模块。n n能在测试的早期发现关键模块中的错误;测试关键能在测试的早期发现关键模块中的错误;测试关键模块时需要驱动程序。模块时需要驱动程序。n n混合法混合法n n对软件结构中较上层使用的自顶向下方法与对软件对软件结构中较上层使用的自顶向下方法与对软件结构中较下层使用的自底向上方法相结合。结构中较下层使用的自底向上方法相结合。n n兼有两种方法的优缺点,当被测试的软件中关键模兼有两种方法的优缺点,当被测试的软件中关键模块比较多时,这种混合法可能是最好的折衷

81、方法。块比较多时,这种混合法可能是最好的折衷方法。7.4.4回归测试n n回归测试是指重新执行已经做过的测试的某个子回归测试是指重新执行已经做过的测试的某个子集,以保证测试过程中的变化没有带来非预期的集,以保证测试过程中的变化没有带来非预期的副作用。副作用。n n回归测试就是用于保证由于调试或其他原因引起回归测试就是用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的变化,不会导致非预期的软件行为或额外错误的测试活动。的测试活动。n n回归测试可以通过重新执行全部测试用例的一个回归测试可以通过重新执行全部测试用例的一个子集人工地进行,也可以使用自动化的捕获回放子集人工地进

82、行,也可以使用自动化的捕获回放工具自动进行。工具自动进行。 7.5确认测试确认测试也称为验收测试,它的目标是验证软确认测试也称为验收测试,它的目标是验证软件的有效性。件的有效性。那那么么,什什么么样样的的软软件件才才是是有有效效的的呢呢?软软件件有有效效性性的的一一个个简简单单定定义义是是: 如如果果软软件件的的功功能能和和性性能能如如同用户所合理期待的那样,软件就是有效的。同用户所合理期待的那样,软件就是有效的。需需求求分分析析阶阶段段产产生生的的软软件件需需求求规规格格说说明明书书,准准确确地地描描述述了了用用户户对对软软件件的的合合理理期期望望,因因此此是是软软件件有效性的标准,也是进行

83、确认测试的基础。有效性的标准,也是进行确认测试的基础。确确认认测测试试必必须须有有用用户户积积极极参参与与,或或者者以以用用户户为为主进行。主进行。确认测试 (有效性测试) (验收测试)有效 性测试软件配置审查管理机构裁决选择测试人员软件计划用户文档开发文档源程序文本支持环境交用户 运行 维护测试报告软件配置构造测试用例实际运行测试专家鉴定 会验收测试需要采用一系列的黑盒测试来完成。验收测试需要采用一系列的黑盒测试来完成。参加人员有:专门的测试人员,参加人员有:专门的测试人员,必须有用户或客户参加。必须有用户或客户参加。文档:需求规格说明书、用户手册等,应事先文档:需求规格说明书、用户手册等,

84、应事先制定测试计划,确定测试的种类、测制定测试计划,确定测试的种类、测试试进度、设计具体的测试用例。进度、设计具体的测试用例。软件验收测试的中心任务是测试软件是否满足软件验收测试的中心任务是测试软件是否满足合同规定的所有功能和性能,文档资料是否齐合同规定的所有功能和性能,文档资料是否齐全,人机界面以及可移植性、兼容性、可维护全,人机界面以及可移植性、兼容性、可维护性、容错能力等方面是否达到了用户的期望。性、容错能力等方面是否达到了用户的期望。经过验收测试后,其结果可能是以下两种情况之一:1)功能、性能等各项指标满足需求规格说明的要求,用户可以接受;2)功能、性能等各项指标不满足需求规格说明的全

85、部要求,用户不能接受。对于第二种结果,应提交一份问题分析报告。确认测试通常使用黑盒测试法。确认测试通常使用黑盒测试法。应应该该仔仔细细设设计计测测试试计计划划和和测测试试过过程程,保保证证软软件件能能满满足足所所有有功功能能要要求求,能能达达到到每每个个性性能能要要求求,文文档档资资料料是是准准确确而而完完整整的的,此此外外,还还应应该该保保证证软软件件能能满满足足如如安安全全性性、可可移移植植性性、兼兼容容性性和和可可维维护护性性等的要求。等的要求。7.5.1确认测试的范围确认测试的一个重要内容是复查软件配置。确认测试的一个重要内容是复查软件配置。复复查查的的目目的的是是保保证证软软件件配配

86、置置的的所所有有成成分分都都齐齐全全,质质量量符符合合要要求求,文文档档与与程程序序完完全全一一致致,具具有有完完成成软件维护所必须的细节,而且已经编好目录。软件维护所必须的细节,而且已经编好目录。7.5.2软件配置复查AlphaAlpha测测试试由由用用户户在在开开发发者者的的场场所所进进行行,并并且且在在开开发发者者对对用用户户的的“指指导导”下下进进行行测测试试。开开发发者者负负责记录发现的错误和使用中遇到的问题。责记录发现的错误和使用中遇到的问题。总之,总之,AlphaAlpha测试是在受控的环境中进行的。测试是在受控的环境中进行的。BetaBeta测测试试由由软软件件的的最最终终用用

87、户户们们在在一一个个或或多多个个客客户场所进行,开发者通常不在户场所进行,开发者通常不在BetaBeta测试的现场。测试的现场。用用户户记记录录在在BetaBeta测测试试过过程程中中遇遇到到的的问问题题,并并且且定期把这些问题报告给开发者。定期把这些问题报告给开发者。接接收收到到在在BetaBeta测测试试期期间间报报告告的的问问题题之之后后,开开发发者者对对软软件件产产品品进进行行必必要要的的修修改改,并并准准备备向向全全体体客客户发布最终的软件产品。户发布最终的软件产品。7.5.3Alpha和Beta测试测试阶段段主要依据主要依据测试人人员测试方式方式主要主要测试内容内容单元元测试系系统

88、设计文档文档开开发小小组白盒白盒测试接口接口测试路径路径测试 子系子系统测试系系统设计文档文档需求文档需求文档独立独立测试小小组白盒白盒测试黑盒黑盒测试接口接口测试路径路径测试功能功能测试性能性能测试 系系统测试需求文档需求文档独立独立测试小小组黑盒黑盒测试功能功能测试健壮性健壮性测试性能性能测试用用户界面界面测试安全性安全性测试压力力测试可靠性可靠性测试安装安装/反安装反安装测试 验收收测试需求文档需求文档用用户黑盒黑盒测试测试总结:测试总结:1.1.接口测试接口测试n n每个接口可能有多个输入参数,每个参数有每个接口可能有多个输入参数,每个参数有“典型值典型值” ”、“ “边界值边界值”

89、”、“ “异常值异常值” ”之分。之分。n n根据接口的定义,可以推断某种输入应当产生什根据接口的定义,可以推断某种输入应当产生什么样的输出。输出包括函数的返回值和输出参数。么样的输出。输出包括函数的返回值和输出参数。 n n观察是否有程序语句从来没有被执行过。观察是否有程序语句从来没有被执行过。n n要特别留意函数体内的错误处理程序块。要特别留意函数体内的错误处理程序块。 2.2.路径测试路径测试n n想遍历测试几乎是不可能的,不测试或者胡乱找想遍历测试几乎是不可能的,不测试或者胡乱找几条路径测试却又不行。几条路径测试却又不行。 n n输入与对应的输出之间的路径是唯一的。由于接输入与对应的输

90、出之间的路径是唯一的。由于接口测试时的输入是有代表性的,因此相应的路径口测试时的输入是有代表性的,因此相应的路径也具有代表性。也具有代表性。n n路径测试检查表:数据类型、变量值、逻辑判断、路径测试检查表:数据类型、变量值、逻辑判断、循环、内存管理、文件循环、内存管理、文件I/OI/O、错误处理。、错误处理。3.3.功能测试功能测试n n功能测试的基本方法是构造一些合理输入(在需功能测试的基本方法是构造一些合理输入(在需求范围之内),检查输出是否与期望相同。求范围之内),检查输出是否与期望相同。n n功能测试有两种比较好的测试方法:等价划分法功能测试有两种比较好的测试方法:等价划分法和边界值分

91、析法。和边界值分析法。 n n等价划分是指把输入空间划分为几个等价划分是指把输入空间划分为几个“ “等价区间等价区间” ”,在每个,在每个“ “等价区间等价区间” ”中只需要测试一个典型中只需要测试一个典型值就可以了。值就可以了。n n边界值测试法是对等价划分法的补充。除了典型边界值测试法是对等价划分法的补充。除了典型值外还要用边界值作为测试用例。值外还要用边界值作为测试用例。 4.4.健壮性测试健壮性测试n n健壮性是指在异常情况下,软件能正常运行的能健壮性是指在异常情况下,软件能正常运行的能力。力。n n健壮性有两层含义:健壮性有两层含义:n n容错能力。容错性测试通常构造一些不合理的输入

92、容错能力。容错性测试通常构造一些不合理的输入来引诱软件出错。来引诱软件出错。n n恢复能力恢复能力 。恢复测试重点考察以下几项:。恢复测试重点考察以下几项:n n系统能否重新运行;系统能否重新运行;n n有无重要的数据丢失;有无重要的数据丢失;n n是否毁坏了其它相关的软件硬件。是否毁坏了其它相关的软件硬件。 5.5.性能测试性能测试n n性能测试即测试软件处理事务的速度,一是为了性能测试即测试软件处理事务的速度,一是为了检验性能是否符合需求,二是为了得到某些性能检验性能是否符合需求,二是为了得到某些性能数据供人们参考。数据供人们参考。 n n有时人们关心测试的有时人们关心测试的“ “绝对值绝

93、对值” ”。n n有时人们关心测试的有时人们关心测试的“ “相对值相对值” ”。 6.6.用户界面测试用户界面测试n n绝大多数软件拥有图形用户界面。绝大多数软件拥有图形用户界面。n n图形用户界面的测试重点是正确性、易用性和视图形用户界面的测试重点是正确性、易用性和视觉效果。觉效果。n n在评价易用性和视觉效果时,主观性非常强,应在评价易用性和视觉效果时,主观性非常强,应当考虑多个人的观点。当考虑多个人的观点。 7.7.信息安全测试信息安全测试n n信息安全性是指防止系统被非法入侵的能力,既信息安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。属于技术问题又属于管理问题。n

94、n信息安全性测试有如下步骤:信息安全性测试有如下步骤:n n为非法入侵设立目标;为非法入侵设立目标;n n邀请(或悬赏)一些人扮演黑客,让他们想尽办法邀请(或悬赏)一些人扮演黑客,让他们想尽办法入侵系统,实现入侵系统,实现“ “目标目标” ”。n n如果有人成功了,请他详述入侵的过程。如果有人成功了,请他详述入侵的过程。8.8.压力测试压力测试n n压力测试也叫负荷测试,即获取系统能正常运行压力测试也叫负荷测试,即获取系统能正常运行的极限状态。的极限状态。 n n压力测试的主要任务是:构造正确的输入,使劲压力测试的主要任务是:构造正确的输入,使劲折腾系统却让它刚好不瘫痪。折腾系统却让它刚好不瘫

95、痪。 n n压力测试的一个变种是敏感测试。压力测试的一个变种是敏感测试。n n敏感测试目的是发现什么样的输入可能会引发不敏感测试目的是发现什么样的输入可能会引发不稳定现象。稳定现象。 9.9.可靠性测试可靠性测试n n可靠性是指在一定的环境下、给定的时间内、系可靠性是指在一定的环境下、给定的时间内、系统不发生故障的概率。统不发生故障的概率。n n软件可靠性测试可能会花费很长时间。软件可靠性测试可能会花费很长时间。 n n比较实用的办法是,让用户使用该系统,记录每比较实用的办法是,让用户使用该系统,记录每一次发生故障的时刻。计算出相邻故障的时间间一次发生故障的时刻。计算出相邻故障的时间间隔,注意

96、要去掉非工作时间。隔,注意要去掉非工作时间。n n统计出不发生故障的统计出不发生故障的“ “最小时间间隔最小时间间隔” ”、“ “最大最大时间间隔时间间隔” ”和和“ “平均时间间隔平均时间间隔” ”。 10.10.安装安装/ /反安装测试反安装测试n n目前市面上有非常流行的、专门制作安装目前市面上有非常流行的、专门制作安装/ /反安装反安装程序的一些工具,如程序的一些工具,如InstallShelledInstallShelled。n n主要测试工作:主要测试工作: n n至少在标准配置和最低配置两种环境下测试;至少在标准配置和最低配置两种环境下测试;n n如果有安装界面,应当尝试各种选项

97、,如选择如果有安装界面,应当尝试各种选项,如选择“ “全全部部” ”、“ “部分部分” ”、“ “升级升级” ”等。等。 7.6 白盒白盒测试技术测试技术软件测试方法分为两类:静态分析、动态测试。软件测试方法分为两类:静态分析、动态测试。一、静态分析方法一、静态分析方法指指以以人人工工的的、非非形形式式化化的的方方法法对对程程序序进进行行分分析析和测试。和测试。桌桌前前检检查查(Desk Desk CheckingChecking):由由程程序序员员检检查查自自己的程序,对源代码进行分析、检验。己的程序,对源代码进行分析、检验。代代码码会会审审(Code Code Reading Readin

98、g ReviewReview):由由程程序序员员和和测测试试员员组组成成评评审审小小组组,按按照照“常常见见的的错错误误清清单单”,进行会议讨论检查。,进行会议讨论检查。步步行行检检查查(WalkthroughsWalkthroughs):与与代代码码会会审审类类似似,也也要要进进行行代代码码评评审审,但但评评审审过过程程主主要要采采取取人人工工执执行程序的方式,故也称为行程序的方式,故也称为“走查走查”。通过选择适当的测试用例,执行程序。通过选择适当的测试用例,执行程序。常用的方法:常用的方法: 1 1、白盒法、白盒法分析程序的内部逻辑结构,注意选择适当的覆盖标准,分析程序的内部逻辑结构,注

99、意选择适当的覆盖标准,设计测试用例,对主要路径进行尽可能多的测试。设计测试用例,对主要路径进行尽可能多的测试。2 2、黑盒法、黑盒法不考虑程序的内部结构与特性,只根据程序功能不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。或程序的外部特性设计测试用例。二、动态测试方法7.6.1 7.6.1 逻辑覆盖逻辑覆盖l白盒法又称为逻辑覆盖法,其测试用例选择,白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同覆盖标准确定的。是按照不同覆盖标准确定的。语语句句覆覆盖盖判判定定覆覆盖盖条条件件覆覆盖盖判判定定条条件件覆覆盖盖条条件件组组合合覆覆盖盖弱弱强强路路径径覆覆盖盖l例:用例:用

100、白盒法测试以下程序段:白盒法测试以下程序段:lProcedureProcedure(VAR AVAR A,B B,X X:REALREAL););lBEGINBEGINl IF IF (A1) AND (B=0) A1) AND (B=0) l THEN X:=X/A ; THEN X:=X/A ;l IF (A=2) OR (X1) IF (A=2) OR (X1) l THEN X:=X+1 THEN X:=X+1lEND;END;1 1)选择逻辑覆盖标准。)选择逻辑覆盖标准。2 2)按照覆盖标准列出所有情况。)按照覆盖标准列出所有情况。3 3)选择确定测试用例。)选择确定测试用例。4 4

101、)验证分析运行结果与预期结果。)验证分析运行结果与预期结果。白盒法步骤:白盒法步骤:lProcedure Procedure (VAR A,B,X:REALVAR A,B,X:REAL););l BEGIN BEGINl IF IF(A1) AND (B=0) A1) AND (B=0) l THEN X:=X/A ; THEN X:=X/A ;l IF (A=2) OR (X1) IF (A=2) OR (X1) l THEN X:=X+1 THEN X:=X+1l END; END;A1A1ANDANDB=0B=0X:=X/AX:=X/AA=2A=2ORORX1X1X:=X+1X:=X+1

102、Y YN NY YN N白盒法举例:画出程序流程图问问题题:若若ANDAND错错写写 为为 OROR, 或或X1X1错错写写为为X1X1A1ANDB=0ANDB=0T TA=2A=2ORX1ORX1T TX=X/AX=X/AX=X+1X=X+1返回返回F FF FTestcase:Testcase:A=2,B=0,X=4.A=2,B=0,X=4.1、语句覆盖(Statementcoverage):每个语句至少执行一次。语句覆盖是较弱的覆盖语句覆盖是较弱的覆盖判定覆盖仍然是较弱的覆盖判定覆盖仍然是较弱的覆盖2、判定覆盖(Branchcoverage):在1的基础上每个判定的每个分支至少执行一次T

103、estcases:Testcases:A=3,B=0,X=3A=3,B=0,X=3A=2,B=1,X=1A=2,B=1,X=1问题:若问题:若X1X1错错写为写为X1X1A1ANDB=0ANDB=0T TA=2A=2ORX1ORX1T TX=X/AX=X/AX=X+1X=X+1返回返回F FF F3 3、 条件覆盖条件覆盖(Conditioncoverage)(Conditioncoverage):在:在1 1的基础上,使的基础上,使每个判定表达式的每个条件都取到各种可能的结果。每个判定表达式的每个条件都取到各种可能的结果。Testcases:Testcases:A=2,B=0,X=4A=2,

104、B=0,X=4(满足(满足A1,B=0;A=2,X1)A1,B=0;A=2,X1)A=1,B=1,X=1A=1,B=1,X=1( (满足满足A A 1,B1,B 0;A0;A 2,2,X X 1 1)问:条件覆盖问:条件覆盖 ? 判定覆盖判定覆盖答答: :不一定。不一定。反例反例: :A=2,B=0,X=1A=2,B=0,X=1A=1,B=1,X=2A=1,B=1,X=2 4 4、判定、判定/ /条件覆盖:即条件覆盖:即判定覆盖判定覆盖 条件覆盖条件覆盖 入口入口A1A1ANDB=0ANDB=0T TA=2A=2ORX1ORX1T TX=X/AX=X/AX=X+1X=X+1返回返回F FF F

105、l同时满足判断覆盖同时满足判断覆盖和条件覆盖。和条件覆盖。4、判定/条件覆盖Testcases:Testcases:A=2,B=0,X=4A=2,B=0,X=4(满足(满足A1,B=0;A=2,X1)A1,B=0;A=2,X1)A=1,B=1,X=1A=1,B=1,X=1( (满足满足A A 1,B1,B 0;A0;A 2,X2,X 1 1)入口入口A1A1ANDB=0ANDB=0T TA=2A=2ORX1ORX1T TX=X/AX=X/AX=X+1X=X+1返回返回F FF F这两组测试数据就是这两组测试数据就是满足条件测试的两组满足条件测试的两组数据,故判定数据,故判定/ /条件条件测试覆

106、盖并不比条件测试覆盖并不比条件测试强!测试强!5 5、 条件组合覆盖:每个判定表达式中条件的各条件组合覆盖:每个判定表达式中条件的各种可能组合都至少出现一次。种可能组合都至少出现一次。入口入口A1A1ANDB=0ANDB=0T TA=2A=2ORX1ORX1T TX=X/AX=X/AX=X+1X=X+1返回返回F FF F全部可能的条件组合为:全部可能的条件组合为: A1,B=0A1,B=0A1,BA1,B 0 0AA 1,B=01,B=0AA 1,1,B B 00A=2,X1A=2,X1A=2,XA=2,X 11AA 2,X12,X1AA 2,X2,X 11Testcases:Testcas

107、es:A=2,B=0,X=4(TT)A=2,B=0,X=4(TT)A=2.B=1,X=1(FT)A=2.B=1,X=1(FT)A=1,B=0,X=2(FT)A=1,B=0,X=2(FT)A=1,B=1,X=1(FF)A=1,B=1,X=1(FF)问题:没有测试到问题:没有测试到(TFTF)的情形的情形考察考察controlflowgraphcontrolflowgraph的角度,还可考虑下述覆盖:的角度,还可考虑下述覆盖: 6.6.点覆盖点覆盖 7.7.边覆盖边覆盖=语句覆盖语句覆盖8.8.路径覆盖路径覆盖(Pathcoverage):(Pathcoverage):每条可能的路径都至少执每条可

108、能的路径都至少执行一次,若图中有环,则每行一次,若图中有环,则每个环至少经过一次。个环至少经过一次。= =判定覆盖判定覆盖Testcases:Testcases:A=1,B=1,A=1,B=1,X=1X=1A=1,B=1,A=1,B=1,X=2X=2A=3,B=0,A=3,B=0,X=1X=1A=2,B=0,A=2,B=0,X=4X=49.9.路径覆盖路径覆盖 条件组合覆盖条件组合覆盖三角形问题n n使用基本路径设计测试用例方法推导三角形问题的测试用例使用基本路径设计测试用例方法推导三角形问题的测试用例81-8681-8687878888929299-10099-100939310210295

109、95969697-9897-9889-9089-909494三角形问题环复杂度n n环复杂度环复杂度n n闭合区域的数目闭合区域的数目 =5=5n n二值判定节点个数二值判定节点个数 +1+1=4+1=5=4+1=5n n边的数目边的数目- -节点的数目节点的数目 +2+2=15-12+2=5=15-12+2=581-8681-8687878888929299-10099-10093931021029595969697-9897-9889-9089-909494基本路径和测试用例(1)n n基本路径和测试用例基本路径和测试用例1.1.81-86-87-88-92-93-95-97-81-86-

110、87-88-92-93-95-97-98-10298-102相应的测试用例相应的测试用例: :测试输入测试输入 =(68,68,56)=(68,68,56)预期结果预期结果 =这是一个等腰三角形!这是一个等腰三角形!2.2.81-86-87-88-92-93-95-96-81-86-87-88-92-93-95-96-102102相应的测试用例相应的测试用例: :测试输入测试输入 =(68,60,56)=(68,60,56)预期结果预期结果 =这是一个不等边三角形!这是一个不等边三角形!81-8681-8687878888929299-10099-10093931021029595969697

111、-9897-9889-9089-909494n n基本路径和测试用例基本路径和测试用例3.3.81-86-87-88-92-93-94-10281-86-87-88-92-93-94-102相应的测试用例相应的测试用例: :测试输入测试输入 =(68,68,68)=(68,68,68)预期结果预期结果=这是一个等边三角形!这是一个等边三角形!4.4.81-86-87-89-90-92-99-100-10281-86-87-89-90-92-99-100-102相应的测试用例相应的测试用例: :测试输入测试输入 =(68,8,60)=(68,8,60)预期结果预期结果=这不是一个三角形!这不是一

112、个三角形!基本路径和测试用例(2)81-8681-8687878888929299-10099-10093931021029595969697-9897-9889-9089-9094947.6.2 控制结构测试 一、基本路径测试一、基本路径测试 基本路径测试是基本路径测试是Tom McCabeTom McCabe提出的一种白盒测试技术。提出的一种白盒测试技术。使用这种技术设计测试用例时,首先计算过程设计结果的逻使用这种技术设计测试用例时,首先计算过程设计结果的逻辑复杂度,并以该复杂度为指南定义执行路径的基本集合,辑复杂度,并以该复杂度为指南定义执行路径的基本集合,从该基本集合导出的测试用例可以

113、保证程序中的每条语句至从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取少执行一次,而且每个条件在执行时都将分别取true(true(真真) )和和false(false(假假) )值。值。 使用基本路径测试技术设计测试用例的步骤如下。使用基本路径测试技术设计测试用例的步骤如下。基本路径测试法 通过分析由控制构造的环路的复杂性,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。 基本路径测试步骤: 导出程序流程图的拓扑结构-流图程序图) 计算流图G的环路复杂度V(G) 确定只包含独立路径的基本路径集 设计测试用例独立路径独立路径:至少沿一

114、条新的边移动的路径独立路径:至少沿一条新的边移动的路径1 17 76 62,32,38 89 9101011114,54,5路径路径1 1:1-111-11路径路径2 2:1-2-3-4-5-10-1-111-2-3-4-5-10-1-11路径路径3 3:1-2-3-6-8-9-10-1-111-2-3-6-8-9-10-1-11路径路径4 4:1-2-3-6-7-9-10-1-111-2-3-6-7-9-10-1-11对以上路径的遍历,就对以上路径的遍历,就是至少一次地执行了程是至少一次地执行了程序中的所有语句。序中的所有语句。【例】试用基本路径测试法对如下的PDL描述或如下图所示的程序流程

115、图设计测试用例。该例子描述了最多输入50个值(以1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。PROCEDUREaveragePROCEDUREaverageINTERFACERETURNSaverageINTERFACERETURNSaverage,sumsum,n1n1;* *n1n1为有效成绩的个数。为有效成绩的个数。* *INTERFACEACCEPTSscoreINTERFACEACCEPTSscore;TYPEscore1TYPEscore1,50ISSCALARARRAY50ISSCALARARRAY;TYPEaverageTYPEaverage,n1n1,

116、n2n2,sumISSCALARsumISSCALAR;* *n2n2为输入值的个数。为输入值的个数。* *TYPEiISINTEGERTYPEiISINTEGER;i=1i=1;n1=n2=0n1=n2=0;sum=0sum=0;DOWHILEDOWHILE(scorei1scorei1)ANDAND(n250n2=0scorei=0)ANDAND(scorei=100scorei0IFn10THENaverage=sum/n1THENaverage=sum/n1;ELSEaverage=1ELSEaverage=1;ENDIFENDIF;ENDaverageENDaverage 过程过程a

117、verageaverage的程序流程图的程序流程图开始开始 i=1i=1,n1=n2=0n1=n2=0,sum=0sum=0Scorei-1ANDn250Scorei-1ANDn20ANDscorei0ANDscorei0n10average=sum/n1average=sum/n1average=1average=1返回返回F FF FF FT TT TT T1 12 2和和3 34 45 5和和6 67 78 89 9101011111212解:可按如下步骤解:可按如下步骤设计测试用例:设计测试用例:步骤步骤1 1:根据详:根据详细设计或代码导细设计或代码导出过程出过程averageave

118、rage的流图。的流图。共有共有1616条边条边6 6个区域个区域1212个结点个结点5 5个判定个判定1 12 23 34 45 56 67 78 89 9111110101212R R1 1R R2 2R R3 3R R4 4R R5 5R R6 6步骤2:据流图确定环形复杂性度量V(G):1)V(G)=EN+2=1612+2=6;其中E为流图中的边数,N为结点数;2)V(G)=6(个区域);3)V(G)=P+1=5+1=6;其中P为判定结点的个数。在流图中,结点2、3、5、6、9是判定结点。步步骤骤3 3:确确定定基基本本路路径径集集合合(即即独独立立路路径径集集合合)。一一条条独独立立

119、路路径径是是指指,和和其其他他的的独独立立路路径径相相比比,至至少少引引入入一一个个新新处处理理语语句句或或一一个个新新判判断断的的程程序序通通路路。V V(GG)值值正正好好等等于于该该程程序序的的独独立立路路径径的条数。于是可确定的条数。于是可确定6 6条独立的路径:条独立的路径:路径路径1 1:12910121291012路径路径2 2:12911121291112路径路径3 3:1239101212391012路径路径4 4:12345821234582路径路径5 5:1234568212345682路径路径6 6:123456782123456782步步骤骤4 4:为为每每一一条条独

120、独立立路路径径各各设设计计一一组组测测试试用用例例,以便强迫程序沿着该路径至少执行一次。以便强迫程序沿着该路径至少执行一次。1 1)路径)路径1 1的测试用例:的测试用例:scorek=scorek=有效分数值,当有效分数值,当kiki;scorei=1scorei=1,2i502i50;期期望望结结果果:根根据据输输入入的的有有效效分分数数算算出出正正确确的的分分数数个数个数n1n1、总分、总分sumsum和平均分和平均分averageaverage。2 2)路径)路径2 2的测试用例:的测试用例:score1=1score1=1;期望的结果:期望的结果:average=1average=1

121、,其他量保持初值。,其他量保持初值。3)路径3的测试用例:输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。4)路径4的测试用例:scorei=有效分数,当i50;scorek0,ki;期望结果:根据输入的有效分数算出正确的 分 数 个 数 n1、 总 分 sum和 平 均 分average。5)路径5的测试用例:scorei=有效分数,当i100,ki;期望结果:根据输入的有效分数算出正确的 分 数 个 数 n1、 总 分 sum和 平 均 分average。6)路径6的测试用例:scorei=有效分数,当i50;期望结果:

122、根据输入的有效分数算出正确的 分 数 个 数 n1、 总 分 sum和 平 均 分average。二、条件测试n n条条件件测测试试是是检检查查程程序序模模块块中中所所包包含含逻逻辑辑条条件件的的测试用例设计方法测试用例设计方法n n主要用于测试程序中主要用于测试程序中条件错误条件错误和程序的其他错误和程序的其他错误n n一一般般的的说说,如如果果程程序序的的测测试试集集能能够够有有效效地地检检测测程程序序中中的的条条件件错错误误,则则该该测测试试集集可可能能也也会会有有效效地地检检测程序中的其他错误测程序中的其他错误n n条件测试策略主要优点条件测试策略主要优点n n条件测试的覆盖率计算相对

123、简单条件测试的覆盖率计算相对简单n n程程序序的的条条件件测测试试覆覆盖盖率率为为产产生生另另外外的的程程序序测测试试提提供了指导供了指导n n条件式分析条件式分析n n一一个个简简单单条条件件是是一一个个布布尔尔变变量量或或一一个个可可能能带带有有NOTNOT操操作作符符的的关系表达式,形式为:关系表达式,形式为:E1E1关系操作符关系操作符E2E2 其中其中E1E1和和E2E2是算术表达式,而关系操作符是下列之一:是算术表达式,而关系操作符是下列之一:“ “” ”、“”“”、“ “=”=”、“”“”(“ (“!=”)=”)、“ “” ”、或或“”“”n n复杂条件由简单条件、布尔操作符和括

124、弧组成复杂条件由简单条件、布尔操作符和括弧组成n n设设可可用用于于复复杂杂条条件件的的布布尔尔算算子子包包括括OROR,ANDAND和和NOTNOT,不不含含关关系系表表达达式式的的条条件件称称为为布布尔尔表表达达式式。所所以以条条件件的的成成分分类类型型包包括:括:n n布尔操作符布尔操作符n n布尔变量布尔变量n n布尔括弧布尔括弧( (括住简单或复杂条件括住简单或复杂条件) )n n关系操作符或算术表达式关系操作符或算术表达式n n条件式错误条件式错误n n如果条件不正确,则至少有一个条件成分不正确n n条件错误一般有以下类型n n布尔操作符错误布尔变量错误布尔操作符错误布尔变量错误n

125、 n布尔括弧错误布尔括弧错误n n关系操作符错误关系操作符错误n n算术表达式错误算术表达式错误三、循环测试1 1)对对于于最最多多为为n n次次的的单单循循环环,可可设设计计测测试试用用例例实实现下列测试:现下列测试:跳过循环,即一次也不执行;跳过循环,即一次也不执行;仅循环仅循环1 1次;次;循环循环2 2次;次;循环循环mm次,次,mnm100 无效等价类 成绩0等价类划分的启发式规则:等价类划分的启发式规则:n n如果规定了输入数据的个数,则类似地也可划分如果规定了输入数据的个数,则类似地也可划分出一个有效的等价类和两个无效的等价类;出一个有效的等价类和两个无效的等价类;n n如果规定

126、了输入数据的一组值,而且程序对不同如果规定了输入数据的一组值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个输入值做不同处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类有效的等价类,此外还有一个无效的等价类( (任一任一个不允许的输入值个不允许的输入值) );例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类n n如果规定了输入数据必须遵循的规则,则可以划如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类分出一个有效的等价类( (符合规则符合规则) )和若干个无

127、效的和若干个无效的等价类等价类( (从各种不同角度违反规则从各种不同角度违反规则) );例:例:(PASCAL)(PASCAL)语言规定,每个语句以语言规定,每个语句以“ “;” ”结结 束束 有效类有效类1 1个;无效类若干(以个;无效类若干(以“ “,” ”结束、结束、以以“ “:” ”结束、以空格结束等等)结束、以空格结束等等)n n如果规定了输入数据为整型,则可以划分出正整如果规定了输入数据为整型,则可以划分出正整数、零和负整数等数、零和负整数等3 3个有效类;个有效类;n n如果程序的处理对象是表格,则应该使用空表,如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。以及

128、含一项或多项的表。设计测试方案时两个步骤:设计测试方案时两个步骤:n n设计一个新的测试方案以尽可能多地覆盖尚未被设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤直到所有有效覆盖的有效等价类,重复这一步骤直到所有有效等价类都被覆盖为止;等价类都被覆盖为止;n n设计一个新的测试方案,使它覆盖一个而且只覆设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。直到所有无效等价类都被覆盖为止。 例例1 1:在某一在某一PASCALPASCAL语语言版本中言版本中规规定:定:

129、n n标识标识符是由字母开符是由字母开头头,后跟字母或数字的任意,后跟字母或数字的任意组组合构成。合构成。n n有效字符数有效字符数为为8 8个,最大字符数个,最大字符数为为8080个。个。n n标识标识符必符必须须先先说说明,再使用。明,再使用。n n在同一在同一说说明明语语句中,句中,标识标识符至少必符至少必须须有一个。有一个。选取选取9 9个测试用例,覆盖了所有的等价类:个测试用例,覆盖了所有的等价类: VARxVARx,T1234567T1234567:REALREAL;.覆盖覆盖(1),(2),(4),(8),(9),(12),(14)(1),(2),(4),(8),(9),(12)

130、,(14)VARVAR:REALREAL;覆盖覆盖(3)(3)VARxVARx,:,:REAL;REAL;覆盖覆盖(5)(5)VART12345678VART12345678:REALREAL;覆盖覆盖(6)(6) VART12345.VART12345.:REALREAL;覆盖覆盖(7)(7)多于多于8080个字符个字符 VART$VART$:CHARCHAR;覆盖覆盖(10)(10)VARGOTOVARGOTO:INTEGERINTEGER;覆盖覆盖(11)(11)VAR2TVAR2T:REALREAL;覆盖覆盖(13)(13)VARPARVARPAR:REALREAL;覆盖覆盖(15)(

131、15)BEGIN.BEGIN.PAP:=SIN(3.14*0.8)/6PAP:=SIN(3.14*0.8)/6; 例例2 2:某城市的电话号码由某城市的电话号码由3 3个部分组成:个部分组成: n n地区码地区码空白或空白或3 3位数字;位数字;n n前缀前缀以大于等于以大于等于 55开头的开头的4 4位数字;位数字;n n后缀后缀44位数字。位数字。输入条件入条件有效等价有效等价类无效等价无效等价类地区地区码(1) 空白空白(2) 3位数字位数字(5) 有非数字字符有非数字字符(6) 少于少于3位数字位数字(7) 多于多于3位数字位数字前前缀(3) 大于等于大于等于5开开头的的4位数字位数字

132、(8) 有非数字字符有非数字字符(9) 少于少于4位数字位数字(10) 多于多于4位数字位数字(11) 开开头数字小于数字小于5后后缀(4) 4位数字位数字(12) 有非数字字符有非数字字符(13) 少于少于4位数字位数字(14) 多于多于4位数字位数字测试用例:略测试用例:略 【例】设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在1990年1月2003年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的“日期检查功能”。1)划分等价类并编号表:等价类划分的结果输入等价入等价类有效等价有效等价类无效等价无效等价类日期的

133、日期的类型型及及长度度6位数字字符位数字字符有非数字字符有非数字字符少于少于6位数字字符位数字字符多于多于6位数字字符位数字字符年份范年份范围在在19902003之之间小于小于1990大于大于2003月份范月份范围在在0112之之间等于等于00大于大于122)设计测试用例,以便覆盖所有的有效等价类在表中列出了3个有效等价类,编号分别为、,设计的测试用例如下:测试数据期望结果覆盖的有效等价类200211输入有效、3)为每一个无效等价类设计一个测试用例,设计结果如下:测试数据期望结果覆盖的无效等价类95June无效输入20036无效输入2001006无效输入198912无效输入200401无效输入

134、200100无效输入200113无效输入7.7.2.边值分析法n n经验表明,处理边界情况时程序最容易发生错误。经验表明,处理边界情况时程序最容易发生错误。例如,许多程序错误出现在下标、纯量、数据结例如,许多程序错误出现在下标、纯量、数据结构和循环等等的边界附近。构和循环等等的边界附近。n n使用边界值分析方法设计测试方案首先应该确定使用边界值分析方法设计测试方案首先应该确定边界情况。选取的测试数据应该刚好等于、刚刚边界情况。选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值。小于和刚刚大于边界值。n n通常设计测试方案时总是联合使用等价划分和边通常设计测试方案时总是联合使用等价划分和边界值

135、分析两种技术。界值分析两种技术。 基本思想:基本思想: 选择等价类的边缘值作为测试用例,选择等价类的边缘值作为测试用例,让每个等价类的边界都得到测试,选择测试用例让每个等价类的边界都得到测试,选择测试用例既考虑输入亦考虑输出。既考虑输入亦考虑输出。 分析步骤:分析步骤: A A 先划分等价类。先划分等价类。B B 选择测试用例,测试等价类边界。选择测试用例,测试等价类边界。 边界边界选择原则:选择原则: A A 按照输入值范围的边界。按照输入值范围的边界。B B 按照输入按照输入/ /输出值个数的边界。输出值个数的边界。C C 输出值域的边界。输出值域的边界。D D 输入输入/ /输出有序集的

136、边界。输出有序集的边界。7.7.2.边值分析法 A A 按照输入值范围的边界。按照输入值范围的边界。 例如:输入值的范围是例如:输入值的范围是-1.0-1.0至至1.01.0,则可选择用例,则可选择用例: : 1.01.0、1.01.0、-1.001-1.001、1.0011.001。 B B 按照输入按照输入/ /输出值个数的边界。输出值个数的边界。 例如:输入文件可有例如:输入文件可有1-2551-255个记录,则设计用例:个记录,则设计用例:文件的记录数为文件的记录数为 0 0个、个、1 1个、个、255255个、个、256256个。个。 C C 输出值域的边界。输出值域的边界。 例如:

137、检索文献摘要,最多例如:检索文献摘要,最多4 4篇。设计用例:篇。设计用例:可检索可检索0 0篇、篇、1 1篇、篇、4 4篇,和篇,和5 5篇(错误)。篇(错误)。 D D 输入输入/ /输出有序集(如顺序文件、线性表)的边界。输出有序集(如顺序文件、线性表)的边界。 应选择第一个元素和最后一个元素。应选择第一个元素和最后一个元素。边值分析法举例边值分析法举例“ “报表日期报表日期” ”边界值分析法测试用例边界值分析法测试用例输入输入条件条件报表日报表日期的类期的类型及长型及长度度1 1个数字字符个数字字符5 5个数字字符个数字字符7 7个数字字符个数字字符有有1 1个非数字字符个非数字字符全

138、部是非数字字符全部是非数字字符6 6个数字字符个数字字符显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错输入有效输入有效日期日期范围范围月份月份范围范围测试用例说明测试用例说明测试数据测试数据 期望结果期望结果选取理由选取理由5 52001520015200100520010052001.52001.5MAY-MAY-200105200105月份为月份为1 1月月月份为月份为1212月月月份月份1121220010120010120011220011220010020010020011320011320010120010120051220051220010020

139、0100200513200513输入有效输入有效输入有效输入有效显示出错显示出错显示出错显示出错输入有效输入有效输入有效输入有效显示出错显示出错显示出错显示出错在有效范围在有效范围边界上选取边界上选取数据数据仅有仅有1 1个合法字符个合法字符比有效长度少比有效长度少1 1比有效长度多比有效长度多1 1只有只有1 1个非法字符个非法字符6 6个非法字符个非法字符类型及长度均有效类型及长度均有效最小日期最小日期最大日期最大日期刚好小于最小日期刚好小于最小日期刚好大于最大日期刚好大于最大日期最小月份最小月份最大月份最大月份刚好小于最小月份刚好小于最小月份刚好大于最大月份刚好大于最大月份7.7.3错误

140、推测n n不同类型不同特点的程序通常又有一些特殊的容不同类型不同特点的程序通常又有一些特殊的容易出错的情况。因此必须依靠测试人员的经验和易出错的情况。因此必须依靠测试人员的经验和直觉,从各种可能的测试方案中选出一些最可能直觉,从各种可能的测试方案中选出一些最可能引起程序出错的方案。引起程序出错的方案。n n错误推测法在很大程度上靠直觉和经验进行。它错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方发生错误的特殊情况,并且根据它们选择测试方案。案。 例如,测试一个对线性表(比如数

141、组)进行排序的程序,可推测列出以下几项需要特别测试的情况:1)输入的线性表为空表;2)表中只含有一个元素;3)输入表中所有元素已排好序;4)输入表已按逆序排好;5)输入表中部分或全部元素相同。于是,可以针对以上列出的每一种情况各设计一个测试用例。组合数据测试实践表明,在单个测试用例没有测试出错误的情况下,采用测试数据的某种组合却可能检测出程序中隐藏很深的错误。组合数据测试法可以采用的有效工具有判定表、判定树等。以判定表为例,即列出输入数据的各种组合情况和程序相应的动作、可能的输出结果之间的对应关系,然后为判定表的每一列至少设计一个测试用例。实用策略实用策略(PracticalStrategie

142、s)(PracticalStrategies)黑盒设计黑盒设计 白盒补充白盒补充 在任何情况下都应该使用在任何情况下都应该使用边界值分析边界值分析的方法;的方法; 必要时用必要时用等价划分法等价划分法补充;补充; 必要时再用必要时再用错误推测法错误推测法补充;补充; 对照程序逻辑,检查测试方案。可根据对程序可靠性对照程序逻辑,检查测试方案。可根据对程序可靠性的要求采用不同的的要求采用不同的逻辑覆盖标准逻辑覆盖标准,必要时补充一些测,必要时补充一些测试方案。试方案。注注: :即使用上述综合策略设计测试方案,仍不能保证发现即使用上述综合策略设计测试方案,仍不能保证发现一切错误。例如一切错误。例如L

143、ucentLucent公司经过包括逐行检查源代码公司经过包括逐行检查源代码在内的多方面测试之后,其软件能达标运行的成功率在内的多方面测试之后,其软件能达标运行的成功率为为80%。补充:集成测试文档集成测试文档即测试说明书(testspecifications)应给出集成的总体规划和某些特殊测试的描述。它将作为软件配置的一部分提交给用户。测试说明书的主要内容提纲如下:测试说明书的主要内容提纲1)测试范围2)测试计划A测试的各个阶段和划分模块群情况B进度安排C开销软件(驱动和桩模块)D环境和资源3)各个模块群测试过程的描述,包括:A集成的顺序用途被测模式B模块群中各模块单元测试的情况模块的测试描述

144、开销软件描述期望的结果C测试环境特殊工具和技术开销软件的描述D测试用例E模块群的期望结果等4)实际测试结果5)参考文献6)附录。7.8调试n n调试是在测试发现错误之后排除错误的过程。调试是在测试发现错误之后排除错误的过程。n n软件错误的外部表现和它的内在原因之间可能并软件错误的外部表现和它的内在原因之间可能并没有明显的联系。没有明显的联系。n n调试就是把症状和原因联系起来的尚未被人深入调试就是把症状和原因联系起来的尚未被人深入认识的智力过程。认识的智力过程。 测试测试 发现错误发现错误调试调试 改正错误改正错误 调试(纠错技术) 测试是找出软件错误的过程, 调试是确定错误的位置、性质 并

145、纠正。 调试的困难在于错误的定位.调试的概念调试是在进行了一次成功的测试之后立即开始的。调试的目的是确定错误的位置和引起错误的原因,并加以改正。因此,又称为排错或纠错。实践表明,错误定位是软件工程中最困难的工作,确定发生错误的位置和内在原因所需的工作量几乎占整个调试工作量的90%。7.8.1调试过程n n调试发生在测试之后。调试发生在测试之后。n n调试过程从执行一个测试用例开始,评估测试结调试过程从执行一个测试用例开始,评估测试结果,如果发现实际结果与预期结果不一致,则这果,如果发现实际结果与预期结果不一致,则这种不一致就是一个症状,它表明在软件中存在着种不一致就是一个症状,它表明在软件中存

146、在着隐藏的问题。隐藏的问题。n n调试过程试图找出产生症状的原因,以便改正错调试过程试图找出产生症状的原因,以便改正错误。误。 执行测试执行测试用例用例测试测试用例用例结果结果测试测试附加附加测试测试被怀疑的被怀疑的原因原因已识别的已识别的原因原因纠正纠正回归测试回归测试测试过程测试过程隐藏在程序中的错误的特殊的性质包括:隐藏在程序中的错误的特殊的性质包括:错误的表现远离引起错误的位置和内在原因,错误的表现远离引起错误的位置和内在原因,尤其对高度耦合的程序结构更是如此;尤其对高度耦合的程序结构更是如此;某些错误现象可能是假象;某些错误现象可能是假象;纠正一个错误可能引起多个错误,也可能掩盖纠正

147、一个错误可能引起多个错误,也可能掩盖其他错误;其他错误;由于操作员的疏忽致使错误现象无法重现,很由于操作员的疏忽致使错误现象无法重现,很难追踪;难追踪;错误可能不是直接由程序引起的;错误可能不是直接由程序引起的;某些输入条件难于精确地再构造(如某些实时某些输入条件难于精确地再构造(如某些实时系统的输入次序不确定);系统的输入次序不确定);错误现象时有时无。错误现象时有时无。7.8.2调试途径有下列有下列3 3种调试途径可以采用:种调试途径可以采用:n n蛮干法蛮干法n n回溯法回溯法n n原因排除法原因排除法 1.1.蛮干法蛮干法n n蛮干法可能是寻找软件错误原因的最低效的方法。蛮干法可能是寻

148、找软件错误原因的最低效的方法。其他方法都失败时才使用这种方法。其他方法都失败时才使用这种方法。 n n这种方法印出内存的内容,激活对运行过程的跟这种方法印出内存的内容,激活对运行过程的跟踪,在程序中到处都写上踪,在程序中到处都写上WRITEWRITE(输出)语句。(输出)语句。n n更多情况下只会浪费时间和精力。必须首先进行更多情况下只会浪费时间和精力。必须首先进行周密的思考,有明确的目的,尽量减少无关信息周密的思考,有明确的目的,尽量减少无关信息的数量。的数量。 调试技术调试技术 输出存储器内容输出存储器内容(memorydump):(memorydump):以八进制或十六进制的形式印出存储

149、器的内容。以八进制或十六进制的形式印出存储器的内容。缺点:缺点: 输出信息量极大,不易输出信息量极大,不易 解读且大多无用;解读且大多无用; 输出的是程序在某一输出的是程序在某一 时刻的静态情况,且时刻的静态情况,且 往往不是出错时的状态。往往不是出错时的状态。 插入插入“ “watchpoints”(watchpoints”(或称或称“ “spypoints”)spypoints”) 人工插入打印人工插入打印 缺点:缺点: 改动源代码,增加了出错机会;改动源代码,增加了出错机会; 打印信息可能太多。打印信息可能太多。 自动调试工具自动调试工具 无须打印额外信息,且不改动源代无须打印额外信息,

150、且不改动源代码码2.2.回溯法回溯法n n回溯是一种相当常用的调试方法,当调试小程序回溯是一种相当常用的调试方法,当调试小程序时这种方法是有效的。时这种方法是有效的。n n具体做法是,从发现症状的地方开始,人工沿程具体做法是,从发现症状的地方开始,人工沿程序的控制流往回追踪分析源程序代码,直到找出序的控制流往回追踪分析源程序代码,直到找出错误原因为止。错误原因为止。n n随着程序规模扩大,应该回溯的路径数目也变得随着程序规模扩大,应该回溯的路径数目也变得越来越大,以至彻底回溯变成完全不可能了。越来越大,以至彻底回溯变成完全不可能了。 3.3.原因排除法原因排除法n n对分查找法对分查找法n n

151、归纳法归纳法n n演绎法演绎法对分查找法:对分查找法:n n如果已经知道每个变量在程序内若干个关键点的正确值,如果已经知道每个变量在程序内若干个关键点的正确值,则可以用赋值语句或输入语句在程序中点附近则可以用赋值语句或输入语句在程序中点附近“ “注入注入” ”这这些变量的正确值,然后运行程序并检查所得到的输出。些变量的正确值,然后运行程序并检查所得到的输出。n n如果输出结果是正确的,则错误原因在程序前半部分;反如果输出结果是正确的,则错误原因在程序前半部分;反之,错误原因在程序后半部分。之,错误原因在程序后半部分。n n对错误原因所在的那部分重复使用这个方法,直到把出错对错误原因所在的那部分

152、重复使用这个方法,直到把出错范围缩小到容易诊断的程度为止。范围缩小到容易诊断的程度为止。输出正确输出正确错误在前半段错误在前半段错误在后半段错误在后半段N NY Y归纳法:归纳法:n n是从个别现象推断出一般性结论的思维方法。是从个别现象推断出一般性结论的思维方法。n n首先把和错误有关的数据组织起来进行分析,以首先把和错误有关的数据组织起来进行分析,以便发现可能的错误原因。便发现可能的错误原因。n n然后导出对错误原因的一个或多个假设,并利用然后导出对错误原因的一个或多个假设,并利用已有的数据来证明或排除这些假设。已有的数据来证明或排除这些假设。演绎法:演绎法:n n从一般原理或前提出发,经

153、过排除和精化的过程从一般原理或前提出发,经过排除和精化的过程推导出结论。推导出结论。n n首先设想出所有可能的出错原因,然后试图用测首先设想出所有可能的出错原因,然后试图用测试来排除每一个假设的原因。试来排除每一个假设的原因。 收集数据收集数据组织数据组织数据研究数据研究数据间的关系间的关系提出假设提出假设证明假设证明假设纠正错误纠正错误能能能能不不能能不能不能 归纳法:从错误症状中找出规律,推断根源。归纳法:从错误症状中找出规律,推断根源。 由于归纳法是从特殊到一般的推断过程,所以需要组织整理数据,以发现规律。 常以3W1H形式组织可用的数据:“What” 列出一般现象;“Where”说明发

154、现现象的地点;“When” 列出现象发生时所有已知情况;“How” 说明现象的范围和量级;“Yes”描述出现错误的3W1H;“No”作为比较,描述了没有错误的3W1H。通过分析找出矛盾来。例:学生考试评卷报告。要求输出成绩排名、平均分、试题分例:学生考试评卷报告。要求输出成绩排名、平均分、试题分析报告。析报告。发现错误:对发现错误:对5151个学生评分个学生评分 中间值为中间值为2626(期望值(期望值8080)对对1 1个学生评个学生评分分 中间值为中间值为1 1观察分析:取奇数时出错?观察分析:取奇数时出错? 打印的是中间学生的编号而非分数?打印的是中间学生的编号而非分数?加测试来验证上述

155、推测。加测试来验证上述推测。演绎法:演绎法:n n从一般原理或前提出发,经过排除和精化的过程从一般原理或前提出发,经过排除和精化的过程推导出结论。推导出结论。n n演绎法排错是测试人员首先根据已有的测试用例,演绎法排错是测试人员首先根据已有的测试用例,设想及枚举出所有可能出错的原因做为假设;然设想及枚举出所有可能出错的原因做为假设;然后再用原始测试数据或新的测试,从中逐个排除后再用原始测试数据或新的测试,从中逐个排除不可能正确的假设;最后,再用测试数据验证余不可能正确的假设;最后,再用测试数据验证余下的假设确是出错的原因。下的假设确是出错的原因。列举可能列举可能的原因的原因排除不正确排除不正确

156、的假设的假设精化余下精化余下的假设的假设证明证明假设假设收集更多数据收集更多数据纠正纠正错误错误有剩余有剩余能能不能不能无剩余无剩余演绎法:普通演绎法:普通 特殊特殊从假设中逐步排除、精化,从而导出错误根源。从假设中逐步排除、精化,从而导出错误根源。列举所有可能出错原因的假设:把所有可能的错误原因列成表。进而可以组织、分析现有数据。利用已有的测试数据,排除不正确的假设:仔细分析已有的数据,寻找矛盾,力求排除前一步列出所有原因。如果所有原因都被排除了,则需要补充一些数据(测试用例),以建立新的假设。改进余下的假设:利用已知的线索,进一步改进余下的假设,使之更具体化,以便可以精确地确定出错位置。证

157、明余下的假设7.9 软件可靠性、基本概念、基本概念 1.1.软件可靠性的定义软件可靠性的定义 程序在给定的程序在给定的时间间隔时间间隔内,按照规格说明书的规定成功地内,按照规格说明书的规定成功地运行的概率。运行的概率。2.2.软件的可用性软件的可用性 程序在给定的程序在给定的时间点时间点,按照规格说明书的规定成功地运行,按照规格说明书的规定成功地运行的概率。的概率。 如果在一段时间间隔内,软件系统故障停机时间分别为如果在一段时间间隔内,软件系统故障停机时间分别为t td1d1,t td2d2,正常运行时间分别为,正常运行时间分别为t tu1u1,t tu2u2.0 0t tt tu1u1t t

158、d1d1t tu2u2t td2d2其中其中 T Tupup = t = tuiui, Tdown = tdi, Tdown = tdi MTTF(Mean time to failure)MTTF(Mean time to failure):平均无故障时间:平均无故障时间 MTTR(Mean time to repair)MTTR(Mean time to repair):平均维修时间:平均维修时间 则 系统的稳态可用性为:、估算平均无故障时间、估算平均无故障时间MTTFMTTF的方法的方法1.1.符号符号E ET T测试之前程序中的故障总数;测试之前程序中的故障总数;I IT T测试长度(

159、机器指令总数);测试长度(机器指令总数);测试(包括调试)时间;测试(包括调试)时间;E Ed d( () )在在0 0到期间发现的错误数;到期间发现的错误数;E Ec c( () ) 在在0 0到期间改正的错误数。到期间改正的错误数。2.2.基本假定基本假定(1 1)在类似的程序中,单位长度里的故障数)在类似的程序中,单位长度里的故障数E ET T / I/ IT T近似为常数。近似为常数。 0.5 100.5 10-2-2 E ET T / I/ IT T 2 10 2 10-2-2 (2 2)失败率正比于软件中剩余的(潜藏的)故障数,)失败率正比于软件中剩余的(潜藏的)故障数,而平均无故

160、障时间而平均无故障时间MTTFMTTF与剩余的故障数成反比。与剩余的故障数成反比。 为了简化,假设发现的每一个错误都立即正确地改为了简化,假设发现的每一个错误都立即正确地改正了(调试过程没有引入新的故障),因此正了(调试过程没有引入新的故障),因此 E Ed d( () = E) = Ec c( () ) 剩余的故障数为剩余的故障数为 E Er r( () = E) = ET T E Ec c( () ) 单位长度程序中剩余的故障数为单位长度程序中剩余的故障数为 r r( () = E) = ET T / I/ IT T E Ec c( () / I) / IT T 3. 3. 估算平均无故障

161、时间估算平均无故障时间 经验表明,平均无故障时间与单位长度程序中剩经验表明,平均无故障时间与单位长度程序中剩余的错误数成反比,即余的错误数成反比,即 其中其中K K为常数,它的值应该根据经验选取。美国为常数,它的值应该根据经验选取。美国的一些统计数字表明,的一些统计数字表明,K K的典型值是的典型值是200200。因此,也。因此,也可以根据对软件平均无故障时间的要求,估计需要可以根据对软件平均无故障时间的要求,估计需要改正多少个错误之后,测试工作才能结束。改正多少个错误之后,测试工作才能结束。换个角度看问题换个角度看问题 4. 4. 估计错误总数的方法估计错误总数的方法 (1) (1) 植入错

162、误法植入错误法 使用这种估计方法,在测试之前由专人在程序使用这种估计方法,在测试之前由专人在程序中随机地植入一些错误,测试之后,根据测试小组中随机地植入一些错误,测试之后,根据测试小组发现的错误中原有的和植入的两种错误的比例,来发现的错误中原有的和植入的两种错误的比例,来估计程序中原有错误的总数估计程序中原有错误的总数E ET T。 假设人为地植入的错误数为假设人为地植入的错误数为N Ns s,经过一段时间,经过一段时间的测试之后发现的测试之后发现n ns s个植入的错误,此外还发现了个植入的错误,此外还发现了n n个原有的错误。个原有的错误。还有一个问题还有一个问题 E ET T=?=?Ns

163、 n ns如果可以认为测试方案发现植入错误和发现原有错误如果可以认为测试方案发现植入错误和发现原有错误的能力相同,则能够估计出程序中原有错误的总数为的能力相同,则能够估计出程序中原有错误的总数为T TS SS SS SE En nn nN NN Nn nN Nn n = = =(2 2)分别测试法)分别测试法 思路:如果有办法随机地将程序中的一部分原有的思路:如果有办法随机地将程序中的一部分原有的故障加上标记,然后根据测试过程中发现的有标记故障加上标记,然后根据测试过程中发现的有标记故障和无标记故障的比例,估计程序中的故障总数。故障和无标记故障的比例,估计程序中的故障总数。 方法:由两个测试员

164、甲和乙分别测试同一个程序的方法:由两个测试员甲和乙分别测试同一个程序的两个副本,由另一个分析员分析他们的测试结果。两个副本,由另一个分析员分析他们的测试结果。 用表示测试时间,假设用表示测试时间,假设 =0=0时故障总数为时故障总数为B B0 0; = = 1 1时测试员甲发现的故障数为时测试员甲发现的故障数为B B1 1; = = 1 1时测试员甲发现的故障数为时测试员甲发现的故障数为B B2 2; = = 1 1时两个测试员发现的相同故障数为时两个测试员发现的相同故障数为b bc c。 B0B B1 1b bc c甲甲乙乙B0B B2 2正确性说明正确性说明目标:研究能证明程序正确性的自动

165、系统。目标:研究能证明程序正确性的自动系统。p p1 1p p2 2p p3 3p pn-1n-1p pn na(1)=inputa(1)=inputa(2)a(2)a(3)a(3)a(n-1)a(n-1)a(n)=outputa(n)=outputa(i):a(i):断言断言(assertion)(assertion)证明:对任一个证明:对任一个i i,执行了,执行了p pi i到到p pi+1i+1之间的语句后,可将之间的语句后,可将a(i)a(i)变为变为a(i+1)a(i+1),则证明由,则证明由a(1)a(1)可导出可导出a(n)a(n)。若若a(1)a(1)和和a(n)a(n)正确

166、,且程序确定可终正确,且程序确定可终止,则证明程序正确。止,则证明程序正确。但是:即使有了正确性证明程序,软件测试也仍然是但是:即使有了正确性证明程序,软件测试也仍然是需要的。需要的。因为:因为:正确性证明只证明程序功能正确,但不能正确性证明只证明程序功能正确,但不能验证动态特性;验证动态特性;证明过程本身也可能发生错误。证明过程本身也可能发生错误。原理:原理:自动测试工具1 1、测试数据生成程序、测试数据生成程序(Testcasegenerator)(Testcasegenerator):功能:自动生成大量输入数据功能:自动生成大量输入数据主要用于:主要用于: 测试系统在实际环境中的性能(例

167、如测试数据库管理系统)测试系统在实际环境中的性能(例如测试数据库管理系统) 自动校核系统输出自动校核系统输出( (若输出数据的语法可以被形式地说明若输出数据的语法可以被形式地说明) )缺点:不能自动生成预期的输出,因此用途有限。缺点:不能自动生成预期的输出,因此用途有限。2 2、动态分析程序、动态分析程序(Dynamicanalyzer)(Dynamicanalyzer)功能:分析程序中每个语句的执行次数。功能:分析程序中每个语句的执行次数。组成:组成: 检测部分:插入检测语句,负责收集、整理语句执行次检测部分:插入检测语句,负责收集、整理语句执行次数;数; 显示部分:以容易理解的形式印出收集

168、的信息。显示部分:以容易理解的形式印出收集的信息。用途:用途: 发现测试中没有执行的语句,以增加相应的测试用例;发现测试中没有执行的语句,以增加相应的测试用例; 发现不按要求终结的循环;发现不按要求终结的循环; 发现不应执行却执行了的代码,及应执行而未执行的代发现不应执行却执行了的代码,及应执行而未执行的代码。码。3 3、静态分析程序、静态分析程序(Staticanalyzer)(Staticanalyzer)不执行程序,仅扫描程序的正文,从中寻找可能导致不执行程序,仅扫描程序的正文,从中寻找可能导致错误的异常情况。错误的异常情况。4 4、文件比较程序、文件比较程序(Fileinspector

169、)(Fileinspector)主要步骤:主要步骤: 建立一个文件存放预期的正确结果;建立一个文件存放预期的正确结果; 执行测试,将输出数据存进另一个文件;执行测试,将输出数据存进另一个文件; 使用文件比较程序来比较上述两个文件,印出使用文件比较程序来比较上述两个文件,印出两者之差异。两者之差异。第七章第七章 例题例题l补充习题:使用基本路径测试方法,设计测试下面伪代码程序的补充习题:使用基本路径测试方法,设计测试下面伪代码程序的测试用例:测试用例:l STARTl INPUT(A,B,C,D)l IF(A0)AND (B0)l THEN X=A+Bl ELSE X=A-Bl ENDl IF(

170、CA)OR(D0A0)3 3:ANDAND(B0B0)4 4: THENX=A+BTHENX=A+B5 5: ELSEX=A-BELSEX=A-B6 6: ENDEND7 7: IFIF(CACA)8 8:OROR(DBD0A0)3 3:ANDAND(B0B0)4 4: THENX=A+BTHENX=A+B5 5: ELSEX=A-BELSEX=A-B6 6: ENDEND7 7: IFIF(CACA)8 8:OROR(DBD0A0)3 3:ANDAND(B0B0)4 4: THENX=A+BTHENX=A+B5 5: ELSEX=A-BELSEX=A-B6 6: ENDEND7 7: IFI

171、F(CACA)8 8:OROR(DBD0A0)3 3:ANDAND(B0B0)4 4: THENX=A+BTHENX=A+B5 5: ELSEX=A-BELSEX=A-B6 6: ENDEND7 7: IFIF(CACA)8 8:OROR(DBDB)9 9: THENY=C-DTHENY=C-D1010:ELSEY=C+DELSEY=C+D1111:ENDEND1212:PRINTPRINT(X X,Y Y)STOPSTOP第七章例题n1、假设有一个由1000行FORTRAN语句构成的程序(经编译后大约有5000条机器指令),估计对其进行测试期间将发现多少个错误?为什么?答:经验表明,在类似的

172、程序中,单位长度里的错误数答:经验表明,在类似的程序中,单位长度里的错误数E ET T/I/IT T近近似为常数。美国的一些统计数字告诉我们,通常似为常数。美国的一些统计数字告诉我们,通常 -2-2 E ET T/I/IT T 2X10 2X10-2-2也就是说,在测试之前每也就是说,在测试之前每10001000条指令中大约有条指令中大约有5 52020个错误。个错误。假设在该程序的每假设在该程序的每10001000条指令中有条指令中有1010个错误,则估计在对它进个错误,则估计在对它进行测试期间行测试期间 将发现的错误数为将发现的错误数为5000X10/1000=50 5000X10/100

173、0=50 (个)(个)7-8 7-8 对一个包含对一个包含1000010000条机器指令的程序进行一个月集成测试条机器指令的程序进行一个月集成测试后,总共改正了后,总共改正了1515个错误,此时个错误,此时MTTF=10hMTTF=10h;经过两个月测;经过两个月测试后,总共改正了试后,总共改正了2525个错误个错误( (第二个月改正了第二个月改正了1010个错误个错误) ),MTTF=15hMTTF=15h。要求:要求:(1) (1) 根据上述数据确定根据上述数据确定MTTFMTTF与测试时间之间的函数关系,画出与测试时间之间的函数关系,画出MTTFMTTF与测试时间与测试时间t t的关系曲

174、线。在画这条曲线时做了什么的关系曲线。在画这条曲线时做了什么假设?假设?(2) (2) 为做到为做到MTTF=100hMTTF=100h,必须进行多长时间的集成测试?当集,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?伏在程序中?7-87-8解解:因为:因为MTTFMTTF与测试时间成正比,不妨假设在程序的与测试时间成正比,不妨假设在程序的平均无故障时间平均无故障时间MTTFMTTF和测试时间和测试时间t t之间存在线性关系,即之间存在线性关系,即 MTTF=a+btMTTF=a+bt根据题意可知

175、,当根据题意可知,当t=1t=1时时MTTF=10MTTF=10,当,当t=2t=2时时MTTF=15MTTF=15,把这些,把这些已知的数据代入上列方程后行到下列的联立方程式已知的数据代入上列方程后行到下列的联立方程式 解上列联立方程得出解上列联立方程得出a=5a=5,b=5b=5因此,因此,MTTFMTTF与与t t之间有下列关系之间有下列关系 MTTF=5+5tMTTF=5+5t根据上列方程式画出平均无故障时间根据上列方程式画出平均无故障时间MTTFMTTF与测试时间与测试时间t t的关系的关系曲线,如右图所示:曲线,如右图所示:20202 2t t为使为使MTTF=100hMTTF=1

176、00h需要的测试时间可由下面的方程式得出需要的测试时间可由下面的方程式得出 100=5+5t100=5+5t解上列方程式得解上列方程式得 t=19t=19即,需要进行即,需要进行1919个月的集成测试。个月的集成测试。已知平均无故障时间与单位长度程序中剩余的错误数成反比,具体到已知平均无故障时间与单位长度程序中剩余的错误数成反比,具体到本题程序即有本题程序即有根据题意可知,改正了根据题意可知,改正了1515个错误后个错误后MTTF=10MTTF=10,改正了,改正了2525错误错误后后MTTF=15MTTF=15,把这此已知的数据代入上列方程之后,得到下,把这此已知的数据代入上列方程之后,得到下列的联立方程式列的联立方程式 MTTF=MTTF=解上列联立方程式得到解上列联立方程式得到E ET T=45=45,从而有:从而有:MTTF=MTTF=已知当已知当1919个月的集成测试结束时个月的集成测试结束时MTTF=100hMTTF=100h,带入上式,带入上式 (45-E45-EC C(19)(19) 所以所以 E EC C(19 (19 )=42=42也就是说,当集成测试结束时总共改正了也就是说,当集成测试结束时总共改正了4242个错误,还个错误,还有有45-42=345-42=3个错误潜伏在程序中。个错误潜伏在程序中。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号