软件工程导论(第7章).ppt

上传人:za****8 文档编号:14550268 上传时间:2020-07-23 格式:PPT 页数:152 大小:1.42MB
收藏 版权申诉 举报 下载
软件工程导论(第7章).ppt_第1页
第1页 / 共152页
软件工程导论(第7章).ppt_第2页
第2页 / 共152页
软件工程导论(第7章).ppt_第3页
第3页 / 共152页
资源描述:

《软件工程导论(第7章).ppt》由会员分享,可在线阅读,更多相关《软件工程导论(第7章).ppt(152页珍藏版)》请在装配图网上搜索。

1、第7章:实现,编码和测试统称为实现。 编码:把软件设计结果翻译成程序。 测试:检测程序并改正错误的过程。,计算机程序设计语言基本上可以分为两大类: 1. 汇编语言; 2. 高级语言。,7.1 编码,7.1.1 选择程序设计语言,从应用特点看,高级语言可分为: 1)基础语言 如BASIC、FORTRAN、COBOL等 2)结构化语言 如PL/1、PASCAL、C、ADA等 3)专用语言 如APL、BLISS、FORTH、LISP、PROLOG等,选择一种编程语言的理论标准: 1)有理想的模块化机制; 2)可读性好的控制结构和数据结构; 3)便于调试和提高软件可靠性; 4)编译程序发现程序错误的能

2、力强; 5)有良好的独立编译机制。,选择语言时除了考虑理论上的标准,还必须同时考虑主要的实用标准:,(1)系统用户要求 (2)可以使用的编译程序 (3)可以得到的软件工具 (4)工程规模 (5)程序员知识 (6)软件可移植性要求 (7)软件的应用领域,1.程序内部的文档 选取含义鲜明的名字,如果使用缩写,缩写规则要一致,并给每个名字加注释; 通常在每个模块开始处要有一段注释,描述模块功能、算法、接口特点等; 程序清单布局应利用适当的阶梯形式,使程序的层次结构清晰明显。,7.1.2 写程序的风格,2.数据说明 数据说明的次序应该标准化,如按数据类型确定说明的次序; 多个变量名在一个语句中说明时,

3、应该按字母顺序排列这些变量; 如果设计时使用了复杂的数据结构,应该用注释说明实现该数据结构的方法和特点。,3.语句构造:语句分行、分段、复杂条件语句规则、嵌套规则等等。 4.输入/输出:数据检验、格式、合法性等等 5.效率 A程序运行时间 B存储器效率 C输入/输出效率,程序设计工具实例:Visual C,运用Visual C+ 开发工具需要掌握: C语言特点、语法; Windows编程基础; MFC相关知识; Visual C集成开发工具环境的使用;,一、C语言特点、语法: C+语言是在C语言的基础是扩展而成的,两种语言的基本语法和语义是相同。,C+中加入了面向对象程序设计(OOP)的特征:

4、 封装性:通过“类”把属性和函数组合在一起。 继承性:派生类可从先前定义的基类中继承函数和属性。 多态性:一个函数名,由不同的对象解释执行,可得到不同的执行效果。,二、Windows编程基础: API: API是Windows应用程序编程接口。 API是一个程序内(或一组相关程序内)的一组函数调用,程序员用它创建其他程序。 程序员不必知道函数内部,只要知道API的函数原型及返回值。 API的函数原型及返回值形式可由相关的技术规范资料获得。,现在的Win32 API中,核心部分依靠三个主要组件提供Windows的大部分函数,这三个组件分别是: USER32.DLL; GDI32.DLL; KER

5、NEL32.DLL。,Windows消息机制: 1)基于消息的事件驱动 消息可以是由硬件发来的(存于系统队列),也可以由Windows系统和应用程序发来(存于程序队列中); 每一个Windows程序在不停的捕捉各种消息,并进行处理; 每个窗口都必须有一个窗口函数,来负责消息的判断与处理。,2)窗口函数对消息的处理 窗口函数是一个回调函数,可以处理收到的消息,在程序中不需要用户显式调用。 该窗口函数的形式通常为:WndProc(),每个窗口类必须在初始化时指定一个窗口函数。,三、MFC: MFC,即Microsoft基本类,该类库封装了SDK(软件开发工具包)结构、功能及应用程序框架内部技术。

