【教学课件】第四章软件实现.ppt

上传人:wuy****n92 文档编号:69912496 上传时间:2023-01-11 格式:PPT 页数:56 大小:416.50KB
返回 下载 相关 举报
【教学课件】第四章软件实现.ppt_第1页
第1页 / 共56页
【教学课件】第四章软件实现.ppt_第2页
第2页 / 共56页
点击查看更多>>
资源描述

《【教学课件】第四章软件实现.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第四章软件实现.ppt(56页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第四章第四章 软件实现软件实现4.1 编码编码4.2 软件测试概述软件测试概述4.3 软件测试的策略软件测试的策略4.4 测试用例的设计测试用例的设计4.5 面向对象的软件测试面向对象的软件测试4.6 软件调试软件调试 4.7 软件可靠性软件可靠性4.8 软件测试软件测试CASE工具工具4.1 编码编码程序设计语言程序设计语言1 程序设计语言的分类程序设计语言的分类 低级语言高级语言机器语言汇编语言基础语言结构化语言专用语言程序设计语言程序设计语言4.1 编码编码2 程序设计语言的选择程序设计语言的选择 一般来说,选择程序设计语言优先考虑高级语言。一般来说,选择程序设计语言优先考虑高级语言。在

2、选择高级语言时以下因素是需要考虑的:在选择高级语言时以下因素是需要考虑的:1)语言自身的特点)语言自身的特点2)软件的应用领域)软件的应用领域3)软件的开发方法)软件的开发方法4)软件的开发和执行环境)软件的开发和执行环境5)算法和数据结构的复杂性)算法和数据结构的复杂性6)软件的可移植性)软件的可移植性7)软件开发人员的知识)软件开发人员的知识8)用户的要求)用户的要求4.1 编码编码编码风格编码风格编码风格又称为编程风格,指的是编程的基本原则,良好的编码风格使编编码风格又称为编程风格,指的是编程的基本原则,良好的编码风格使编写的程序在保证正确性和有效性前提下,易读易懂,便于维护。写的程序在

3、保证正确性和有效性前提下,易读易懂,便于维护。编程的基本原则:编程的基本原则:1)源程序文档化)源程序文档化2)数据说明)数据说明3)语句构造语句构造4)输入)输入/输出输出5)效率)效率 6)提高重用性)提高重用性7)提高可扩充性)提高可扩充性8)提高健壮性)提高健壮性4.1 编码编码1 源程序文档化源程序文档化程序内部的文档包括:程序内部的文档包括:1)恰当的标识符(变量和标号)的名字:)恰当的标识符(变量和标号)的名字:标识符包括模块名、变量名、常量名、标号名、子程序名以及数据区标识符包括模块名、变量名、常量名、标号名、子程序名以及数据区名、缓冲区名等。这些名字的选取应含义鲜明,能正确地

4、提示程序对象所名、缓冲区名等。这些名字的选取应含义鲜明,能正确地提示程序对象所代表的实体。这对于帮助阅读者理解程序是很重要的。例如,表示次数用代表的实体。这对于帮助阅读者理解程序是很重要的。例如,表示次数用times,表示总量用,表示总量用total等。名字的长度不应限制,但也不宜过长,太长了等。名字的长度不应限制,但也不宜过长,太长了容易出错,应选择精炼且意义明确的名字,这样才能简化程序语句,改善容易出错,应选择精炼且意义明确的名字,这样才能简化程序语句,改善对程序功能的理解。如果名字使用缩写,那么缩写规则应该一致,并且应对程序功能的理解。如果名字使用缩写,那么缩写规则应该一致,并且应该给每

5、个名字加上注解,以方便阅读。该给每个名字加上注解,以方便阅读。4.1 编码编码2)适当的注释:适当的注释:序言性注释和功能性注释。序言性注释和功能性注释。序言性注释序言性注释:安排在每个程序模块的起始部分,它是对程序的整体说明,对于理解程序安排在每个程序模块的起始部分,它是对程序的整体说明,对于理解程序本身具有引导作用。本身具有引导作用。其格式如下:其格式如下:有关本模块功能说明;有关本模块功能说明;主要算法;主要算法;接口描述:包括调用形式,参数描述以及子模块清单;接口描述:包括调用形式,参数描述以及子模块清单;有关数据描述:包括重要的变量及其用途、约束或限制条件,以及其它有有关数据描述:包

