软件工程5ppt课件.ppt

上传人:本田雅阁 文档编号:2604013 上传时间:2019-04-16 格式:PPT 页数:99 大小:749.01KB
返回 下载 相关 举报
软件工程5ppt课件.ppt_第1页
第1页 / 共99页
软件工程5ppt课件.ppt_第2页
第2页 / 共99页
软件工程5ppt课件.ppt_第3页
第3页 / 共99页
亲,该文档总共99页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《软件工程5ppt课件.ppt》由会员分享,可在线阅读,更多相关《软件工程5ppt课件.ppt(99页珍藏版)》请在三一文库上搜索。

1、第5章 结构化实现,5.1 编码 5.2 软件测试基础 5.3 白盒测试技术 5.4 黑盒测试技术 5.5 软件测试过程及策略 5.6 调试 5.7 软件可靠性,5.1.1 选择程序设计语言须考虑的因素 l 用高级语言写的程序容易阅读、测试、调试、维护 5.1.2 编程风格 l 可读性、可理解性最重要 5.1.3 程序效率 l占用处理机的时间和存储器的容量,(1)系统用户要求; (2)可以使用的编译程序; (3)工程规模; (4)程序员的知识; (5)软件可移植性要求 (6)软件的应用领域,(1)源程序文档化: 恰当的标识符、适当的注释、良好的视觉组织。,(2)数据说明: 次序规范;对复杂数据

2、结构加注释。,(3)语句结构:每个语句简单而直接。,(4)输入和输出: 输入的检查;输入项组合的合法性检查; 数据的简单格式和结束标记;交互时的提示。,l效率是性能指标,在需求分析阶段给出目标值,l不要牺牲程序的清晰性和可读性来提高效率,l要靠良好的设计来提高效率,(1)程序的运行效率:,l 详细设计阶段确定的算法是影响程序效率的决定因素。,l 详细设计向程序代码转换时的指导原则:,化简算术和逻辑表达式; 循环嵌套中的语句尽量少; 数据结构尽量简单; 使用快速的算术运算; 少用混合数据类型; 用优化的编译程序。,(2)存储器效率:,l大型机:考虑操作系统页式调度的特点。,l微型机:采用有紧缩存

3、储器特性的编译程序。,(3)输入/输出效率:,l 设置缓冲,减少通信开销,l 辅存的I/O:简单的存取方法,成块传送,5.2.1 软件测试概述 5.2.2 软件测试准则 5.2.3 常用的测试方法 5.2.4 程序的环路复杂度,1.软件测试的定义: 根据软件开发各阶段的规格说明和程序的内部结构 而设计一批测试用例,并利用这些测试用例去运 行程序,以发现设计和程序错误的过程。 测试用例(测试方案):输入数据及预期输出结果,2软件测试过程: 软件开发过程是一个自顶向下、逐步细化的过程; 而测试过程则是自底向上、逐步集成的过程。低一级 测试为高一级测试准备条件。 l 软件测试横跨编码和测试两个阶段。

4、,测试与软件开发各阶段的关系:,开发:自顶向下、逐步分解 测试:自底向上、逐步集成,3.软件测试的目标: 以最少的时间、人力,找出软件的潜在错误和缺陷,一个好的测试用例在于能发现至今未发现的错误 一个成功的测试是指发现了至今未发现的错误,(1)所有的测试都应该能追溯到用户需求 (2)有严格的测试计划,避免随意性 (3)注意错误群集现象 (4)测试应该从“小规模”开始,并逐步进行“大规模”测试 (5)穷举测试是不可能的(测试不能证明程序无错) (6)为了达到最佳的测试效果,应该由独立的第三方来从事综 合测试工作 (7)设计测试用例时,要包括合理的输入数据和不合理的输入 数据,1.黑盒测试(功能测

5、试): 在程序接口进行的测试,它只检查程序功能是否能按 照规格说明书的规定正常使用,程序是否能适当地接收输 入数据产生正确的输出信息,并且保持外部信息(如,数 据库或文件)的完整性。,2.白盒测试(结构测试): 按照程序内部的逻辑测试程序,检查程序中的每条 通路是否都能按预定要求正确工作。,1.流图(程序图): 一种退化的程序流程图,描述程序的控制流程, 流图的画法: 程序流程图中每个处理符号退化成一个结点。 程序流程图中的流线变成有向边。 一组顺序处理框可以映射为一个单一结点 分解复合逻辑,2.程序的环路复杂度的求法:,(1)方法一:V(G) E N + 2 l E 表示流图中有向边的数目;