6、它提供了许多可以重用的类,使得Windows程序员避免了许多重复性工作。,四、Visual C集成开发工具环境 1)开发工具的使用; 2)掌握Win32程序开发流程 ; 一个win32程序由两大块组成: 程序代码; 用户接口资源。,用户接口资源:菜单,对话框,图标,光标等; 这些资源的实际内容(二进制代码)由各种工具产生,并以各种扩展名的文件存在;,资源描述文件(*.rc)中对用户接口资源进行描述; RC编辑器(RC.exe)根据该资源描述文件(*.rc)将所有用户接口资源集中构造一个*.RES文件; *.RES文件与程序代码结合起来,构成一个Win32程序。,关于函数库和头文件: 动态链接库

7、:应用程序调用的API函数在“执行期间”才链接上的函数库,扩展名可以是.dll,也可以是.exe、.fon、.mod、.drv、 .ocx等。 静态连接库:.lib 头文件:如windows.h,它包含操作系统本身的三大模块gdi32.dll、user32.dll和kernel32.dll中的所有API函数。,有关测试的一些规则: (1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的错误的测试。,7.2.1 软件测试的目标,7.2 软件测试基础,测试的正确定义:“为了发现程序中的错误而执

8、行程序的过程。”,7.2.2 软件测试准则,1)所有测试都应该能追溯到用户需求; 2)应该远在测试前就制定出测试计划; 3)把Pareto原理应用到软件测试中;Pareto原理说明测试发现的错误中的80%很可能是由程序中20%的模块造成的。 4)应该从“小规模”测试开始,并逐步进行“大规模”测试;,5)穷举测试是不可能的;,穷尽测试:包含所有可能情况的测试称为穷尽测试。,6)为了达到最佳测试效果,应该由独立的第三方从事测试工作。,黑盒测试: 如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。,7.2.3 测试方法,白盒测试: 也称结构

9、测试。 如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。,1.模块测试 模块测试又称单元测试,它把每个模块作为单独的实体来测试。 2.子系统测试 子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。,7.2.4 软件测试的步骤,3.系统测试 系统测试是把经过测试的子系统装配成一个完整的系统来测试。 4.验收测试 验收测试把软件系统作为单一的实体进行测试(利用用户的实际数据测试)。 5.平行运行 平行运行是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。,7.2.5 测试阶段的信息流,7.3

10、单元测试,单元测试的一般方法是: 首先通过编译系统检查并改正程序中所有的语法错误; 然后用详细设计模块说明为指南,对重要的控制路径进行测试,以便发现模块内部的错误。 通常,单元测试使用白盒测试方法。,1)模块接口 应该对穿过模块接口的数据流进行检测,以保证正确的输入和输出。 2)局部数据结构 这是错误的主要来源,应该设计相应的测试用例,以便发现数据结构方面的错误。,7.3.1 测试重点,3)重要的执行路径 由于不可能进行穷尽测试,因此选择测试路径是非常关键的。 4)出错处理通路 5)边界条件,审查小组: 1)组长; 2)程序的设计者; 3)程序的编写者; 4)程序的测试者。,7.3.2 代码审

11、查,7.3.3 计算机测试 由于软件模块不是一个独立的系统,不能独立运行,要依靠其他模块调用,或需要调用其他模块。 因此,必须要为测试的单元开发驱动程序或存根程序。,1)驱动程序 相当于一个“主程序”,用来把测试数据传送给被测试的模块,并打印有关结果。 2)存根程序 用来代替被测试模块所调用的模块,相当于“虚拟子程序”。,如,测试B模块,设计了A模块和C模块。 由A负责传送测试数据,由C负责模拟被B调用的模块。C模块可能没有,这取决于B有没有调用其他程序。 A、C都是一次性程序,只在测试时临时使用,应尽量设计得简单一些,以节省费用和时间。,例:,对“编辑”功能的测试:,7.4 集成测试,集成测

12、试是组装软件的系统化技术,它将经过单元测试的模块联系在一起进行测试。 由模块组装成程序时有两种方法: 1)非渐增式测试方法 先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。,2)渐增式测试方法 每次增加一个待测试模块,把它同已经测试好的那些模块结合起来进行测试,反复进行直到完成所有模块测试的方法。,使用渐增式测试方法把模块结合到软件系统中去时,有自顶向下和自底向上两种集成方法。,自顶向下集成是一种递增的装配软件结构的方法,这种方法应用非常广泛。它需要存根程序,但是不需要驱动程序。,7.4.1 自顶向下集成,这种方法的思想是:从主控模块(主程序)开始,沿软件的控制层次向下移动