6、括重要的变量及其用途、约束或限制条件,以及其它有 关信息;关信息;模块位置:在哪一个源文件中,或隶属于哪一个软件包;模块位置:在哪一个源文件中,或隶属于哪一个软件包;开发简历:包括模块设计者姓名,复审人姓名,复审日期,修开发简历:包括模块设计者姓名,复审人姓名,复审日期,修 改日期及有改日期及有 关说明等。关说明等。4.1 编码编码功能性注释:功能性注释:嵌入在源程序体内,用以描述其后的语句或程序段的处理功能。嵌入在源程序体内,用以描述其后的语句或程序段的处理功能。书写功能性注释,要注意以下几点:书写功能性注释,要注意以下几点:l描述的对象是一段程序,而不是每一个语句;描述的对象是一段程序,而

7、不是每一个语句;l适当使用缩进和空行,使程序与注释容易区别;适当使用缩进和空行,使程序与注释容易区别;l注释一定要准确。不精确的甚至是错误的注释不仅对理解程序毫无帮助,注释一定要准确。不精确的甚至是错误的注释不仅对理解程序毫无帮助,反而会妨碍对程序的理解。反而会妨碍对程序的理解。4.1 编码编码程序的视觉组织程序的视觉组织 程序中代码的布局对于程序的可读性也有很大影响。适当的利用空格、程序中代码的布局对于程序的可读性也有很大影响。适当的利用空格、空行和移行能使程序的逻辑结构更加清晰。空格的合理应用还可以突出运空行和移行能使程序的逻辑结构更加清晰。空格的合理应用还可以突出运算的优先性,避免发生运

8、算的错误。算的优先性,避免发生运算的错误。4.1 编码编码2 数据说明数据说明为了使数据更容易理解和维护,应遵循一些简单的原则:为了使数据更容易理解和维护,应遵循一些简单的原则:(1)数据说明的次序应当规范化。)数据说明的次序应当规范化。(2)当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。)当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。(3)如果设计时使用了一个复杂的数据结构,则应注解说明用程序设计语)如果设计时使用了一个复杂的数据结构,则应注解说明用程序设计语 言实现这个数据结构的方法和特点。言实现这个数据结构的方法和特点。4.1 编码编码3 语句构造语句构造语句

9、构造应遵循的原则是:每条语句应该简单而直接,不应为了片面追求语句构造应遵循的原则是:每条语句应该简单而直接,不应为了片面追求效率而使代码变得过于复杂。效率而使代码变得过于复杂。人们在长期的实践中总结了以下一些规则:人们在长期的实践中总结了以下一些规则:l不要为了节省空间而把多个语句写在同一行;不要为了节省空间而把多个语句写在同一行;l用空格或可读的符号使语句的内容更加清晰;用空格或可读的符号使语句的内容更加清晰;l尽量避免复杂的条件测试;尽量避免复杂的条件测试;l尽量避免使用尽量避免使用“非非”条件的条件语句;条件的条件语句;l避免过多使用循环嵌套和条件嵌套;避免过多使用循环嵌套和条件嵌套;l

10、利用括号使逻辑表达式或算术表达式的运算次序清晰直观;利用括号使逻辑表达式或算术表达式的运算次序清晰直观;l尽可能使用库函数;尽可能使用库函数;l让编译程序作简单的优化。让编译程序作简单的优化。4.1 编码编码4 输入输出输入输出在设计和程序编码时,应考虑输入和输出风格原则:在设计和程序编码时,应考虑输入和输出风格原则:对所有输入数据都进行校验,以保证每个数据的有效性;对所有输入数据都进行校验,以保证每个数据的有效性;检查重要的输入项组合的合法性;检查重要的输入项组合的合法性;使得输入的步骤和操作尽可能简单,并保持简单的输入格式;使得输入的步骤和操作尽可能简单,并保持简单的输入格式;输入一批数据

11、时,使用输入结束指示符,不要要求用户说明输入项数;输入一批数据时,使用输入结束指示符,不要要求用户说明输入项数;在以交互式输入输出方式进行输入时,要指明可以使用的选择值或界限在以交互式输入输出方式进行输入时,要指明可以使用的选择值或界限值;值;应允许缺省值;应允许缺省值;当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的要求一致;语句的要求一致;给所有的输出加注释,并设计输出报表格式。给所有的输出加注释,并设计输出报表格式。4.1 编码编码5 效率效率通常,效率主要指占用处理器时间和存储器两个方面。好的编码可以提高