6、N 表示结点数目。,(2)方法二:V(G) P + 1 l P 是流图中判定结点的数目,(3)方法三:V(G) 流图中的区域数,V(G)= 3,l设计测试方案是测试阶段的关键技术问题: (1)所谓测试方案包括具体的测试目的(例如,预定要测试的 具体功能),应该输入的测试数据和预期的结果。通常又 把测试数据和预期的输出结果称为测试用例。,l设计测试方案的基本目标: 确定一组最可能发现某个或某类错误的测试数据。,(2)最困难的问题是设计测试用的输入数据: 不同的测试数据发现程序错误的能力差别很大,为了提高测 试效率降低测试成本,应该选用高效的测试数据。因为不可 能进行穷尽的测试,选用少量“最有效的

7、”测试数据,做到尽 可能完备的测试就更重要了。,5.3.1 逻辑覆盖 5.3.2 基本路径测试 5.3.3 循环测试,l有选择地执行程序中某些最有代表性的通路是对穷尽 测试的唯一可行的替代办法。,l根据覆盖的目标和程度不同,逻辑覆盖可分为以下几类:,l覆盖主要有两种方法: 一种称为逻辑覆盖法,另一种称为路径覆盖法。 除此以外,对循环的测试,可采用循环覆盖法。,l覆盖是对一系列测试过程的总称,这组测试过程逐渐 进行越来越完整的通路测试。,(1)语句覆盖:选择足够多的测试数据,使被测程序中 每一可执行语句至少执行一次。,l执行路径(ace)可满足要求, 取条件: (A=2)and(B=0),l 测

8、试用例:输入数据(A,B,X)取值(2,0,4) 输出结果(A,B,X)的预期值为(2,0,3),两个判定语句为 “ F ” 的情况没有测试,(2)判定覆盖:使每个判定的每种可能结果至少执行一次。,l执行路径(ace)和(abd) 可满足要求,取条件: (A=2)and(B=0)和(A1)and(X1),l 测试用例1:(A,B,X)的输入值取(2,0,4);预期输出值为(2,0,3),l 测试用例2:(A,B,X)的输入值取(1,1,1);预期输出值为(1,1,1),判定覆盖包括语句覆盖 两个判定语句的 “ F ” 和“ T ”的情况组合没有测试, 即未覆盖所有的逻辑路径,(3)条件覆盖:每

9、个判定表达式中每个条件的可能取值至少执行一次。,l 每个判断条件的可能取值: 第一个判定表达式中条件1:A1 和 A1 第一个判定表达式中条件2:B0 和 B0 第二个判定表达式中条件1:A2 和 A2 第二个判定表达式中条件2:X1 和 X1,l 测试用例1 (取条件A1、B0、A2、X1,通过路径ace ): (A,B,X)的输入值取(1,0,3),预期输出值为(1,0,4),l 测试用例2 (取条件A1、B0、A=2、X1,通过路径abe ): (A,B,X)的输入值取(2,1,1),预期输出值为(2,1,2),条件覆盖不一定满足判定覆盖,(4)判定/条件覆盖:每个判定表达式中每个条件的

10、可能取值至少执 行一次;同时每个判定表达式的可能判定结 果至少执行一次。,l测试用例1(取条件A1、B0、A=2、X1,通过路径ace ): (A,B,X)的输入值取(2,0,4),预期输出值为(2,0,3),l每个判断条件的可能取值: 第一个判定表达式中条件1:A1 和 A1 第一个判定表达式中条件2:B0 和 B0 第二个判定表达式中条件1:A2 和 A2 第二个判定表达式中条件2:X1 和 X1,l测试用例2(取条件A1、B0、A2、X1,通过路径abd): (A,B,X)的输入值取(1,1,1),预期输出值为(1,1,1),两个判定语句的 “ F ” 和“ T ”的情况组合没有测试,即

