




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020年5月30日,1,软件工程导论,2014年4月,2020年5月30日,2,第7章实现,实现:编码和测试统称为实现编码:就是把软件设计结果翻译成用某种程序设计语言书写的程序,程序设计语言:人与计算机通信的基本工具,指挥计算机按人的意志工作19461954:机器语言和汇编语言,与硬件操作一一对应1954:第一个高级语言FORTRAN语言高级语言的种类:基础语言-Fortran,Basic,Cobol,Algol结构化语言-Pl/1,Pascal,C,Ada专用语言-特殊应用如LISP,Prolog,2020年5月30日,3,7.1编码,2020年5月30日,4,7.1.1选择程序设计语言,2020年5月30日,5,7.1.2编码风格,源程序代码的逻辑简明清晰、易读易懂是好程序的一个重要标准,为了做到这一点,应该遵循下述规则:程序内部的文档(包括恰当的标识符、适当的注解和程序的视觉组织等)恰当的标识符选取含义鲜明的名字,使它能正确地提示程序对象所代表的实体。如果使用缩写,那么缩写规则应该一致,并且应该给每个名字加注解。,2020年5月30日,6,7.1.2编码风格,恰当的注解通常在每个模块开始处有一段序言性的注解,简要描述模块的功能、主要算法、接口特点、重要数据以及开发简史。插在程序中间与一段程序代码有关的注解,主要解释包含这段代码的必要性。对于用高级语言书写的源程序,不需要用注解的形式把每个语句翻译成自然语言,应该利用注解提供一些额外的信息。应该用空格或空行清楚地区分注解和程序。程序的视觉组织程序清单的布局对于程序的可读性也有很大影响,应该利用适当的阶梯形式使程序的层次结构清晰明显,2020年5月30日,7,7.1.2编码风格,数据说明,2020年5月30日,8,7.1.2编码风格,语句构造,2020年5月30日,9,7.1.2编码风格,输入输出,2020年5月30日,10,7.1.2编码风格,效率,效率主要指处理机时间和存储器容量两个方面。在讨论提高效率前,应该记住3条原则:效率是性能要求,因此应该在需求分析阶段确定效率方面的要求。效率是靠好设计来提高的。程序的效率和程序的简单程度是一致的。不要牺牲程序的清晰性和可读性来不必要地提高效率。从三个方面进一步讨论效率问题:,2020年5月30日,11,7.1.2编码风格,效率,1.程序运行时间写程序之前先简化算术的和逻辑的表达式;仔细研究嵌套的循环,以确定是否有语句可以从内层往外移尽量避免使用多维数组;尽量避免使用指针和复杂的表;使用执行时间短的算术运算;不要混合使用不同的数据类型;尽量使用整数运算和布尔表达式。,2020年5月30日,12,7.1.2编码风格,效率,2.存储器效率在大型计算机中必须考虑操作系统页式调度的特点,一般说来,使用能保持功能域的结构化控制结构,是提高效率的好方法。在微处理机中,如果要求使用最少的存储单元,则应选用有紧缩存储器特性的编译程序,在非常必要时可以使用汇编语言。,2020年5月30日,13,7.1.2编码风格,效率,3.输入输出的效率简单清晰同样是提高人机通信效率的关键。硬件之间的通信效率比较复杂,但从写程序的角度看,有些简单原则可以提高输入输出效率:所有输入输出都应该有缓存,以减少用于通信的额外开销。对二级存储器应该选用最简单的访问方法。二级缓存器的输入输出应该以信息组为单位进行。如果“超高效的”输入输出很难被人理解,则不采用这种方法,2020年5月30日,14,7.1.2编码风格,不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率;以提高程序的全局效率(指站在整个系统的角度上考虑的效率)为主,提高局部效率(是指站在模块或函数角度上考虑的效率)为辅;不要追求紧凑的代码,因为紧凑的代码并不能产生高效的机器码;有时候时间效率和空间效率可能对立,此时应当分析那个更重要,作出适当的折衷;程序员使用语言编写程序,但不知道源程序究竟如何变成可执行代码、变成什么可执行代码,这些可执行代码的执行时间是长是短。因此,要从根本上提高程序的效率,需要程序员长时间的编程经验积累。,程序效率的提高是无止尽的,2020年5月30日,15,7.2软件测试基础,测试与测试的目标(G.Myers)测试:为了发现程序中的错误而执行程序的过程好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案成功的测试是发现了至今为止尚未发现的错误的测试,7.2.1软件测试的目标,2020年5月30日,16,7.2.2软件测试准则,所有测试都应该能追溯到用户需求应该在测试前制定测试计划把Pareto原理应用到软件测试中应该从“小规模”开始测试,逐步进行大规模测试。穷举测试是不可能的为了达到最佳的测试效果,应该由独立的第三方从事测试工作。,2020年5月30日,17,7.2.3测试方法,测试方法黑盒测试:已经知道了软件产品应该具有的功能,通过测试来检验是否每个功能都能正常使用。该测试方法又称功能测试黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息的完整性白盒测试:知道软件产品内部的工作过程,通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。这种测试方法又称结构测试白盒测试方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作,2020年5月30日,18,7.2.4测试步骤,2020年5月30日,19,7.2.5测试阶段的信息流,测试与软件开发各个阶段的关系软件开发过程是一个自顶向下,逐步细化的过程软件计划阶段定义软件作用域软件需求分析建立软件信息域、功能和性能需求、约束等软件设计把设计用某种程序设计语言转换成程序代码测试过程是依相反顺序安排的自底向上,逐步集成的过程,2020年5月30日,20,测试与软件开发各个阶段的关系(示意图),2020年5月30日,21,7.3单元测试,单元测试又称模块测试,是针对软件设计的最小单位程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试,在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试技术,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应,2020年5月30日,22,7.3单元测试,单元测试重点模块接口局部数据结构重要的执行通路出错处理通路影响上述各方面特性的边界条件,(1)模块接口在单元测试的开始,应对通过被测模块的数据流进行测试,测试项目包括调用本模块的输入参数是否正确本模块调用子模块时输入给子模块的参数是否正确全局量的定义在各模块中是否一致,2020年5月30日,23,7.3单元测试,(2)局部数据结构测试不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量错误的初始值或错误的缺省值变量名拼写错或书写错不一致的数据类型全局数据对模块的影响,(3)重要执行通路测试选择适当的测试用例,对模块中重要的执行路径进行测试应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误对基本执行路径和循环进行测试可以发现大量的路径错误,2020年5月30日,24,7.3单元测试,(4)错误处理测试出错的描述是否难以理解出错的描述是否能够对错误定位显示的错误与实际的错误是否相符对错误条件的处理正确与否在对错误进行处理之前,错误条件是否已经引起系统的干预等,(5)边界测试注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素,2020年5月30日,25,7.4集成测试,集成测试是组装软件的系统化技术;组装测试,联合测试通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:,在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失;一个模块的功能是否会对另一个模块的功能产生不利的影响;各个子功能组合起来,能否达到预期要求的父功能;全局数据结构是否有问题;单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。,在单元测试的同时可进行组装测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统,2020年5月30日,26,7.4集成测试,子系统的组装测试特别称为部件测试,它所做的工作是要找出组装后的子系统与系统需求规格说明之间的不一致。通常,把模块组装成为程序的方式有两种一次性组装方式:又称为非渐增式测试增殖式组装方式:其中又分为自顶向下、自底向上和两种方法混合测试方式,又称渐增式测试,一次性组装方式它是一种非增殖式组装方式。也叫做整体拼装使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统,2020年5月30日,27,7.4集成测试,一次性组装方式(bigbang),2020年5月30日,28,7.4集成测试,增殖式组装(渐增式组装)方式首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统组装过程中边连接边测试,以发现连接过程中产生的问题通过增殖逐步组装成为要求的软件系统采用渐增式方式把模块结合到程序中时,有自顶向下和自底向上两种集成策略,2020年5月30日,29,7.4集成测试,深度优先策略:先组装在软件结构的一条主控制通路上的所有模块选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能,宽度优先策略:沿软件结构水平移动,把处于同一个控制层次上的所有模块组装起来,2020年5月30日,30,7.4集成测试,自顶向下集成实现的步骤,对主控制模块进行测试根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个存根程序在结合进一个模块的同时进行测试进行回归测试(全部或部分重复以前做过的测试),自顶向下的结合策略能够对主要的控制或关键的抉择进行检验,2020年5月30日,31,7.4集成测试,(2)自底向上集成,自底向上测试是从程序模块结构的最底层的模块开始组装和测试实现步骤把低层模块组合成实现某个特定的软件功能的族写一个驱动程序,协调测试数据的输入和输出对由模块组成的子功能族进行测试去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族,2020年5月30日,32,7.4集成测试,两种集成测试策略的优缺点比较:自顶向下测试方法的主要优点是不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,而且能在早期发现上层模块的接口错误自顶向下测试方法的主要缺点是需要存根程序,低层关键模块中的错误发现较晚自底向上测试方法的优缺点与自顶向下方法刚好相反,自顶向下增殖的方式和自底向上增殖的方式各有优缺点一般来讲,一种方式的优点是另一种方式的缺点,2020年5月30日,33,7.4集成测试,非渐增式和渐增式测试方法的优缺点比较:非渐增式方法要对每个模块编写驱动模块,工作量较大;而渐增式方法可以利用部分已测试过的模块作为测试软件非渐增式方法发现模块间的接口错误较晚,而渐增式方法则要早一些非渐增式方法发现错误后较难定位;而渐增式方法则要容易一些非渐增式方法可以并行测试所有模块,可充分利用人力,加快工程进度渐增式方法接近全真运行环境,需要较多的测试运行时间,但对程序模块的测试较为彻底,2020年5月30日,34,7.4集成测试,回归测试:在集成测试过程中,每当一个新模块结合进来时,程序就发生了变化,这些变化可能使原来工作正常的功能出现问题所谓回归测试是指重新执行已经做过的测试的某个子集,以保证上述变化没有带来非预期的副作用,回归测试集的3类不同测试用例检测软件全部功能的代表性测试用例专门针对可能受修改影响的软件功能的附加测试针对被修改过的软件成分的测试,2020年5月30日,35,7.5确认测试,确认测试(验收测试)的目的:验证软件的有效性软件有效性:如果软件的功能和性能符合用户的期待,那么软件就是有效的软件有效性的标准:需求分析阶段产生的软件需求规格说明书,7.5.1确认测试的范围,确认测试必须有用户积极参与,或者以用户为主进行确认测试一般使用黑盒测试法测试计划包括要进行的测试的种类和进度安排测试过程规定了用来检测软件是否与需求一致的测试方案通过测试和调试要保证软件能满足所有功能要求,能达到每个性能要求,文档资料是准确而完整的,2020年5月30日,36,7.5.2软件配置复查,复查软件配置的目的是:保证软件配置的所有成分都齐全,各方面的质量都符合要求,文档与程序一致具有维护阶段所必须的细节,而且已经编排好目录在验收测试的过程中应该严格遵循用户指南以及其他操作程序,以便检验这些使用手册的完整性和正确性必须仔细记录发现的遗漏或错误,并且适当地补充和改正,2020年5月30日,37,7.5.3Alpha和Beta测试,如果软件是专为某个客户开发的,可以进行一系列验收测试,它是由最终用户而不是系统开发者进行的如果一个软件是为许多客户开发的,那么让每个客户都进行正式的验收测试是不可能的,这种情况下,软件开发商需要经历Alpha和Beta测试。Alpha测试:由用户在开发者的场所进行,并且在开发者对用户的“指导”下测试。是在“受控”的环境下进行的测试Beta测试:由软件的最终用户在一个或多个客户场所进行,2020年5月30日,38,7.6白盒测试技术,测试阶段关键技术问题:设计测试方案测试方案:包括具体的测试目的,应该输入的测试数据和预期的结果设计测试方案的基本目标:确定一组可能发现某个(类)错误的测试数据,不同的测试数据发现程序错误的能力差别很大,为提高测试效率降低测试成本,应选用高效的测试数据测试用例设计技术:黑盒测试的等价划分、边界值分析、错误推测法白盒测试的逻辑覆盖法,2020年5月30日,39,逻辑覆盖:逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试,7.6.1逻辑覆盖,语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖,语句覆盖:选择足够多的测试数据,使被测程序中的每个语句至少执行一次,2020年5月30日,40,PROCEDUREExample(A,B:real;X:real);BeginIF(A1)AND(B=0)THENX:=X/A;IF(A=2)OR(X1)THENX:=X+1END;,语句覆盖所有的语句至少执行一次!,语句覆盖,2020年5月30日,41,判定覆盖,2020年5月30日,42,条件覆盖一般情况下比判定覆盖要强,但是也有满足条件覆盖但不能满足判定覆盖的情况,条件覆盖每个语句至少执行一次,而且判定表达式中的每个条件都要取得各种可能的结果,2020年5月30日,43,条件组合覆盖,条件组合覆盖要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次,满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。,c,e,2020年5月30日,44,点覆盖、边覆盖、路径覆盖,点覆盖:如果连通图G的子图G是连通的,而且包含G的所有节点,则称G是G的点覆盖点覆盖与语句覆盖标准相同,边覆盖:如果连通图G的子图G是连通的,而且包含G的所有边,则称G是G的边覆盖通常与判定覆盖标准相同,路径覆盖:选取足够多的测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)路径覆盖是较强的逻辑覆盖标准,2020年5月30日,45,很多白盒测试技术是根据程序的控制结构设计测试数据的技术几种常用的控制结构测试技术:,7.6.2控制结构测试,2020年5月30日,46,基本路径测试技术设计测试用例的步骤:根据过程设计结果画出相应的流图计算流图的环形复杂度确定线路独立路径的基本集合设计可强制执行基本集合中每条路径的测试用例求平均值的例子,7.6.2控制结构测试,2.条件测试,条件测试的目的:不仅是检测程序条件中的错误,而且检测程序中的其它错误,2020年5月30日,47,7.6.2控制结构测试,条件测试方法着重测试程序中的每个条件。人们提出了许多条件测试策略分支测试:对于复合条件C,C的真分支和假分支以及C中的每个简单条件,都应该至少执行一次域测试:要求对一个关系表达式执行3个或4个测试BRO测试:如果在条件中所有布尔变量和关系算符都只出现一次而且没有公共变量,则BRO测试保证能发现该条件中的分支错和关系算符错,2020年5月30日,48,7.6.2控制结构测试,循环测试是一种白盒测试技术,它专注于测试循环结构的有效性在结构化程序中通常只有3种循环:简单循环嵌套循环串接循环,3.循环测试,2020年5月30日,49,7.7.1等价划分,等价划分是把程序的输入域划分成若干个数据类,并据此导出测试用例的一种黑盒测试技术若将所有可能的输入数据划分成N个等价类,则可以从每个等价类中只取一组数据作为测试数据。这样选取的数据最有代表性,最可能发现程序中的错误,2020年5月30日,50,7.7.1等价划分,等价分类法是将输入数据的可能值分成若干“等价类”,每一类以一个代表性的测试数据进行测试,这个数据就等价于这一类中的其它数据该法的关键在于如何将输入数据分类例如:输入的数据范围是1999,我们可以划分三类:x999,划分等价类可以参考一些启发式规则进行为了正确划分等价类,一是要注意经验,二是要正确分析被测程序的功能,2020年5月30日,51,7.7.1等价划分,2020年5月30日,52,7.7.2边界值分析,处理边界情况时程序最容易发生错误,因此,设计使程序运行在边界情况附近的测试方案,暴露出错误的可能性更大使用边界值分析方法设计测试方案首先应确定边界情况对等价划分法中的不同等价类的边界情况进行重点测试通常设计测试方案时总是综合使用等价划分和边界值分析技术,2020年5月30日,53,7.8调试,调试(纠错)是在经过测试发现错误后排除错误的过程调试过程从执行一个测试用例开始,如果发现实际结果与预期结果不一致,则这种不一致就是一个症状。调试过程试图找出产生症状的原因,以便改正错误调试是软件开发过程中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防疫员技师面试题及答案
- 2025年医学影像学病例诊断模拟考试答案及解析
- 2025年江苏普通高中学业水平选择性考试物理模拟试题及答案
- 2025年神经外科手术常见并发症预防及处理模拟考试卷答案及解析
- 2025年实验医学临床病理标本切片鉴定答案及解析
- 2025年精神科精神疾病治疗方案考察答案及解析
- 2025年药学专业药物配方准确性检验试卷答案及解析
- 安全消防考试试卷及答案
- 2025年消化科镜下病变鉴别诊断考核答案及解析
- 2025年放射肿瘤学肿瘤影像诊断学案例分析答案及解析
- IP授权使用合作协议书范本
- 2025年汽车零部件企业公司组织架构图职能部门及工作职责
- 机械加工质量控制计划
- DISC行为风格分析及沟通
- 工程款结清协议书书
- 《运动治疗技术》第二章 关节活动技术-基础理论课件
- 国家职业技术技能标准 4-01-06-01 电子商务师S 人社厅发202233号
- 2024至2030年中国迷迭香精油行业投资前景及策略咨询研究报告
- 电梯维保服务应急处理方案
- 人教版小学数学四年级上册教案全集(表格式教案)
- 事业单位公开招聘报名表
评论
0/150
提交评论