12、通常,效率主要指占用处理器时间和存储器两个方面。好的编码可以提高效率,在我们进一步讨论这个问题之前,应该记住三条原则:效率,在我们进一步讨论这个问题之前,应该记住三条原则:第一、效率是一个性能要求,因而应该在需求分析阶段确定代码效率方面第一、效率是一个性能要求,因而应该在需求分析阶段确定代码效率方面 的要求;的要求;第二、通过好的设计可以提高效率;第二、通过好的设计可以提高效率;第三、程序的效率和程序的简明程度是一致的,不应该为了提高代码效率第三、程序的效率和程序的简明程度是一致的,不应该为了提高代码效率 而牺牲程序的清晰性和可读性。而牺牲程序的清晰性和可读性。具体包括:具体包括:1、代码效率

13、、代码效率 2、存储效率、存储效率 3、输入输出的效率、输入输出的效率4.1 编码编码6 重用性:提高代码中方法的内聚,减小方法的规模,保持方法的一致重用性:提高代码中方法的内聚,减小方法的规模,保持方法的一致 性,把策略与实现分开,尽量不使用全局信息等等。性,把策略与实现分开,尽量不使用全局信息等等。7 可扩充性:提高可重用性的同时也能提高程序的可扩充性,还要考虑模可扩充性:提高可重用性的同时也能提高程序的可扩充性,还要考虑模 块的耦合程度块的耦合程度8 健壮性:应该预防用户的操作错误,检查参数的合法性,等等健壮性:应该预防用户的操作错误,检查参数的合法性,等等 提高程序从错误中恢复的能力提

14、高程序从错误中恢复的能力4.2 软件测试概述软件测试概述测试的定义测试的定义:为了发现程序中的错误而执行程序的过程。具体地说,软件:为了发现程序中的错误而执行程序的过程。具体地说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并利用测试用例来运行程序,以发现程序错误的过程。批测试用例,并利用测试用例来运行程序,以发现程序错误的过程。给出了以下的观点:给出了以下的观点:(1)测试是为了发现程序中的错误而执行程序的过程;)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为

15、止尚未发现的错误的测试方案;)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。)成功的测试是发现了至今为止尚未发现的错误的测试。4.2 软件测试概述软件测试概述软件测试涉及的概念:软件测试涉及的概念:错误错误、缺陷、故障、缺陷、故障软件测试的基本原则:软件测试的基本原则:(1)所有测试都应该能追溯到用户需求)所有测试都应该能追溯到用户需求(2)应该在测试前就制定出测试计划)应该在测试前就制定出测试计划(3)应该从)应该从“小规模小规模”测试开始,并逐步进行测试开始,并逐步进行“大规模大规模”测试测试(4)穷举测试是不可能的。)穷举

16、测试是不可能的。(5)应该由独立的第三方从事测试工作)应该由独立的第三方从事测试工作。4.2 软件测试概述软件测试概述软件测试的手段软件测试的手段1、代码审查、代码审查人工测试源程序可以由编写者本人非正式地进行,也可以由审查小组正式人工测试源程序可以由编写者本人非正式地进行,也可以由审查小组正式进行,后者称为代码审查。进行,后者称为代码审查。审查小组的组成:审查小组的组成:(1)组长)组长 一个很有能力的程序员一个很有能力的程序员(2)程序的设计者)程序的设计者(3)程序的编写者)程序的编写者(4)程序的测试者)程序的测试者4.2 软件测试概述软件测试概述3.计算机测试计算机测试 存根程序:是

17、被测试模块单元所调用模块的代替模块,在模块调存根程序:是被测试模块单元所调用模块的代替模块,在模块调 用接口、相关数据处理、控制返回等方面对被代替模块进行用接口、相关数据处理、控制返回等方面对被代替模块进行“模拟模拟”驱动程序:调用测试单元的驱动程序:调用测试单元的“主程序主程序”,它接受测试数据,把这些数,它接受测试数据,把这些数 据传送给被测试的模块并打印有关结果。据传送给被测试的模块并打印有关结果。驱动模块被测模块桩模块桩模块桩模块测试用例测试结果单元测试的测试环境模块测试子系统测试系统测试平行运行 目的:保证每个模块作为一个单元能够正确运行,又称为单元测试 集成测试、组装测试、联合测试