11、未覆盖所有 的逻辑路径,(5)条件组合覆盖:每个判定表达式中的所有可能的条件取值组合 至少执行一次。,l 第一个判定表达式 组合1:A1和 B0; 组合2:A1和 B0; 组合3:A1和 B0; 组合4:A1和 B0; l 第二个判定表达式 组合5:A2和 X1; 组合6:A=2和 X1; 组合7:A2和 X1; 组合8:A2和 X1,l测试用例1(取组合1和5,执行路径ace ): (A,B,X)的输入值取(2,0,4),预期输出值为(2,0,3),l测试用例2(取组合2和6,执行路径abe ): (A,B,X)的输入值取(2,1,1),预期输出值为(2,1,2),l测试用例3(取组合3和7

12、 ,执行路径abe ): (A,B,X)的输入值取(1,0,3),预期输出值为(1,0,4),l测试用例4(取组合4和8 ,执行路径abd): (A,B,X)的输入值取(1,1,1),预期输出值为(1,1,1),(6)路径覆盖:覆盖程序中所有可能的路径。, 程序复杂时,路径测试不易做到,L1(ace) L2(abd ) L3(abe ) L4(acd ),覆盖程度的强弱:,在使用逻辑覆盖法设计测试用例时,步骤如下: 1)选择逻辑覆盖类型;(测试目的?) 2)选择测试路径以满足选定的覆盖程度;(分析过程?) 3)获得一组测试用例: 选择测试输入数据以满足选定的测试路径和覆盖程度; 根据测试输入数

13、据和测试路径计算预期结果。,例:设有下列语句序列: read(x,y); if (x1) and (y=5) then zx*y else zx+y; if z12 then z2*z; write(z). (1)使用语句覆盖方法测试程序,设计测试用例 (2)使用条件覆盖方法测试程序,设计测试用例,解:(1) 语句覆盖测试用例的设计过程如下: 语句覆盖要求被测程序中每一可执行语句至少执行一次。 程序中可执行语句分别为: zx*y; zx+y; z2*z 测试用例1需满足的条件:“(x1) and (y1) and (y=5)”不成立 可覆盖的语句: zx+y 由以上分析得到如下测试用例: 测试

14、用例1:输入数据(x,y)=(4,3) 预期输出结果z=24 测试用例2:输入数据(x,y)=(0,3) 预期输出结果z=3,解:(2)条件覆盖测试用例的设计过程如下: 条件覆盖要求被测程序中每个判定表达式中每个条件的可能取值至少执 行一次。 程序中的条件及取值分别为: 条件1 (x1) 取“T”或“F”; 条件2 (y1) 、(y1) 、(y=5)、(z12) 三个条件同时取“F” 由以上分析得到如下测试用例: 测试用例1:输入数据(x,y)=(4,3) 预期输出结果z=24 测试用例2:输入数据(x,y)=(-1,7) 预期输出结果z=6,例:设有下列语句序列: if (x1) and (

15、y=5) then zx*y else zx+y; if z12 then z2*z; 若采用判定条件覆盖法进行测试,则应选用( ) 为测试用例。 A. x=1,y=12; x=4,y=7 B. x=2,y=6; x=3,y=3 C. x=3,y=4; x=1,y=9 D. x=4,y=5; x=1,y=6,l程序中的路径是指: 程序从入口开始,执行各个语句,直到出口。 l在实际中,即使一个不太复杂的程序,其路径条数都是 一个庞大的数字。采用穷举测试是不现实的。因此,只 能选择有关路径进行测试。,基本路径测试的步骤:,(1)根据详细设计结果画出相应的流图,求环路复杂性。,(2)确定线性独立路径