13、,逐渐把各个模块结合起来。 在自顶向下结合方法中,如何将所有模块组装到软件结构中,又有两种方法:,1)深度优先策略 先组装软件结构的一条主控制通路上的所有模块,选择哪条主控制通路,具有较大的任意性。 如图,如果选取左通路,就先把模块M1、M2、M5结合起来测试,然后结合模块M8、M6,再构造中央和右侧的控制通路。,2)宽度优先策略 沿着软件结构水平地移动,把处于同一个层次的所有模块组装起来。 如图,首先结合M2、M3、M4和主控模块M1,然后结合下一个控制层次中的模块M5、M6和M7,最后结合模块M8。,自顶向下集成方法的基本过程如下: 1)对主控模块进行测试,测试时用存根程序代替所有直接被主

14、控模块调用的模块;,2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代替一个存根程序(新结合的模块往往又需要新的存根程序);,3)每结合一个模块,就测试一个; 4)为保证不引入新的错误,需要进行回归测试,即重复以前进行过的部分或全部测试; 5)重复回到第二步,直到构成整个软件结构。,自底向上集成方法是从软件结构最底层模块开始进行组装和测试,它与自顶向下结合方法相反,需要驱动程序,不需要存根程序。,7.4.2 自底向上集成,自底向上集成方法的基本过程如下: 1)把底层模块组合成实现一个特定软件子功能的族,如图族1、2、3。,2)为每个模块设计一个驱动程序,作为测试的控制程序,以协

15、调测试用例的输入和输出。图中D1、D2、D3分别是族1、2、3的驱动程序;,3)对模块进行测试; 4)用实际模块代替驱动程序组装成新的模块族,在新加入的实际模块上面加上新的驱动程序进行测试;,5)重复第二到第四步,逐渐向上加入实际模块,直至构造出整个软件结构。,7.4.3 不同集成测试策略的比较,1. 改进的自顶向下测试方法;少数关键模块自底向上。 2. 混合法。,7.4.4 回归测试 指重新执行已经做过的部分测试。 回归测试用于保证由于调试或其他原因引起的程序变化,不会导致额外错误的测试活动。,7.5 确认测试(验收测试),也称为验收测试,目标是验证软件的有效性。 如果软件的功能和性能符合用

16、户的期待,软件就是有效的。 软件规格说明书是进行确认测试的基础。,7.5.1 确认测试的范围,确认测试的主要特点及内容有: 1)某些已经测试过的纯粹技术性的测试项可能不需要再次测试,而对用户特别感兴趣的功能或性能,可能需要增加一些测试; 2)通常确认测试主要使用实际生产中的数据来进行测试; 3)确认测试必须有用户的积极参与,甚至以用户为主,可能需要进行一些与用户使用步骤有关的测试。,确认测试一般使用黑盒测试法。,7.5.2 软件配置复查,目的:保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,而且已经编好目录。,7.5.3 Alpha和Beta测试,Alpha测试:用户在开发者的

17、场所进行测试,并且在开发者的指导下进行,测试在受控环境中进行,开发者记录发现的错误和问题; Beta测试:用户在一个或多个客户场所进行测试,不受开发者控制,测试者记录发现的问题和错误,定期将问题报告发送给开发者。,7.6 白盒测试技术,1. 语句覆盖 语句覆盖是指:设计的测试用例能使程序中每条语句至少执行一次。,7.6.1 逻辑覆盖,例:一个被测试模块的源程序为(PASCAL语言): PROCEDURE EXAMPLE (A , B : REAL ; VAR X : REAL) ; BEGIN IF (A1) AND (B=0) THEN X : = X / A; IF (A=2) OR (X

18、1) THEN X : = X + 1 END,选取测试用例:A = 2 , B = 0 , X = 4 ,程序执行路径为:sacbed。,2. 判定覆盖 判定覆盖是指:选取足够的测试用例,使得程序中每个判断的可能结果都至少执行一次,也就是说使程序的每个判断分支至少通过一次。,对于上例,选取如下测试用例: I. A=3,B=0,X=3 (覆盖sacbd) II. A=2,B=1,X=1 (覆盖sabed),3. 条件覆盖 条件覆盖是指:选择足够的测试用例,使得程序中每个判定表达式的每个条件都取到各种可能的结果。,上例中,有两个判定表达式,每个表达式有两个条件,为了做到条件覆盖,应该选取测试数据