18、;重点在于测试模块之间的接口;将经过测试的子系统装配成一个完整的系统来测试;发现设计和编码的错误,验证系统是否满足需求说明所定义的功能及其动态特性;也称为集成测试。同时运行新旧两个系统,并且对处理的结果进行比较,以确定新系统是否满足相关性能指标。验收测试 有用户参加的系统测试;验证是否满足用户的需要;主要使用实用数据。4.2 软件测试概述软件测试概述测试测试软件配置测试配置测试结果预期结果评价评价错误错误率数据调试调试可靠性可靠性模型模型正确可靠性预测包括需求说明书、设计说明书、源程序清单等包括测试计划和测试方案4.3 软件测试的策略软件测试的策略单元测试单元测试单元测试又称模块测试,是针对软

19、件设计的最小单位单元测试又称模块测试,是针对软件设计的最小单位 程序模块,进行程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。行地独立进行单元测试。测试重点测试重点:在单元测试时,测试者需要依据详细设计说明书和源程序清在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用条件和

20、模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应入,都能鉴别和响应。4.3 软件测试的策略软件测试的策略(1)模块接口测试模块接口测试主要进行的测试项目有以下几方面:主要进行的测试项目有以下几方面:所测模块的形式参数和调用该模块的实际输入参数在参数数目、属性和顺所测模块的形式参数和调用该模块的实际输入参数在参数数目、属性和顺序上是否匹配;序上是否匹配;是否修改了只做输入用的形式参数;是否修改了只做输入用的形式参数;输出给被调用模块的参数在数目、属性和顺序上是否正

21、确;输出给被调用模块的参数在数目、属性和顺序上是否正确;全程变量的定义和用法在各个模块中是否一致。全程变量的定义和用法在各个模块中是否一致。若模块中有外部的若模块中有外部的I/O操作,还应该进行以下的测试项目:操作,还应该进行以下的测试项目:文件属性是否正确;文件属性是否正确;打开文件语句和关闭语句是否正确;打开文件语句和关闭语句是否正确;格式说明书与输入输出语句是否一致;格式说明书与输入输出语句是否一致;缓冲区的大小与记录长度是否匹配;缓冲区的大小与记录长度是否匹配;使用文件之前是否先打开了文件;使用文件之前是否先打开了文件;文件操作结束后是否关闭了文件;文件操作结束后是否关闭了文件;是否进

22、行了输入输出错误检查并进行了相应的处理。是否进行了输入输出错误检查并进行了相应的处理。4.3 软件测试的策略软件测试的策略(2)(2)局部数据结构测试局部数据结构测试不正确或不一致的数据类型说明不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量使用尚未赋值或尚未初始化的变量错误的初始值或错误的缺省值错误的初始值或错误的缺省值变量名拼写错或书写错变量名拼写错或书写错不一致的数据类型不一致的数据类型全局数据对模块的影响全局数据对模块的影响 (3)路径测试路径测试选择适当的测试用例,对模块中重要的执行路径进行测试。选择适当的测试用例,对模块中重要的执行路径进行测试。应当设计测试用例查找由于错

23、误的计算、不正确的比较或不正常的控制流应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。而导致的错误。对基本执行路径和循环进行测试可以发现大量的路径错误对基本执行路径和循环进行测试可以发现大量的路径错误.4.3 软件测试的策略软件测试的策略(4)错误处理测试错误处理测试出错的描述是否难以理解出错的描述是否难以理解出错的描述是否能够对错误定位出错的描述是否能够对错误定位显示的错误与实际的错误是否相符显示的错误与实际的错误是否相符对错误条件的处理正确与否对错误条件的处理正确与否在对错误进行处理之前,错误条件在对错误进行处理之前,错误条件 是否已经引起系统的干预等是否已经

24、引起系统的干预等(5)边界测试边界测试注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。性。对这些地方要仔细地选择测试用例,认真加以测试。如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素坏情况下和平均意义下影响模块运行时间的因素 集成测试是组装软件的系统技术;组装测试组装测试组装测试组装测试 、联合测试联合测试联合测试联合测试 通常,在单元测试的基

