软件工程07实现.ppt
《软件工程07实现.ppt》由会员分享,可在线阅读,更多相关《软件工程07实现.ppt(111页珍藏版)》请在三一办公上搜索。
1、个人成果,妥善保存,请勿传播,软件工程,张康立 Email:,个人成果,妥善保存,请勿传播,可行性研究,需求分析,概要设计,详细设计,实 现,集成测试,确认测试,使用与维护,退役,软件定义,软件开发,软件使用与维护,软件生命周期,个人成果,妥善保存,请勿传播,软件实现的任务,软件实现把编码和测试统称为实现编码就是把软件设计结果翻译成用某种程序设计语言书写的程序所选用的程序设计语言的特点及编码风格将对程序的可靠性、可读性、可测试性和可维护性产生深远的影响,个人成果,妥善保存,请勿传播,软件实现的任务,软件实现软件测试在软件生命周期中横跨两个阶段编码和单元测试属于软件生命周期的同一个阶段 对软件系
2、统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段 软件测试的工作量往往占软件开发总工作量的40以上,个人成果,妥善保存,请勿传播,课程内容提纲,第7章:“实现”编码软件测试基础单元测试、集成测试、确认测试白盒测试技术黑盒测试技术调试软件可靠性,个人成果,妥善保存,请勿传播,编码,程序设计语言是人和计算机通信的基本工具程序设计语言的特点影响人的思维和解题方法影响人和计算机通信的方式和质量影响人月度和理解程序的难易程度由于软件大部分成本在测试和维护,所以程序容易测试和容易维护极端重要,个人成果,妥善保存,请勿传播,编码,选择程序设计语言程序员在相同时间内可以写出的高级语言语句数和汇编
3、语言指令数大体相同因此用高级语言写程序比用汇编语言写程序生产率可以提高好几倍用高级语言写的程序易测试、易阅读和维护,除了特殊的应用领域需要汇编语言,其他程序一律使用高级语言编写,个人成果,妥善保存,请勿传播,编码,选择程序设计语言的理想标准 应该有理想的模块化机制,以及可读性好的控制结构和数据结构语言特点应该使编译程序能够尽可能多地发现程序中的错误选用的高级语言应该有良好的独立编译机制,个人成果,妥善保存,请勿传播,编码,选择程序设计语言的实用标准系统用户的要求如果所开发的系统由用户负责维护,用户通常要求用他们熟悉的语言书写程序可以使用的编译程序运行目标系统的环境中可以提供的编译程序往往限制了
4、可以选用的语言的范围可以得到的软件工具如果某种语言有支持程序开发的软件工具可以利用,则目标系统的实现和验证都变得比较容易,个人成果,妥善保存,请勿传播,编码,选择程序设计语言的实用标准工程规模如果工程规模很庞大,现有的语言又不完全适用,那么设计并实现一种供这个工程项目专用的程序设计语言,可能是一个正确的选择程序员的知识如果和其他标准不矛盾,那么应该选择一种已经为程序员所熟悉的语言,个人成果,妥善保存,请勿传播,编码,选择程序设计语言的实用标准软件可移植性要求如果目标系统将在几台不同的计算机上运行,或者预期的使用寿命很长,那么选择一种标准化程度高、程序可移植性好的语言就是很重要的软件的应用领域F
5、ORTRAN语言特别适合于工程和科学计算COBOL语言适合于商业领域应用C语言和Ada语言适用于系统和实时应用领域LISP语言适用于组合问题领域PROLOG语言适于表达知识和推理,个人成果,妥善保存,请勿传播,编码,编码风格“好”程序的标准源程序代码的逻辑简明清晰、易读易懂为写出“好”程序应遵循的原则,个人成果,妥善保存,请勿传播,编码,编码风格 1 程序内部的文档程序内部的文档包括:恰当的标识符适当的注解程序的视觉组织 选取含义鲜明的名字,对帮助阅读程序很重要;不必要的长标识符提供了出错的潜在可能性;如果使用缩写,缩写规则在整个程序设计过程中应保持一致,必要时应给缩写名字加注解,个人成果,妥
6、善保存,请勿传播,编码,编码风格 1 程序内部的文档程序中的注解分为两类序言性注解:位于每个模块的开始,作用是简要描述模块的功能、主要算法、接口和重要数据功能性注解:它插在程序中间,一般在源代码的右边,其作用是解释这段代码的必要性程序清单的布局对于程序的可读性有很大影响程序设计者应该遵循简单语句一行写一个语句对于选择、循环等复杂语句采用逐层缩进的书写原则,保证程序具有良好的梯形结构,个人成果,妥善保存,请勿传播,编码,编码风格 2 数据说明 数据说明的次序应该标准化例如,按照数据结构或数据类型确定说明的次序有次序就容易查阅,因此能够加速测试、调试和维护的过程。当多个变量名在一个语句中说明时,应
7、该按字母顺序排列这些变量如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结构的方法和特点,个人成果,妥善保存,请勿传播,编码,编码风格 3 语句构造构造语句时应该遵循的原则是:每个语句都应该简单而直接不能为了提高效率而使程序变得过分复杂 不要为了节省空间而把多个语句写在同一行尽量避免复杂的条件测试尽量减少对“非”条件的测试避免大量使用循环嵌套和条件嵌套用括号使逻辑或算术表达式的运算次序清晰直观,编码,编码风格 4 输入输出风格的规则对所有输入数据都进行检验检查输入项重要组合的合法性保持输入格式简单使用数据结束标记,不要要求用户指定数据的数目提示交互式输入的请求,说
8、明可用的选择或边界数值程序语言对格式有严格要求时,应保持输入格式一致设计良好的输出报表,个人成果,妥善保存,请勿传播,个人成果,妥善保存,请勿传播,编码,编码风格 5 效率效率主要指处理机时间和存储器容量两个方面关于效率的三条原则第一,效率是性能要求,应该在需求分析阶段确定效率方面的要求;第二,效率是靠好设计来提高的;第三,程序的效率和程序的简单度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率,个人成果,妥善保存,请勿传播,编码,编码风格 5 效率程序运行时间源程序的效率直接由详细设计阶段确定的算法的效率决定写程序的风格也能对程序的执行速度和存储器要求产生影响 把详细设计翻译成程序时
9、,应使用的原则:写程序之前先简化算术的和逻辑的表达式研究嵌套的循环,以确定是否有语句可以从内往外移尽量避免使用多维数组尽量避免使用指针和复杂的表使用执行时间短的算术运算不要混合使用不同的数据类型尽量使用整数运算和布尔表达式,个人成果,妥善保存,请勿传播,编码,编码风格 5 效率存储器效率提高存储器效率主要是指如何使程序占用存储单元少,存取时间短提高执行效率的技术也能提高存储器效率对于大型计算机要考虑操作系统页式调度的特点对于微处理机应选用有紧缩存储器特性的编译程序,必要时可使用汇编语言,个人成果,妥善保存,请勿传播,编码,编码风格 5 效率输人输出的效率输入输出效率指人给计算机提供输入或为了理
10、解计算机输出,所需花费的脑力是否经济简单清晰是提高输入输出效率的关键所有输入输出都应有缓冲,减少用于通信的额外开销对二级存储器(如磁盘)应选用最简单的访问方法如果“超高效的”输入输出很难被人理解,则不应采用这种方法,个人成果,妥善保存,请勿传播,课程内容提纲,第7章:“实现”编码软件测试基础单元测试、集成测试、确认测试白盒测试技术黑盒测试技术调试软件可靠性,个人成果,妥善保存,请勿传播,软件测试基础,防不胜防的软件错误 案例1963年,美国飞往火星的火箭爆炸,损失$10 million.原因FORTRAN循环 DO 5 I=1,3 误写为 DO 5 I=1.3软件测试的必要性软件的复杂性成员之
11、间的沟通和配合技术评审的不完整性编码引入新的错误,个人成果,妥善保存,请勿传播,软件测试基础,软件测试的目的软件测试的目的与软件工程其他阶段的目的都相反软件工程的其他阶段都是“建设性”的在测试阶段测试人员努力设计一系列测试方案,目的却是为了“破坏”已经建造好的软件系统 竭力证明程序中有错误不能按照预定要求正确工作测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用,个人成果,妥善保存,请勿传播,软件测试基础,软件测试的目标什么是测试?它的目标是什么?GMyers给出了关于测试的一些规则:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试
12、方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。,个人成果,妥善保存,请勿传播,软件测试基础,软件测试准则(1)所有测试都应该能追溯到用户需求(2)应该在测试开始之前就制定出测试计划完成了需求模型就可以着手制定测试计划在建立了设计模型后就可以立即开始设计详细的测试方案(3)测试发现的错误中的80很可能是由程序中20的模块造成的。问题是怎样找出这些可疑的模块并彻底地测试它们,个人成果,妥善保存,请勿传播,软件测试基础,软件测试准则(4)应该从“小规模”测试开始,并逐步进行“大规模”测试通常,首先重点测试单个程序模块,然后把测试重点转向在集成
13、的模块簇中寻找错误,最后在整个系统中寻找错误(5)穷举测试是不可能的所谓穷举测试就是把程序所有可能的执行路径都检查一遍的测试(6)为了达到最佳的测试效果,应该由独立的第三方从事测试工作,主要问题:穷尽测试通常是不可能的。例:(Black-box)程序要求输入3个整形数据。若字长16位,则各种可能输入的排列组合共有(种),个人成果,妥善保存,请勿传播,软件测试基础,若程序执行需10-3秒,则对于所有合法输入的测试大约需用一万年,而且还应测试输入非法数据的情况。,个人成果,妥善保存,请勿传播,软件测试基础,例:下图所示的程序中共有 5201014条可能的执行通路,显然,每条通路都执行一遍是不现实的
14、。,个人成果,妥善保存,请勿传播,软件测试基础,测试方法有关概念测试用例一组用于测试的输入数据和预期得出的正确输出测试方案测试用例和用例预定要检验的功能测试计划要进行的测试种类和进度安排,个人成果,妥善保存,请勿传播,软件测试基础,测试方法黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程黑盒测试是在程序接口进行的测试检查程序功能是否能按照规格说明书的规定正常使用程序是否能适当地接收输入数据产生正确的输出信息程序运行过程中能否保持外部信息黑盒测试又称为功能测试,测试过程后期使用的方法,个人成果,妥善保存,请勿传播,软件测试基础,测试方法白盒测试法把程序看成装在一个透明的白盒子,
15、测试者完全知道程序的结构和处理算法这种方法按照程序内部的逻辑测试程序,检测程序中主要执行通路是否都能按预定要求正确工作白盒测试又称为结构测试,测试过程早期使用的方法,个人成果,妥善保存,请勿传播,软件测试基础,测试步骤1模块测试模块测试的目的是保证每个模块作为一个单元能正确运行模块测试通常又称为单元测试在这个测试步骤中所发现的往往是编码和详细设计的错误2子系统测试子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试模块相互间的协调和通信是这个测试过程中的主要问题这个步骤着重测试模块的接口,个人成果,妥善保存,请勿传播,软件测试基础,测试步骤3系统测试把经过测试的子系统装配成一个完整的系
16、统来测试发现的往往是软件设计中的错误,也可能发现需求说明中的错误兼有检测和组装两重含义,通常称为集成测试4验收测试验收测试把软件系统作为单一的实体进行测试,测试内容与系统测试基本类似,但是它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试验收测试的目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误验收测试也称为确认测试,个人成果,妥善保存,请勿传播,软件测试基础,测试步骤5平行运行所谓平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。这样做的具体目的有如下几点:(1)可以在准生产环境
17、中运行新系统而又不冒风险(2)用户能有一段熟悉新系统的时间(3)可以验证用户指南和使用手册之类的文档(4)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标,个人成果,妥善保存,请勿传播,软件测试基础,测试阶段的信息流软件配置:包括需求说明书、设计说明书和源程序清单测试配置:包括测试计划和测试方案,个人成果,妥善保存,请勿传播,课程内容提纲,第7章:“实现”编码软件测试基础单元测试、集成测试、确认测试白盒测试技术黑盒测试技术调试软件可靠性,个人成果,妥善保存,请勿传播,单元测试,单元测试集中检测程序“模块”单元测试主要使用白盒测试技术对多个模块的测试可以并行地进行在编写出源程序
18、代码并通过了编译程序的语法检查后,就可以用详细设计描述作指南,对重要的执行通路进行测试单元测试工作可用人工测试和计算机测试,个人成果,妥善保存,请勿传播,单元测试,测试重点1 模块接口参数的数目、次序、属性或单位系统与变元是否一致是否修改了只作输入用的变元全局变量的定义和用法在各个模块中是否一致2 局部数据结构 发现局部数据说明、初始化、默认值等方面的错误3 重要的执行通路选择最有代表性、最可能发现错误的执行通路进行测试应该设计测试方案用来发现由于错误的计算、不正确的比较或不适当的控制流而造成的错误,个人成果,妥善保存,请勿传播,单元测试,测试重点4 出错处理通路 好的设计应该能预见出现错误的
19、条件,并且设置适当的处理错误的通路,以便在真的出现错误时执行相应的出错处理通路或干净地结束处理应该着重测试下述一些可能发生的错误:对错误的描述是难以理解的记下的错误与实际遇到的错误不同在对错误进行处理之前,错误条件已经引起系统干预对错误的处理不正确描述错误的信息不足以帮助确定造成错误的位置,个人成果,妥善保存,请勿传播,单元测试,测试重点5 边界条件边界测试是单元测试中最后的也是最重要的任务。软件常常在它的边界上失效例如,处理n元数组的第n个元素时,或做到i次循环中的第i次重复时,往往会发生错误。使用刚好小于、刚好等于和刚好大于最大值或最小值的数据结构、控制量和数据值的测试方案,非常可能发现软
20、件中的错误。,个人成果,妥善保存,请勿传播,单元测试,代码审查一种非常有效的程序验证技术,对典型的程序来说,可查出30-70的逻辑设计错误和编码错误审查小组最好由下述4人组成:组长:一个很有能力的程序员,没有直接参与这项工程程序的设计者程序的编写者程序的测试者预演:由人模拟计算机执行程序人工测试和计算机测试是互相补充,相辅相成的,个人成果,妥善保存,请勿传播,单元测试,计算机测试驱动程序(Driver)和存根程序(Stub)通常驱动程序也就是一个“主程序”,它接收测试数据,把这些数据传送给被测试的模块,并且印出有关的结果“存根”程序代替被测试的模块所调用的模块存根程序也可以称为“虚拟子程序”它
21、使用被它代替的模块的接口,做最少的数据操作,印出对入口的检验或操作结果,并把控制归还给调用它的模块驱动程序和存根程序代表开销,个人成果,妥善保存,请勿传播,集成测试,集成测试是测试和组装软件的系统化技术由模块组装成程序的两种方法非渐增式测试方法先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,这种方法称为非渐增式测试方法渐增式测试方法把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种每次增加一个模块的方法称为渐增式测试,这种方法实际上同时完成单元测试和集成测试,集成测试,两种方法的比较非渐增式测试一下子把所有模块放
22、在一起,并把庞大的程序作为一个整体来测试,测试者面对的情况十分复杂改正错误是极端困难的想要诊断定位一个错误是非常困难的错误会连续不断,没有尽头渐增式测试与“一步到位”的非渐增式测试相反,它把程序划分成小段来构造和测试易定位和改正错误对接口可以进行更彻底的测试可以使用系统化的测试方法,个人成果,妥善保存,请勿传播,个人成果,妥善保存,请勿传播,集成测试,增量测试的两种集成策略自顶向下集成从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来可使用深度优先的策略,或宽度优先的策略,个人成果,妥善保存,请勿传播,集成测试,深度优先策略例如,选取左通路,首先结合模块Ml、M2和M5;其次
23、,M8或M6然后构造中央的和右侧的控制通路,个人成果,妥善保存,请勿传播,集成测试,宽度优先策略例如,首先结合模块M2、M3和M4(代替存根程序S4),然后结合下一个控制层次中的模块M5、M6和M7如此继续进行下去,直到所有模块都被结合进来为止,个人成果,妥善保存,请勿传播,集成测试,自顶向下测试第1步:测试顶端模块,用存根程序(stub)代替直接附属的下层模块Stub:模拟未测试模块的活动.,个人成果,妥善保存,请勿传播,集成测试,第2步:根据深度优先或宽度优先的策略,每次用一个实际模块代换一个stub。,第3步:在结合进一个模块的同时进行测试。,M,第4步:回归测试 全部或部分地重复以前做
24、过的测试。,个人成果,妥善保存,请勿传播,集成测试,优点:在早期即对主要控制及关键的抉择进行检验问题:Stub只是对低层模块的模拟,测试时没有重要的数据自下往上流,许多重要的测试须推迟进行,而且在早期不能充分展开人力,个人成果,妥善保存,请勿传播,集成测试,自底向上测试 第1步:把低层模块组合成族,每族实现一个子功能 第2步:用驱动程序(Driver)协调测试数据的IO,测试子功能族。,Driver:调用模块细节逐个进行测试.,个人成果,妥善保存,请勿传播,集成测试,第3步:去掉Driver,自下而上把子功能族合成更大的子功能族。,M,M,M,注意:两种策略的优、缺点刚好互补,但单用其中任一种
25、都不实际,通常根据软件的特点将二者混用。,个人成果,妥善保存,请勿传播,集成测试,个人成果,妥善保存,请勿传播,集成测试,不同集成测试策略的比较在测试实际的软件系统时,选用适当的测试策略,纯粹自顶向下或纯粹自底向上的策略可能都不实用实践中创造出许多混合策略:改进的自顶向下测试方法基本上使用自顶向下的测试方法,但是在早期使用自底向上的方法测试软件中的少数关键模块混合法对软件结构中较上层使用的自顶向下方法与对软件结构中较下层使用的自底向上方法相结合,个人成果,妥善保存,请勿传播,集成测试,回归测试回归测试是指重新执行已做过的测试的某个子集,保证由于调试引起的变化,不会导致非预期的软件行为或额外错误
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 07 实现
链接地址:https://www.31ppt.com/p-5639096.html