19、使得a点出现如下结果: A1,A1,B=0,B0 在b点出现如下结果: A=2,A2,X1,X1,选取如下测试用例: I.A=2,B=0,X=4 (满足A1,B=0,A=2和X1,执行路径为sacbed) II.A=1,B=1,X=1 (满足A1,B0,A2和X1,执行路径为sabd),条件覆盖通常比判定覆盖强,但是条件覆盖不一定包含判定覆盖。,如: IA=2,B=0,X=1 (满足A1,B=0,A=2和X1,执行路径为sacbed) IIA=1,B=1,X=2 (满足A1,B0,A2和X1,执行路径为sabed) 只满足条件覆盖,并不满足判定覆盖。,4. 判定/条件覆盖 判定/条件覆盖是指:

20、选取足够的测试用例使得同时满足判定覆盖和条件覆盖的要求。,对于上例,选取如下测试用例: IA=2,B=0,X=4 (满足A1,B=0,A=2和X1,执行路径为sacbed) IIA=1,B=1,X=1 (满足A1,B0,A2和X1,执行路径为sabd),5. 条件组合覆盖 条件组合覆盖指:选取足够的测试用例,使得每个判定表达式中条件的各种可能的组合都至少出现一次。,对于上例,共有8种可能的条件组合: 1)A1,B=0 2)A1,B0 3)A1,B=0 4)A1,B0 5)A=2,X1 6)A=2,X1 7)A2,X1 8)A2,X1,选取如下测试用例: IA=2,B=0,X=4(满足1、5组合

21、:A1,B=0,A=2,X1,执行路径sacbed) IIA=2,B=1,X=1(满足2、6组合:A1,B0,A=2,X1,执行路径sabed),IIIA=1,B=0,X=2(满足3、7组合:A1,B=0,A2,X1,执行路径sabed) IVA=1,B=1,X=1(满足4、8组合:A1,B0,A2,X1,执行路径sabd),如果从对程序路径的覆盖程度分析,可以提出下面一些逻辑覆盖标准: 6. 点覆盖 点覆盖是指:选取足够多的测试用例,使得程序执行路径至少经过程序图中每个节点一次。,7. 边覆盖 边覆盖是指:选取足够多的测试用例,使得程序执行路径至少经过程序图中每条边一次。,选取如下测试用例:

22、 I A=3,B=0,X=3 (执行路径1453) IIA=2,B=1,X=1 (执行路径1267),8. 路径覆盖 路径覆盖是指:选取足够多的测试用例,使得程序的每条可能路径都至少执行一次。,选取如下测试用例: I A=1,B=1,X=1 (执行路径123) II A=1,B=1,X=2 (执行路径1267) IIIA=3,B=0,X=1 (执行路径1453) IVA=2,B=0,X=4 (执行路径14567),1)A=3,B=0,X=1 2)A=2,B=0,X=4 3)A=2,B=1,X=1 4)A=1,B=0,X=2 5)A=1,B=1,X=1,更强的测试数据:满足路径覆盖和条件组合覆盖

23、,2)5)满足条件组合覆盖,执行路径分别是:sacbed、sabed、sabed、sabd,路径:sacbd,7.6.2 控制结构测试 现有的很多白盒测试技术,是根据程序的控制结构设计测试的技术,常用的控制结构测试技术有: 基本路经测试 条件测试 循环测试,83,1、基本路经测试,基本路径测试,首先计算程序的环形复杂度,并用该复杂度为指南定义执行路径的基本集合,从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。,84,步骤,第一步,根据过程设计结果画出相应的流图。 第二步,计算流图的环形复杂度。 第三步,确立线性独立路径的基本集合 所谓

24、独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径,也就是说,独立路径至少包含一条在定义该路径之前不曾用过的边。 使用基本路径测试法设计测试用例时,程序的环形复杂度决定了程序中独立路径的数量,而且这个数是确保程序中所有语句至少被执行一次所需的测试数量的上界。 第四步,设计可强制执行基本集合中每条路径的测试用例。,85,分析例子,流图 环形复杂度 6 基本集合,86,2. 条件测试,基本路径测试简单高效,但是只有这样的技术还不够,为了进一步提高白盒测试的质量,还需要使用其他控制结构技术。 条件测试技术设计出的测试用例,能够检查程序模块中包含的逻辑条件。 条件测试基础 简单条件格式:一