25、础上,需要将所有模块按照设计要求组装成为系统。这时需 要考虑的问题是:u 在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失;u 一个模块的功能是否会对另一个模块的功能产生不利的影响;u 各个子功能组合起来,能否达到预期要求的父功能;u 全局数据结构是否有问题;u 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。在单元测试的同时可进行组装测试在单元测试的同时可进行组装测试在单元测试的同时可进行组装测试在单元测试的同时可进行组装测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。子系统的组装测试特别称为部件测试,它所做的工作是要找出组装后的子系统子系统的组装测试

26、特别称为部件测试,它所做的工作是要找出组装后的子系统与系统需求规格说明之间的不一致。与系统需求规格说明之间的不一致。通常,把模块组装成为系统的方式有两种通常,把模块组装成为系统的方式有两种l 一次性组装方式:又称为非渐增式测试;一次性组装方式:又称为非渐增式测试;l 增殖式组装方式:其中又分为自顶向下、自底向上和两种方法混合增殖式组装方式:其中又分为自顶向下、自底向上和两种方法混合测试方式测试方式4.3 软件测试的策略软件测试的策略1.1.一次性组装方式一次性组装方式(big bang)(big bang)它是一种非增殖式组装方式。也叫做整体拼装。它是一种非增殖式组装方式。也叫做整体拼装。使用

27、这种方式,首先对每个模块分别进行模块测试,然后再把所有模块使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。组装在一起进行测试,最终得到要求的软件系统。系 统结构图单元测试整体组装4.3 软件测试的策略软件测试的策略2.2.渐增法渐增法渐增法渐增法首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统在组装的过程中边连接边测试,以发现连接过程中产生的问题在组装的过程中边连接边测试,以发现连接过程中产生的问题通过增殖逐步组装成为要求的软件系统。通过增殖逐步组装成为要求

28、的软件系统。(1)自顶向下的渐增方式自顶向下的渐增方式l l这种组装方式将模块这种组装方式将模块这种组装方式将模块这种组装方式将模块按系统程序结构按系统程序结构按系统程序结构按系统程序结构,沿控制层次自顶向下进行组装沿控制层次自顶向下进行组装沿控制层次自顶向下进行组装沿控制层次自顶向下进行组装。l l自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。l l选用按深度方向组装的方式,可以首先实现和验证

29、一个完整的软件功能。选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。4.3 软件测试的策略软件测试的策略(2)自底向上的自底向上的渐增方式渐增方式n n 这种组装的方式是从这种组装的方式是从这种组装的方式是从这种组装的方式是从程序模块结构的最底层的模块开始组装和测试程序模块结构的最底层的模块开始组装和测试程序模块结构的最底层的模块开始组装和测试程序模块结构的最底层的模块开始组装和测试。n n 因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模

30、块因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括(包括(包括(包括 子模块的所有下属模块)已经组装并测试完成,所以子模块的所有下属模块)已经组装并测试完成,所以子模块的所有下属模块)已经组装并测试完成,所以子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块不再需要桩模块不再需要桩模块不再需要桩模块。在模块的测试在模块的测试在模块的测试在模块的测试 过程中需要从子模块得到的信息可以直接运行子模块得到。过程中需要从子模块得到的信息可以直接运行子

31、模块得到。过程中需要从子模块得到的信息可以直接运行子模块得到。过程中需要从子模块得到的信息可以直接运行子模块得到。自顶向下增殖的方式和自底向上增殖的方式各有优缺点。自顶向下增殖的方式和自底向上增殖的方式各有优缺点。一般来讲,一种方式的优点是另一种方式的缺点。一般来讲,一种方式的优点是另一种方式的缺点。4.3 软件测试的策略软件测试的策略非渐增式和渐增式测试方法的优缺点比较:非渐增式和渐增式测试方法的优缺点比较:非渐增式方法要对每个模块编写驱动模块和桩模块,工作量较大;而渐增式非渐增式方法要对每个模块编写驱动模块和桩模块,工作量较大;而渐增式 方法可以利用部分已测试过的模块作为测试软件;方法可以

32、利用部分已测试过的模块作为测试软件;非渐增式方法发现模块间的接口错误较晚,而渐增式方法则要早一些;非渐增式方法发现模块间的接口错误较晚,而渐增式方法则要早一些;非渐增式方法发现错误后较难定位;而渐增式方法则要容易一些;非渐增式方法发现错误后较难定位;而渐增式方法则要容易一些;非渐增式方法可以并行测试所有模块,可充分利用人力,加快工程进度;非渐增式方法可以并行测试所有模块,可充分利用人力,加快工程进度;渐增式方法接近全真运行环境,需要较多的测试运行时间,但对程序模块的渐增式方法接近全真运行环境,需要较多的测试运行时间,但对程序模块的 测试较为彻底。测试较为彻底。4.3 软件测试的策略软件测试的策

