资源预览内容
第1页 / 共115页
第2页 / 共115页
第3页 / 共115页
第4页 / 共115页
第5页 / 共115页
第6页 / 共115页
第7页 / 共115页
第8页 / 共115页
第9页 / 共115页
第10页 / 共115页
亲,该文档总共115页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
信息科学与技术学院 闵笛软件工程软件工程第第7章章 实现实现v7.1 编码编码v7.2 软件测试基础软件测试基础v7.3 单元测试单元测试v7.4 集成测试集成测试v7.5 确认测试确认测试v7.6 白盒测试技术白盒测试技术v7.7 黑盒测试技术黑盒测试技术v7.8 调试调试v7.9 软件可靠性软件可靠性v7.10 小结小结软件工程实现信息科学与技术学院 闵笛软件工程软件工程重点和难点重点和难点v结构化程序设计的原则和风格结构化程序设计的原则和风格v软件测试的目的和原则软件测试的目的和原则v白盒测试、黑盒测试的定义白盒测试、黑盒测试的定义v熟练掌握白盒测试中各种逻辑覆盖的基本思想熟练掌握白盒测试中各种逻辑覆盖的基本思想v熟练掌握黑盒测试中等价划分、边界值分析方法熟练掌握黑盒测试中等价划分、边界值分析方法v软件测试策略中单元测试、组装测试、确认测试和软件测试策略中单元测试、组装测试、确认测试和系统测试的相关概念及方法系统测试的相关概念及方法v程序调试步骤和几种程序调试方法、过程程序调试步骤和几种程序调试方法、过程软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.1 编码编码v7. 1.1 选择程序设计语言选择程序设计语言v程序设计语言的分类程序设计语言的分类v从软件工程的角度,根据程序设计语言发展从软件工程的角度,根据程序设计语言发展的历程,大致分为的历程,大致分为 4 类:类:v第一代语言:从属于机器的语言第一代语言:从属于机器的语言v第二代语言:汇编语言第二代语言:汇编语言v第三代语言:高级程序设计语言第三代语言:高级程序设计语言v第四代语言(第四代语言( 4GL )软件工程实现信息科学与技术学院 闵笛软件工程软件工程选择语言的标准选择语言的标准v系统用户的要求系统用户的要求v可以使用的编译程序可以使用的编译程序v可以得到的软件工具可以得到的软件工具v工程规模工程规模v程序员的知识程序员的知识v软件的可移植性要求软件的可移植性要求v软件的应用领域软件的应用领域项目应用领域是最关键的因素项目应用领域是最关键的因素软件工程实现信息科学与技术学院 闵笛软件工程软件工程科学工程计算科学工程计算FORTRAN、Pascal、C语言语言 数据处理与应用数据处理与应用COBOL、SQL、4GL实时处理和系统实时处理和系统汇编语言和汇编语言和Ada语言语言系统软件系统软件汇编语言、汇编语言、C语言、语言、Ada语言语言人工智能人工智能Prolog、lisp语言语言面向对象的语言面向对象的语言C+、JAVA可视化可视化Visual Basic、 Visual C+、 Visual Foxpro、Delphi软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.1.2 编码风格编码风格v编码风格是指一个人编制程序时所表现出来编码风格是指一个人编制程序时所表现出来的特点、习惯、逻辑思路等。的特点、习惯、逻辑思路等。v良好编码风格包括:良好编码风格包括:v程序内部应该有很好的文档:程序内部应该有很好的文档:如标识符、注如标识符、注释良好,程序文档结构易读易理解。释良好,程序文档结构易读易理解。v数据说明应易于理解和维护数据说明应易于理解和维护v语句结构尽可能简单直观语句结构尽可能简单直观v输入输出风格遵守人机界面设计准则输入输出风格遵守人机界面设计准则v效率满足用户需求即可效率满足用户需求即可软件工程实现信息科学与技术学院 闵笛软件工程软件工程vv1 1程序内部文档程序内部文档程序内部文档程序内部文档vv序言性注释序言性注释序言性注释序言性注释:通常置于每个程序模块的开头部分,它应当通常置于每个程序模块的开头部分,它应当给出程序的整体说明给出程序的整体说明给出程序的整体说明给出程序的整体说明,对于理解程序本身具,对于理解程序本身具有引导作用。有关项目包括:有引导作用。有关项目包括:v程序标题程序标题;v有关本模块有关本模块功能和目的的说明功能和目的的说明;v主要算法主要算法;v接口说明接口说明:包括调用形式,参数描述;:包括调用形式,参数描述;v有关数据描述有关数据描述:重要的变量及其用途,约:重要的变量及其用途,约束或限制条件,以及其它有关信息;束或限制条件,以及其它有关信息;v开发简历开发简历:模块设计者,复审者,复审日:模块设计者,复审者,复审日期,修改日期及有关说明等。期,修改日期及有关说明等。软件工程实现信息科学与技术学院 闵笛软件工程软件工程v2数据说明数据说明命名规范命名规范v标识符,包括模块名、变量名、常量名、标标识符,包括模块名、变量名、常量名、标号名、子程序名、数据区名以及缓冲区名等。号名、子程序名、数据区名以及缓冲区名等。v一个系统的命名必须一个系统的命名必须一致一致一致一致。比如采用匈牙利。比如采用匈牙利命名法。例:命名法。例:pstrNamev选用具有选用具有实际含义实际含义的标示符,以利于对标识的标示符,以利于对标识符的理解符的理解v为了便于程序的输入,标识符的名字为了便于程序的输入,标识符的名字不宜过不宜过长长。v为了便于区分,不同的标识符为了便于区分,不同的标识符不要取过于相不要取过于相似似的名字。如的名字。如student和和students易在使用或易在使用或阅读时才生混淆。阅读时才生混淆。软件工程实现信息科学与技术学院 闵笛软件工程软件工程v3 语句的构造语句的构造v书写格式书写格式最好在一行上只书写一条语句。最好在一行上只书写一条语句。最好在一行上只书写一条语句。最好在一行上只书写一条语句。v例如,有一段排序程序例如,有一段排序程序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;v由于一行中包括了多个语句,掩盖了程序的由于一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性变得很差。循环结构和条件结构,使其可读性变得很差。 举例:举例:软件工程实现信息科学与技术学院 闵笛软件工程软件工程v 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; 软件工程实现信息科学与技术学院 闵笛软件工程软件工程v书写格式(续)书写格式(续)在书写语句时,应通过采用递缩式格式使程在书写语句时,应通过采用递缩式格式使程在书写语句时,应通过采用递缩式格式使程在书写语句时,应通过采用递缩式格式使程序的层次更加清晰。序的层次更加清晰。序的层次更加清晰。序的层次更加清晰。v例如:两重嵌套的选择结构嵌套,写成下面例如:两重嵌套的选择结构嵌套,写成下面的递缩形式,层次就清楚得多的递缩形式,层次就清楚得多v IF() THEN IF() THEN ELSE ENDIF ELSE ENDIF 软件工程实现信息科学与技术学院 闵笛软件工程软件工程v4 输入输入/输出输出输入输入v尽可能采用尽可能采用简单简单的输入格式,减少用户的输入的输入格式,减少用户的输入量。量。v交互式输入数据时交互式输入数据时应有必要的提示应有必要的提示。如:。如:“请请输入待查职工的编号输入待查职工的编号(5位数字位数字0000199999)”v程序应对输入数据的程序应对输入数据的合法性进行检查合法性进行检查。v若用户输入某些数据后可能会产生严重后果,若用户输入某些数据后可能会产生严重后果,应给用户输出必要的提示并在必要时要求用户确应给用户输出必要的提示并在必要时要求用户确认。如:认。如:“清库会使库中原有数据全部丢失,真清库会使库中原有数据全部丢失,真的需要清库吗?的需要清库吗?(Y/N)”v应根据用户和系统特点设计令用户满意的输入应根据用户和系统特点设计令用户满意的输入方式。方式。 软件工程实现信息科学与技术学院 闵笛软件工程软件工程5. 从三个方面考虑效率问题:从三个方面考虑效率问题:v程序运行的时间程序运行的时间v存储器效率存储器效率大型机要考虑操作系统页式调度的特点;大型机要考虑操作系统页式调度的特点;微型机可考虑使用最小的存储单元;微型机可考虑使用最小的存储单元;提高存储器效率的关键是程序的简单性。提高存储器效率的关键是程序的简单性。v输入输出的效率输入输出的效率简单清晰是提高人机通信效率的关键;简单清晰是提高人机通信效率的关键;硬件间通信也有一些原则要遵循。硬件间通信也有一些原则要遵循。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7 . 2 软件测试的基础软件测试的基础v什么是软件测试?什么是软件测试?v是为了发现错误而执行程序的过程。是为了发现错误而执行程序的过程。v发现错误是为了更正错误,最终得到一个高发现错误是为了更正错误,最终得到一个高质量的软件系统。质量的软件系统。v软件测试的对象软件测试的对象:整个软件定义、开发周期:整个软件定义、开发周期的产品的产品v测试用例测试用例:通常指测试数据和预期的输出结:通常指测试数据和预期的输出结果果软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.2.1 软件测试的目标软件测试的目标v软件测试存在的矛盾软件测试存在的矛盾v用户希望通过软件测试暴露软件中隐藏的错用户希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。误和缺陷,以考虑是否可接受该产品。v软件开发者希望通过软件测试表明软件产品软件开发者希望通过软件测试表明软件产品中不存在错误,已正确地实现了用户的要求。中不存在错误,已正确地实现了用户的要求。软件工程实现信息科学与技术学院 闵笛软件工程软件工程G.Myers给出的软件测试目的给出的软件测试目的v测试是为了发现错误而执行程序的过程测试是为了发现错误而执行程序的过程v好的测试用例是极可能发现至今为止尚未发现的错好的测试用例是极可能发现至今为止尚未发现的错误的测试方案;误的测试方案;v成功的测试是发现了至今未发现的错误的测试成功的测试是发现了至今未发现的错误的测试v总之,测试的目的是以最少的时间和人力,系统地总之,测试的目的是以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷;测试附带的收找出软件中潜在的各种错误和缺陷;测试附带的收获是它能证明软件的功能和性能与需求说明相符合。获是它能证明软件的功能和性能与需求说明相符合。v注意:测试不能表明软件中不存在错误,它只能说注意:测试不能表明软件中不存在错误,它只能说明软件中存在错误。明软件中存在错误。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 2. 2 软件测试的准则软件测试的准则(1)v1 )所有测试都能追溯到用户需求)所有测试都能追溯到用户需求 v2 )应该远在测试开始之前就制定出测试计划)应该远在测试开始之前就制定出测试计划 v3 )应该把)应该把 Pareto原理应用到软件测试中原理应用到软件测试中群集现象:群集现象: 80 的错误可能是由的错误可能是由 20 的模块造成的的模块造成的v 4 )从)从“小规模小规模”测试开始,逐步过渡到测试开始,逐步过渡到“大规模大规模”测试测试 v5 )穷举测试是不可能的)穷举测试是不可能的测试只能证明程序有错,不能证明程序没有错误测试只能证明程序有错,不能证明程序没有错误 v6 )应由独立的第三方从事测试工作)应由独立的第三方从事测试工作软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.2.3 测试方法测试方法v软件测试方法一般分为:静态测试和动态测软件测试方法一般分为:静态测试和动态测试。试。v静态测试静态测试是指被测程序不在机器上运行,采是指被测程序不在机器上运行,采用人工检测和计算机辅助静态分析的手段对用人工检测和计算机辅助静态分析的手段对程序进行检测。程序进行检测。v动态测试动态测试是指通过运行程序发现错误,又分是指通过运行程序发现错误,又分黑盒法黑盒法和和白盒法白盒法两种。两种。软件工程实现信息科学与技术学院 闵笛软件工程软件工程两种动态测试方法两种动态测试方法v已知产品应该具有的功能,可以通过已知产品应该具有的功能,可以通过黑盒测黑盒测试试来检验每个功能是否符合设计要求。来检验每个功能是否符合设计要求。v已知产品的内部工作过程,可以通过已知产品的内部工作过程,可以通过白盒法白盒法来检验每种内部操作是否按要求的规定正常来检验每种内部操作是否按要求的规定正常进行。进行。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.2.4 测试步骤测试步骤v测试的测试的 4 个步骤:个步骤:v单元(模块)测试单元(模块)测试v集成测试(子系统和系统测试)集成测试(子系统和系统测试)v确认(验收)测试确认(验收)测试v平行运行平行运行软件工程实现信息科学与技术学院 闵笛软件工程软件工程单元测试:检查各各程序模块是否有错误,单元测试:检查各各程序模块是否有错误,能发现编码和详细设计的错误能发现编码和详细设计的错误。集成测试:测试模块(子系统)接口,发集成测试:测试模块(子系统)接口,发现软件设计和需求说明的错误。现软件设计和需求说明的错误。平行测试:同时运行新、旧系统平行测试:同时运行新、旧系统确认测试:检查软件是否满足用户的确认测试:检查软件是否满足用户的需要以及文档资料是否完整、准确需要以及文档资料是否完整、准确软件工程实现信息科学与技术学院 闵笛软件工程软件工程v测试与软件开发各阶段的关系测试与软件开发各阶段的关系v软件开发过程是一个自顶向下,逐步细化软件开发过程是一个自顶向下,逐步细化的过程的过程v软件测试则是依相反顺序自底向上,逐步软件测试则是依相反顺序自底向上,逐步集成的过程。集成的过程。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.2.5 测试阶段的信息流测试阶段的信息流测试过程需要二类输入软件配置:软件需求规格说明、软件软件配置:软件需求规格说明、软件设计规格说明、源代码等;设计规格说明、源代码等;测试配置:测试计划、测试用例、测试配置:测试计划、测试用例、测试程序等;测试程序等;软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 3 单元测试(单元测试( Unit Testing )v又称模块测试,需要从程序的内部结构出发又称模块测试,需要从程序的内部结构出发设计测试用例。设计测试用例。v测试目的:发现模块内部可能存在的差错测试目的:发现模块内部可能存在的差错v测试依据:详细设计说明书和源程序清单测试依据:详细设计说明书和源程序清单v测试方法:白盒测试为主,黑盒测试为辅,测试方法:白盒测试为主,黑盒测试为辅,多个模块并行进行。多个模块并行进行。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7 .3 .1 测试重点测试重点软件工程实现信息科学与技术学院 闵笛软件工程软件工程 模块接口测试模块接口测试v在单元测试的开始,应对通过被测模块的数在单元测试的开始,应对通过被测模块的数据流进行测试。据流进行测试。v测试项目:测试项目:调用本模块的输入参数是否正确;调用本模块的输入参数是否正确;本模块调用子模块时,输入给子模块的参数是否本模块调用子模块时,输入给子模块的参数是否正确;正确;输出给标准函数的参数是否正确;输出给标准函数的参数是否正确;全局量的定义和用法在各摸块中是否一致;全局量的定义和用法在各摸块中是否一致;与外部设备的输入输出是否正确。与外部设备的输入输出是否正确。软件工程实现信息科学与技术学院 闵笛软件工程软件工程 局部数据结构测试局部数据结构测试v测试项目:测试项目:不正确或不一致的数据类型说明不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量使用尚未赋值或尚未初始化的变量错误的初始值或错误的缺省值错误的初始值或错误的缺省值变量名拼写错或书写错变量名拼写错或书写错不一致的数据类型不一致的数据类型全局数据对模块的影响全局数据对模块的影响软件工程实现信息科学与技术学院 闵笛软件工程软件工程 重要的执行通路测试重要的执行通路测试v测试用例要适当测试用例要适当 : 关键关键软件工程实现信息科学与技术学院 闵笛软件工程软件工程 错误处理测试错误处理测试v着重测试以下可能发生的错误:着重测试以下可能发生的错误:出错的措述是否难以理解出错的措述是否难以理解出错的描述是否能够对错误定位出错的描述是否能够对错误定位显示的错误与实际的错误是否相符显示的错误与实际的错误是否相符对错误条件的处理正确与否对错误条件的处理正确与否在对错误进行处理之前,错误条件是否已经引起在对错误进行处理之前,错误条件是否已经引起系统的干预等系统的干预等软件工程实现信息科学与技术学院 闵笛软件工程软件工程 边界测试边界测试v重点检查刚好等于、大于或小于边界值的数重点检查刚好等于、大于或小于边界值的数据据;v对运行时间有要求的模块,还要专门进行关对运行时间有要求的模块,还要专门进行关键路径测试,以确定最坏情况下和平均意义键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。下影响模块运行时间的因素。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.3.2 代码审查代码审查v人工测试源程序。人工测试源程序。v参与者参与者:程序的设计者、编写者、测试者没:程序的设计者、编写者、测试者没有直接参与系统开发,但有力的程序员。有直接参与系统开发,但有力的程序员。v方法:方法:研究设计说明书,一起审查程序代码研究设计说明书,一起审查程序代码如何实现设计,从中发现问题。如何实现设计,从中发现问题。v注意:注意:通常代码审查和机器测试结合使用。通常代码审查和机器测试结合使用。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.3.3 计算机测试计算机测试v单元测试通常在编码阶段进行。常用单元测试通常在编码阶段进行。常用机器测机器测试试,即通过运行模块发现问题。,即通过运行模块发现问题。v两个重要概念:两个重要概念:v驱动程序(驱动程序( driver ) :相当于被测试模块的:相当于被测试模块的“主程序主程序”,接收测试数据,把这些数据传,接收测试数据,把这些数据传送给被测试的模块,并且输出相关结果。送给被测试的模块,并且输出相关结果。v存根程序(存根程序(stub):):代替被测试模块代替被测试模块所调用所调用的模块。不需要具有子模块所有功能,但不的模块。不需要具有子模块所有功能,但不允许什么事情也不做。允许什么事情也不做。软件工程实现信息科学与技术学院 闵笛软件工程软件工程单元测试的测试环境单元测试的测试环境软件工程实现信息科学与技术学院 闵笛软件工程软件工程正文加工系统功能结构图正文加工系统功能结构图v若要测试若要测试“编辑子系统编辑子系统”,需要上层,需要上层“驱动驱动模块模块”和下层和下层“存根程序存根程序”软件工程实现信息科学与技术学院 闵笛软件工程软件工程7 . 4 集成测试(集成测试( Integrated Testing )v在单元测试之后,将模块组装成系统,为发现并排在单元测试之后,将模块组装成系统,为发现并排除模块在连接中可能出现的问题,而进行的测试。除模块在连接中可能出现的问题,而进行的测试。v需要考虑:需要考虑:模块连接时穿越模块接口的数据是否会模块连接时穿越模块接口的数据是否会 丢失;丢失;一个模块对另一个模块是否会产生不利的影响;一个模块对另一个模块是否会产生不利的影响;各子功能组合起来,能各子功能组合起来,能 否达到预期要求的父功能否达到预期要求的父功能全局数据结构是否有问题;全局数据结构是否有问题;单个模块的误差累积起来,是单个模块的误差累积起来,是 否会放大至不能接受的程否会放大至不能接受的程度。度。软件工程实现信息科学与技术学院 闵笛软件工程软件工程集成测试的两种方式集成测试的两种方式v 非渐增式组装方式非渐增式组装方式v对每个模块分别进行单元测试,再把所有模对每个模块分别进行单元测试,再把所有模块组装成一个完整的系统进行的测试,从而块组装成一个完整的系统进行的测试,从而得到要求的软件系统。得到要求的软件系统。 v 渐增式组装方式渐增式组装方式v先对模块进行单元测试,然后将测试后的模先对模块进行单元测试,然后将测试后的模块逐步组装成较大的系统;在组装的过程中块逐步组装成较大的系统;在组装的过程中边连接边测试,以发现连接过程中产生的问边连接边测试,以发现连接过程中产生的问题;最后组装成为要求的软件系统。题;最后组装成为要求的软件系统。软件工程实现信息科学与技术学院 闵笛软件工程软件工程渐增式组装方式的三种类型渐增式组装方式的三种类型v自顶向下的渐增方式自顶向下的渐增方式v自底向上结合的渐增方式自底向上结合的渐增方式v混合渐增测试混合渐增测试软件工程实现信息科学与技术学院 闵笛软件工程软件工程自顶向下的渐增方式自顶向下的渐增方式v将模块按系统程序结构,沿控制层次自顶向将模块按系统程序结构,沿控制层次自顶向下进行组装。下进行组装。v不需要驱动模块不需要驱动模块,需要存根模块需要存根模块v深度优先深度优先v宽度优先宽度优先软件工程实现信息科学与技术学院 闵笛软件工程软件工程深度优先组装的例子深度优先组装的例子软件工程实现信息科学与技术学院 闵笛软件工程软件工程组装步骤组装步骤v1 )对主模块进行测试,用存根模块代替下)对主模块进行测试,用存根模块代替下层模块;层模块;v 2 )根据选定的结合策略,每次用一个实际)根据选定的结合策略,每次用一个实际模块代替一个桩模块;模块代替一个桩模块; v3 )在结合进一个模块的同时进行测试;)在结合进一个模块的同时进行测试;v4 )为保证加入的模块没有引进新的错误,)为保证加入的模块没有引进新的错误,可能需要进行回归测试可能需要进行回归测试软件工程实现信息科学与技术学院 闵笛软件工程软件工程v优点优点:v能在早期验证主要的控制和判断点。能在早期验证主要的控制和判断点。v选用按深度方向组装的方式,可以首先实现选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。和验证一个完整的软件功能。v缺点缺点:v可能遇到逻辑次序上的问题可能遇到逻辑次序上的问题软件工程实现信息科学与技术学院 闵笛软件工程软件工程自底向上的增殖方式自底向上的增殖方式v从程序模块结构最底层的模块开始组装和测试。从程序模块结构最底层的模块开始组装和测试。v不再需要存根程序,需要驱动模块。不再需要存根程序,需要驱动模块。v组合策略:组合策略:1.把低层模块组合成实现某个特定的软件子功能的族;把低层模块组合成实现某个特定的软件子功能的族;2.用驱动程序协调测试数据的输入和输出用驱动程序协调测试数据的输入和输出;3.对由模块组成的子功能族进行测试对由模块组成的子功能族进行测试;4.去掉驱动程序去掉驱动程序,没软件结构自下向上移动没软件结构自下向上移动,把子功能把子功能族组合起来形成更大的子功能族。族组合起来形成更大的子功能族。软件工程实现信息科学与技术学院 闵笛软件工程软件工程自底向上组合测试的例子自底向上组合测试的例子软件工程实现信息科学与技术学院 闵笛软件工程软件工程回归测试回归测试v思考:思考:采用采用“渐增式测试渐增式测试”时,测试中当新时,测试中当新的模块结合进来之后,是否需要对程序进行的模块结合进来之后,是否需要对程序进行再次测试?再次测试?v定义:定义:指集成测试中,重新执行已经做过测指集成测试中,重新执行已经做过测试的某个子集,以保证上述这些变化没有带试的某个子集,以保证上述这些变化没有带来非预期的副作用。来非预期的副作用。v先采取自顶向下的方式测试被修改的模块及先采取自顶向下的方式测试被修改的模块及其子模块;然后将这一部分视为子系统,再其子模块;然后将这一部分视为子系统,再自底向上测试。自底向上测试。软件工程实现信息科学与技术学院 闵笛软件工程软件工程混合策略混合策略v1)衍变的自顶向下的增殖测试)衍变的自顶向下的增殖测试v先对输入输出模块和引入新算法模块进行先对输入输出模块和引入新算法模块进行测试;测试;v再自底向上组装成为功能相当完整且相对独再自底向上组装成为功能相当完整且相对独立的子系统;立的子系统;v然后由主模块开始自顶向下进行增殖测试。然后由主模块开始自顶向下进行增殖测试。软件工程实现信息科学与技术学院 闵笛软件工程软件工程2)自底向上一自顶向下的增殖测试)自底向上一自顶向下的增殖测试v先对含读操作的子系统自底向上直至根结点先对含读操作的子系统自底向上直至根结点模块进行组装和测试;模块进行组装和测试;v再对含写操作的子系统做自顶向下的组装与再对含写操作的子系统做自顶向下的组装与测试。测试。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.5 确认测试确认测试v又称有效性测试。验证软件的功能、性能又称有效性测试。验证软件的功能、性能及其它特性是否与用户的要求一致。及其它特性是否与用户的要求一致。v确认测试的基础确认测试的基础 :软件需求规格说明书:软件需求规格说明书v确认测试的主要工作确认测试的主要工作:有效性测试与软件:有效性测试与软件配置审查配置审查v主要参与人员主要参与人员:以用户为主:以用户为主软件工程实现信息科学与技术学院 闵笛软件工程软件工程确认测试的步骤确认测试的步骤软件工程实现信息科学与技术学院 闵笛软件工程软件工程7 .5. 1 确认测试范围确认测试范围v通常采用黑盒测试,验证被测软件是否满足用户需求。通常采用黑盒测试,验证被测软件是否满足用户需求。v测试计划测试计划:包括测试种类及进度安排;:包括测试种类及进度安排;v测试步骤测试步骤:描述具体的测试用例:描述具体的测试用例v测试目的测试目的:确定软件的特性是否与需求相符;:确定软件的特性是否与需求相符;v 所有的文档都是正确且便于使用;所有的文档都是正确且便于使用;v 其它软件需求。其它软件需求。v测试结果测试结果:与预期的结果相符;:与预期的结果相符;v 与预期的结果不符:要提交一份问题报告。与预期的结果不符:要提交一份问题报告。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.5.2 软件配置复查软件配置复查v目的:目的:保证软件配置的所有成分都齐全;保证软件配置的所有成分都齐全;v 各方面的质量都符合要求;各方面的质量都符合要求;v 具有维护阶段所必需的细节;具有维护阶段所必需的细节;v 而且已经编排好分类的目录。而且已经编排好分类的目录。v应当严格遵守用户手册和操作手册中规定的应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些文档资料的完整性使用步骤,以便检查这些文档资料的完整性和正确性。和正确性。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 5. 3 测试和测试和测试测试v适用:为多个用户开发的软件适用:为多个用户开发的软件 v测试测试:由用户在开发环境下进行的测试。:由用户在开发环境下进行的测试。v主要评价软件产品的主要评价软件产品的:FLURPS(即功能、局即功能、局域化、可使用性、可靠性、性能和支持)域化、可使用性、可靠性、性能和支持)v测试测试:由最终用户在实际使用环境下进行:由最终用户在实际使用环境下进行的测试,这些用户定期返回有关错误信息的测试,这些用户定期返回有关错误信息给开发者。给开发者。v注意:注意:只有当只有当测试达到一定的可靠程度时,测试达到一定的可靠程度时,才开始才开始 测试。测试。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 6 白盒测试技术白盒测试技术v白盒测试执行的要求:白盒测试执行的要求:v对程序模块的所有独立的执行路径至少测试对程序模块的所有独立的执行路径至少测试一次一次 v对所有的逻辑判定,取对所有的逻辑判定,取“真真”与取与取“假假”的的两种情况都至少测试一次;两种情况都至少测试一次;v在循环的边界和运行界限内执行循环体;在循环的边界和运行界限内执行循环体;v测试内部数据结构的有效性。测试内部数据结构的有效性。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 6. 1 逻辑覆盖逻辑覆盖v逻辑覆盖是以程序内部的逻辑结构为基础设逻辑覆盖是以程序内部的逻辑结构为基础设计测试用例的技术。计测试用例的技术。语句覆盖语句覆盖判定覆盖判定覆盖条件覆盖条件覆盖判定一条件覆盖判定一条件覆盖条件组合覆盖条件组合覆盖点覆盖点覆盖边覆盖边覆盖路径覆盖路径覆盖软件工程实现信息科学与技术学院 闵笛软件工程软件工程图7.5被测试模块的流程图图7.5 被被测试模模块的流程的流程图软件工程实现信息科学与技术学院 闵笛软件工程软件工程语句覆盖:使得每一可执行语句至少执行一次语句覆盖:使得每一可执行语句至少执行一次测试数据(测试数据(X任意实数):任意实数):A=2,B=0,X=4软件工程实现信息科学与技术学院 闵笛软件工程软件工程判定覆盖:判定覆盖:运行被测程序,使得运行被测程序,使得运行被测程序,使得运行被测程序,使得程序中每个判断的取程序中每个判断的取程序中每个判断的取程序中每个判断的取真分支和取假分支至少经历一次真分支和取假分支至少经历一次真分支和取假分支至少经历一次真分支和取假分支至少经历一次。测试数据:测试数据:A=3,B=0,X=3(覆盖(覆盖1)A=2,B=1,X=1(覆盖(覆盖2)满足判定覆盖的测试用例一满足判定覆盖的测试用例一定满足语句覆盖。定满足语句覆盖。软件工程实现信息科学与技术学院 闵笛软件工程软件工程条件覆盖:条件覆盖:使得程序中使得程序中使得程序中使得程序中每个判断的每个条件的可能取每个判断的每个条件的可能取每个判断的每个条件的可能取每个判断的每个条件的可能取值至少执行一次值至少执行一次值至少执行一次值至少执行一次。选取测试数据使得选取测试数据使得a点点可能结果可能结果: A1, A1, B=0, B0B点可能结果点可能结果: A=2, A2, X1, X1选择用例:选择用例: A=2,B=0,X=4(路径:(路径:sacbed) A=1,B=1,X=1 (路径:(路径:sabd )软件工程实现信息科学与技术学院 闵笛软件工程软件工程判定判定/条件覆盖条件覆盖v判定条件覆盖就是设计足判定条件覆盖就是设计足够的测试用例,使得够的测试用例,使得判断中判断中每个条件的所有可能取值至每个条件的所有可能取值至少执行一次少执行一次,每个判断中的每个判断中的每个分支至少执行一次每个分支至少执行一次。v同时满足判断覆盖和条件覆盖。同时满足判断覆盖和条件覆盖。v应满足以下覆盖情况:应满足以下覆盖情况:v 条件条件: A1, A1, B=0, B0v A=2, A2, X1, X1v 应执行路径:应执行路径:v 或:或: v v选择用例:选择用例:v (2,0,4),(2,0,3) (1,1,1),(1,1,1)软件工程实现信息科学与技术学院 闵笛软件工程软件工程vv测测 试试 用用 例例 覆盖分支覆盖分支 条件取值条件取值vv【(2, 0, 4),(2, 0, 3)】L1(c, e)vv【(1, 1, 1),(1, 1, 1)】L2(b, d) (A=2) and (B=0) or (A1) and (B=0) and (X/A1) not (A1) and not (A=2) and not (X1) or not (B=0) and not (A=2) and not (X1)软件工程实现信息科学与技术学院 闵笛软件工程软件工程5. 条件组合覆盖条件组合覆盖vv条件组合覆盖就是设计足够的测试用例,条件组合覆盖就是设计足够的测试用例,运行被测程序,使得运行被测程序,使得每个判断的所有可能每个判断的所有可能的条件取值组合至少执行一次的条件取值组合至少执行一次。vv 记 A1, B0 作 A1, B0 作 A1, B0 作 vv A1, B0 作软件工程实现信息科学与技术学院 闵笛软件工程软件工程 vv A2, X1 作 A2, X1 作 A2, X1 作 A2, X1 作vv测 试 用 例 覆盖条件 覆盖组合vv【(2,0,4),(2,0,3)】(L1) ,vv【(2,1,1),(2,1,2)】(L3) ,vv【(1,0,3),(1,0,4)】(L3) ,vv【(1,1,1),(1,1,1)】(L2) ,软件工程实现信息科学与技术学院 闵笛软件工程软件工程 andorA1T TB=0T TX=X/AT TF FF FA=2T TF FX1F FX=X+1软件工程实现信息科学与技术学院 闵笛软件工程软件工程6 .路径测试路径测试v路径测试就是设计足够的测试用例,路径测试就是设计足够的测试用例,覆盖程序中覆盖程序中所有可能的路径所有可能的路径。v测 试 用 例 通过路径 覆盖条件v【(2, 0, 4), (2, 0, 3)】 ace (L1) 【(1, 1, 1), (1, 1, 1)】 abd (L2)v【(1, 1, 2), (1, 1, 3)】 abe (L3) 【(3, 0, 3), (3, 0, 1)】 acd (L4) v 软件工程实现信息科学与技术学院 闵笛软件工程软件工程(A1) and (B=0)(A=2) or (X1)X=X/AX=X+1T TT TF FF Fbdcea软件工程实现信息科学与技术学院 闵笛软件工程软件工程总结:总结: 6 种覆盖标准的对比种覆盖标准的对比软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 6. 2 控制结构测试控制结构测试v1 、基本路径测试、基本路径测试v以环形复杂度为基础,导出基本可执行路径以环形复杂度为基础,导出基本可执行路径集合,设计测试用例的方法。集合,设计测试用例的方法。v测试用例要保证程序的测试用例要保证程序的每个可执行语句至少每个可执行语句至少执行一次执行一次。软件工程实现信息科学与技术学院 闵笛软件工程软件工程步骤:步骤:v1:由程序流程图导出程序控制流图,并计算其环路由程序流程图导出程序控制流图,并计算其环路复杂度复杂度v2:确定程序的独立路径确定程序的独立路径v什么是独立路径?什么是独立路径?v流图中,一条独立路径是至少包含一条在其它独立流图中,一条独立路径是至少包含一条在其它独立路径中从未有过的边的路径。路径中从未有过的边的路径。v独立路径条数独立路径条数是确保程序中,每个可执行语句至少是确保程序中,每个可执行语句至少能被执行一次所必需的测试用例数目的上界。能被执行一次所必需的测试用例数目的上界。v独立路径条数程序环路复杂性独立路径条数程序环路复杂性 V ( G )软件工程实现信息科学与技术学院 闵笛软件工程软件工程步骤步骤1.根据程序逻辑画出流程图根据程序逻辑画出流程图 vvoid Func(int nPosX, int nPosY) vwhile (nPosX 0) vint nSum = nPosX + nPosY;vif (nSum 1) v nPosX-;v nPosY-;vvelse v if (nSum -1) nPosX -= 2; v else nPosX -= 4; vv/ end of whilev软件工程实现信息科学与技术学院 闵笛软件工程软件工程步骤步骤2:将流程图转换为流图将流程图转换为流图软件工程实现信息科学与技术学院 闵笛软件工程软件工程步骤步骤3:确定基本路径的集合确定基本路径的集合v基本路径流图Cyclomatic复杂度正好是基本路径的数目vV(G) = E N + 2 V(G) = 11 - 9 + 2 = 4 V(G) =P+1E、N、P分别为流图的边数、节点数和谓词节点数。软件工程实现信息科学与技术学院 闵笛软件工程软件工程步骤步骤4:确定测试路径的集合确定测试路径的集合v例:独立路径v图中一组独立的路径是:vL1 : 1 , 11 vL2: 1 , 2 , 3 , 4 , 5 , 10 , 1 , 11 vL3: 1 , 2 , 3 , 6 , 8 , 9 , 10 , 1 , 11 vL4: 1 , 2 , 3 , 6 , 7 , 9 , 10 , 1 , 11 v路径 L1 , L2 , L3 , L4 组成了控制流图的一个基本路径集。软件工程实现信息科学与技术学院 闵笛软件工程软件工程步骤步骤 5 :由基本路径集,导出测试用例:由基本路径集,导出测试用例v基本路径集不是唯一的,对于给定的程序图,基本路径集不是唯一的,对于给定的程序图,可以得到不同的基本路径集。可以得到不同的基本路径集。v导出测试用例,确保基本路径集中的每一条导出测试用例,确保基本路径集中的每一条路径的执行。路径的执行。软件工程实现信息科学与技术学院 闵笛软件工程软件工程针对测试路径设计测试用例针对测试路径设计测试用例v1-11nPosX 取-1, nPosY取任意值v1 - 2, 3 - 4, 5 - 10 - 1 - 11nPosX 取1, nPosY取1v1- 2, 3 - 6 - 7 - 9 - 10 - 1 11nPosX 取1, nPosY取-1v1- 2, 3 - 6 - 8 - 9 - 10 - 1 - 11 nPosX 取1, nPosY取-3软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.7 黑盒测试技术黑盒测试技术v黑盒测试主要是为了发现以下错误:黑盒测试主要是为了发现以下错误:v是否有不正确或遗漏了的功能?是否有不正确或遗漏了的功能?v能否正确地接受输入?能否正确的输出结果?能否正确地接受输入?能否正确的输出结果?v是否有数据结构错误或外部数据库访问错误?是否有数据结构错误或外部数据库访问错误?v性能上是否能够满足要求?性能上是否能够满足要求?v是否有初始化或终止性错误?是否有初始化或终止性错误?v几种黑盒测试技术:几种黑盒测试技术:v等价类划分、边界值分析、错误推测法、因果图等价类划分、边界值分析、错误推测法、因果图软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.7.1 等价划分等价划分v基本思想:基本思想:v把所有可能的输入数据(包括有效或无效的)把所有可能的输入数据(包括有效或无效的),划分成若干数据类(等价类),然后从每,划分成若干数据类(等价类),然后从每个数据类中选取少数有代表性的数据做为测个数据类中选取少数有代表性的数据做为测试用例。试用例。v这种方法完全不考虑程序的内部结构,只依这种方法完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。据程序的规格说明来设计测试用例。软件工程实现信息科学与技术学院 闵笛软件工程软件工程设计测试用例的步骤设计测试用例的步骤v步骤步骤 1 :划分等价类:划分等价类(列出等价类表)列出等价类表)v等价类是指输入数据的子集合。在该子集合等价类是指输入数据的子集合。在该子集合中,各输入数据对于发现程序中的错误都是中,各输入数据对于发现程序中的错误都是等效的。等效的。v根据程序功能说明,确定有效和无效的等价根据程序功能说明,确定有效和无效的等价类类v步骤步骤2:根据等价类设计测试用例:根据等价类设计测试用例v包括有效等价类和无效等价类的设计。包括有效等价类和无效等价类的设计。软件工程实现信息科学与技术学院 闵笛软件工程软件工程步骤步骤 1 :划分等价类:划分等价类v等价类分为:等价类分为:v有效等价类:有效等价类:是指对于程序的规格说明来说,是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。是合理的,有意义的输入数据构成的集合。v无效等价类:无效等价类:是指对于程序的规格说明来说,是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。是不合理的,无意义的输入数据构成的集合。v在设计测试用例时,要同时考虑有效等价类在设计测试用例时,要同时考虑有效等价类和无效等价类的设计!和无效等价类的设计! !软件工程实现信息科学与技术学院 闵笛软件工程软件工程等价类划分原则(等价类划分原则(1)v原则原则1 :若规定了取值范围,或输入值的个:若规定了取值范围,或输入值的个数,则可以确立一个有效等价类和两个无效数,则可以确立一个有效等价类和两个无效等价类。等价类。v例:程序对输人条件的要求是:例:程序对输人条件的要求是:.输入数是从输入数是从 1 1 到到 999 . 999 .v则则 有效等价类是有效等价类是“ 1 =“ 1 =输入数输入数=999 ;=999 ;v 两个无效等价类是两个无效等价类是“输入数输入数1 1或或“输入数输入数 999 999 在数轴上表示成:在数轴上表示成:软件工程实现信息科学与技术学院 闵笛软件工程软件工程等价类划分原则(等价类划分原则(2)v原则原则2:如果规定了输入数据的一组值,而且程序要:如果规定了输入数据的一组值,而且程序要对每种输入数据分别处理,则可为每种输入值确立对每种输入数据分别处理,则可为每种输入值确立一个有效等价类,此外针对这组值确立一个无效等一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。价类,它是所有不允许的输入值的集合。v例:教师上岗方案中规定对教授、副教授、讲师和例:教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定助教分别计算分数,做相应的处理。因此可以确定 4 4 个有效等价类为教授、副教授、讲师和助教,一个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它是所有不符合以上身分的人员的个无效等价类,它是所有不符合以上身分的人员的输入值的集合。输入值的集合。软件工程实现信息科学与技术学院 闵笛软件工程软件工程等价类划分原则(等价类划分原则(3)v原则原则 3 :若规定了输入值的集合,或者是规:若规定了输入值的集合,或者是规定了定了“必须如何必须如何”的条件,则可确立一个有的条件,则可确立一个有效等价类和一个无效等价类。效等价类和一个无效等价类。v例:例: Pascal Pascal 语言对变量标识符规定必须语言对变量标识符规定必须“以字母以字母打头打头”,则所有以字母打头的构成有效等价类,而,则所有以字母打头的构成有效等价类,而不以字母打头的归于无效等价类。不以字母打头的归于无效等价类。软件工程实现信息科学与技术学院 闵笛软件工程软件工程等价类划分原则(等价类划分原则(4)v原则原则4 :如果规定输入数据为整型,则可划:如果规定输入数据为整型,则可划分出正整、零和负整数三个有效类,其他数分出正整、零和负整数三个有效类,其他数据为无效类据为无效类v原则原则5:如果程序处理对象是表格,则应使用:如果程序处理对象是表格,则应使用空表、含一项和多项的表。空表、含一项和多项的表。v原则原则6:如果确知,已划分的等价类中各元素:如果确知,已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。进一步划分成更小的等价类。软件工程实现信息科学与技术学院 闵笛软件工程软件工程步骤步骤2:确立测试用例:确立测试用例v在确立了等价类之后,建立等价类表,列出在确立了等价类之后,建立等价类表,列出所有划分出的等价类。所有划分出的等价类。软件工程实现信息科学与技术学院 闵笛软件工程软件工程测试用例的选择原则测试用例的选择原则v原则原则1: 为每一个等价类规定一个唯一编号;为每一个等价类规定一个唯一编号;v原则原则2:设计一个新的测试用例,使其尽可能设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;一步,直到所有的有效等价类都被覆盖为止;v原则原则3: 设计一个新的测试用例,使其仅覆盖设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。直到所有的无效等价类都被覆盖为止。软件工程实现信息科学与技术学院 闵笛软件工程软件工程等价类划分法设计测试用例(例等价类划分法设计测试用例(例 1 )v例例1:v某报表处理系统,要求用户输入处理报表的日期。某报表处理系统,要求用户输入处理报表的日期。v系统规定日期由年、月的系统规定日期由年、月的 6 位数字字符组成,前位数字字符组成,前 4 位代表年,后两位代表月。位代表年,后两位代表月。v设日期限制在设日期限制在 1990 年年 1 月至月至 1999 年年 12 月,即系月,即系统只能对该段时期内的报表进行处理。如果用户输统只能对该段时期内的报表进行处理。如果用户输入的日期不在此范围内,则显示输入错误。入的日期不在此范围内,则显示输入错误。v现用等价类划分法设计测试用例,来测试程序的现用等价类划分法设计测试用例,来测试程序的“日期检查功能日期检查功能”。软件工程实现信息科学与技术学院 闵笛软件工程软件工程划分等价类并编号划分等价类并编号软件工程实现信息科学与技术学院 闵笛软件工程软件工程为合理等价类设计测试用例为合理等价类设计测试用例v 6 位数字字符位数字字符 v 在在 1990 一一 1999 之间之间 v 在在 1 一一 12 之间之间软件工程实现信息科学与技术学院 闵笛软件工程软件工程为每个不合理等价类设计测试用例为每个不合理等价类设计测试用例软件工程实现信息科学与技术学院 闵笛软件工程软件工程等价类划分法设计测试用例(例等价类划分法设计测试用例(例 2 )v某一某一 8 位微机,其十六进制常数定义为:位微机,其十六进制常数定义为:v以以 0x 或或0X 开头的数是十六进制整数,其值开头的数是十六进制整数,其值的范围是的范围是-7f 7f (表示十六进制的大小写(表示十六进制的大小写字母不加区别),如字母不加区别),如0X 13 , 0X6A ,-0X3c 。软件工程实现信息科学与技术学院 闵笛软件工程软件工程划分等价类并编号划分等价类并编号软件工程实现信息科学与技术学院 闵笛软件工程软件工程为合理等价类设计测试用例为合理等价类设计测试用例v1、0x或或0X 开头的开头的 1 2位数字串位数字串v2、以、以-0x打头的打头的12位数字串位数字串v9、- 7f 7f 之间之间软件工程实现信息科学与技术学院 闵笛软件工程软件工程软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.7.2 边界值分析边界值分析v边界是指,对于输入和输出等价类而言,稍高和稍边界是指,对于输入和输出等价类而言,稍高和稍低于其边界值的一些特定情况。低于其边界值的一些特定情况。v经验得知,大量的错误是发生在输入或输出范围的经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。边界上,而不是在输入范围的内部。v边界值分析方法思想:边界值分析方法思想:确定边界之后,选取正好等确定边界之后,选取正好等于、刚刚大于或刚刚小于边界的值做为测试数据,于、刚刚大于或刚刚小于边界的值做为测试数据,而不是选取等价类中典型值或任意值做为测试数据。而不是选取等价类中典型值或任意值做为测试数据。v通常总是与等价划分技术联合使用,是等价划分方通常总是与等价划分技术联合使用,是等价划分方法的补充。法的补充。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7.7.3 错误推测错误推测v基本思想基本思想:列举程序中所有可能有的错误和:列举程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测容易发生错误的特殊情况,根据它们选择测试用例。试用例。v依靠经验和直觉推测程序中可能存在的各种依靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的错误,从而有针对性地编写检查这些错误的测试用例。测试用例。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 8 调试(调试( Debug)v软件调试是在成功测试之后,进一步诊断和软件调试是在成功测试之后,进一步诊断和改正程序中潜在的错误。改正程序中潜在的错误。v调试活动的组成部分:调试活动的组成部分:v确定程序中可疑错误的确切性质和位置。确定程序中可疑错误的确切性质和位置。v对程序(设计,编码)进行修改,排除这个对程序(设计,编码)进行修改,排除这个错误。错误。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7 .8 .1 调试过程调试过程v从错误的外部表现形式入手,确定程序中从错误的外部表现形式入手,确定程序中出错位置;出错位置;v 研究有关程序,找出错误的内在原因;研究有关程序,找出错误的内在原因;v修改设计和代码,排除这个错误;修改设计和代码,排除这个错误;v 重复进行暴露了这个错误的原始测试或某重复进行暴露了这个错误的原始测试或某些有关测试。些有关测试。软件工程实现信息科学与技术学院 闵笛软件工程软件工程软件工程实现信息科学与技术学院 闵笛软件工程软件工程v调试在技术上的难度调试在技术上的难度错误现象与原因所处的位置可能相距甚远。当其它错误错误现象与原因所处的位置可能相距甚远。当其它错误得到纠正时,这一错误所表现出的现象可能会暂时消失,得到纠正时,这一错误所表现出的现象可能会暂时消失,但并未实际排除。但并未实际排除。非错误原因(例如,舍入误差)非错误原因(例如,舍入误差)不容易发现的人为错误。不容易发现的人为错误。错误是由于时序问题引起的,与处理过程无关。错误是由于时序问题引起的,与处理过程无关。现象是由于难于精确再现的输人状态(例如,实时应用现象是由于难于精确再现的输人状态(例如,实时应用中输入顺序不确定)引起。中输入顺序不确定)引起。现象可能是周期出现的。在软、硬件结合的嵌入式系统现象可能是周期出现的。在软、硬件结合的嵌入式系统中常常遇到。中常常遇到。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 8. 2 调试途径调试途径v 强行排错强行排错(蛮干法蛮干法)v效率最低的方法,常见形式:效率最低的方法,常见形式:v打印出所有存储内容、代码打印出所有存储内容、代码v在程序特定部位设置打印语句在程序特定部位设置打印语句v自动调试工具。自动调试工具。软件工程实现信息科学与技术学院 闵笛软件工程软件工程回溯法(跟踪法)回溯法(跟踪法)v根据错误症状位置,人工沿程序控制流程向根据错误症状位置,人工沿程序控制流程向回追踪源代码。回追踪源代码。v适用于小程序,路径数目很大时无法进行适用于小程序,路径数目很大时无法进行软件工程实现信息科学与技术学院 闵笛软件工程软件工程 归纳法调试归纳法调试v一种从特殊现象推断一般原理的思考方法。一种从特殊现象推断一般原理的思考方法。软件工程实现信息科学与技术学院 闵笛软件工程软件工程归纳法调试步骤归纳法调试步骤v收集有关数据收集有关数据。列出所有已知的测试用例和程序执。列出所有已知的测试用例和程序执行结果。行结果。 v组织数据。组织数据。组织整理数据,以发现规律。组织整理数据,以发现规律。 3W IH 形形式。式。v提出假设提出假设。利用分析结果,设计一个或多个关于出。利用分析结果,设计一个或多个关于出错原因的假设。若提不出假设,则需收集更多数据。错原因的假设。若提不出假设,则需收集更多数据。v证明假设证明假设。把假设与原始线索或数据进行比较,若。把假设与原始线索或数据进行比较,若它能完全解释一切现象,则假设得到证明;否则,它能完全解释一切现象,则假设得到证明;否则,就认为假设不合理、不完全,或是存在多个错误,就认为假设不合理、不完全,或是存在多个错误,能消除部分错误能消除部分错误软件工程实现信息科学与技术学院 闵笛软件工程软件工程 演绎法调试演绎法调试v一种从一般原理或前提出发,经过排除和精一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。化的过程来推导出结论的思考方法。软件工程实现信息科学与技术学院 闵笛软件工程软件工程v演绎法调试步骤演绎法调试步骤v列举所有可能出错原因的假设列举所有可能出错原因的假设。把所有可能的错误。把所有可能的错误原因列成表。通过它们,组织、分析现有数据。原因列成表。通过它们,组织、分析现有数据。v利用已有的测试数据,排除不正确的假设利用已有的测试数据,排除不正确的假设。仔细分。仔细分析已有的数据,寻找矛盾,力求排除前一步列出的析已有的数据,寻找矛盾,力求排除前一步列出的所有原因。如果所有原因都被排除了,则需要补充所有原因。如果所有原因都被排除了,则需要补充一些数据(测试用例),以建立新的假设。一些数据(测试用例),以建立新的假设。v改进余下的假设改进余下的假设。对没有被排除的原因,利用已知。对没有被排除的原因,利用已知的线索,进一步改进,使之更具体化,以便可以精的线索,进一步改进,使之更具体化,以便可以精确地确定出错位置。确地确定出错位置。v证明余下的假设证明余下的假设。见归纳法第四步。见归纳法第四步。软件工程实现信息科学与技术学院 闵笛软件工程软件工程调调 试试 原原 则则v确定错误的性质和位置的原则确定错误的性质和位置的原则v用头脑去分析思考与错误征兆有关的信息。用头脑去分析思考与错误征兆有关的信息。v避开死胡同。避开死胡同。v只把调试工具当做辅助手段来使用。利用调只把调试工具当做辅助手段来使用。利用调试工具,可以帮助思考,但不能代替思考。试工具,可以帮助思考,但不能代替思考。v避免用试探法,最多只能把它当做最后手段。避免用试探法,最多只能把它当做最后手段。软件工程实现信息科学与技术学院 闵笛软件工程软件工程修改错误的原则修改错误的原则v修改错误的一个常见失误是只修改了这个错修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没有修改错误的征兆或这个错误的表现,而没有修改错误的本身。误的本身。v当心修正一个错误的同时有可能会引入新的当心修正一个错误的同时有可能会引入新的错误。错误。v修改错误的过程将迫使人们暂时回到程序设修改错误的过程将迫使人们暂时回到程序设计阶段。计阶段。v修改源代码程序,不要改变目标代码。修改源代码程序,不要改变目标代码。软件工程实现信息科学与技术学院 闵笛软件工程软件工程7. 9 软件可靠性软件可靠性v7 .9. 1 基本概念基本概念v1、什么是软件可靠性?、什么是软件可靠性?v程序在给定的时间间隔内,按照规格说明书的规定程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。成功地运行的概率。v随着运行时间的增加,运行时出现程序故障的概率随着运行时间的增加,运行时出现程序故障的概率也将增加,即可靠性随着给定的时间间隔的加大而也将增加,即可靠性随着给定的时间间隔的加大而减少。减少。vIEEE规定:规定:v“错误错误” 由开发人员造成的软件差错(由开发人员造成的软件差错( bug )v“故障故障” 由错误引起的软件的不正确行为。由错误引起的软件的不正确行为。软件工程实现信息科学与技术学院 闵笛软件工程软件工程v2 、什么是软件可用性?、什么是软件可用性?v是程序在给定的时间点,按照规格说明书的是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。规定,成功地运行的概率。v3 、可靠性和可用性的主要差别:、可靠性和可用性的主要差别:v可靠性意味着在可靠性意味着在 0 到到 t 这段时间间隔内系统这段时间间隔内系统没有失效;没有失效;v可用性只意味着在时刻可用性只意味着在时刻 t ,系统是正常运行,系统是正常运行的的软件工程实现信息科学与技术学院 闵笛软件工程软件工程7 . 9 . 2 估算平均无故障时间估算平均无故障时间 MTTFv推测错误的产生频度,即推测错误产生的时推测错误的产生频度,即推测错误产生的时间间隔。间间隔。v经验表明,平均无故障时间经验表明,平均无故障时间 MTTF与单位长与单位长度程序中剩余的错误数成反比:度程序中剩余的错误数成反比:软件工程实现信息科学与技术学院 闵笛软件工程软件工程估算错误的方法估算错误的方法v1)植入错误法)植入错误法v在测试之前由专人在程序中随机地植入一些在测试之前由专人在程序中随机地植入一些错误,测试之后,根据测试小组发现的错误错误,测试之后,根据测试小组发现的错误中原有的和植入的两种错误的比例,来估计中原有的和植入的两种错误的比例,来估计程序中原有错误的总数程序中原有错误的总数 ET 。软件工程实现信息科学与技术学院 闵笛软件工程软件工程错误植入模型错误植入模型vMills 将将播种模型播种模型用于程序中残留错误的估算,用于程序中残留错误的估算,称称错误植入模型错误植入模型软件工程实现信息科学与技术学院 闵笛软件工程软件工程2 ) 分别测试法分别测试法vHyman 对错误植入模型的改进对错误植入模型的改进v两个测试员彼此独立测试同一个程序的两个副本两个测试员彼此独立测试同一个程序的两个副本,将将把其中一个测试员发现的错误作为有标记的错误把其中一个测试员发现的错误作为有标记的错误,由由另一名分析员分析他们的测试结果。另一名分析员分析他们的测试结果。vB0:B0:程序中原有的残留错误数程序中原有的残留错误数 vB1: 1B1: 1号测试员在某一时间内发现的错误数号测试员在某一时间内发现的错误数 vB2: 2B2: 2号测试员在同一时间内发现的错误数号测试员在同一时间内发现的错误数vbc:bc:两位测试员共同发现的错误数两位测试员共同发现的错误数软件工程实现信息科学与技术学院 闵笛软件工程软件工程软件测试的致命的缺陷软件测试的致命的缺陷v测试的不完全、不彻底性。测试的不完全、不彻底性。v分支较多的复杂的程序,程序可能执行的路分支较多的复杂的程序,程序可能执行的路径太多,进行穷举测试几乎是不可能的。径太多,进行穷举测试几乎是不可能的。v一般程序只能进行有限的测试,在发现错误一般程序只能进行有限的测试,在发现错误时能说明程序有问题;但未发现错误时,不时能说明程序有问题;但未发现错误时,不能说明程序中没有错误。能说明程序中没有错误。软件工程实现信息科学与技术学院 闵笛软件工程软件工程确认测试应交付的文档确认测试应交付的文档v确认测试分析报告确认测试分析报告v最终的用户手册和操作手册最终的用户手册和操作手册v项目开发总结报告。项目开发总结报告。软件工程实现信息科学与技术学院 闵笛软件工程软件工程小结小结v测试是软件开发最繁重的任务,也是保证软测试是软件开发最繁重的任务,也是保证软件可靠性最主要的手段。件可靠性最主要的手段。v测试的目的是发现程序的错误,而不是证明测试的目的是发现程序的错误,而不是证明程序没有错误程序没有错误v设计测试用例和纠错,是搞好软件测试的两设计测试用例和纠错,是搞好软件测试的两项关键技术。项关键技术。软件工程实现信息科学与技术学院 闵笛软件工程软件工程第第 7 章作业:章作业:v1 、习题七第、习题七第 4 题的第(题的第( 3 )小题;)小题; 2 、某、某程序规定,输入三个整数作为三角形的边长。程序规定,输入三个整数作为三角形的边长。当三角形为等边三角形、等腰三角形、一般当三角形为等边三角形、等腰三角形、一般三角形时,给出三角形类型并计算其面积。三角形时,给出三角形类型并计算其面积。请用等价类划分法设计该程序的测试用例请用等价类划分法设计该程序的测试用例软件工程实现
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号