软件工程导论_课件之第7章_实现(第五版)(张海潘编著)_第1页
软件工程导论_课件之第7章_实现(第五版)(张海潘编著)_第2页
软件工程导论_课件之第7章_实现(第五版)(张海潘编著)_第3页
软件工程导论_课件之第7章_实现(第五版)(张海潘编著)_第4页
软件工程导论_课件之第7章_实现(第五版)(张海潘编著)_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第7章章 实现实现 7.1 编码编码 7.2 软件测试基础软件测试基础 7.3 单元测试单元测试 7.4 集成测试集成测试 7.5 确认测试确认测试 7.6 白盒测试技术白盒测试技术 7.7 黑盒测试技术黑盒测试技术 7.8 调试调试 7.9 软件可靠性软件可靠性 n通常把编码和测试统称为实现。通常把编码和测试统称为实现。 n所谓编码就是把软件设计结果翻译成用某种程序设计所谓编码就是把软件设计结果翻译成用某种程序设计 语言书写的程序。语言书写的程序。 n软件测试在软件生命周期中横跨两个阶段。软件测试在软件生命周期中横跨两个阶段。 q通常在编写出每个模块之后就对它做单元测试。通常在编写出每个模

2、块之后就对它做单元测试。 q在这个阶段结束之后,对软件系统还应该进行各种综合测试,在这个阶段结束之后,对软件系统还应该进行各种综合测试, 通常由专门的测试人员承担这项工作。通常由专门的测试人员承担这项工作。 n通过测试发现错误之后还必须诊断并改正错误,这就通过测试发现错误之后还必须诊断并改正错误,这就 是调试的目的。调试是测试阶段最困难的工作。是调试的目的。调试是测试阶段最困难的工作。 n在对测试结果进行收集和评价的时候,使用故障率数在对测试结果进行收集和评价的时候,使用故障率数 据,估计软件将来出现故障的情况并预测软件的可靠据,估计软件将来出现故障的情况并预测软件的可靠 性。性。 7.1 编

3、码编码 7.1.1 选择程序设计语言选择程序设计语言 n机器语言,几乎不使用。机器语言,几乎不使用。 n汇编语言,特殊场合使用。汇编语言,特殊场合使用。 n高级语言,明显优于汇编语言。高级语言,明显优于汇编语言。 程序设计语言的划代:程序设计语言的划代: 划代划代语言语言特点特点级别级别 1GL机器语言机器语言 程序不直观,编程出错率高程序不直观,编程出错率高 运行效率高运行效率高 低级低级 2GL汇编语言汇编语言 比机器语言直观,减少了出错率比机器语言直观,减少了出错率 与机器码一样长与机器码一样长 特殊情况下才使用特殊情况下才使用 3GL BASIC PASCAL C、C+等等 利用类英语

4、的语句和命令利用类英语的语句和命令 一条语句相当于一条语句相当于5-10条机器码条机器码 要规定详细的算法过程要规定详细的算法过程 高级高级 4GL 数据库查询语言数据库查询语言 程序生成器程序生成器 图形语言图形语言 与自然语言接近与自然语言接近 一条语句相当于一条语句相当于30-50条机器码条机器码 非过程化问题定义非过程化问题定义 运行开销大,效率低运行开销大,效率低 选择语言的理想标准:选择语言的理想标准: n为了使程序容易测试和维护以减少软件的总成为了使程序容易测试和维护以减少软件的总成 本,所选用的高级语言应该有理想的模块化机本,所选用的高级语言应该有理想的模块化机 制,以及可读性