16、的基本集合: l环路复杂性取值表示程序的独立路径条数 l独立路径:包括一组以前没有处理的语句或条件的一条路径,(3)生成测试用例,确保基本路径集合中的每条独立路径的执行。,例题1 例题2,基本路径覆盖是一种很强的覆盖标准,它使得程序中的每个条件 至少取得一次真值和假值,使得每条语句至少执行一次。,被测模块的PDL描述: Procedure: process records 1. Do While records remain 2. Read record; 3. If record field1 = 0 4. Then store in buffer; 5. increment counter

17、; 6. Else If record field2 = 0 7. Then reset counter; 8. Else store in file; 9. End If 10. End If 11. End Do End,流图:,环路复杂度: V(G)=4,流图:,独立路径: Path1: 1-11 Path2: 1-2-3-6-8-9-10-1-11 Path3: 1-2-3-6-7-9-10-1-11 Path4: 1-2-3-4-5-10-1-11,被测模块程序流程图:,独立路径:,Path1: 1-11 Path2: 1-2-3-6-8-9-10-1-11 Path3: 1-2-3

18、-6-7-9-10-1-11 Path4: 1-2-3-4-5-10-1-11,PROCEDURE average INTERFACE RETURNS average, total.input, total.valid INTERFACE ACCEPTS value, minimum, maximum TYPE value1:100 IS SCALAR ARRAY TYPE average, total.input, total.valid IS SCALAR TYPE minimum, maximum, sum IS SCALAR TYPE i IS INTEGER i = 1 total.

19、input = total.valid = 0 sum = 0 DO WHILE valuei-999 AND total.input = minimum AND valuei 0 THEN average = sum/total.valid ELSE average = -999 ENDIF END average,例1、用基本路径法,对求平均值的过程设计测试用例。,(1)由过程描述导出流图,求环路复杂性: 对过程描述定义结点 导出流图 环路复杂性:V(G)6,(2)确定独立路径(共6条): path1: 1-2-10-11-13 path2: 1-2-10-12-13 path3: 1-2

20、-3-10-11-13 path4: 1-2-3-4-5-8-9-2 path5: 1-2-3-4-5-6-8-9-2 path6: 1-2-3-4-5-6-7-8-9-2,(3)设计测试用例,使每条独立路径执行一次。 path1: 1-2-10-11-13 需要满足的条件: 点2遇到valuei= -999;点10遇到 total.valid0, 测试用例设计如下: l输入数据:valuek=有效值,ki valuei=-999, 2i100 l预期输出结果: 输入总个数;输入的有效值个数及平均值。,path5: 1-2-3-4-5-6-8-9-2(-10-11-13) 需要满足的条件: 点

21、2遇到valuei-999;点3遇到total.input=min;点6遇到valueimax; 点2遇到valuei=-999;点10遇到total.valid0;, 测试用例设计如下: l输入数据:valuei=有效值,imax, ki l预期输出结果: 正确的输入总个数、输入的有效值个数及平均值。,结构化程序中通常有3种循环:,(1)简单循环的测试: 应该使用下列测试集来测试简单循环,其中n是允许通过 循环的最大次数。 跳过循环。 只通过循环一次。 通过循环两次。 通过循环 m 次,其中 mn一1。 通过循环 n-1,n,n+1次。,(2)嵌套循环的测试: 从最内层循环开始测试,把所有其

22、他循环都设置为最小值。 对最内层循环使用简单循环测试方法,而使外层循环的迭 代参数(例如,循环计数器)取最小值,并为越界值或非法 值增加一些额外的测试。 由内向外,对下一个循环进行测试,但保持所有其他外层 循环为最小值,其他内层嵌套循环为“典型”值。 继续进行下去,直到测试完所有循环。,(3)串接循环的测试: 如果串接的各个循环彼此独立,可以使用简单循环的测试 方法。 如果两个循环串接,而且第一个循环的循环计数器值是第 二个循环的初始值,则两个循环并不是独立的。可以使用 嵌套循环的测试方法。,l黑盒测试主要试图发现下列几类错误: 1、功能不正确或遗漏; 2、界面错误; 3、数据库访问错误; 4