33、略4.3 软件测试的策略软件测试的策略确认测试确认测试 验证软件的有效性验证软件的有效性软件的有效性:软件的有效性:软件的有效性:软件的有效性:如果软件的功能和性能满足用户的需求,则软件是有效的如果软件的功能和性能满足用户的需求,则软件是有效的如果软件的功能和性能满足用户的需求,则软件是有效的如果软件的功能和性能满足用户的需求,则软件是有效的软件有效性的标准:软件有效性的标准:软件有效性的标准:软件有效性的标准:需求分析阶段所产生的准确的系统需求文档;需求分析阶段所产生的准确的系统需求文档;需求分析阶段所产生的准确的系统需求文档;需求分析阶段所产生的准确的系统需求文档;测试方法:测试方法:测试

34、方法:测试方法:一般用黑盒方法;一般用黑盒方法;一般用黑盒方法;一般用黑盒方法;结果:结果:结果:结果:功能和性能均与用户要求一致,软件是可以接受的;否则软件是不功能和性能均与用户要求一致,软件是可以接受的;否则软件是不功能和性能均与用户要求一致,软件是可以接受的;否则软件是不功能和性能均与用户要求一致,软件是可以接受的;否则软件是不可接受的。可接受的。可接受的。可接受的。Alpha和和Beta测试测试测试方案:包括预定要测试的功能,应该输入的测试数据和预期的结果。其中测试方案:包括预定要测试的功能,应该输入的测试数据和预期的结果。其中最困难的设计测试用的输入数据(称为测试用例)。最困难的设计