25、个布尔变量或一个关系表达式,在布尔变量或关系表达式之前还可能有一个NOT算符。关系表达式的形式如下: E1E2 关系算符:,= 复合条件:复合条件由两个或多个简单条件、布尔算符和括弧组成。布尔算符有OR,AND和NOT。不包含关系表达式的条件称为布尔表达式。 条件成分类型:包括布尔算符、布尔变量、布尔括弧、关系算符及算术表达式。,87,条件错误类型,布尔算符错(布尔算符不正确,遗漏布尔算符或有多余的布尔算符) 布尔变量错 布尔括弧错 关系算符错 算术表达式错,88,3循环测试,循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。在结构化的程序中通常只有3种循环,即: 简单循环 嵌套循环

26、串接循环,89,(1)简单循环测试法,跳过循环。 只通过循环一次。 通过循环两次。 通过循环m次,其中m n一1。 通过循环n一1,n, n +1次,90,(2)嵌套循环测试法,从最内层循环开始测试,把所有其他循环都设置为最小值。 对最内层循环使用简单循环测试方法,而使外层循环的迭代参数(例如,循环计数器)取最小值,并为越界值或非法值增加一些额外的测试。 由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值。 继续进行下去,直到测试完所有循环。,91,(3)串接循环测试法,各个循环彼此独立:可以使用前述的简单循环测试法。 各个循环彼此不独立: 采用嵌套循环测

27、试法。,等价类划分是一种黑盒测试技术。 穷尽的黑盒测试需要使用所有可能的输入数据(有效的和无效的)进行测试,通常是不现实的。因此产生了等价类划分。,7.7.1 等价划分(等价类划分),7.7 黑盒测试技术,等价类划分的思想: 如果将所有可能的输入数据(有效的和无效的)划分为若干个等价类,就可以假定用每一个等价类中的代表值作为测试用例来进行测试时,等价于用该类中所有值进行了测试。,用等价类划分设计测试用例时,主要分两步:划分等价类、确定测试用例。 1)等价类划分 划分等价类需要经验,以下给出一些规则:,A如果某输入条件规定了输入的范围,那么可以划分为一个有效的等价类和两个无效的等价类。如X的值的

28、输入范围是1,99,那么测试X时,可以这样划分:有效等价类为1,99,无效等价类为(-,1)和(99,+)。,B如果某个输入条件规定了一组可能的值,且程序可以对不同的值作出不同的处理,那么可以为每种值确定一个有效的等价类,同时还有一个无效等价类。,如,“职称”这个量可能的值是:教授、副教授、讲师、助教。那么可以这样划分:四类有效等价类分别为教授、副教授、讲师、助教,无效等价类为四种职称以外的所有值。,2)确定测试用例 A给每个等价类规定一个唯一的编号; B设计一个新的测试用例,使其尽可能多地覆盖未被覆盖过的有效等价类。重复此步,直至所有有效等价类被覆盖;,C设计一个新的测试用例,使其覆盖而且只