23、、性能错误; 5、初始化和终止错误等。,5.4.1 等价划分 5.4.2 边界值分析 5.4.3 错误推测,1.等价划分的定义: 把程序的可能的输入数据(或输出数据)划分成若干 部分(等价类),然后从每一部分中选取少数有代表性的 数据作为测试用例。,l 一个假定:测试某等价类的代表值就等价于对这一类 其它值的测试。,2.两种等价类: 有效等价类:合理的、有意义的数据构成的集合。 无效等价类:不合理、无意义的数据构成的集合。,使用等价划分法设计测试方案时,首先研究程序的功能说 明,从而确定输入数据的有效等价类和无效等价类。在确 定输入数据的等价类时常常还需要分析输出数据的等价类, 以便根据输出数

24、据的等价类导出对应的输入数据等价类。,3.划分等价类需要经验,指导原则如下 : 若输入条件规定了取值范围或取值个数,则可确定 一个有效等价类和两个无效等价类。,若规定了输入数据的一组值,而且程序要对每个值 分别处理,则可为每个输入值确立一个有效等价类; 为这一组值确立一个无效等价类。,个人月收入:x 税率 x 101600 45%,若规定了输入数据必须遵守的规则,则可确立一个有 效等价类(符合规则)和若干个无效等价类(从不同 角度违反规则)。,若输入数据为整型,则可划分出正整数、零和负整数 三个有效等价类,若程序的处理对象是表格,则应该使用空表、含一项、 含多项的表。,设计一个新的测试用例,使

25、其仅覆盖一个尚未 被覆盖的无效等价类(重复这一步,直到所有 的无效等价类都被覆盖为止),4.如何确立测试用例: 设计一个新的测试用例,使其尽可能多地覆盖 尚未被覆盖的有效等价类(重复这一步,直到 所有的有效等价类都被覆盖为止),(2)确定测试用例: l一个测试用例可以覆盖多个合理等价类 l一个测试用例只能覆盖一个不合理等价类,5.等价划分法测试步骤: (1)确定等价类(包括合理等价类和不合理等价类)并 顺序编号;,例:某报表处理系统,要求用户输入处理报表的日期。 (1)假设日期限制在1990年1月至1999年12月,即输入 系统的日期不在该时间段内,则显示输入错误。 (2)规定日期由6位数字字

26、符组成:前四位代表年,后 两位代表月。 请用等价类划分法设计测试用例,测试程序的“日期 检查功能” 。,解:一、划分等价类并顺序编号,二、为合理等价类设计测试用例:,三、为每个不合理等价类至少设计一个测试用例:,l 经验表明,程序在处理边界情况时最容易发生错误,从而设计使 程序运行在边界情况附近的测试方案、暴露出程序错误的可能性 会更大些。 例如,许多程序错误出现在下标、常量、数据结构和循环等等的 边界附近。,l边界值分析法主要用来选择等价类的边界值作为测试用例检查程 序边界运行情况,是一种补充等价分类法的测试用例设计技术。,l取输入等价类和输出等价类的边界值及边界附近的值做测试用例: 应当选

27、取正好等于、刚刚大于、刚刚小于边界的值作为测试数据。,l 通常联合使用等价划分和边界值分析两种技术,例:有一个计算程序,它的输入量只有一个X,其取值范围是 -100,50。 现在从输入的角度设计如下4个测试用例,输入值X分别取: -99,-100,49,50 设计这组测试用例的方法是( )。 A)条件覆盖法 B)等价分类法 C)边界值分析法 D)错误推测法,错误推测法在很大程度上靠直觉和经验进行。它的基本想法 是列举出程序中可能有的错误和容易发生错误的特殊情况, 并且根据它们选择测试方案。,对于程序中容易出错的情况也有一些经验总结出来,例如: (1)输入数据为 0 或字符为空; (2)当软件要

