【文档说明】软件的编码与测试课件.ppt,共(68)页,1.082 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45302.html
以下为本文档部分文字说明:
1第5章软件的编码与测试教学目标教学内容5.1编码设计的目的5.2程序设计语言5.3编码风格5.4软件测试5.5测试用例的设计5.6测试步骤5.7调试技术第5章软件的编码与测试《软件工程导论》2教学目标◼掌握程序设计语言特点和选择;◼掌握程序编码风
格;◼掌握软件测试的概念、目的、原则和测试的方法;◼重点掌握软件测试用例的设计;◼了解设计语言的分类,程序调试的过程和基本方法。第5章软件的编码与测试《软件工程导论》35.1编码设计的目的◼所谓编码,是使用选定的程序设计语言,把模块的过程描述翻译为用该语言书写的源程序。◼源程序不仅要求语法上
的正确性,还要求源程序具有良好的结构性和良好的程序设计风格。◼在程序编写时应考虑到,所写的程序将被别人阅读,一定要尽量使程序写得容易被人读懂。◼目前,人们编写源程序还不能使用自然语言,只能用某种程序设计语言。第5章软件的编码与测试《软件工程导论》45.2程序设
计语言◼程序设计语言的分类自20世纪60年代以来,世界上公布的程序设计语言已有上千种之多,但是只有很小一部分得到了广泛的应用。◼程序设计语言的选择语言选择的合适,会使编码困难减少,程序测试量减少,并且可以得到易读、易维护的软件。第5章软件的编码与测试《软件工程导论》55.2.1程序设计语言的
分类从发展历程来看程序设计语言可以分为四代:第一代语言(机器语言)◼机器语言是由二进制0、1代码指令构成,不同的CPU具有不同的指令系统。◼机器语言程序难编写、难修改、难维护,需要用户直接对存储空间进行分配,编程效率极低。◼目前这种语言
已经被淘汰。第5章软件的编码与测试《软件工程导论》6第二代语言(汇编语言)◼汇编语言指令是机器指令的符号化,与机器指令存在着直接的对应关系。◼缺点:难学难用、容易出错、维护困难等。◼优点:可直接访问系统接口,汇编程序翻译成的机器语言程序的效率高。
◼从软件工程角度来看,只有在高级语言不能满足设计要求,或不具备支持某种特定功能的技术性能(如特殊的输入输出)时,汇编语言才被使用。第5章软件的编码与测试《软件工程导论》7第三代语言(高级语言)◼高级语言是面向用户的、基本上独立于计算机种类和
结构的语言。◼形式上接近于算术语言和自然语言,概念上接近于人们通常使用的概念。◼一个命令可以代替几条、几十条甚至几百条汇编语言的指令。◼优点:易学易用,通用性强,应用广泛。◼高级语言种类繁多,我们可以从应用特点和对客观系统的描述两个方面对其进一步分类。第5章软件的编码与测试《软件工程导论》8
从应用角度分类◼基础语言:也称通用语言。历史悠久,流传很广,有大量的已开发的软件库,拥有众多的用户,为人们所熟悉和接受。如:FORTRAN、COBOL、BASIC、ALGOL等。◼结构化语言:直接支持结
构化的控制结构,具有很强的过程结构和数据结构能力。如:PASCAL、C、Ada。◼专用语言:是为某种特殊应用而专门设计的语言,通常具有特殊的语法形式。应用比较广泛的有:APL语言、FORTH语言、LISP语言。第5章软件的编码与测试《软件工程导论》9从客观系统的描述分类◼面向过程语言:其程序设计范
式:“数据结构+算法”前面所介绍的程序设计语言都属此类。◼面向对象语言:其程序设计范式:“对象+消息”如:Delphi、VisualBasic、Java、C++等。第5章软件的编码与测试《软件工程导论》10第四代语言(简称4GL)◼4GL是非过程化语言,编码时只需说明“做什么”
,不需描述算法细节。◼两个典型应用:数据库查询和应用程序生成器是4GL的。◼数据库查询语言(SQL)可以对数据库中的信息进行复杂的操作。用户只需将要查找的内容在什么地方、根据什么条件进行查找等信息告诉SQL,SQL将自动完成查找过程。应用程序生成
器则是根据用户的需求“自动生成”满足需求的高级语言程序。第5章软件的编码与测试《软件工程导论》11第四代语言(简称4GL)◼真正的4GL应该说还没有出现。目前,所谓的4GL大多是指基于某种语言环境上具有4GL特征的软件工具产品,如SystemZ、PowerBuilder、FO
CUS等。◼面向应用,为最终用户设计的一类程序设计语言。◼优点:缩短应用开发过程、降低维护代价、最大程度地减少调试过程中出现的问题、对用户友好等。第5章软件的编码与测试《软件工程导论》125.2.2程序设计语言的选择◼在
编码之前应选好适当的语言,持别是在大型软件的开发中更不能只局限于使用自己所熟悉的语言。◼一般情况下,程序设计语言的选择常从以下几个方面考虑:项目的应用领域、算法与计算的复杂性、数据结构的复杂性、效率、可移植性、程序设计人员的水平、构造系统的模式等第5
章软件的编码与测试《软件工程导论》135.3编码风格所谓编码风格即书写源程序的习惯。从软件工程要求出发,程序设计风格包括如下要求:◼使用好程序内部的文档;◼数据说明原则;◼语句结构的规则;◼输入、输出规则;◼高效率的
原则。第5章软件的编码与测试《软件工程导论》145.3.1使用好程序内部的文档软件=程序十文档为了提高程序的可维护性,源代码也需要实现“文档化”。内部文档的组织包括:◼标识符命名:具有鲜明的意义,能够提
示程序对象代表的实体。◼程序代码的视觉组织:逻辑结构清晰,层次分明(空格、空行、缩进)。◼程序内部的注释:序言性注释和功能性注释第5章软件的编码与测试《软件工程导论》155.3.2数据说明原则一般而言,数据说明应遵循三个原则。(1)数据说明的次序应当规范化,使数据属
性容易查找,有利于测试、排错和维护;(2)当多个变量名用一个语句说明时,应当对这些变量按字母的顺序排列;(3)如果设计了一个复杂的数据结构,应当使用注释,说明这个数据结构的固有特点。第5章软件的编码与测试《软件
工程导论》165.3.3语句结构的规则(1)语句结构应遵从如下规则:◼一行内只写一条语句,并采用适当的缩进格式;◼不要刻意追求技巧性,使程序编写得过于紧凑;◼要简单、清楚,直截了当地说明程序员的用意;◼除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二;
◼首先保证程序正确,然后才要求提高速度;◼让编译程序作简单的优化;尽可能使用库函数;◼避免使用临时变量而使可读性下降;◼尽量用公共过程或子程序代替重复的功能代码段;◼多使用括号以使表达式运算顺序清晰;第5
章软件的编码与测试《软件工程导论》175.3.3语句结构的规则(2)◼避免不必要的转移;◼用逻辑表达式代替分支嵌套;◼避免使用空的ELSE语句和IF…THENIF…语句;◼避免使用ELSEGOTO和ELSERETURN结构;◼使与判
定相联系的动作尽可能地紧跟着判定;◼避免采用过于复杂的条件测试;◼尽量减少使用“否定”条件的条件语句;◼避免过多使用循环嵌套和条件嵌套;◼不要使GOTO语句相互交叉;◼对递归定义的数据结构尽量使用递归过程。第5章软件的编码与测试《软件工程导论
》185.3.4输入、输出规则◼对所有的输入数据进行检验,从而识别错误的输入,以保证每个数据的有效性;◼检查输入项的各种重要组合的合理性;◼输入的步骤和操作尽可能简单;◼输入数据时,允许使用自由格式输入;◼应允许缺省值;◼一批数据
输入时,最好使用输入结束标志;◼输入/输出交叉时,要在屏幕上使用提示信息;◼应保持输入格式与输入语句要求的一致性;◼给所有的输出加注释,并设计输出报表格式。第5章软件的编码与测试《软件工程导论》195.
3.5高效率的原则运行效率:占用的处理机时间和存储空间可以从以下三个方面着手:◼提高程序运行效率;程序编码使程序运行高效◼提高存储器效率;占用存储单元小,要求存取的时间短◼提高输入/输出效率。第5章软件的编码与测试《软件工程导论》205.4软件测试◼软件测试,是为了发现错误
而执行程序的过程。是对需求分析、设计和编码三个阶段进行的最终复审。◼软件测试在软件生存周期中横跨两阶段:编码阶段(单元测试)测试阶段(各种综合测试)◼测试只能找出程序中的错误,但在未发现错误时,并不能证明程序中没有错误。第5章软件的编码与测试《软件工程导论》2
15.4.1软件测试目标◼仅就测试本身而言,软件测试的目标是以最少的时间和人力发现软件中潜在的各种错误和缺陷(尽量多的发现错误)。◼一个好的测试方案是极可能发现至今为止尚未发现的错误的测试方案。◼成功的测试是发现了至今为止尚未发现的错误的测试。◼发现错误并不是软件测试的最终目标。◼测试阶段的
根本目标是尽可能多的发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。第5章软件的编码与测试《软件工程导论》225.4.2软件测试的原则◼避免程序员检查自己的程序;◼软件测试应尽早地、不断的进行;◼软件测试不等于程序测试;◼充分认识错误的群集现象;◼测试用例应包括测
试输入数据和与之对应的输出结果;◼测试用例的输入数据应包括合理的输入和不合理的输入;◼严格执行测试计划,避免测试的随意性。第5章软件的编码与测试《软件工程导论》235.4.3软件测试的方法软件测试可以分为人工测试和基于计算机的测试。基于计算机的测试有两种方法:◼黑盒测试把程序看成一个黑盒子,完
全不考虑其内部结构和处理过程,只检查程序的功能是否符合它的需求规格说明。◼白盒测试把程序看成一个打开的盒子,测试人员对程序所有逻辑路径进行测试,在不同检查点输出结果,与预期的结果比较,确定程序是否有错。第5章软件的编码与测试《软件工程导论》24黑盒测试◼黑盒测试是
在软件的接口处进行的,一方面看其是否能对合法的数据得出正确的结果,另一方面看它是否能对非法的数据进行正确的处理。◼黑盒测试法不能测试所有可能情况(一个例子)。◼黑盒测试是一种宏观功能上的测试,该方法适合测试部门的测试人员或用户。◼随着软件生产的组装技
术的发展,黑盒测试方法会越来越普及。第5章软件的编码与测试《软件工程导论》25一个例子(黑盒测试)假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试,可能采用的测试数据组:232×232=264如果测试一组数据需要1毫
秒,一年工作365×24小时完成所有测试需5亿年。第5章软件的编码与测试《软件工程导论》26白盒测试◼白盒测试是对程序内部执行路径进行的。◼穷尽测试(程序中每条可能的通路至少都应该执行一次)是不可能的。(一个例子)◼白盒测试是一种程序级的微观上的测试
,适合于很小单元的测试,以及从事软件底层工作、生产构件的测试人员进行的测试。◼无论是黑盒测试还是白盒测试,都不可能进行完全测试,因此通过测试并不能证明程序是正确的。◼在实际应用中,常常采用白盒测试和黑盒测
试相结合的方法,对软件进行有限的测试。第5章软件的编码与测试《软件工程导论》27一个例子(白盒测试)它包括了一个执行20次的循环,不同执行路径数达520条,如果对每一条路径进行测试需要1毫秒,假定一年工作365×24小时,要想把所有
路径测试完,需3170年。第5章软件的编码与测试《软件工程导论》285.4.4软件测试的过程可见,测试过程需要三类输入:◼软件配置:包括软件需求规格说明、软件设计规格说明、源程序代码等;◼测试配置:包括测试计划、测试用例等。◼测试工具:为了提高软件测试效率,减轻测试过程中手工劳动,可使用一些专
门的测试工具。如测试数据自动生成测试结果分析程序、驱动测试的测试数据库等。第5章软件的编码与测试《软件工程导论》295.4.5软件测试与开发各阶段的关系软件开发过程是一个自顶向下,逐步细化的过程,而软件测
试过程则是按相反的顺序自底向上,逐步集成的过程:第5章软件的编码与测试《软件工程导论》305.5测试用例的设计◼不同的测试用例发现程序错误的能力有很大的差别。◼为了提高测试效率降低测试成本,应该精心选择测试
用例。◼因为不可能进行穷尽测试,所以,应该选用少量“最有效的”测试用例,尽可能做到完备测试。第5章软件的编码与测试《软件工程导论》315.5.1逻辑覆盖◼属于白盒测试方法◼是以程序内部的逻辑结构为基础◼是对一系列测试过程总称,这组测试过程按照越来越完全的程度
进行路径的测试。◼可分为:语句覆盖、判定覆盖、条件覆盖、判定---条件覆盖、条件组合覆盖、路径覆盖第5章软件的编码与测试《软件工程导论》32语句覆盖◼语句覆盖是指选择足够的测试数据,使被测程序中每个语句至少执行一次。◼此例中,为了使每个语句都执行一次,程序执行的路径应该为①
③⑤⑥,为此可以设计测试用例如下:输入:a=2,b=0,x=6输出:a=2,b=0,x=5第5章软件的编码与测试《软件工程导论》33判定覆盖◼判定覆盖又称为分支覆盖,是指设计若干测试数据,使得程序中每个判定表达式的每个分支(真假)都至少执行一次。◼两种组测试用例见下表(实例图如前):格式为:〔输入
的(a,b,x),输出的(a,b,x)〕第5章软件的编码与测试《软件工程导论》34条件覆盖◼条件覆盖,是使得程序中每个判定表达式的每个条件的可能取值至少执行一次。◼在此实例中,两个判定表达式共有四个条件:a>1、b=0、a=2和
x>1,设它们为真时分别用T1、T2、T3、T4表示,为假时分别用F1、F2、F3、F4表示。第5章软件的编码与测试《软件工程导论》35判定-条件覆盖◼判定-条件覆盖是指选取足够多的测试数据,使得判定表达式中的每个条件的所有可能取值至少执行一次,而且每个判定表达式的所有
可能的判定结果至少执行一次。◼一种组测试用例见下表(实例图如前):第5章软件的编码与测试《软件工程导论》36条件组合覆盖◼条件组合覆盖是指选取足够多的测试数据,使得每个判定表达式的所有可能的条件取值组合至少执行一次。◼在此实例中,每个判定
各有两个条件、四个条件组合(不要求各个判定的条件组合再进行组合)设计如下一组测试用例:第5章软件的编码与测试《软件工程导论》37路径覆盖◼路径覆盖是指选取足够多的测试数据,覆盖程序中所有的路径。也就是要求覆盖每个判
定可能取值的所有组合。◼一种组测试用例见下表(实例图如前):第5章软件的编码与测试《软件工程导论》385.5.2等价分类法◼一种典型的黑盒测试技术。◼设计出一个以发现若干类错误的测试用例,从而减少必须设计的测试用例的数目。◼两个步骤
:划分等价类:把程序的输入域划分成若干个数据类;设计测试用例:从每一类中选取少数代表性的数据作为测试用例。第5章软件的编码与测试《软件工程导论》39划分等价类◼所谓等价类是指某个输入域的子集合,在该子集合中各个输入数据对于揭露程序中的错误都是等效的。◼有效等价类是指对于程序的规格说明来说是合理
的,有意义的输入数据构成的集合,反之则称为无效等价类。◼在设计测试用例时,要同时考虑有效等价类和无效等价类的设计◼为了正确划分等价类,一方面要注意积累经验,另一方面要正确分析被测程序的功能。此外,一般不需
要设计测试数据用来暴露编译程序肯定能发现的错误。第5章软件的编码与测试《软件工程导论》40等价类划分的启发式规则◼如果规定了输入值的范围,则可划分出一个有效的等价类(输入值在此范围内),两个无效等价类(输入值小于最小值或大于最大值);◼如果规定了输入数据的个数,则类似
地也可以划分出一个有效等价类和两个无效等价类;◼如果规定了输入数据的一组值,则允许的输入值集合是一个有效的等价类,所有不允许的输入值集合是无效等价类;◼如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类(符合规则的)和若干个无效等价类(从各种不同角度违反规则的);◼如果确知
已划分的等价类中各元素在程序中处理方式不同,则应将此等价类进一步划分成更小的等价类。第5章软件的编码与测试《软件工程导论》41设计测试用例◼划分等价类后,就可以根据等价类设计测试用例。主要使用以下两个
步骤:◼①设计一个新的测试用例以尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤直到所有有效等价类都被覆盖为止;◼②设计一个新的测试用例,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。◼因为某些程序对某一输入错误的检查往
往会屏蔽对其他输入错误的检查,所以必须对每一个无效等价类分别设计测试用例。第5章软件的编码与测试《软件工程导论》42一个实例◼变量的命名规则一般规定如下:变量名的长度不多于40个字符,第一个字符必须为英文字母,其他字母可以英文字母、数字以及下划线的任意组合。请用等价分类法设计测
试用例。◼划分等价类如下表所示:第5章软件的编码与测试《软件工程导论》43设计测试用例如下表:第5章软件的编码与测试《软件工程导论》445.5.3边界值分析法◼一种黑盒测试方法,是对等价类划分方法的补充。◼经验表明,大量的错误是发生在输入或输出范围的边界上。如数组的下标,循环的控
制等的边界附近等最容易发生错误。◼通常输入等价类与输出等价类的边界,就是应着重测试的边界情况。◼应当选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。◼选择测试用例的一般原则在很多方面与等价类划分方法类似。第5章软件的编码与测试《软件工程导论》4
55.5.4错误猜测法◼错误猜测法是指:依靠测试人员的经验和直觉,从各种可能的测试方案中选出一些最可能引起程序出错的方案进行测试。◼基本做法是:列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们设计测试方案。◼如输入数据为0,或输出数据为0;输入
表格为空或输入表格只有一行等等。第5章软件的编码与测试《软件工程导论》465.5.5实用综合测试策略通常,在测试早期主要使用白盒测试方法,后期主要使用黑盒测试方法。其策略为:◼在任何情况下都必须使用边界值分析方法。
◼必要时用等价类划分方法补充一些测试用例。◼用错误猜测法再追加一些测试用例。◼对照程序逻辑,设计足够的测试用例,以达到要求的覆盖标准。◼如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。第5章软件的编码与测试《软件工程
导论》475.6测试步骤◼测试过程也必须分步骤进行,后一个步骤在逻辑上是前一个步骤的继续。第5章软件的编码与测试《软件工程导论》485.6.1单元测试◼又称模块测试。是针对软件设计的最小单位—程序模块,进行正确性检验的测试工作。◼目的在于发现模块内部可能存在的各种差错。◼在编写出源
程序代码并通过编译程序的语法检查之后,就可以进行单元测试工作。◼单元测试需要从程序的内部结构出发设计测试用例。◼多个模块可以平行地独立进行单元测试。第5章软件的编码与测试《软件工程导论》49(一)单元
测试的内容◼一般从5个方面进行测试:第5章软件的编码与测试《软件工程导论》50模块接口测试如果数据不能按预定要求进出模块,所有其他测试都是不切实际的。接口测试主要从如下几个方面考虑:◼模块的形参和其驱动模块送来的参
数的个数、类型、次序是否一致;◼模块传送给被调用模块的参数与其桩模块的参数的个数、类型和次序是否一致;◼模块传送给库函数的变量个数、类型次序是否正确;◼全局变量的定义和用法在各个模块中是否一致;◼所使用的外部文件的属性是否正确,打开文件的语句
是否正确,缓冲区大小是否与记录长度相匹配。文件结束判断处理是否一致;第5章软件的编码与测试《软件工程导论》51局部数据结构测试模块内部数据是否完整,内容、形式、相互关系是否有错常常是软件错误的主要来源。应做
如下考虑:◼错误或不相容的数据说明或使用了尚未初始化的变量;◼错误的初始值或不正确的缺省值;◼错误的变量名或数据类型不相容;◼溢出(上溢或下溢)或地址异常;◼全局数据对模块的影响。第5章软件的编码与测试《软件工程导论》52重要路径测试◼重点测试由于错误计算、不正确的比较
或不适当的控制流而造成的错误。常见错误如下:◼运算的次序错误(误用了运算符的优先级);◼混合运算对象的类型彼此不相容;◼变量初始值不正确;◼精度不够,或由于精度问题两个量不可能相等时,程序中却期待着相等条件的
出现;◼错误的修改循环变量,错误的或不可能达到的循环终止条件;◼“差1”错(多循环1次或少循环1次);◼当遇到发散的循环迭代时循环不能终止。第5章软件的编码与测试《软件工程导论》53错误处理测试好的模块设计应能预见出错的条件,并设置相应的出错处理。重点考虑下
列问题:◼对可能出现错误的描述是否难以理解;◼出错的描述不足以对错误定位,或不足以确定出错的原因;◼显示的错误与实际的错误不符;◼对错误的条件处理不正确;◼在对错误进行处理之前,错误条件已经引起系统的干预。第5章软件的编码与测试《软件工程导论》54边界测试◼边界测试是单元测试中最后
的、也可能是最重要的工作。◼程序常常在边界上出现错误。◼例如,在一段程序内有一个n次循环,当到达第n次循环时就有可能出错。◼要特别注意数据流、控制流中恰好等于、大于或小于确定的比较值时出错的可能性。要精心设
计测试用例对这些地方进行测试。第5章软件的编码与测试《软件工程导论》55(二)单元测试的步骤◼基于计算机的单元测试可为三个步骤进行:(1)配置测试环境驱动模块:一个“主程序”,接收测试数据,传给被测模块,打印结果。桩模块:接收被测模
块的调用,可以做最少量的数据操作,打印相关结果,并把控制归还给调用它的模块。桩模块是单元测试中重要的成本开销。第5章软件的编码与测试《软件工程导论》56(二)单元测试的步骤(2)编写测试数据。以详细设计说明为依据,从程序的内部结构出发设计测试用例。主要采用白盒测试,以路径覆盖为最佳测
试准则。同时辅之以黑盒测试用例,使之对任何合理的输入和不合理的输入都能鉴别和响应。(3)进行多个模块的并行测试。◼为了提高测试效率,在进行计算机测试之前,常常首先对源程序代码进行人工的静态测试。◼人工测试
和计算机测试是互相补充、相辅相成的,缺少其中任何一种方法都会使查找错误的效率降低。第5章软件的编码与测试《软件工程导论》575.6.2集成测试◼主要目标是发现与接口有关的问题。◼根据模块的组装方式有两种测试方式:1
.非渐增式测试把已经过测试的所有模块一次性组装在一起,然后进行整体测试。这种测试往往不可能一次成功,查错和改错都很困难。使用较少。2.渐增式测试把已经过测试的模块逐个进行组装,在组装的过程中进行测试,最后得到完整的系统。这种测试方式也可在各模块没有进行测
试的前题下进行。常用渐增式集成策略有三种:第5章软件的编码与测试《软件工程导论》58自顶向下集成◼是从主控模块开始,沿着控制层次自顶向下进行组装。添加模块时可采用深度优先策略或广度优先策略进行。◼具体步骤如下:①测试主控模
块:用桩模块代替其直接附属模块;②根据添加策略每次添加一个实际模块进行测试;③进行回归测试。既重新执行以前做过的全部测试或部分测试,排除组装过程中引入新的错误;④重复上述②和③,直到所有模块已组装到系统中为止。◼优点:能在测试早期对主要的控制或关键的判断进行检验。◼缺点:需建立桩模块,并存在一个逻
辑次序问题。第5章软件的编码与测试《软件工程导论》59自底向上集成◼从最底层的模块开始,自底向上组装和测试。◼具体步骤如下:①由驱动模块控制最底层模块的并行测试;②将低层模块组合族,由驱动模块对其进行测试;③用实际模块代替驱动模块
,把它已测试的直属子模块组装成子系统;④为子系统配备驱动模块进行新的测试;⑤重复述上②、③、④,至到已组装到主模块为止。◼优点:不需要建立桩模块,多个模块可并行测试。◼缺点:程序至到最后一个模块加上去才形成一个实体。这样对主要的控制直到最后才接触到。第5章软件的编码与测试《软件工程导
论》60混合的集成测试◼前两种方式各有优缺点,通常混合起来测试。◼对结构中较上层的使用自顶向下的集成方法,较下层的使用自底向上的集成方法。①衍变的自顶向下的集成测试:强化对I/O模块和引入新算法模块的测试,并自底向上组装成为的子系统,然后由主模块开始自
顶向下集成测试。②自底向上-自顶向下的集成测试:首先对含读操作的子系统自底向上进行组装和测试,然后对含写操作的子系统自顶向下进行组装和测试。③回归测试:自顶向下测试所修改的模块及其子模块,然后将其视为子系统自下向上测试,检查该子系统与其上级模块接口是否适配。第5章软件的编码与测试《
软件工程导论》615.6.3验收测试◼又称为确认测试,主要由用户参加测试,检验软件规格说明的技术标准的符合程度,是保证软件质量的最后关键环节。◼验收测试主要完成下面的工作:(1)有效性测试:在模拟的环境(也许就是开发环境),运用黑盒
测试法,验证软件是否满足需求规格说明书列出的需求。两种结果:一是功能和性能与用户要求一致,软件是可以接受的。二是功能或性能与用户的要求有差距,这时就提交一份问题报告。(2)软件配置复查:保证软件配置的所有成分都齐全,各方面的质量都符合要求。第5章软件的编码与测试《软件工程导论》62
(3)α测试和β测试◼α测试:由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录错误和使用中遇到的问题。α测试是在受控的环境中进行的。◼β测试:开发者通常不在测试现场。用户记录下在测试过程中遇到的一切问题(真实的或想象的),并且定期把这些问题报告给开发者。β测试是
软件在开发者不能控制的环境中的“真实”应用。接收到β测试期间报告的问题之后,软件开发者对产品进行修改,并准备向全体客户发布最终的软件产品。第5章软件的编码与测试《软件工程导论》635.6.4系统测试◼将通过验收测试的软件作为整个计算机系统的一个元素,与计算机硬
件、外设、支持软件、数据和人员等其他系统元素结合在一起进行的综合测试。(1)恢复测试:检测重新初始化、数据恢复、重新启动、检验点设置是否正确,以及人工干预的平均恢复时间是否在允许范围内。(2)安全测试:检验系统是否有安全保密的漏洞。(3)强度测试:让系统处于资源的异常数量、异常频率、异常批量
的条件下检验系统的承受能力。一般取比平常限度高5~10倍的限度做测试用例。(4)性能测试:检查是否达到性能要求规格。这项测试常常与强度测试相结合进行。第5章软件的编码与测试《软件工程导论》645.7调试技术◼软件调试是在测试发现错误之后诊断并排除错误的
过程。◼软件工程的根本目标是开发出高质量的完全符合用户需要的软件产品。因此,在进行成功的测试后必须进行软件调试。◼调试的主要任务:一是确定程序中错误的确切性质和位置,二是对程序进行修改排除错误。◼调试工作是一项极其复杂而繁
重的脑力劳动,具有很强的技巧性。第5章软件的编码与测试《软件工程导论》655.7.1调试过程◼调试过程从执行一个测试用例开始,如发现实测结果与预期结果不一致,则表明在软件中存在错误或缺陷。◼调试从错误的外部表现形式入手,确定出错位置,研究相关的程序代码
和设计,查找内在原因。◼结果有两种:一是找到了原因,然后加以改正,接着重复执行这个原始测试或某些相关测试,以确定是否排除了该错误或又引进了新的错误。二是没有找到原因,调试人员可以猜测一个原因,并设计附加测试用例来验证这个假设。如果发现所做的修正无
效,则恢复程序的原来状态。重复这个过程直到找到出现问题的原因和有效的解决方法为止。第5章软件的编码与测试《软件工程导论》66调试工作是困难的◼心理因素:错误表象复杂、各种困扰极易使人丧失信心。另外,调试能力也因人而异。◼技术角度:软件错误具有
许多难以应负的特征:(1)表象和原因在程序中可能相距甚远。(2)表象可能时有时无。(3)表象实际上是由一些非错误原因引起的(如舍入不精确)。(4)很难再现与出现错误表象完全一样的输入条件,如实时应用中输入顺序不确定。(5)当其他错误得到改正时,某一错误表象可能会暂时消失,但并未实际排除。第5章软
件的编码与测试《软件工程导论》675.7.2调试技术◼调试过程中主要采用下述调试策略:(1)强行排错(最常用的、效率较低):直接打印出内存中内容,希望从中找出错误原因。要有明确的目的,尽量减少无关信息的
输出。(2)回溯法(小程序中常用):分析错误表象,确定症状位置,人工沿程序的控制流往回追踪源程序代码,直到找到错误原因为止。(3)归纳法:把和错误有关的数据组织起来分析,导出一个或多个假设原因,证明或排除这些假设。(
4)演绎法:设想出所有可能的出错原因,然后试图用测试来排除每一个假设的原因,如果测试表明某个假设的原因可能是真的原因,则对数据进行细化以精确定位错误。第5章软件的编码与测试《软件工程导论》685.4.3调试原则◼在调试过程中,心理因素常常占主导地位。◼查错的原则(1)注重头脑的分析思考,不
要过分依赖计算机。(2)把调试工具仅当作辅助手段。(3)避免试探法,至多把它当作最后手段。(4)避开死胡同。◼排错的原则(1)注意错误的群集现象。(2)提出的修改应能解释与之有关的全部线索。(3)慎重对待每一个错误的修改。