29、覆盖一个尚未被覆盖的无效等价类。重复此步,直到所有无效等价类被覆盖。 通常程序发现一类错误后,就报出错信息,不再检查其它类错误,所以设计测试用例时,一次只覆盖一个无效等价类。,实例:一个把数字串变成整数的函数。 计算机字长:16 bits ,函数由PASCAL语言编写。 function strtoint ( dstr: shortstr ): integer type shortstr = array1.6 of char; /字符串6位/ (16位字长能表示的整型数范围是-215, 215-1,即-32768, 32767 ),有效输入的等价类有: (1)16个数字字符组成的数字串(最高位

30、数字不为零); 如: 0 , 999999 (2)最高位数字是零的数字串; 如:“012345” (3)最高位数字左邻是负号的数字串; 如:“12345”,无效输入的等价类有: (4)空字符串(全是空格);如“ ”; (5)左部填充的字符既不是零,又不是空格; 如:“A12345” (6)最高位数字右面由数字和空格混合而成; 如:“123 45” (7)最高位数字右面由数字和其他字符混合而成; 如:“12A345” (8)负号与最高位数字之间有空格; 如:“- 1234”,合法输出的等价类有: (9)在计算机能表示的最小负整数和零之间的负整数; 如: -32768 , 0 ) (10)零; (

31、11)在零和计算机能表示的最大正整数之间的正整数; 如: (0 , 32767 ,非法输出的等价类有: (12)比计算机能表示的最小负整数还小的负整数; 如:“32769” (13)比计算机能表示的最大正整数还大的正整数; 如:“123456”,根据划分的等价类,设计出测试方案11个: (1)16个数字组成的字符串; 输入: 1 预期的输出:1 (2)最高位数字是零的数字串; 输入:000001 预期的输出:1 (3)负号与最高位数字相邻; 输入:00001 预期的输出:1,(4)最高位数字是零的特例; 输入:000000 预期的输出:0 (5)太小的负整数; 输入:47561 预期的输出:错

32、误无效输入 (6)太大的正整数; 输入:132767 预期的输出:错误无效输入,(7)空字符串; 输入: 预期的输出:错误没有数字 (8)字符串左部字符既不是零又不是空格; 输入:AAAAA1 预期的输出:错误非数字 (9)最高位数字后面有空格; 输入:1 2 预期的输出:错误无效输入,(10)最高位数字后面有其他字符; 输入:1AAA23 预期的输出:错误无效输入 (11)负号和最高位数字之间有空格; 输入: 12 预期的输出:错误负号位置错。,程序通常在处理边缘情况时容易出现错误,如等价类与等价类之间的边界值。 所以在设计测试用例时,使用正好等于、正好大于、正好小于边界值的数据进行测试,发

33、现程序错误的概率较大。,7.7.2 边界值分析,边界值分析测试法属黑盒测试。 在实际设计测试方案时,常常结合使用等价划分和边界值分析两种技术,把一些等价类的边界值作为测试用例进行测试。,上例中设计了11个测试用例,还应该用边界值分析补充测试用例: (12)使输出刚好等于最小负整数; 输入:32768 预期的输出:32768 (13)使输出刚好等于最大的正整数; 输入: 32767 预期的输出:32767,(14)使输出刚刚小于最小的负整数; 输入:32769 预期的输出:错误无效输入 (15)使输出刚刚大于最大正整数; 输入: 32768 预期的输出:错误无效输入,错误推测法在很大程度上靠直觉

34、和经验进行。 基本思想:列举出程序中可能的错误和容易发生错误的特殊情况,且根据它们选择测试方案。 如:输入、输出为0时容易出错;输出记录为0条时容易出错;等等。,7.7.3 错误推测,对软件系统进行实际测试时,应该联合使用各种设计测试方案的方法,形成一种综合策略。具体可以使用如下策略: 1)在任何情况下都应该进行边界值分析; 2)必要时用等价划分法补充测试方案;,7.7.4 实用测试策略,3)必要时再用错误推测法补充测试方案; 4)对照程序逻辑,检查已经设计出的测试方案。可以根据对程序可靠性的要求采用不同的逻辑覆盖标准。,实例:程序TRIANGLE读入三个整数值,这三个整数代表同一个三角形三条

35、边的长度,程序根据这三个值判断三角形属于不等边、等腰或是等边三角形。,综合使用边界值分析、等价值划分和错误推测等技术,可以设计出11种应该测试的情况: (1)正常的不等边三角形; (2)正常的等边三角形; (3)正常的等腰三角形,包括两条相等边的三种不同排列方法; (4)退化的三角形(即两边的和等于第三边),包括三种不同排列方法;,(5)三条边不能构成三角形(即两边之和小于第三边),包括三种不同排列方法; (6)一条边的长度为零,包括三种不同的排列方法; (7)两条边的长度为零,包括三种不同的排列方法; (8)三条边的长度全为零; (9)输入数据中包含负整数; (10)输入数据不全(不足三个正

36、整数); (11)输入数据中包含非整数型的数据。,程序TRIANGLE的测试数据,最后,检查测试数据的覆盖程度,通常应该做到边覆盖。,测试数据覆盖程度检验表中列出的四种测试数据已经做到了边覆盖(覆盖所有的22条边)。,测试数据覆盖程度检验表,7.8 调试,7.8.1 调试过程,调试是在测试发现错误之后排除错误的过程。,1. 蛮干法:打印内存的内容,从中寻找错误的线索,是效率最低的程序调试方法。 2. 回溯法:从发现问题的程序段开始人工地往回追踪分析程序代码,直到找到错误。 3. 原因排除法 包括:对分查找法、归纳法、演绎法,7.8.2 调试途径,7.9 软件可靠性,1. 软件可靠性定义 软件可