28、求输入时(比如在文本框中), 根本没有输入任何内容, 按了Enter键;(这种情况在产品说明书中常常忽视,设计人员 也可能遗忘,但是在实际使用中却时有发生。) (3)如果输入或输出的数目允许变化(例如,被检索的或生成的表的项 数),则输入或输出的数目为O和1的情况(例如,表为空或只有一 项)是容易出错的情况。 ,l 软件测试的过程: (1) 单元测试: 集中对用源代码实现的每一个程序模块进行测试。 检查每个单元(模块)控制结构中的特定路径,以确保 做到完全覆盖并发现最大数量的错误。 检查各个程序模块是否正确地实现了规定的功能。 主要发现编码和详细设计的错误。,(2) 集成测试: 把模块装配(即

29、集成)在一起形成完整的软件包,在装配 的同时进行测试。集成测试同时解决程序验证和程序构 造这两个问题。 模块相互间的协调和通信是集成测试过程中的主要问题。 集成测试中将发现软件设计中的错误,也可能发现需求 说明中的错误。,(3)确认测试: 在软件集成完成之后,必须测试在需求分析阶段确定下 来的确认标准,确认测试是对软件满足所有功能的、行 为的和性能的需求的最终保证。 验收测试的目的是验证系统确实能够满足用户的需要, 以及软件配置是否完全、正确。 确认测试中发现的往往是需求说明书中的错误。,(4)系统测试: 把已经经过确认的软件纳入实际运行环境中,与其他系 统成分组合在一起进行测试。 (5)平行

30、运行: 同时运行新开发出来的系统和将被它取代的旧系统,以 便比较新旧两个系统的处理结果。,软件测试的过程,5.5.1 单元测试 5.5.2 集成测试 5.5.3 确认测试 5.5.4 系统测试,1单元测试集中检测软件设计的最小单元模块 l在编写出源程序代码并通过了编译程序的语法检查之后, 就可以用详细设计结果作指南,对重要的执行通路进行测 试,以便发现模块内部的错误。 l各模块可平行、独立进行单元测试 l单元测试方法: 主要使用白盒测试技术、辅助使用黑盒测试技术,2.单元测试的内容: (1)模块接口测试(数据流、全局数据、I/O),(2)局部数据结构测试(数据类型、初始化、类型匹配),(3)内

31、部逻辑测试(基本执行路径和循环),(4)错误处理的测试(出错预见、出错处理),(5)边界测试(数据流、控制流的边界),(6)某些性能测试,3.单元测试的步骤: (1)测试用例设计:利用设计文档,设计验证程序功能、 检查逻辑路径、找出程序错误的多个测试用例。对 于每一组输入、应有预期的正确输出结果。,(2)设计辅助模块(测试软件): 测试一个模块时,应考虑该模块与外界的联系,通常 用一些辅助模块去模拟与被测模块相联系的其他模块。,(3)进行测试运行、分析测试结果,l辅助模块就是驱动模块和桩模块(存根模块): 驱动模块: 相当于被测模块的上级调用模块;接收测试数据并传给 被测模块;输出实测结果。

32、桩模块(存根模块): 代替被测模块调用的子模块;桩模块使用被它代替的模 块的接口,可能做最少量的数据操作。,被测模块、与被测模块相关的驱动模块和桩模块共同 构成了一个“测试环境”:,软件结构图 模块B 的测试环境,1.集成测试: 将所有模块按照设计要求组装起来的同时进行测试,2.集成测试的内容:发现与接口有关的错误 将各模块连接时,通过接口的数据是否丢失。 不同模块的功能之间是否产生不利影响。 组装后,系统的功能和性能是否满足预期要求。 全局数据的正确性。 各模块的误差积累情况。,3.集成测试策略 : (1)非渐增式集成测试(一次性组装),(2)渐增式集成测试: 边连接边测试,以随时发现连接中