35、测试用的输入数据(称为测试用例)。测试用例设计技术:黑盒测试的等价划分、边界值分析、错误推测法;测试用例设计技术:黑盒测试的等价划分、边界值分析、错误推测法;白盒白盒测试的逻辑覆盖法;测试的逻辑覆盖法;1.逻辑覆盖逻辑覆盖l语句覆盖l判定覆盖l条件覆盖l判定条件覆盖l条件组合覆盖l路径覆盖。逻辑覆盖是以程序内部的逻辑结构为基础程序内部的逻辑结构为基础程序内部的逻辑结构为基础程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。4.4 测试用例的设计测试用例的设计 语句覆盖语句覆盖(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF FbcePROCEDU

36、RE Example(A,B:real;X:real);Begin IF(A1)AND(B=0)THEN X:=X/A;IF(A=2)OR(X1)THEN X:=X+1END;a1 1Sd2 23 34 45 56 67 7I.A=2,B=0,X=4-sacbed语句覆盖语句覆盖所有的语句至少执行一次!所有的语句至少执行一次!判定覆盖判定覆盖(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1Sd2 23 34 45 56 67 7判定覆盖判定覆盖 每个判定的每种可能都至少执行一次!每个判定的每种可能都至少执行一次!即每个判定的每个分支都至少

37、执行一次!即每个判定的每个分支都至少执行一次!I:A=3,B=0,X=3:sacbdII:A=2,B=1,X=1:sabed 满足判定覆盖的测试用例满足判定覆盖的测试用例一定满足语句覆盖:判定覆盖一定满足语句覆盖:判定覆盖比语句覆盖强。比语句覆盖强。条件覆盖条件覆盖S条件覆盖条件覆盖 每个语句至少执行一次,而且判定表达每个语句至少执行一次,而且判定表达式中的每个条件都要取得各种可能的结果。式中的每个条件都要取得各种可能的结果。条件覆盖一般情况下比判定覆盖要强,条件覆盖一般情况下比判定覆盖要强,但是也有满足条件覆盖但不能满足判但是也有满足条件覆盖但不能满足判定覆盖的情况。定覆盖的情况。(A1)(

38、A1)(B=0)(B0)(A=2)(A2)(X1)(X1)II:A=1,B=1,X=1:sabdI:A=2,B=0,X=4:sacbedI:A=2,B=0,X=1:sacbedII:A=1,B=1,X=1:sabed(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7 判定判定/条件覆盖条件覆盖(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 12 23 34 45 56 67 7Sd(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1)

39、II:A=1,B=1,X=1:sabdI:A=2,B=0,X=4:sacbed 条件组合覆盖条件组合覆盖(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fba1 12 23 34 45 56 67 7Sd 条件组合覆盖要求选取足够多的测试数据,使得每条件组合覆盖要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次个判定表达式中条件的各种可能组合都至少出现一次(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1)I.A=2,B=0,X=4II.A=2,B=1,X=1III.A=1,B=0,X=2IV.A=1,B=1,

40、X=1满足条件组合覆盖标准的测试数据,满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判也一定满足判定覆盖、条件覆盖和判定定/条件覆盖标准。条件覆盖标准。I:sacbedII:sabedIII:sabedIV:sabd覆盖路径 点点覆盖覆盖:如果连通图 G 的子图G是连通的,而且包含G的所有节点,则称G是G 的点覆盖。与语句覆盖标准相同。边边覆盖覆盖:如果连通图如果连通图 G 的子图的子图G是连通的,而且包含是连通的,而且包含G的所有边,则称的所有边,则称G是是G 的边覆盖。的边覆盖。通常与判定覆盖标准相同。通常与判定覆盖标准相同。路径路径覆盖覆盖:选取足够多的测试数据,使程序的

41、每条选取足够多的测试数据,使程序的每条 可能路径都至少执可能路径都至少执行一次(如果程序图行一次(如果程序图 中有环,则要求每个环至少经过一次)中有环,则要求每个环至少经过一次)路径覆盖是较强的逻辑覆盖标准。路径覆盖是较强的逻辑覆盖标准。I:A=1,B=1,X=1(1-2-3);II:A=1,B=1,X=2(1-2-6-7)III:A=3,B=0,X=1(1-4-5-3);IV:A=2,B=0,X=4(1-4-5-6-7)12345672.2.控制结构测试控制结构测试 现有的多种白盒测试技术,是根据程序的控制结设计测试数据的技现有的多种白盒测试技术,是根据程序的控制结设计测试数据的技术,常用的

42、控制结构测试技术有术,常用的控制结构测试技术有 1 1)基本路径测试)基本路径测试 2 2)条件测试)条件测试 3 3)循环测试)循环测试7.77.7黑盒测试技术黑盒测试技术 测试人员将程序看成是一个测试人员将程序看成是一个“黑盒黑盒”,即不,即不关心程序内部是什么,只要检查程序是符合它关心程序内部是什么,只要检查程序是符合它的的“功能说明功能说明”。等等 价价 划划 分分等价分类法是将输入数据的可能值分成若干“等价类”,每一类以一个代表性的测试数据进行测试,这个数据就等价于这一类中的其它数据。该法的关键在于如何将输入数据分类。例如:输入的数据范围是1999,我们可以划分三类:x999 N个等

43、价类个等价类 每个等价类中的一组具代表性的测试数据每个等价类中的一组具代表性的测试数据2 2 等等 价价 划划 分分(2)(2)把 数 字 串转换成整数Type ShortStr=array1.6 of char;Function StrToInt(dstr:ShortStr):integer;无效输入的等价类非法输出的等价类 16个数字字符组成的数字串(最高位不是零);最高位是零的数字串;最高位数字左邻是负号的数字串;空字符串(全是空格);左部填充的字符既不是零也不是空格;最高位数字右边由数字和空格混合组成;最高位数字右边由数字和其他字符混合组成;负号与最高位数字之间有空格。计算机能表示的最

44、小负整数和零之间的负整数;零;计算机能表示的最大正整数和零之间的正整数;有效输入的等价类合法输出的等价类 比计算机能表示的最小负整数还小的负整数;计算机能表示的最大正整数还大的正整数;等价类说明等价类说明测试数据测试数据预期输出预期输出测试结果测试结果备注备注1-6个数字的数字串个数字的数字串 11最高位是零的数字串最高位是零的数字串0000011最高位数字左邻是负号的数字串最高位数字左邻是负号的数字串-00001-1最高位是零的数字串最高位是零的数字串0000000太小的负整数太小的负整数-47561错误错误无效输入(负数)无效输入(负数)太大的正整数太大的正整数132767错误错误无效输入