5、好的控制结构和数据结构;制,以及可读性好的控制结构和数据结构; n为了便于调试和提高软件可靠性,语言特点应为了便于调试和提高软件可靠性,语言特点应 该使编译程序能够尽可能多地发现程序中的错该使编译程序能够尽可能多地发现程序中的错 误;误; n为了降低软件开发和维护的成本,选用的高级为了降低软件开发和维护的成本,选用的高级 语言应该有良好的独立编译机制。语言应该有良好的独立编译机制。 主要的实用标准:主要的实用标准: n系统用户的要求系统用户的要求 n可以使用的编译程序可以使用的编译程序 n可以得到的软件工具可以得到的软件工具 n工程规模工程规模 n程序员的知识程序员的知识 n软件可移植性要求软

6、件可移植性要求 n软件的应用领域软件的应用领域 7.1.2 编码风格编码风格 1. 程序内部的文档程序内部的文档 n恰当的标识符恰当的标识符 n适当的注解适当的注解 n程序的视觉组织程序的视觉组织 2. 数据说明数据说明 n数据说明的次序应该标准化。数据说明的次序应该标准化。 n当多个变量名在一个语句中说明时,应该按字当多个变量名在一个语句中说明时,应该按字 母顺序排列这些变量。母顺序排列这些变量。 n如果设计时使用了一个复杂的数据结构,则应如果设计时使用了一个复杂的数据结构,则应 该用注解说明用程序设计语言实现这个数据结该用注解说明用程序设计语言实现这个数据结 构的方法和特点。构的方法和特点

7、。 3. 语句构造语句构造 n不要为了节省空间而把多个语句写在同一行;不要为了节省空间而把多个语句写在同一行; n尽量避免复杂的条件测试;尽量避免复杂的条件测试; n尽量减少对尽量减少对“非非”条件的测试;条件的测试; n避免大量使用循环嵌套和条件嵌套;避免大量使用循环嵌套和条件嵌套; n利用括号使逻辑表达式或算术表达式的运算次利用括号使逻辑表达式或算术表达式的运算次 序清晰直观。序清晰直观。 4. 输入输出输入输出 n对所有输入数据都进行检验;对所有输入数据都进行检验; n检查输入项重要组合的合法性;检查输入项重要组合的合法性; n保持输入格式简单;保持输入格式简单; n使用数据结束标记,不

8、要要求用户指定数据的数目;使用数据结束标记,不要要求用户指定数据的数目; n明确提示交互式输入的请求,详细说明可用的选择或明确提示交互式输入的请求,详细说明可用的选择或 边界数值;边界数值; n当程序设计语言对格式有严格要求时,应保持输入格当程序设计语言对格式有严格要求时,应保持输入格 式一致;式一致; n设计良好的输出报表;设计良好的输出报表; n给所有输出数据加标志。给所有输出数据加标志。 5. 效率效率 n效率主要指处理机时间和存储器容量两个方面。效率主要指处理机时间和存储器容量两个方面。 n效率是性能要求,因此应该在需求分析阶段确效率是性能要求,因此应该在需求分析阶段确 定效率方面的要

9、求。定效率方面的要求。 n效率是靠好设计来提高的。效率是靠好设计来提高的。 n程序的效率和程序的简单程度是一致的,不要程序的效率和程序的简单程度是一致的,不要 牺牲程序的清晰性和可读性来不必要地提高效牺牲程序的清晰性和可读性来不必要地提高效 率。率。 效率问题:效率问题: n程序运行时间程序运行时间 n存储器效率存储器效率 n输入输出的效率输入输出的效率 (1) 程序运行时间程序运行时间 n写程序之前先简化算术的和逻辑的表达式;写程序之前先简化算术的和逻辑的表达式; n仔细研究嵌套的循环,以确定是否有语句可以从内层仔细研究嵌套的循环,以确定是否有语句可以从内层 往外移;往外移; n尽量避免使用