33、产生的问题。, 自顶向下集成, 自底向上集成,渐增式集成测试策略的选择 自顶向下集成测试与自底向上集成测试各有优缺点, 其中一种策略的优点就是另一种策略的缺点。 将两种渐增式策略组合起来是一种最好的折衷,这 种折衷策略是:在程序结构的高层使用自顶下向策略, 而在低层则使用自底向上策略,这种测试策略也称为三 明治测试(sandwich testing)。,集成测试时,应特别关注关键模块的测试。关键模块应 尽早测试,回归测试时也应集中在关键模块的功能上。 关键模块是指具有下列一个或多个特征的模块: 1)与多个软件需求有关; 2)含有高层控制(位于程序结构的高层); 3)本身是复杂的或是容易出错的;

34、 4)含有确定的性能需求。,自顶向下渐增式集成测试步骤 1.测试主模块(其直属下层模块用存根模块代替),2.采用深度优先(或广度优先)策略,逐步用实际模块替换 存根模块(同时用新的存根模块代替实际模块的直接下属 模块),与已测试模块组成新的子系统。,3.进行回归测试 回归测试: 相对原始测试而言,部分或全部重复已经进行过的测试,4.判断所有模块是否组装到系统中(结束测试或转到2执行), 自顶向下渐增式组装(深度优先),自底向上渐增式测试步骤 1.把底层模块组合成若干个实现某个特定子功能的簇(为每 个子功能簇设计驱动模块,协调测试数据的输入和输出), 对各子功能簇分别进行测试,2.用实际模块代替

35、驱动模块组装成更大的子功能簇(需为 新增实际模块设计相应驱动模块),进行测试,3.判断是否组装到主模块(结束测试或转到 2 执行),自底向上渐增式测试示例, 自底向上渐增式组装,1、确认测试: 验证软件的有效性(功能和性能等)是否与用户的要求 一致,即软件是否满足需求规格说明书中的确认标准。,l确认测试使用黑盒测试方法,2、确认测试的具体内容: (1)系统的功能、性能 (2)人机界面 (3)可移植性、兼容性、错误恢复能力 (4)可维护性 (5)文档的完整、准确,4、用户参与确认测试,3、确认测试的另一项任务:软件配置复查 软件配置复查的目的是保证软件配置的所有成分都齐全, 各方面的质量都符合要

36、求,具有维护阶段所必需的细节。,l测试与测试 (1)测试(模拟测试): 在开发场所和开发人员指导下模拟实际运行环境 和用户进行测试 (2)测试(现场测试): 组织典型用户在实际使用环境下进行测试,1调试的任务: 在测试的基础上,进一步诊断和改正程序中潜在的 错误。 2调试过程:(图5.10) 确定程序中可疑错误的确切性质和位置; 对程序(设计,编码)进行修改,排除这个错误。,3调试途径: (1)强行排错: 打印部分信息 使用程序调试工具 (2)回溯法排错: 从发现症状的位置沿程序控制流向回追溯源代码, 直到找到错误根源。,(3)原因排除法: 对分查找法 归纳法: 从一些错误征兆入手,分析它们之

37、间的关系找出错误。 l分析后提出假设 l证明假设 演绎法: 提出可能的出错假设;排除不正确的假设;改进剩余的假设; 证明假设,5.7.1 基本概念 5.7.2 估算平均无故障时间的方法,1软件可靠性: 程序在给定的时间间隔内,按照规格说明书的规定 成功地运行的概率。 l可靠性随着给定的时间间隔的加大而减少,2软件的可用性: 程序在给定的时间点,按照规格说明书的规定 成功地运行的概率。 l可靠性与可用性的区别: 可靠性意味着在0到t时间间隔内系统没有失效 可用性意味着在时刻t,系统是正常运行的,l系统的稳态可用性ASS: 如果在一段时间内,软件系统故障停机时间分别为td1,td2, 正常运行时间