37、靠性:是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。,7.9.1 基本概念,2. 软件的可用性 对故障可修复系统,应同时使用可靠性和可用性来衡量。 软件可用性是:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。 可靠性和可用性的区别是:可靠性是在0到t时间间隔内,系统没有失效的概率。而可用性是在t时刻,系统是正常运行的概率。,如果在t时刻,系统是可用的,则有两种可能: 1)在0到t时刻这段时间内,系统一直没有失效(可靠); 2)在0到t时刻这段时间内失效过,但是系统修复后运行到t时刻时情况良好。,如果在一段时间内,软件系统故障停机时间分别为:td1 , td2 ,

38、 ,正常运行时间分别为:tu1 , tu2 , ,则系统的稳态可用性定义为:,其中Tup= tui , Tdown= tdi,如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则上面公式的系统稳态可用性变成:,平均维修时间MTTR是修复一个故障平均需要用的时间,取决于维护人员的技术水平和对系统熟悉程度。 平均无故障时间MTTF是系统按照规格说明书规定成功地运行的平均时间,取决于系统中潜伏的错误数量。,1. 符号 估算MTTF时使用到下列符号 ET测试之前程序中故障总数; IT程序长度(机器指令总数); 测试(包括调试)时间; Ed() 在0至期间发现的错误数; Ec() 在0至期

39、间改正的错误数;,7.9.2 估算平均无故障时间MTTF的方法,2. 基本假定 可作出下列假定: 1)单位长度里的故障数ET/ IT近似为常数。一些统计数字表明,通常有:0.510-2ET/ IT210-2。 2)失效率正比于软件中剩余的(潜藏的)故障数,而平均无故障时间MTTF与剩余的故障数成反比。 3)调试过程没有引入新的故障,即Ec()= Ed()。,由于系统剩余的故障数为: Er() = ET- Ec() 所以单位长度程序中剩余的故障数为: r () = ET / IT - Ec()/ IT,3. 估算平均无故障时间MTTF 因为平均无故障时间与单位长度程序中剩余的故障数r ()成反比

40、,所以:,其中:K为常数,它的值根据经验选取,经典值是200。,由上式变换后得到程序中改正的错误数:,根据对软件平均无故障时间的要求,可以估计需要改正多少个错误后,测试工作就可以结束。,4. 估计故障总数ET的方法 1)植入故障法 假设人为地植入的故障数为Ns,经过一段时间的测试之后发现ns个植入的故障,同时还发现了n个原有的故障,则可以估计出程序中原有的故障总数:,其中: 是故障总数ET的估计值;,植入错误法人为植入的错误与原有程序错误可能性质很不相同,发现它们的难度也不同,用此法估计的错误数有时可能不太准确。 2)分别测试法 分别测试法随机把程序中一部分原有错误加上标记,根据测试发现的有标

41、记和无标记错误的比例,估计程序错误总数。,分别测试法使用两个测试员,独立地测试同一个程序的两个副本,由另一名分析员分析他们的测试结果,把其中一个测试员发现的故障作为有标记的故障。用表示测试时间,假设 = 0时故障总数为B0(即ET); =1时测试员甲发现的故障数为B1; =1时测试员乙发现的故障数为B2; =1时两个测试员发现的相同故障数为bc。,如果认为测试员甲发现的故障是有标记的,即程序中有标记的故障总数为B1,那么测试员乙发现的B2个故障中有bc个是有标记的。所以可以估计出测试前程序中的故障总数为:,其中, 是故障总数ET的估计值。 每隔一定时间,分析员分析两名测试员的测试结果,来估计错