45、(正数)无效输入(正数)空字符串空字符串-6个空格个空格 错误错误-没有数字没有数字字符串左边字符既不是空格也不是零字符串左边字符既不是空格也不是零*+kgh1错误错误填充错填充错最高位数字后面有空格最高位数字后面有空格1 2错误错误无效输入无效输入最高位数字后面有其他字符最高位数字后面有其他字符1*2错误错误无效输入无效输入负号和最高位数字之间有空格负号和最高位数字之间有空格-12错误错误负号位置错负号位置错3 3 边边 界界 值值 分分 析析 经验表明:处理边界情况时程序最容易发生错误;下标、数据结构、循环等边界 对等价划分法中的不同等价类的边界情况进行重点测试;等价类说明等价类说明测试数

46、据测试数据预期输出预期输出测试结果测试结果备注备注使输出刚好等于最小的负整数使输出刚好等于最小的负整数-32768-32768使输出刚好等于最大的正整数使输出刚好等于最大的正整数3276732767使输出刚刚小于最小的负整数使输出刚刚小于最小的负整数-32769错误错误无效输入(负数)无效输入(负数)使输出刚刚大于最大的正整数使输出刚刚大于最大的正整数32768错误错误无效输入(正数)无效输入(正数)4 4 错错 误误 推推 测测 不同类型不同特点的程序通常有一些特殊的容易出错的情况;不同类型不同特点的程序通常有一些特殊的容易出错的情况;有时测试数据的组合数量也是非常多,难于覆盖所有情况;有时

47、测试数据的组合数量也是非常多,难于覆盖所有情况;经验数据经验数据例:程序Triangle读入三个整数值,这三个整数代 表同一个三角形三条边的长度,程序根据这三个 值判断三角形属于不等边、等腰或等边三角形中 的那一种。abcTrianglea,b,c三角形的类型?黑盒测试(等价划分)正常的三角形正常的三角形 (a,b,c)不等边三角形不等边三角形(8,10,12);(10,8,12);(10,12,8)等边三角形等边三角形(10,10,10)等腰三角形等腰三角形(10,10,17);(10,17,10);(17,10,10)不能构成三角形的非法数据不能构成三角形的非法数据(a,b,c)a+bc(

48、10,10,21)b+ca(21,10,10)c+ab(10,21,10)退化的三角形退化的三角形 (a,b,c)不等边三角形不等边三角形(10,6,4)等边三角形等边三角形(0,0,0)等腰三角形等腰三角形(10,5,5);(5,10,5);(10,5,5)黑盒测试(边界值分析)一条边长度为零一条边长度为零的情况的情况(0,10,12);(10,0,12);(10,12,0)两条边的长度为两条边的长度为零的情况零的情况(0,0,17););(0,17,0););(17,0,0)三条边的长度为三条边的长度为零的情况零的情况(0,0,0)输入数据中包含负整数输入数据中包含负整数(-10,-10,

49、-10)输入数据不全(不足三个正整数)输入数据不全(不足三个正整数)(10,-,-)输入数据中包含非整数型的数据输入数据中包含非整数型的数据(a,b,c)(1.2,6e-4,7.8)黑盒测试(错误推测)startab+c?ba+c?ca+b?a=b?b=c?印出“不是三角形”印出“等边三角形”印出“等腰三角形”印出“不等边三角形”a=c?b=c?FTFFTTTTFFFFTTstop程序流程图程序图4.5 面向对象的软件测试面向对象的软件测试Smith和和Robson建议,面向对象的测试应该针对建议,面向对象的测试应该针对4个不同的层次:功能、个不同的层次:功能、类、聚类(彼此协作的对象的交互群

50、)和整个系统。在面向对象的每个不类、聚类(彼此协作的对象的交互群)和整个系统。在面向对象的每个不同测试阶段,都有其不同层次的侧重点。同测试阶段,都有其不同层次的侧重点。1 面向对象的单元测试:面向对象的单元测试:面向对象的单元测试主要是对每个类进行单元测试。在对对象类进行测试面向对象的单元测试主要是对每个类进行单元测试。在对对象类进行测试时,可从时,可从2个层次来进行:测试与对象关联的单个操作;测试单个对象类。个层次来进行:测试与对象关联的单个操作;测试单个对象类。对象关联的单个操作是一些函数或程序,可以使用白盒测试方法和黑盒测对象关联的单个操作是一些函数或程序,可以使用白盒测试方法和黑盒测试

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