38、分别为tu1,tu2,则: (5.1) 其中 l如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念, 则: (5.2) MTTR:修复一个故障平均需要用的时间 MTTF:系统成功运行的平均时间,1.估算平均无故障时间: MTTF (5.5) ET:测试之前程序中错误总数 IT: 程序长度(机器指令总数) Ec():0到期间改正的错误数 K: 经验常数,2.估计程序中错误总数的方法(分别测试法): 在测试早期,由甲、乙两个测试员分别测试同一程序 的两个副本,表示测试时间 l假定:= 0 时 :错误总数为B0 = t1时 :甲发现错误数为B1; 乙发现错误数为B2; 甲和乙发现的相同错

39、误数为bc l程序中错误总数为: (5.8),例1:由甲、乙各自独立测试一个24000条指令的程序。经过一个月测试后, 甲发现并改正20个错误,MTTF达到10h;乙发现24个错误,其中的6个 甲也发现了。以后由甲一个人继续测试该程序。 (1)刚开始测试时,程序中共有多少个潜藏错误? (2)为使MTTF达到60h,必须再改正多少个错误?,解:(1)根据分别测试法公式(5.8),可知: B1=20、B2=24、bc= 6 故错误总数(246)2080(个),(2)由公式(5.5)和甲测试数据:1024000(K (80-20) 求得K=40。 为使MTTF达到60h,由公式(5.5):60=24

40、000/(40(80-Ec) 求得Ec=70(个),即总共须改正70个错误才能使MTTF达到60h。 又因为:甲已经改正20个错误;所以还须改正50个错误。,例2:对一个包括10000条机器指令的程序,进行一个月集成测试后,共改正15个错误, 此时MTTF=10h;进行两个月测试后,总共改正25个错误, 此时MTTF=15h。 (1)确定MTTF与测试时间之间的函数关系;并画出函数曲线 (解决此问题时,需要做什么假设?) (2)为做到MTTF100h,必须进行多长时间的集成测试? 集成测试结束时,总共改正了多少个错误?程序中还剩多少潜伏错误?,解:(1)假设MTTF和测试时间t之间存在线性关系

41、:MTTFa+bt 由题目:t1,MTTF10; t2,MTTF15; 得到: 10a+b 15a+2b 解得:a5, b5 l故MTTF与测试时间t之间的函数关系为:MTTF5+5t l相应的函数曲线:,例2:对一个包括10000条机器指令的程序,进行一个月集成测试后,共改正15个错误, 此时MTTF=10h;进行两个月测试后,总共改正25个错误, 此时MTTF=15h。 (1)确定MTTF与测试时间之间的函数关系;并画出函数曲线 (解决此问题时,需要做什么假设?) (2)为做到MTTF100h,必须进行多长时间的集成测试? 集成测试结束时,总共改正了多少个错误?程序中还剩多少潜伏错误?,解

42、:(2)为使MTTF100h,由1005+5t求得:t19(月); 即需进行19个月集成测试。 由公式(5.5)和题目得: 1010000(K(ET15) 1510000(K(ET25) 解得: ET45(个),K33.33 当MTTF100h时:10010000 (33.33(45EC(19)) 求得EC(19)42(个) 故:当测试结束时,共改正42个错误;还剩(45-42)=3个潜伏错误,深度优先测试次序: M1、M2、M5、M8、M6、M3、M7、M4 广度优先测试次序: M1、M2、M3、M4、M5、M6、M7、M8,系统测试的种类很多,每种测试都有不同的目的,它们 从不同的角度测试

43、计算机系统是否被正常地集成,并完 成相应的功能。 常用的系统测试种类包括: 恢复测试(recovery testing) 安全测试(security testing) 压力测试(stress testing) 性能测试(performance testing),恢复测试是通过各种手段,强制软件发生故障,然后来 验证系统能否在指定的时间间隔内恢复正常,包括修正 错误并重新启动系统。 安全测试用来验证集成在系统中的保护机制能否保护系 统不受非法侵入。,压力测试也称强度测试,它是在一种需要非正常数量、 频率或容量的方式下执行系统,其目的是检查系统对 非正常情况的承受程度。 性能测试用来测试软件在集成的系统中的运行性能。 它对实时系统和嵌入式系统尤为重要。性能测试常常 需要与压力测试结合起来进行。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1