42、误总数。几次估计结果差不多时,用其平均值作为错误总数的估计值。,一种预测软件可靠性和衡量软件质量的方法。 用测试完成率作为度量软件质量的标准。,7.10 日立预测法,7.10.1 测试完成率模型,日立的经验表明,完成软件测试通常需要经历三个阶段,第一阶段故障多,测试完成慢,第二阶段测试完成率提高快,第三阶段错误难改正,完成率提高不快。 测试时间使用率测试所用时间/测试允许使用时间。,日立的经验表明: 1)第一个阶段平均占总时间的22%; 2)如果第一个阶段占用的时间超过总时间的55%以上时,该项工程必然失败;,3)成功的工程第一个阶段占用的时间平均为总时间的15%,失败的工程第一个阶段占用的时

43、间高达总时间的97%左右; 4)成功的工程第二阶段占总时间的57%左右,失败的工程第二个阶段只占总时间的29%左右。,错误发现率:单位时间内发现的错误数。,7.10.2 错误发现率模型,经验表明,失败工程的错误发现率曲线的斜率范围是-0.30,成功的工程为-1-0.3,7.10.3 使用日立预测法的步骤,1)制订测试计划,设计测试方案,确定要完成的测试用例的总数; 2)从集成测试开始,记录测试用例完成数和错误发现数,绘制用例完成率曲线和错误发现率曲线; 3)绘制曲线时,实际的数据是一串离散的点,如果工程不大周期不长的话,连接这些点得不到平滑的曲线时,作平滑处理;,4)每周至少检查一次绘制的曲线

44、,以判断处于哪个阶段,如果第二阶段的到来比计划时间推迟25,就需要及时采取措施补救; 5)严密注视错误发现率变化情况以确定其峰值,在错误发现率下降时,计算其斜率,如果大于0.3就产生了严重的问题; 6)每周至少检验一次,以修正上一周作出的阶段性预测。,第7章小结, 测试计划 为做好集成测试和验收测试,需为如何组织测试制订实施计划。计划应包括测试的内容、进度、条件、人员、测试用例的选取原则、测试结果允许的偏差范围等。 测试分析报告 测试工作完成以后,应提交测试计划执行情况的说明,对测试结果加以分析,并提出测试的结论意见。,测试阶段可能用到的软件工具: Bugfree Bug处理记录工具。 Wik

45、i 知识共享工具。 LoadRunner 负荷(载)测试软件,预测系统行为和性能的负载测试工具,通过模拟多至上千万用户实施并发负载及实时性能监测的方式来查找和确认问题。,练习题,填空题: 1、大型软件的测试应该分阶段地进行,通常至少分为( )、( )和( )等3个基本阶段。 2、软件测试的两类基本方法是白盒测试和黑盒测试,通常在测试过程的早期阶段主要使用( ),而在后期阶段主要使用( )。 3、大型软件系统的测试过程基本上由模块测试、( )、系统测试、( )和平行运行等。 4、一般说来,软件调试途径主要有以下3种即( )、( )和( )。,名词解释: 1、软件测试 2、软件可靠性 3、软件可用

46、性 4、白盒测试 5、黑盒测试 6、集成测试 7、确认测试 8、测试驱动程序 9、测试存根程序,判断题: 1、软件测试一般包括黑盒测试和白盒测试两种方法,测试是为了竭力证明已经建造好的软件系统的正确性和适用性。( ) 2、在软件系统开发中,选择程序设计语言的主要实用标准是依据程序员的知识。( ) 3、代码审查方法没有计算机测试方法好。 ( ) 4、编码风格由个人喜好决定,没有固定格式。() 5、如果测试过程没有发现任何错误,则说明软件没有错误。() 6、软件测试是对软件规格说明、软件设计和编码的最全面也是最后的审查。() 7、测试计划、测试用例、出错统计和有关的分析报告一般不用长期保存。 ()

47、 8、用穷举测试是较现实的测试方法。() 9、程序中的注解越少越好。(),10、不同程序设计语言在程序的效率上的差异不大。() 11、编码的依据是详细设计说明书。() 12、程序文档应该包括代码的功能、代码的完成者等内容。() 13、判定覆盖必然满足语句覆盖。() 14、编程中应采用统一的标准和约定,降低程序的复杂性。(),简答题: 1、软件测试方法之黑盒测试力图发现哪些类型的软件错误? 2、什么叫测试方案?请简述软件测试的基本准则。 3、简述软件测试的任务、目的与类型。 4、什么是编码风格?为什么要强调编码风格? 5、为什么软件测试不应该由程序的编写人员来做? 6、简述选择程序设计语言的实用标准? 7、简述软件测试的步骤?,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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