10、多维数组;尽量避免使用多维数组; n尽量避免使用指针和复杂的表;尽量避免使用指针和复杂的表; n使用执行时间短的算术运算;使用执行时间短的算术运算; n不要混合使用不同的数据类型;不要混合使用不同的数据类型; n尽量使用整数运算和布尔表达式。尽量使用整数运算和布尔表达式。 n在效率是决定性因素的应用领域,尽量使用有良好优在效率是决定性因素的应用领域,尽量使用有良好优 化特性的编译程序,以自动生成高效目标代码。化特性的编译程序,以自动生成高效目标代码。 (2) 存储器效率存储器效率 n使用能保持功能域的结构化控制结构,是提高使用能保持功能域的结构化控制结构,是提高 效率的好方法。效率的好方法。

11、n在微处理机中如果要求使用最少的存储单元,在微处理机中如果要求使用最少的存储单元, 则应选用有紧缩存储器特性的编译程序,在非则应选用有紧缩存储器特性的编译程序,在非 常必要时可以使用汇编语言。常必要时可以使用汇编语言。 n提高执行效率的技术通常也能提高存储器效率。提高执行效率的技术通常也能提高存储器效率。 提高存储器效率的关键同样是提高存储器效率的关键同样是“简单简单”。 (3) 输入输出的效率输入输出的效率 n如果用户为了给计算机提供输入信息或为了理如果用户为了给计算机提供输入信息或为了理 解计算机输出的信息,所需花费的脑力劳动是解计算机输出的信息,所需花费的脑力劳动是 经济的,那么人和计算

12、机之间通信的效率就高。经济的,那么人和计算机之间通信的效率就高。 因此,简单清晰同样是提高人机通信效率的关因此,简单清晰同样是提高人机通信效率的关 键。键。 例例1:注释:注释 /* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNT+TOTAL /* ADD MONTHLY-SALES TO ANNUAL-TOTAL */ TOTAL = AMOUNT+TOTAL 例例2:视觉组织:视觉组织空格空格 (A17)ANDNOT(B49)ORC (A17) AND NOT (B49) OR C 例例3:视觉组织:视觉组织移行移行 IF () THEN IF () THEN

13、ELSE ENDIF ELSE ENDIF 例例4:数据说明标准化:数据说明标准化 INTEGER size,length,width,cost,price INTEGER cost,length,price,size,width 例例5:一行一条语句:一行一条语句 FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF AJAT THEN T:=J; IF TI THEN BEGIN WORK:=AT; AT:=AI; AI:=WORK; END END; FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 T

14、O N DO IF AJAT THEN T:=J; IF TI THEN BEGIN WORK:=AT; AT:=AI; AI:=WORK; END END; 例例6:强调清晰性:强调清晰性 AI=AI+AT; AT=AI-AT; AI=AI-AT; WORK=AT; AT=AI; AI=WORK; 例例7:简单直接:简单直接 for (i=1; i=n; i+) for (j=1; j=n; j+) Vij=(i/j)*(j/i) for (i=1; i=n; i+) for (j=1; j=n; j+) if (i=j) Vij=1; else Vij=0; 例例8:避免不必要的转移:避免

