【教学课件】第四章软件实现.ppt
《【教学课件】第四章软件实现.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第四章软件实现.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。在单元测试的同时可进行组装测试在单元测试的同时可进行组装测试在单元测试的同时可进行组装测试在单元测试的同时可进行组装测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。子系统的组装测试特别称为部件测试,它所做的工作是要找出组装后的子系统子系统的组装测试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第四 软件 实现
限制150内