
软件工程第8章.ppt
48页8.1 8.1 软件测试的基本概念软件测试的基本概念软件测试的基本概念软件测试的基本概念8.2 8.2 软件测试方法软件测试方法软件测试方法软件测试方法 8.3 8.3 测试用例的设计测试用例的设计测试用例的设计测试用例的设计 8.4 8.4 软件测试的步骤软件测试的步骤软件测试的步骤软件测试的步骤 8.5 8.5 调试调试调试调试 第八章第八章 软件测试软件测试8.6 8.6 软件可靠性软件可靠性软件可靠性软件可靠性 测测试试的的定定义义::为为了了发发现现程程序序中中的的错错误误而而执执行行程程序序的过程具具体体地地说说,,软软件件测测试试是是根根据据软软件件开开发发各各阶阶段段的的规规格格说说明明和和程程序序的的内内部部结结构构而而精精心心设设计计出出一一批批测测试试用用例例,,并利用测试用例来运行程序,以发现程序错误的过程并利用测试用例来运行程序,以发现程序错误的过程8.1.1 软件测试的定义软件测试的定义8.1 软件测试的基本概念软件测试的基本概念8.1.2 软件测试的基本原则软件测试的基本原则((1)尽早地、不断地进行软件测试。
尽早地、不断地进行软件测试2)设计测试用例时,要给出测试的预期)设计测试用例时,要给出测试的预期 结果3)开发小组和测试小组分开开发小组和测试小组分开4)要设计非法输入的测试用例要设计非法输入的测试用例5)在对程序修改之后要进行回归测试在对程序修改之后要进行回归测试8.1.3 软件测试的内容软件测试的内容1.单元测试.单元测试又又称称模模块块测测试试每每个个程程序序模模块块完完成成一一个个相相对对独独立立的的子子功功能能,,所所以以可可以以对对该该模模块块进进行行单单独独的的测测试试由由于于每每个个模模块块都都有有清清晰晰定定义义的的功功能能,,所所以以通通常常比比较较容容易易设设计相应的测试方案,以检验每个模块的正确性计相应的测试方案,以检验每个模块的正确性2.集成测试.集成测试在在单单元元测测试试完完成成后后,,要要考考虑虑将将模模块块集集成成为为系系统统的的过过程程中中可可能能出出现现的的问问题题,,例例如如,,模模块块之之间间的的通通信信和和协协调调问问题题,,所所以以在在单单元元测测试试结结束束之之后后还还要要进进行行集集成成测测试试这这个个步步骤骤着着重重测测试试模模块块间间的的接接口口,,子子功功能能的的组组合合是是否否达到了预期要求的功能,全程数据结构是否有问题等。
达到了预期要求的功能,全程数据结构是否有问题等3.有效性测试.有效性测试4.系统测试.系统测试系系统统测测试试是是把把通通过过有有效效性性测测试试的的软软件件,,作作为为基基于于计计算算机机系系统统的的一一个个整整体体元元素素,,与与整整个个系系统统的的其其他他元元素素结结合合起起来来,,在在实实际际运运行行环环境境下下,,对对计计算算机机系系统统进行一系列的集成测试和有效性测试进行一系列的集成测试和有效性测试集集成成测测试试通通过过后后,,应应在在用用户户的的参参与与下下进进行行有有效效性性测测试试这这个个时时候候往往往往使使用用实实际际数数据据进进行行测测试试,,从从而验证软件是否能满足用户的实际需要而验证软件是否能满足用户的实际需要白白盒盒测测试试是是将将程程序序看看作作一一个个透透明明的的盒盒子子,,测测试试时时按按照照程程序序内内部部的的逻逻辑辑测测试试程程序序、、检检验验程程序序中中的的每每条条通通路路是是否否都都能能按按预预定定的的要要求求正正确确工工作作((测测试试人人员员完完全全了了解解程程序序的内部结构和处理过程)白盒测试又称为结构测试的内部结构和处理过程)白盒测试又称为结构测试。
利利用用白白盒盒测测试试设设计计测测试试用用例例时时,,应应包包括括以以下下三三类类测测试:试:((1)语句测试:程序中的每个语句至少测试一次;)语句测试:程序中的每个语句至少测试一次;((2)分支测试:程序中的每个分支至少测试一次;)分支测试:程序中的每个分支至少测试一次;((3)路径测试:程序中的每条路径至少测试一次路径测试:程序中的每条路径至少测试一次 8.2.1 白盒测试白盒测试8. 2 软件测试方法软件测试方法白盒测试不能实现穷尽测试:白盒测试不能实现穷尽测试:左左图图所所示示的的一一个个小小程程序序的的控控制制流流程程,,其其中中每每个个圆圆圈圈代代表表一一段段源源程程序序((或或语语句句块块)),,图图中中的的曲曲线线代代表表执执行行次次数数不不超超过过20的的循循环环,,循循环环体体中中共共有有5条条通通路路这这样样,,可可能能执执行行的的路路径径有有520条条,,近近似似为为1014条条可可能能的的路路径8.2.2 黑盒测试黑盒测试任何产品都可以使用以下两种方法进行测试:任何产品都可以使用以下两种方法进行测试:((1))如如果果已已知知产产品品的的内内部部工工作作过过程程,,则则可可以以对对它它的每种内部操作进行测试,看是否符合设计要求。
的每种内部操作进行测试,看是否符合设计要求2))如如果果已已知知产产品品的的功功能能,,则则可可以以对对它它的的每每一一个个功能进行测试,看是否都达到了预期的要求功能进行测试,看是否都达到了预期的要求第一种方法是白盒测试,第二种方法是黑盒测试第一种方法是白盒测试,第二种方法是黑盒测试黑黑盒盒测测试试指指完完全全不不考考虑虑程程序序内内部部的的结结构构和和处处理理过过程程,,只只按按照照规规格格说说明明书书的的规规定定来来检检查查程程序序是是否否符符合合它它的的功功能能要要求求黑黑盒盒测测试试是是在在程程序序接接口口进进行行的的测测试试,,又又称称为为功功能能测试黑盒测试检查的主要方面有:黑盒测试检查的主要方面有:程序的功能是否正确或完善;程序的功能是否正确或完善;数据的输入能否正确接收,输出是否正确;数据的输入能否正确接收,输出是否正确;是否能保证外部信息(如数据文件)的完整性等是否能保证外部信息(如数据文件)的完整性等用黑盒法设计测试用例时,必须用所有可能的输入数用黑盒法设计测试用例时,必须用所有可能的输入数据来检查程序是否都能产生正确的输出据来检查程序是否都能产生正确的输出黑盒测试不可能实现穷尽测试:黑盒测试不可能实现穷尽测试:假假设设有有一一个个很很简简单单的的小小程程序序,,输输入入量量只只有有两两个个::A和和B,,输输出出量量只只有有一一个个::C。
如如果果计计算算机机的的字字长长为为32位位,,A和和B的的数数据据类类型型都都只只是是整整数数类类型型利利用用黑黑盒盒法法进进行行测测试试时时,,将将A和和B的的可可能能取取值值进进行行排排列列组组合合,,输输入入数数据据的的可能性有:可能性有:232×232==264种而而且且,,设设计计测测试试用用例例时时,,不不仅仅要要有有合合法法的的输输入入,,而而且且还还应应该该有有非非法法的的输输入入,,在在这这个个例例子子中中,,输输入入还还应应该该包包括括实实数数、、字字符符串串等等,,这这样样,,输输入入数数据据的的可可能能性性就就更更多多了了所以说,穷尽测试是不可能实现的所以说,穷尽测试是不可能实现的8.3 测试用例的设计测试用例的设计8.3.1 8.3.1 基本途径测试基本途径测试基本途径测试基本途径测试8.3.28.3.2 条件测试 条件测试 条件测试 条件测试8.3.38.3.3 等价类划分 等价类划分 等价类划分 等价类划分8.3.48.3.4 边界值分析 边界值分析 边界值分析 边界值分析8.3.1 基本途径测试基本途径测试1))基基本本途途径径测测试试::所所谓谓基基本本途途径径测测试试是是指指覆覆盖盖基基本本途途径径集集合合的的试试验验案案例例将将使使程程序序中中每每个个语语句句至至少少执执行行一一次次。
属属白盒测试白盒测试1、概念、概念2))独独立立途途径径::是是指指程程序序中中至至少少引引入入一一个个新新((执执行行))语语句句的的途途径径在在程程序序流流图图中中独独立立途途径径中中至至少少有有一一条条边边是是先先前前的途径所没有遍历的的途径所没有遍历的独立途径构成了基本途径集合独立途径构成了基本途径集合2、测试案例、测试案例1)计算环形复杂度:)计算环形复杂度:V((G)=)=m-n+22)列出独立途径:)列出独立途径:途径途径1::途径途径2::途径途径3::途径途径4::8.3.2 条件测试条件测试1、概念、概念1))条条件件测测试试::通通过过检检查查程程序序模模块块中中所所包包含含的的逻逻辑辑条条件件对对软件进行测试属白盒测试软件进行测试属白盒测试优优点点::确确定定条条件件的的覆覆盖盖是是简简单单的的,,它它不不仅仅能能检检测测出出程程序序条条件中的错误,还能检测出程序中的其它错误件中的错误,还能检测出程序中的其它错误2)测试策略)测试策略((1))分分支支测测试试::指指对对于于一一个个组组合合条条件件C,,要要求求对对于于C的的“真真”分分支支与与“假假”分分支支,,以以及及C中中每每个个简简单单条条件件执执行行至至少至少一次。
少至少一次2))分分支支和和关关系系算算子子测测试试::要要求求在在条条件件中中所所有有布布尔尔变变量量与关系算子都不重复出现与关系算子都不重复出现2、测试案例、测试案例 以三角型类型判定程序来讨论测试案例的设计程序以三角型类型判定程序来讨论测试案例的设计程序中有三个判定条件:中有三个判定条件: 对于条件对于条件C1只作大于与小于两个试验;对于条件只作大于与小于两个试验;对于条件C2和和C3只作等于与不等于测试只作等于与不等于测试8.3.3 等价类划分等价类划分 等等价价类类划划分分是是一一种种实实用用的的测测试试技技术术,,属属于于黑黑盒盒测测试试与与逻逻辑辑覆覆盖盖不不同同,,使使用用等等价价类类划划分分设设计计测测试试用用例例时时,,完完全全不不需需要要考考虑虑程程序序的的内内部部逻逻辑辑结结构构,,而而主要依据程序的功能说明主要依据程序的功能说明穷穷尽尽测测试试是是不不可可能能实实现现的的,,实实际际上上也也是是不不必必要要的的,,我我们们可可以以从从所所有有可可能能的的输输入入数数据据中中选选择择一一个个子子集集来来进进行行测测试试如如何何选选择择这这个个子子集集,,使使得得这这个个子子集集具具有有代代表表性性,,能能尽尽可可能能多多地地发发现现程程序序中中的的错错误误,,等等价价类类划划分分就就是是基基于于这这种种考考虑虑的的一一种种实实现现方方法法。
该该方方法法根根据据输输入入数数据据和和输输出出数数据据的的特特点点,,将将程程序序输输入入域域划划分分成成若若干干个个部部分分,,即即子子集集,,然然后后从从每每个个子子集集中中选选取具有代表性的数据作为测试用例取具有代表性的数据作为测试用例1、划分等价类、划分等价类等等价价类类的的划划分分在在很很大大程程度度上上依依靠靠的的是是测测试试人人员员的的经经验验,,下面给出几条基本原则:下面给出几条基本原则:((1))如如果果输输入入条条件件规规定定了了取取值值范范围围,,则则可可划划分分出出一一个个有有效效的的等等价价类类((输输入入值值在在此此范范围围内内))和和两两个个无无效效的的等等价价类类(输入值小于最小值、输入值大于最大值)输入值小于最小值、输入值大于最大值)2))如如果果输输入入条条件件规规定定了了输输入入数数据据的的个个数数,,则则可可相相应应地地划划分分出出一一个个有有效效的的等等价价类类((输输入入数数据据的的个个数数等等于于给给定定的的个个数数要要求求))和和两两个个无无效效的的等等价价类类((输输入入数数据据的的个个数数少少于于给给定定的的个数要求、输入数据的个数多于给定的个数要求)。
个数要求、输入数据的个数多于给定的个数要求)3))如如果果输输入入条条件件规规定定了了输输入入数数据据的的一一组组可可能能的的值值,,而而且且程程序序对对这这组组可可能能的的值值做做相相同同的的处处理理,,则则可可将将这这组组可可能能的的值值划划分分为为一一个个有有效效的的等等价价类类,,而而这这些些值值以以外外的的值值划划分分成成无无效效的等价类的等价类((4))如如果果输输入入条条件件规规定定了了输输入入数数据据的的一一组组可可能能的的值值,,但但是是程程序序对对不不同同的的输输入入值值做做不不同同的的处处理理,,则则每每个个输输入入值值是是一一个个有有效效的的等等价价类类,,此此外外还还有有一一个个无无效的等价类(所有不允许值的集合)效的等价类(所有不允许值的集合)5))如如果果输输入入条条件件规规定定了了输输入入数数据据必必须须遵遵循循的的规规则则,,则则可可以以划划分分一一个个有有效效的的等等价价类类((符符合合规规则则))和若干个无效的等价类(从各种角度违反规则)和若干个无效的等价类(从各种角度违反规则)2、确定测试用例、确定测试用例划分出等价类后,根据以下原则设计测试用例:划分出等价类后,根据以下原则设计测试用例:((1)为每个等价类编号。
为每个等价类编号2))设设计计一一个个新新的的测测试试用用例例,,使使它它能能包包含含尽尽可可能能多多的的尚尚未未被被覆覆盖盖的的有有效效等等价价类类重重复复这这一一过过程程,,直直到到所所有有的的有有效效等价类都被覆盖等价类都被覆盖3))设设计计一一个个新新的的测测试试用用例例,,使使它它包包含含一一个个尚尚未未被被覆覆盖盖的的无无效效等等价价类类重重复复这这一一过过程程,,直直到到所所有有的的无无效效等等价价类类都都被覆盖8.3.4 边界值分析边界值分析人人们们在在长长期期的的测测试试中中发发现现,,程程序序往往往往在在处处理理边边界界值值的的时时候候容容易易出出错错,,比比如如数数组组的的下下标标,,循循环环的的上上下下界界等等针针对对这这种种情情况况设设计计测测试试用用例例的的方方法法就就是是边边界值分析方法界值分析方法使使用用边边界界值值分分析析方方法法设设计计测测试试用用例例时时,,首首先先要要确确定定边边界界情情况况通通常常输输入入等等价价类类和和输输出出等等价价类类的的边边界界,,就就是是应应该该着着重重测测试试的的程程序序边边界界情情况况也也就就是是说说,,应应该该选选取取恰恰好好等等于于、、小小于于和和大大于于边边界界的的值值作作为为测测试试数数据据,,而而不不是是选选取取每每个个等等价价类类内内的的典典型型值值或或任任意意值值作为测试数据。
作为测试数据边边界界值值分分析析也也属属于于黑黑盒盒测测试试,,可可以以看看作作是是对对等等价价类类划划分分的的一一个个补补充充在在设设计计测测试试用用例例时时,,往往往往联联合等价类划分和边界值分析这两种方法合等价类划分和边界值分析这两种方法8.4 软件测试的步骤软件测试的步骤8.4.1 8.4.1 单元测试单元测试单元测试单元测试8.4.2 8.4.2 集成测试集成测试集成测试集成测试8.4.3 8.4.3 有效性测试有效性测试有效性测试有效性测试8.4.4 8.4.4 系统测试系统测试系统测试系统测试单单元元测测试试又又称称模模块块测测试试,,集集中中对对软软件件设设计计的的最最小小单单位位——模模块块进进行行测测试试,,以以保保证证它它能能够够正正确确执执行行规定的功能规定的功能进进行行单单元元测测试试时时,,可可以以使使用用黑黑盒盒测测试试法法,,也也可可以以使使用用白白盒盒测测试试法法由由于于各各模模块块间间相相对对独独立立,,因因而而对对多多个个模模块块的的测测试试可可以以并并行行地地进进行行,,以以提提高高测测试试效效率8.4.1 单元测试单元测试1、单元测试的内容、单元测试的内容((1)模块接口)模块接口主要进行的测试项目有以下几方面:主要进行的测试项目有以下几方面:l所所测测模模块块的的形形式式参参数数和和调调用用该该模模块块的的实实际际输输入入参参数数在在参参数数数数目、属性和顺序上是否匹配;目、属性和顺序上是否匹配;l是否修改了只做输入用的形式参数;是否修改了只做输入用的形式参数;l输出给被调用模块的参数在数目、属性和顺序上是否正确;输出给被调用模块的参数在数目、属性和顺序上是否正确;若模块中有外部的若模块中有外部的I/O操作,还应该进行以下的测试项目:操作,还应该进行以下的测试项目:l文件属性是否正确;文件属性是否正确;l打开文件语句和关闭语句是否正确;打开文件语句和关闭语句是否正确;l格式说明书与输入/输出语句是否一致;格式说明书与输入/输出语句是否一致;l缓冲区的大小与记录长度是否匹配;缓冲区的大小与记录长度是否匹配;l使用文件之前是否先打开了文件;使用文件之前是否先打开了文件;l文件操作结束后是否关闭了文件;文件操作结束后是否关闭了文件;l是否进行了输入/输出错误检查并进行了相应的处理。
是否进行了输入/输出错误检查并进行了相应的处理((2)局部数据结构)局部数据结构模块的局部数据结构是常见的错误来源,测试者应该仔模块的局部数据结构是常见的错误来源,测试者应该仔细设计测试用例,以便发现这样一些类型的错误:细设计测试用例,以便发现这样一些类型的错误:u错误的变量名(变量名拼写错或被编译程序截短);错误的变量名(变量名拼写错或被编译程序截短);u错误的或不一致的数据类型说明;错误的或不一致的数据类型说明;u使用尚未赋值或尚未初始化的变量;使用尚未赋值或尚未初始化的变量;u错误的初始值或错误的缺省值;错误的初始值或错误的缺省值;u数据类型不相容;数据类型不相容;u上溢、下溢或地址异常上溢、下溢或地址异常如果有可能的话,在单元测试期间除了局部数据结构之如果有可能的话,在单元测试期间除了局部数据结构之外,还应该检查全程数据对模块的影响外,还应该检查全程数据对模块的影响((3)重要的执行路径)重要的执行路径选选择择适适当当的的测测试试用用例例,,对对模模块块中中的的最最有有代代表表性性、、最最可可能能发发现错误的执行路径进行测试现错误的执行路径进行测试错误的计算主要集中在以下几个方面:错误的计算主要集中在以下几个方面:n运算的优先次序不对或误解了运算符的优先次序;运算的优先次序不对或误解了运算符的优先次序;n变量的初始值赋值不正确;变量的初始值赋值不正确;n运算的精度不够;运算的精度不够;n表达式的符号有错误。
表达式的符号有错误错误的比较和控制流主要集中在以下几个方面:错误的比较和控制流主要集中在以下几个方面:n不同数据类型之间的比较;不同数据类型之间的比较;n逻辑运算符不正确或优先次序不正确;逻辑运算符不正确或优先次序不正确;n由于精度问题造成的两值比较时不相等;由于精度问题造成的两值比较时不相等;n差差“1”错,即循环次数多一次或少一次;错,即循环次数多一次或少一次;n错误的或不可能的循环终止条件;错误的或不可能的循环终止条件;n当遇到发散的迭代时不能终止的循环;当遇到发散的迭代时不能终止的循环;n错误地修改循环变量错误地修改循环变量((4)出错处理)出错处理由于输入等条件的限制,程序在运行中出错往往是不由于输入等条件的限制,程序在运行中出错往往是不可避免的因而好的程序设计应该能预见可能出现的各种可避免的因而好的程序设计应该能预见可能出现的各种出错情况,并且设置相应的出错处理,以便在出现错误时出错情况,并且设置相应的出错处理,以便在出现错误时执行相应的操作执行相应的操作在单元测试时也应该对模块中的出错处理部分进行测在单元测试时也应该对模块中的出错处理部分进行测试,进行这一部分测试时可能存在的错误主要有:试,进行这一部分测试时可能存在的错误主要有:n对错误的描述难于理解,或者是描述过于简单;对错误的描述难于理解,或者是描述过于简单;n显示的错误信息与实际错误不相符;显示的错误信息与实际错误不相符;n在对错误进行处理之前,错误条件已经引起系统的干在对错误进行处理之前,错误条件已经引起系统的干预;预;n对错误的处理不正确。
对错误的处理不正确((5)边界条件)边界条件我我们们知知道道,,软软件件常常常常在在它它的的边边界界上上失失效效例例如如,,处处理理n元元数数组组的的第第一一个个元元素素或或最最后后一一个个元元素素时时,,在在n次次循循环环中中的的第第n次次重重复复时时,,往往往往会会发发生生错错误误因因此此,,使使用用刚刚好好小小于于、、等等于于或或大大于于最最大大值值或或最最小小值值的的数数据据结结构构、、控控制制量量和和数数据据值值的的测测试方案时,很可能会发现软件中的错误试方案时,很可能会发现软件中的错误2、单元测试的步骤、单元测试的步骤单单元元测测试试的的对对象象是是模模块块测测试试者者必必须须自自己己动动手手设设计计这这两两类模块:驱动模块和存根模块类模块:驱动模块和存根模块驱驱动动模模块块::相相当当于于所所测测模模块块的的“主主程程序序”它它接接收收测测试试数数据据,,把把这这些些数数据据传传送送给给所所测测模模块块,,然然后输出测试结果后输出测试结果存存根根模模块块::也也叫叫虚虚拟拟子子程程序序它它的的作作用用是是模模拟拟被被测测模模块块所所调调用用的的子子模模块块存存根根模模块块可可以以做做少少量量的的数数据据操操作作,,一一般般情情况况下下,,不不需需要要把把实实际际子子模模块块的的所所有有功功能能都都带带进来。
进来8.4.2 集成测试集成测试 集成测试过程中要考虑的问题:集成测试过程中要考虑的问题:((1)数据穿过模块接口时是否会丢失;)数据穿过模块接口时是否会丢失;((2))模模块块的的功功能能是是否否会会对对其其它它模模块块的的功功能能产产生生不利的影响;不利的影响;((3))把把子子功功能能组组合合起起来来,,能能否否达达到到预预期期的的主主功功能要求;能要求;((4))单单个个模模块块的的误误差差累累积积起起来来是是否否会会放放大大到到不不能接受的程度;能接受的程度;((5)全局数据结构是否有问题全局数据结构是否有问题将将各各个个模模块块组组装装成成系系统统的的方方法法::非非增增殖殖式式组组装装方方式式和和增增殖式组装方式殖式组装方式采用非增殖式组装方式:先分别对每个模块进行测试,采用非增殖式组装方式:先分别对每个模块进行测试,再把所有模块按设计要求组装在一起进行测试,最终得到所再把所有模块按设计要求组装在一起进行测试,最终得到所要求的软件要求的软件采用增殖式组装方式:把下一个要测试的模块同已经测采用增殖式组装方式:把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试,这种方法实际上同时完成单应该测试的模块结合进来测试,这种方法实际上同时完成单元测试和集成测试。
元测试和集成测试这两种方法各有优缺点:这两种方法各有优缺点:((1))采采用用非非增增殖殖式式组组装装方方式式时时,,可可以以较较早早发发现现模模块块间间的的接接口口错错误误,,而而采采用用增增殖殖式式组组装装方方式式时时,,只只有有在在模模块块加加进来时才可能发现,因此接口错误发现较晚进来时才可能发现,因此接口错误发现较晚2))采采用用非非增增殖殖式式组组装装方方式式时时要要对对每每个个模模块块进进行行单单元元测测试试,,需需要要编编写写的的测测试试软软件件较较多多,,工工作作量量大大,,而而采采用用增增殖殖式式组组装装方方式式时时,,利利用用已已测测试试过过的的模模块块部部分分作作为为部部分分测测试试软件,因而工作量较小软件,因而工作量较小3))非非增增殖殖式式组组装装方方式式要要求求一一下下子子把把所所有有模模块块组组装装起起来来,,如如果果发发现现错错误误则则较较难难判判断断错错误误的的位位置置,,而而采采用用增增殖殖式式组组装装方方式式时时,,由由于于每每次次只只加加入入一一个个模模块块,,因因而而错错误误往往往往与刚加入的模块有关,查错则相对容易些与刚加入的模块有关,查错则相对容易些。
4))采采用用非非增增殖殖式式组组装装方方式式时时,,各各模模块块的的单单元元测测试试可可以以并并行行地地进进行行,,因因此此可可以以充充分分利利用用人人力力,,加加快快测测试试进进程程,,采用增殖式组装方式时却不能如此采用增殖式组装方式时却不能如此1、自顶向下结合、自顶向下结合在在使使用用增增殖殖式式组组装装方方式式时时,,常常用用的的有有自自顶顶向向下下和和自自底底向向上两种方法上两种方法采采用用这这种种组组装装方方式式时时,,是是从从主主控控制制模模块块开开始始,,沿沿着着软软件件的控制层次向下移动,从而逐渐把各个模块都结合起来的控制层次向下移动,从而逐渐把各个模块都结合起来左左图图是是一一个个树树形形结结构构,,主主控控制制模模块块是是M1,,在在把把主主控控制制模模块块M1所所属属的的那那些些模模块块都都组组装装起起来来时时可可以以采采取取两两种种方方法法::深深度度优优先先策策略略或或者者宽度优先策略宽度优先策略采采用用深深度度优优先先的的结结合合方方法法时时,,先先把把软软件件结结构构的的一一条条主主控控制制通通路路上上的的所所有有模模块块一一个个一一个个地地结结合合组组装装起起来来。
主主控控制制通通路路的的选选择择取取决决于于应应用用的的特特点点对对于于图图8.5来来说说,,如如果果选选取取左左通通路路为为主主控控通通路路,,那那么么首首先先结结合合模模块块M1,,M2和和M5,,然然后后是是M8如如果果M2的的某某个个功功能能需需要要的的话话,,可可结结合合M6然然后后结结合合中中间间的的和和右边的控制通路右边的控制通路采采用用宽宽度度优优先先的的结结合合方方法法时时,,逐逐层层结结合合直直接接下下属属的的所所有有模模块块,,即即把把处处于于同同一一个个控控制制层层次次上上的的所所有有模模块块组组装装起起来来对对于于图图8.5来来说说,,首首先先结结合合模模块块M2,,M3和和M4((代代替替存存根根模模块块S4)),,接接着着结结合合下下一一个个控控制制层层次次中中的的模模块块M5,,M6和和M7;;如如此此继继续续进进行行下下去,直到所有模块都被结合进来去,直到所有模块都被结合进来不不管管是是采采用用深深度度优优先先策策略略还还是是宽宽度度优优先先策策略略,,其其结结合过程如下:合过程如下:((1))用用主主控控制制模模块块作作为为测测试试驱驱动动模模块块,,所所有有直直接接下下属属于于主主控控制制模模块块的的模模块块用用存存根根模模块块代代替替,,对对主主模模块块进进行行测试;测试;((2))根根据据选选定定的的结结合合策策略略((深深度度优优先先或或宽宽度度优优先先)),,每每次次用用一一个个实实际际模模块块替替换换一一个个存存根根模模块块,,对对新新结结合合进进来来的模块的直接下属模块,用新的存根模块代替;的模块的直接下属模块,用新的存根模块代替;((3)对结合进来的模块进行相应的测试;)对结合进来的模块进行相应的测试;((4))为为了了保保证证新新加加入入的的模模块块不不引引入入新新的的错错误误,,可可以以进进行行回回归归测测试试,,即即重重复复以以前前进进行行过过的的部部分分测测试试或或全全部部测测试。
试从从第第((2))步步开开始始,,不不断断地地重重复复进进行行上上述述过过程程,,直直到到所有模块都结合进来为止所有模块都结合进来为止采用自顶向下的结合策略的好处:采用自顶向下的结合策略的好处:在在测测试试过过程程中中能能够够较较早早地地对对主主要要的的控控制制或或关关键键的的判判断断点点进进行行检检验验因因为为在在一一个个功功能能划划分分合合理理的的软软件件结结构构中中,,关关键键的的判判断断点点常常常常出出现现在在较较高高的的层层次次里里,,所所以以能能够够较较早早碰碰到到如如果果主主要要控控制制存存在在问问题题,,及及早早发发现现这这类类问问题题并并尽尽快快想想办办法法解解决决是是十十分分重重要要的的,,这这样样可可以以大大大大减减少少后后面面的的工工作作量量如如果果选选择择的的是是深深度度优优先先结结合合方方法法,,可可以以首首先先实实现现并并验验证证软软件件的的一一个个比比较较完完整整的的功功能能,,这这样样对对增增强强开开发发人员和用户双方的信心是很有意义的人员和用户双方的信心是很有意义的采用自顶向下的结合策略的不足:采用自顶向下的结合策略的不足:可能会遇到逻辑上的问题。
当我们为了充分地测试可能会遇到逻辑上的问题当我们为了充分地测试较高层次的功能时,可能需要较低层次上处理的信息,较高层次的功能时,可能需要较低层次上处理的信息,但是我们采用自顶向下的方法时,存根模块代替了低层但是我们采用自顶向下的方法时,存根模块代替了低层次的模块,若高层模块需要低层模块返回的信息不仅数次的模块,若高层模块需要低层模块返回的信息不仅数量大,而且种类也很多时,存根模块有可能很难完全满量大,而且种类也很多时,存根模块有可能很难完全满足这个要求,因而,这种方法有一定的局限性为了解足这个要求,因而,这种方法有一定的局限性为了解决这个问题,可以采用以下解决办法:决这个问题,可以采用以下解决办法:((1)把许多测试推迟到用实际模块替换了存根模块)把许多测试推迟到用实际模块替换了存根模块以后再进行采用这种方法也有一定的缺陷:由于我们以后再进行采用这种方法也有一定的缺陷:由于我们对一些特定的测试和组装与特定模块间的对应关系失去对一些特定的测试和组装与特定模块间的对应关系失去了某些控制,从而在确定错误原因时会发生困难了某些控制,从而在确定错误原因时会发生困难2)由层次系统的底部向上组装软件。
这种方法就)由层次系统的底部向上组装软件这种方法就是下面要介绍的自底向上结合方法是下面要介绍的自底向上结合方法2、自底向上结合、自底向上结合自自底底向向上上测测试试是是从从软软件件结结构构最最低低层层的的模模块块开开始始进进行行组组装装和和测测试试它它不不需需要要存存根根模模块块,,但但需需要要驱驱动动模模块块其其结结合合过程如下:过程如下:((1))把把低低层层模模块块组组合合成成实实现现某某个个特特定定软软件件子子功功能能的的模块族;模块族;((2))为为每每一一个个族族编编写写一一个个驱驱动动模模块块,,作作为为测测试试的的控控制来协调测试用例的输入和输出;制来协调测试用例的输入和输出;((3)对模块族进行测试;)对模块族进行测试;((4))按按模模块块结结构构图图依依次次向向上上扩扩展展,,用用实实际际模模块块替替换换驱驱动动模模块块,,将将模模块块族族与与新新的的模模块块结结合合,,形形成成新新的的模模块块族族,,再进行测试,直到所有模块都被结合进来再进行测试,直到所有模块都被结合进来图图中中自自底底向向上上的的结结合合过过程程::首首先先把把模模块块组组合合成成族族1、、族族2和和族族3,,然然后后设设计计相相应应的的驱驱动动模模块块D1、、D2和和D3,,并并对对每每个个子子功功能能族族进进行行测测试试;;族族1和和族族2下下属属于于模模块块Ma,,去去掉掉驱驱动动模模块块D1和和D2,,把把这这两两个个族族直直接接与与Ma结结合合,,同同样样地地,,在在族族3与与模模块块Mb结结合合之之前前将将D3去去掉掉;;最最后后Ma和和Mb与与Mc结结合合起起来。
来自自顶顶向向下下结结合合的的主主要要优优点点::不不需需要要设设计计测测试试驱驱动动模模块块,,与与存存根根模模块块相相联联系系的的问问题题可可能能在在测测试试的的早早期期发发现现主主要要缺缺点点是是::需需要要设设计计存存根根模模块块,,并并且且由由于于为为了了使使存存根根模模块块能能够够尽尽量量模模拟拟实实际际模模块块的的功功能能,,必必然然会会增增加加设设计计存存根根模模块块的的复复杂杂度度,,从而导致增加一些附加的测试从而导致增加一些附加的测试自自底底向向上上结结合合的的主主要要优优点点::不不需需要要设设计计存存根根模模块块,,而而设设计计测测试试驱驱动动模模块块一一般般比比建建立立存存根根模模块块要要容容易易,,同同时时比比较较容容易易设设计计测测试试用用例例,,并并且且可可以以实实现现多多个个模模块块的的并并行行测测试试,,从从而而提提高高测测试试效效率率主主要要缺缺点点是是::直直到到最最后后一一个个模模块块结结合合进进来来以以前前,,程程序序作作为为一一个个整整体体始始终终不不存存在在也也就就是是说说,,对对主主要要的的控控制制直直到最后才接触到到最后才接触到一一般般来来说说,,我我们们并并不不只只是是使使用用单单一一的的自自顶顶向向下下结结合合或或自自底底向向上上结结合合方方式式,,而而是是根根据据情情况况结结合合这这两两种种方方法法来来进进行行组组装装和和测测试试::对对软软件件结结构构中中较较上上层层模模块块使使用用自自顶顶向向下下结结合合方方法法,,对软件结构中较下层模块使用自底向上结合方法。
对软件结构中较下层模块使用自底向上结合方法比较自顶向下与自底向上:比较自顶向下与自底向上:8.4.3 有效性测试有效性测试 有有效效性性测测试试的的任任务务::进进一一步步验验证证软软件件的的有有效效性性,,即验证软件的功能和性能是否与用户的要求一致即验证软件的功能和性能是否与用户的要求一致在在每每个个有有效效性性测测试试用用例例测测试试完完成成以以后后,,可可能能有有两种情况:两种情况:((1))软软件件的的功功能能和和性性能能与与用用户户的的要要求求一一致致,,软软件可以接受;件可以接受;((2)软件的功能或性能与用户的要求有差距软件的功能或性能与用户的要求有差距若若出出现现后后一一种种情情况况,,通通常常与与需需求求分分析析阶阶段段的的差差错错有有关关,,这这时时要要列列出出一一张张软软件件缺缺陷陷表表,,通通过过与与用用户户的协商,找出问题所在并解决它的协商,找出问题所在并解决它8.4.4 系统测试系统测试 软软件件仅仅仅仅是是计计算算机机系系统统的的一一个个组组成成部部分分,,在在实实际际运运行行中中,,它它要要和和计计算算机机系系统统的的其其它它元元素素一一起起工工作作,,所所以以最最终终要要把把软软件件与与其其它它系系统统元元素素结结合合起起来来,,进进行行一系列的集成测试和有效性测试。
一系列的集成测试和有效性测试系系统统测测试试的的目目的的在在于于通通过过与与系系统统的的需需求求定定义义作作比比较较,,发发现现软软件件与与系系统统定定义义不不符符合合或或与与之之矛矛盾盾的的地地方调调试试过过程程由由两两个个部部分分组组成成::首首先先,,确确定定程程序序中中错错误误的的确确切切性性质质和和位位置置;;然然后后,,对对程程序序代代码码进进行行分分析析,,确确定定问问题题的的原原因因,,并设法改正这个错误并设法改正这个错误具体地说,由以下步骤组成:具体地说,由以下步骤组成:((1)从错误的外部表现入手,确定程序中出错的位置;)从错误的外部表现入手,确定程序中出错的位置;((2)分析有关程序代码,找出错误的内在原因;)分析有关程序代码,找出错误的内在原因;((3)修改程序代码,排除这个错误;)修改程序代码,排除这个错误;((4))重重复复进进行行暴暴露露了了这这个个错错误误的的原原始始测测试试以以及及某某些些回回归归测试,以确保该错误确实被排除且没有引入新的错误;测试,以确保该错误确实被排除且没有引入新的错误;((5))如如果果所所作作的的修修正正无无效效,,则则撤撤消消这这次次改改动动,,重重复复上上述述过程,直到找到一个有效的办法为止。
过程,直到找到一个有效的办法为止8.5.1 调试的步骤调试的步骤8.5 调试调试8.5.2 调试的策略调试的策略1、强行排错、强行排错这这是是目目前前使使用用较较多多但但效效率率较较低低的的一一种种调调试试方方法具体地说,通常有三种措施:法具体地说,通常有三种措施:((1)输出存储器内容)输出存储器内容((2)打印语句)打印语句((3)自动调试工具)自动调试工具2、回溯法、回溯法采采用用回回溯溯法法排排错错时时,,调调试试人人员员首首先先分分析析错错误误征征兆兆,,确确定定最最先先出出现现“症症状状”的的位位置置然然后后人人工工沿沿程程序序的的控控制制流流程程往往回回追追踪踪源源程程序序代代码码,,直直到到找找到到错错误误根源或确定错误产生的范围为止根源或确定错误产生的范围为止实实践践证证明明,,回回溯溯法法是是一一种种可可以以成成功功地地用用在在小小程程序序中中的的很很好好的的纠纠错错方方法法通通过过回回溯溯,,我我们们往往往往可可以以把把错错误误范范围围缩缩小小到到程程序序中中的的一一小小段段代代码码,,仔仔细细分分析析这这段段代代码码,,不不难难确确定定出出错错的的准准确确位位置置。
但但是是,,随随着着程程序序规规模模的的扩扩大大,,由由于于回回溯溯的的路路径径数数目目越越来来越越多多,,回溯法会变得很困难,以至于完全不可能实现回溯法会变得很困难,以至于完全不可能实现3、归纳法、归纳法归归纳纳法法就就是是从从线线索索((错错误误征征兆兆))出出发发,,通通过过分分析析这这些些线线索索之之间间的的关关系系而而找找出出故故障障的的一一种种系系统统化化的的思思考考方方法法这这种种方方法法主主要要包包括括下下述述四四个个步骤:步骤:((1)收集有关的数据)收集有关的数据((2)组织数据)组织数据((3)提出假设)提出假设((4)证明假设)证明假设4、演绎法、演绎法演演绎绎法法从从一一般般原原理理或或前前提提出出发发,,经经过过排排除除和和精精化化的的过过程程推推导导出出结结论论演演绎绎法法排排错错的的过过程程是是这这样样的的::测测试试人人员员首首先先列列出出所所有有可可能能出出错错的的原原因因或或假假设设,,然然后后再再用用原原始始测测试试数数据据或或新新的的测测试试,,逐逐个个排排除除不不可可能能正正确确的的假假设设,,最最后后,,证证明明剩剩下下的的原原因因确实是错误的根源。
确实是错误的根源软软件件可可靠靠性性可可以以用用平平均均故故障障间间隔隔时时间间((MTBF))来来测测量:量:MTBF==MTTF十十MTTR其其中中,,MTTF和和MTTR分分别别是是平平均均无无故故障障时时间间和和平平均均修复时间修复时间软软件件可可靠靠性性可可以以根根据据与与技技术术系系统统可可靠靠性性接接近近的的平平行行定定义义来来表表示示我我们们可可以以这这样样来来定定义义软软件件可可靠靠性性::程程序序故故障障的的频频率率和和临临界界值值这这里里,,故故障障是是指指在在许许可可的的运运行行条条件件下下一一个个不不可可接接受受的的结结果果或或行行为为同同硬硬件件一一样样,,软软件件可可靠靠性性可可以以用用错误出现和被纠正的速率来表示错误出现和被纠正的速率来表示8.6.1 软件可靠性的定义软件可靠性的定义8.6 软件可靠性软件可靠性8.6.2 程序中错误总数量的估算程序中错误总数量的估算一、错误植入法一、错误植入法E=(E0/E1).E2其其中中E为为程程序序中中固固有有错错误误的的估估计计数数;;E0为为人人工工植植入入的的错错误误数数;;E1为为调调试试过过程程中中发发现现的的人人工工植植入入的的错错误误数数;;E2为为发发现现的程序中固有的错误数。
的程序中固有的错误数二、错误标记法二、错误标记法三、零-缺陷测试技术三、零-缺陷测试技术。