15、不必要的转移 IF (XY) GOTO 30 IF (YZ) GOTO 50 SMALL=Z GOTO 70 30 IF (XZ) GOTO 60 AMALL=Z GOTO 70 50 SMALL=Y GOTO 70 60 SMALL=X 70 CONTINUE SMALL=X; IF (YSMALL) SMALL=Y; IF (Z=a) if (char=z) cout “This is a letter.”; else cout =a else cout “This is not a letter.”; 例例10:少用否定条件:少用否定条件 if ( !(char 9) ) if (cha

16、r = 0 total.input=total.valid=0; sum=0; DO WHILE valuei -999 AND total.input=minimum AND valuei0 THEN average=sum/total.valid; ELSE average=-999; ENDIF 例:求平均值过程例:求平均值过程 (1) 根据过程设计结果画出相应的流图。根据过程设计结果画出相应的流图。 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 9 87 10 1211 13 (2) 计算流图的环形复杂度。计算流图的环形复杂度。 V(G)=6 (3

17、) 确定线性独立路径的基本集合。确定线性独立路径的基本集合。 n所谓独立路径是指至少引入程序的一个新处理所谓独立路径是指至少引入程序的一个新处理 语句集合或一个新条件的路径。语句集合或一个新条件的路径。 n用流图术语描述,独立路径至少包含一条在定用流图术语描述,独立路径至少包含一条在定 义该路径之前不曾用过的边。义该路径之前不曾用过的边。 路径路径1:12101113 路径路径2:12101213 路径路径3:1231011(12)13 路径路径4:12345892 1011(12)13 路径路径5:12345689 21011(12)13 路径路径6:12345678 921011(12)1

18、3 (4) 设计可强制执行每条独立路径的测试用例。设计可强制执行每条独立路径的测试用例。 n应该选取测试数据使得在测试每条路径时都适应该选取测试数据使得在测试每条路径时都适 当地设置好了各个判定结点的条件。当地设置好了各个判定结点的条件。 n在测试过程中,执行每个测试用例并把实际输在测试过程中,执行每个测试用例并把实际输 出结果与预期结果相比较。出结果与预期结果相比较。 n一旦执行完所有测试用例,就可以确保程序中一旦执行完所有测试用例,就可以确保程序中 所有语句都至少被执行了一次,而且每个条件所有语句都至少被执行了一次,而且每个条件 都分别取过都分别取过true值和值和false值。值。 n某

19、些独立路径不能以独立的方式测试,这些路某些独立路径不能以独立的方式测试,这些路 径必须作为另一个路径的一部分来测试。径必须作为另一个路径的一部分来测试。 3. 循环测试循环测试 n循环测试是一种白盒测试技术,它专注于测试循环测试是一种白盒测试技术,它专注于测试 循环结构的有效性。循环结构的有效性。 n在结构化的程序中通常只有在结构化的程序中通常只有3种循环,即简单种循环,即简单 循环、串接循环和嵌套循环。循环、串接循环和嵌套循环。 (1) 简单循环简单循环 n应该使用下列测试集来测试简单循环,其中应该使用下列测试集来测试简单循环,其中n 是允许通过循环的最大次数。是允许通过循环的最大次数。 q

20、跳过循环。跳过循环。 q只通过循环一次。只通过循环一次。 q通过循环两次。通过循环两次。 q通过循环通过循环m次,其中次,其中mn-1。 q通过循环通过循环n-1,n,n+1次。次。 (2) 嵌套循环嵌套循环 n从最内层循环开始测试,其他循环都设置为最从最内层循环开始测试,其他循环都设置为最 小值。小值。 n对最内层循环使用简单循环测试方法,而使外对最内层循环使用简单循环测试方法,而使外 层循环的迭代参数取最小值,并为越界值或非层循环的迭代参数取最小值,并为越界值或非 法值增加一些额外的测试。法值增加一些额外的测试。 n由内向外,对下一个循环进行测试,但保持所由内向外,对下一个循环进行测试,但

21、保持所 有其他外层循环为最小值,其他嵌套循环为有其他外层循环为最小值,其他嵌套循环为 “典型典型”值。值。 n继续进行下去,直到测试完所有循环。继续进行下去,直到测试完所有循环。 (3) 串接循环串接循环 n如果串接循环的各个循环都彼此独立,则可以如果串接循环的各个循环都彼此独立,则可以 使用测试简单循环的方法来测试串接循环。使用测试简单循环的方法来测试串接循环。 n如果两个循环串接,而且第一个循环的循环计如果两个循环串接,而且第一个循环的循环计 数器值是第二个循环的初始值,则这两个循环数器值是第二个循环的初始值,则这两个循环 并不是独立的。当循环不独立时,建议使用测并不是独立的。当循环不独立

22、时,建议使用测 试嵌套循环的方法来测试串接循环。试嵌套循环的方法来测试串接循环。 7.7 黑盒测试技术黑盒测试技术 n黑盒测试着重测试软件功能,错误类型为:黑盒测试着重测试软件功能,错误类型为: q功能不正确或遗漏了功能;功能不正确或遗漏了功能; q界面错误;界面错误; q数据结构错误或外部数据库访问错误;数据结构错误或外部数据库访问错误; q性能错误;性能错误; q初始化和终止错误。初始化和终止错误。 n测试标准:测试标准: q测试用例尽可能少;测试用例尽可能少; q一个测试用例能指出一类错误。一个测试用例能指出一类错误。 7.7.1 等价划分等价划分 n等价划分是一种黑盒测试技术,把程序的

23、输入等价划分是一种黑盒测试技术,把程序的输入 域划分成若干个数据类,据此导出测试用例。域划分成若干个数据类,据此导出测试用例。 n等价划分法力图设计出能发现若干类错误的测等价划分法力图设计出能发现若干类错误的测 试用例,从而减少测试用例的数目。试用例,从而减少测试用例的数目。 n每类中的一个典型值在测试中的作用与这一类每类中的一个典型值在测试中的作用与这一类 中所有其他值的作用相同。中所有其他值的作用相同。 n使用等价划分法设计测试方案首先需要划分输使用等价划分法设计测试方案首先需要划分输 入数据的等价类。入数据的等价类。 n常常还需要分析输出数据的等价类,以便根据常常还需要分析输出数据的等价

24、类,以便根据 输出数据的等价类导出对应的输入数据等价类。输出数据的等价类导出对应的输入数据等价类。 等价类划分的启发式规则:等价类划分的启发式规则: n如果规定了输入值的范围,则可划分出一个有如果规定了输入值的范围,则可划分出一个有 效的等价类效的等价类(输入值在此范围内输入值在此范围内),两个无效的,两个无效的 等价类等价类(输入值小于最小值或大于最大值输入值小于最小值或大于最大值); n如果规定了输入数据的个数,则类似地也可划如果规定了输入数据的个数,则类似地也可划 分出一个有效的等价类和两个无效的等价类;分出一个有效的等价类和两个无效的等价类; n如果规定了输入数据的一组值,而且程序对不

25、如果规定了输入数据的一组值,而且程序对不 同输入值做不同处理,则每个允许的输入值是同输入值做不同处理,则每个允许的输入值是 一个有效的等价类,此外还有一个无效的等价一个有效的等价类,此外还有一个无效的等价 类类(任一个不允许的输入值任一个不允许的输入值); n如果规定了输入数据必须遵循的规则,则可以如果规定了输入数据必须遵循的规则,则可以 划分出一个有效的等价类划分出一个有效的等价类(符合规则符合规则)和若干个和若干个 无效的等价类无效的等价类(从各种不同角度违反规则从各种不同角度违反规则); n如果规定了输入数据为整型,则可以划分出正如果规定了输入数据为整型,则可以划分出正 整数、零和负整数

26、等整数、零和负整数等3个有效类;个有效类; n如果程序的处理对象是表格,则应该使用空表,如果程序的处理对象是表格,则应该使用空表, 以及含一项或多项的表。以及含一项或多项的表。 设计测试方案时两个步骤:设计测试方案时两个步骤: n设计一个新的测试方案以尽可能多地覆盖尚未设计一个新的测试方案以尽可能多地覆盖尚未 被覆盖的有效等价类,重复这一步骤直到所有被覆盖的有效等价类,重复这一步骤直到所有 有效等价类都被覆盖为止;有效等价类都被覆盖为止; n设计一个新的测试方案,使它覆盖一个而且只设计一个新的测试方案,使它覆盖一个而且只 覆盖一个尚未被覆盖的无效等价类,重复这一覆盖一个尚未被覆盖的无效等价类,

27、重复这一 步骤直到所有无效等价类都被覆盖为止。步骤直到所有无效等价类都被覆盖为止。 例例1: 在某一在某一PASCAL语言版本中规定:语言版本中规定: n标识符是由字母开头,后跟字母或数字的任意标识符是由字母开头,后跟字母或数字的任意 组合构成。组合构成。 n有效字符数为有效字符数为8个,最大字符数为个,最大字符数为80个。个。 n标识符必须先说明,再使用。标识符必须先说明,再使用。 n在同一说明语句中,标识符至少必须有一个。在同一说明语句中,标识符至少必须有一个。 选取选取9个测试用例,覆盖了所有的等价类:个测试用例,覆盖了所有的等价类: VAR x,T1234567:REAL; BEGIN

28、 x := 3.414; T1234567 := 2.732; . 覆盖覆盖(1), (2), (4), (8), (9), (12), (14) VAR :REAL; 覆盖覆盖(3) VAR x,:,:REAL; 覆盖覆盖(5) VAR T12345678:REAL; 覆盖覆盖(6) VAR T12345.:REAL; 覆盖覆盖(7) 多于多于80个字符个字符 VAR T$:CHAR; 覆盖覆盖(10) VAR GOTO:INTEGER; 覆盖覆盖(11) VAR 2T:REAL; 覆盖覆盖(13) VAR PAR:REAL; 覆盖覆盖(15) BEGIN . PAP := SIN (3.1

29、4 * 0.8) / 6; 例例2: 某城市的电话号码由某城市的电话号码由3个部分组成:个部分组成: n地区码地区码空白或空白或3位数字;位数字; n前缀前缀以大于等于以大于等于5开头的开头的4位数字;位数字; n后缀后缀4位数字。位数字。 输入条件输入条件有效等价类有效等价类无效等价类无效等价类 地区码地区码 (1) 空白空白 (2) 3位数字位数字 (5) 有非数字字符有非数字字符 (6) 少于少于3位数字位数字 (7) 多于多于3位数字位数字 前缀前缀 (3) 大于等于大于等于5开头开头 的的4位数字位数字 (8) 有非数字字符有非数字字符 (9) 少于少于4位数字位数字 (10) 多于

30、多于4位数字位数字 (11) 开头数字小于开头数字小于5 后缀后缀(4) 4位数字位数字 (12) 有非数字字符有非数字字符 (13) 少于少于4位数字位数字 (14) 多于多于4位数字位数字 测试用例:略测试用例:略 7.7.2 边界值分析边界值分析 n经验表明,处理边界情况时程序最容易发生错经验表明,处理边界情况时程序最容易发生错 误。例如,许多程序错误出现在下标、纯量、误。例如,许多程序错误出现在下标、纯量、 数据结构和循环等等的边界附近。数据结构和循环等等的边界附近。 n使用边界值分析方法设计测试方案首先应该确使用边界值分析方法设计测试方案首先应该确 定边界情况。选取的测试数据应该刚好

31、等于、定边界情况。选取的测试数据应该刚好等于、 刚刚小于和刚刚大于边界值。刚刚小于和刚刚大于边界值。 n通常设计测试方案时总是联合使用等价划分和通常设计测试方案时总是联合使用等价划分和 边界值分析两种技术。边界值分析两种技术。 7.7.3 错误推测错误推测 n不同类型不同特点的程序通常又有一些特殊的不同类型不同特点的程序通常又有一些特殊的 容易出错的情况。因此必须依靠测试人员的经容易出错的情况。因此必须依靠测试人员的经 验和直觉,从各种可能的测试方案中选出一些验和直觉,从各种可能的测试方案中选出一些 最可能引起程序出错的方案。最可能引起程序出错的方案。 n错误推测法在很大程度上靠直觉和经验进行

32、。错误推测法在很大程度上靠直觉和经验进行。 它的基本想法是列举出程序中可能有的错误和它的基本想法是列举出程序中可能有的错误和 容易发生错误的特殊情况,并且根据它们选择容易发生错误的特殊情况,并且根据它们选择 测试方案。测试方案。 7.8 调试调试 n调试是在测试发现错误之后排除错误的过程。调试是在测试发现错误之后排除错误的过程。 n软件错误的外部表现和它的内在原因之间可能软件错误的外部表现和它的内在原因之间可能 并没有明显的联系。并没有明显的联系。 n调试就是把症状和原因联系起来的尚未被人深调试就是把症状和原因联系起来的尚未被人深 入认识的智力过程。入认识的智力过程。 7.8.1 调试过程调试

33、过程 n调试发生在测试之后。调试发生在测试之后。 n调试过程从执行一个测试用例开始,评估测试调试过程从执行一个测试用例开始,评估测试 结果,如果发现实际结果与预期结果不一致,结果,如果发现实际结果与预期结果不一致, 则这种不一致就是一个症状,它表明在软件中则这种不一致就是一个症状,它表明在软件中 存在着隐藏的问题。存在着隐藏的问题。 n调试过程试图找出产生症状的原因,以便改正调试过程试图找出产生症状的原因,以便改正 错误。错误。 7.8.2 调试途径调试途径 有下列有下列3种调试途径可以采用:种调试途径可以采用: n蛮干法蛮干法 n回溯法回溯法 n原因排除法原因排除法 1. 蛮干法蛮干法 n蛮

34、干法可能是寻找软件错误原因的最低效的方蛮干法可能是寻找软件错误原因的最低效的方 法。其他方法都失败时才使用这种方法。法。其他方法都失败时才使用这种方法。 n这种方法印出内存的内容,激活对运行过程的这种方法印出内存的内容,激活对运行过程的 跟踪,在程序中到处都写上跟踪,在程序中到处都写上WRITE(输出)(输出) 语句。语句。 n更多情况下只会浪费时间和精力。必须首先进更多情况下只会浪费时间和精力。必须首先进 行周密的思考,有明确的目的,尽量减少无关行周密的思考,有明确的目的,尽量减少无关 信息的数量。信息的数量。 2. 回溯法回溯法 n回溯是一种相当常用的调试方法,当调试小程回溯是一种相当常用

35、的调试方法,当调试小程 序时这种方法是有效的。序时这种方法是有效的。 n具体做法是,从发现症状的地方开始,人工沿具体做法是,从发现症状的地方开始,人工沿 程序的控制流往回追踪分析源程序代码,直到程序的控制流往回追踪分析源程序代码,直到 找出错误原因为止。找出错误原因为止。 n随着程序规模扩大,应该回溯的路径数目也变随着程序规模扩大,应该回溯的路径数目也变 得越来越大,以至彻底回溯变成完全不可能了。得越来越大,以至彻底回溯变成完全不可能了。 3. 原因排除法原因排除法 n对分查找法对分查找法 n归纳法归纳法 n演绎法演绎法 对分查找法:对分查找法: n如果已经知道每个变量在程序内若干个关键点如果

36、已经知道每个变量在程序内若干个关键点 的正确值,则可以用赋值语句或输入语句在程的正确值,则可以用赋值语句或输入语句在程 序中点附近序中点附近“注入注入”这些变量的正确值,然后这些变量的正确值,然后 运行程序并检查所得到的输出。运行程序并检查所得到的输出。 n如果输出结果是正确的,则错误原因在程序前如果输出结果是正确的,则错误原因在程序前 半部分;反之,错误原因在程序后半部分。半部分;反之,错误原因在程序后半部分。 n对错误原因所在的那部分重复使用这个方法,对错误原因所在的那部分重复使用这个方法, 直到把出错范围缩小到容易诊断的程度为止。直到把出错范围缩小到容易诊断的程度为止。 归纳法:归纳法:

37、 n是从个别现象推断出一般性结论的思维方法。是从个别现象推断出一般性结论的思维方法。 n首先把和错误有关的数据组织起来进行分析,首先把和错误有关的数据组织起来进行分析, 以便发现可能的错误原因。以便发现可能的错误原因。 n然后导出对错误原因的一个或多个假设,并利然后导出对错误原因的一个或多个假设,并利 用已有的数据来证明或排除这些假设。用已有的数据来证明或排除这些假设。 演绎法:演绎法: n从一般原理或前提出发,经过排除和精化的过从一般原理或前提出发,经过排除和精化的过 程推导出结论。程推导出结论。 n首先设想出所有可能的出错原因,然后试图用首先设想出所有可能的出错原因,然后试图用 测试来排除

38、每一个假设的原因。测试来排除每一个假设的原因。 7.9 软件可靠性软件可靠性 7.9.1 基本概念基本概念 软件可靠性:软件可靠性: n程序在给定的时间间隔内,按照规格说明书的程序在给定的时间间隔内,按照规格说明书的 规定成功地运行的概率。规定成功地运行的概率。 软件的可用性:软件的可用性: n程序在给定的时间点,按照规格说明书的规定,程序在给定的时间点,按照规格说明书的规定, 成功地运行的概率。成功地运行的概率。 稳态可用性稳态可用性Ass: n如果在一段时间内,软件系统故障停机时间分如果在一段时间内,软件系统故障停机时间分 别为别为td1,td2,正常运行时间分别为,正常运行时间分别为tu

39、1, tu2,则系统的稳态可用性为:,则系统的稳态可用性为: Ass=Tup/(Tup+Tdown) n其中其中Tup=tui,Tdown=tdi 平均维修时间平均维修时间MTTR: n是修复一个故障平均需要用的时间,它取决于是修复一个故障平均需要用的时间,它取决于 维护人员的技术水平和对系统的熟悉程度,也维护人员的技术水平和对系统的熟悉程度,也 和系统的可维护性有重要关系。和系统的可维护性有重要关系。 平均无故障时间平均无故障时间MTTF: n是系统按规格说明书规定成功地运行的平均时是系统按规格说明书规定成功地运行的平均时 间,它主要取决于系统中潜伏的错误的数目,间,它主要取决于系统中潜伏的

40、错误的数目, 因此和测试的关系十分密切。因此和测试的关系十分密切。 Ass=MTTF/(MTTF+MTTR) 7.9.2 估算平均无故障时间的方法估算平均无故障时间的方法 1. 相关量的符号相关量的符号 nET测试之前程序中错误总数;测试之前程序中错误总数; nIT程序长度程序长度(机器指令总数机器指令总数); n测试测试(包括调试包括调试)时间;时间; nEd()在在0至至期间发现的错误数;期间发现的错误数; nEc()在在0至至期间改正的错误数。期间改正的错误数。 2. 基本假定基本假定 n在类似的程序中,单位长度里的错误数在类似的程序中,单位长度里的错误数ET/IT近近 似为常数。通常似

41、为常数。通常 0.510-2 ET/IT 210-2 n失效率正比于软件中剩余的错误数,而平均无失效率正比于软件中剩余的错误数,而平均无 故障时间故障时间MTTF与剩余的错误数成反比。与剩余的错误数成反比。 n假设发现的每一个错误都立即正确地改正了。假设发现的每一个错误都立即正确地改正了。 因此因此 Ec()Ed() 剩余的错误数为剩余的错误数为 Er()ETEc() 单位长度程序中剩余的错误数为单位长度程序中剩余的错误数为 r()ET/ITEc()/IT 3. 估算平均无故障时间估算平均无故障时间 n经验表明,平均无故障时间与单位长度程序中经验表明,平均无故障时间与单位长度程序中 剩余的错误数成反比,即剩余的错误数成反比,即 MTTF1/K(ET/ITEc()/IT) 其中其中K为常数,典型值是为常数,典型值是200。 n估算平均无故障时间的公式,可以评价软件测估算平均无故障时间的公式,可以评价软件测 试的进展情况。试的进展情况。 n由由(7.5)式可得式可得

温馨提示

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

评论

0/150

提交评论