收藏 分享(赏)

软件工程 第7章1 ppt.ppt

上传人:oil007 文档编号:3284771 上传时间:2018-10-10 格式:PPT 页数:50 大小:742KB
下载 相关 举报
软件工程 第7章1  ppt.ppt_第1页
第1页 / 共50页
软件工程 第7章1  ppt.ppt_第2页
第2页 / 共50页
软件工程 第7章1  ppt.ppt_第3页
第3页 / 共50页
软件工程 第7章1  ppt.ppt_第4页
第4页 / 共50页
软件工程 第7章1  ppt.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

1、1. 黑盒测试:又叫功能测试。 2. 黑盒测试主要用于测试过程的后期,而白盒测试技术主要应用在测试过程的早期。 3. 黑盒测试,力图发现下述类型的错误:1)功能不正确或遗漏了功能 2)界面错误3)数据结构错误或外部数据库访问错误4)性能错误5)初始化和终止错误,7.7 黑盒测试技术,4. 应用黑盒测试技术,能够设计出满足下述标准的测试用例集:1)所设计出的测试用例能够减少为达到合理测试所需要设计的测试用例的总数;2)所设计出的测试用例能够告诉我们,是否存在某些类型的错误,而不是仅仅指出与特定测试相关的错误是否存在。,7.7 黑盒测试技术,1. 等价划分法 2. 边界值分析法 3. 错误推测法,

2、7.7 黑盒测试技术,1. 等价划分技术:把程序的输入域划分成若干个数据类,据此导出测试用例。 2. 等价划分法的目的:力图设计出能发现若干类程序错误的测试用例,从而减少必须设计的测试用例的数目。 3. 合理假设:如果把所有可能的输入数据划分成若干个等价类,则可合理地做出下述假定:每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。 4. 结论:可以从每个等价类中只取一组数据作为测试数据。这样选取的测试数据最有代表性,最可能发现程序中的错误。,7.7.1 等价划分,5. 使用等价划分法设计测试方案的步骤: 1)需要划分输入数据的等价类;为此需要研究程序的功能说明,从而确定输入数据的

3、有效等价类和无效等价类。 2)设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤直到所有有效等价类都被覆盖为止; 3)设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。, 划分等价类的启发式规则:1)如果规定了输入值的范围,则可划分出一个有效的等价类(输入值在此范围内),两个无效的等价类(输入值小于最小值或大于最大值);2)如果规定了输入数据的个数,则类似地也可以划分出一个有效的等价类和两个无效的等价类;3)如果规定了输入数据的一组值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个有效的等价类,此

4、外还有一个无效的等价类(任一个不允许的输入值);,4)如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类(符合规则)和若干个无效的等价类(从各种不同角度违反规则); 5)如果规定了输入数据为整型,则可以划分出正整数、零和负整数等3个有效类; 6)如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。,总结: 1)为了正确划分等价类,一:要注意积累经验,二:要正确分析被测程序的功能。 2)在划分无效的等价类时还必须考虑编译程序的检错功能。 3)这些启发式规则也同样适用于输出数据。,例1:设计下程序的测试方案,假设有一个把数字 字串转变成整数的函数strtoint。运行程序的

5、计算 机字长16位,用二进制补码表示整数。这个函数 是用Pascal语言编写的,它的说明如下: function strtoint (dstr: shortstr): integer; 函数的参数类型是 shortstr,它的说明是: type shortstr=array16 of char; 几点说明: 1)被处理的数字串是右对齐的; 2)如果数字串比6个字符短,则在它的左边补空格; 3)如果数字串是负的,则负号和最高位数字紧相邻(负号在最高位数字左边一位); 4)考虑到pascal编译程序的固有的检错功能;,分析这个程序的规格说明,可划分出如下等价类: 有效输入的等价类: 1) 16个数

6、字字符组成的数字串(最高位数字不是零); 2) 最高位数字是零的数字串; 3) 最高位数字左邻是负号的数字串; 无效输入的等价类: 4) 空字符串(全是空格); 5) 左部填充的字符既不是零也不是空格; 6) 最高位数字右面由数字和空格混合组成; 7) 最高位数字右面由数字和其他字符混合组成; 8) 负号与最高位数字之间有空格;, 合法输出的等价类有: (9) 在计算机能表示的最小负整数和零之间的负整数; (10) 零; (11) 在零和计算机能表示的最大正整数之间的正整数; 非法输出的等价类有: (12) 比计算机能表示的最小负整数还小的负整数; (13) 比计算机能表示的最大正整数还大的正

7、整数。,根据上面划分出的等价类,可以设计出下述测试方案: (1) 16个数字组成的数字串,输出是合法的正整数; 输入: 1 预期的输出:1 (2) 最高位数字是零的数字串,输出是合法的正整数; 输入:000001 预期的输出:1 (3) 负号与最高位数字紧相邻,输出是合法的负整数; 输入:-00001 预期的输出:-1 (4) 最高位数字是零,输出也是零; 输入:000000 预期的输出:0,(5) 太小的负整数; 输入:-47561 预期的输出:“错误无效输入” (6) 太大的负整数; 输入:132767 预期的输出:“错误无效输入” (7) 空字符串; 输入: 预期的输出:“错误没有数字”

8、 (8) 字符串左部既不是零也不是空格; 输入: 1 预期的输出:“错误填充错”,(9) 最高位数字后面有空格; 输入: 1 2 预期的输出:“错误无效输入” (10)最高位数字后面有其他字符; 输入: 12 预期的输出:“错误无效输入” (11)负号与最高位数字之间有空格; 输入:- 12 预期的输出:“错误负号位置错” 。,1. 程序运行在边界情况时最容易发生错误。 因此,设计使程序运行在边界情况附近的测试方案,暴露出程序错误的可能性更大一些。2. 使用边界值分析方法设计测试方案首先应该确定边界情况;通常输入等价类和输出等价类的边界按照边界值分析法,应该选取刚好等于、稍小于和稍大于等价类边

9、界值的数据作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。 3. 通常设计测试方案时总是联合使用等价划分和边界值分析两种技术。,7.7.2 边界值分析,(12) 能输出刚好等于最小值的负整数; 输入:-32768 预期的输出:“-32768” (13) 能输出刚好等于最大值的正整数; 输入:32767 预期的输出:“32767” 原来用等价划分法设计出来的测试方案5最好改为: (14) 使输出刚刚小于最小的负整数; 输入:-32769 预期的输出:“错误无效输入” 原来的测试方案6最好改为: (15) 使输出刚刚大于最大的正整数; 输入:32768 预期的输出:“错误无效输入

10、”,7-5 某图书馆有一个使用CRT终端的信息检索系统,该系统有下列4个基本检索命令要求: (1) 设计测试数据以全面测试系统的正常操作; (2) 设计测试数据以测试系统的非正常操作。,答:(1)测试系统正常操作的测试数据1) 顺序执行下列3个命令:Browse( keyword )Select( L )Display( N ) 其中,keyword是正确的关键字;L是执行命令browse后屏幕上显示的约20个行号中的一个;N是执行命令S后列出的索引号中的一个。2)顺序执行下列2个命令: Find( name )Display( N )其中,name是已经的作者姓名;N是执行命令find后列出

11、的索引号中的一个。针对若干个不同的name重复执行上述命令序列。,(2)测试系统非正常操作的测试数据1)用过长的关键字作为命令browse的参数,例如:b(reliability software and hardware combined )预期的输出:系统截短过长的关键字,例如上述命令中的关键字可能被截短为:reliability software2)用不正确的关键字作为命令browse的参数,例如:b( aardvark) 预期的输出:显示出最接近的匹配结果,3)用比执行命令browse后列出的最大行号大1的数作为命令s的参数,预期的输出:“命令s的参数不在行号列表中”4)用数字和标点符

12、号作为命令browse和命令find的参数, 预期的输出:“参数类型错”,5)用字母字符作为命令select和命令display的参数,预期的输出:“参数类型错” 6)用0和负数作为命令select和命令display的参数,预期的输出:“参数类型错” 7)命令顺序错,例如,没执行命令b就执行命令s,或没执行命令s就执行命令d预期的输出:“命令顺序错” 8)命令语法错,例如,遗漏命令名b、s、d或f;或命令参数没用圆括号括起来预期的输出:“命令语法错” 9)命令参数空,例如,b()、s()、d()或f()预期的输出:系统提供默认参数或给出出错信息 10)使用拼错了的作者姓名作为参数f的参数预期

13、的输出:“找不到这位作者的著作”。,1. 等价划分法和边界值分析法都只孤立地考虑各个输入数据的测试功效,而没有考虑多个输入数据的组合效应,可能会遗漏了输入数据易于出错的组合情况。 2. 错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。,7.7.3 错误推测, 调试是在测试发现错误之后排除错误的过程。 软件工程师在评估测试结果时,往往仅面对着软件错误的症状,也就是说,软件错误的外部表现和它的内在原因之间可能并没有明显的联系。 调试就是把症状和原因联系起来的尚未被人深入认识的智力过程。 7.8.1 调试过程 调试不是

14、测试,但是它总是发生在测试之后。 调试是软件开发过程中最艰巨的脑力劳动。,7.8 调试,图7.8 调试过程, 调试的目标都是寻找软件错误的原因并改正错 误。这需要系统地分析、直觉和运气,才能实现上述目标。 一般,有下列3种调试途径可以采用: 1. 蛮干法2. 回溯法3. 原因排除法,7.8.2 调试途径,1. 蛮干法 按照“让计算机自己寻找错误”的策略,在这样生成的信息海洋的某个地方发现错误原因的线索。 蛮干法可能是寻找软件错误原因的最低效的方法。仅当所有其他方法都失败了的情况下,才应该使用这种方法。,7.8.2 调试途径,2. 回溯法 回溯是一种相当常用的调试方法; 具体做法是,从发现症状的

15、地方开始,人工沿程序的控制流往回追踪分析源程序代码,直到找出错误原因为止; 当调试小程序时这种方法是有效的,但是,随着程序规模扩大,应该回溯的路径数目也变得越来越大,以至彻底回溯变成完全不可能了。,3. 原因排除法 1) 对分查找法 2) 归纳法 3) 演绎法,3. 原因排除法 1) 对分查找法 基本思路: 如果已经知道每个变量在程序内若干个关键点的正确值,则可以用赋值语句或输入语句在程序中点附近“注入”这些变量的正确值,然后运行程序并检查所得到的输出。如果输出结果是正确的,则错误原因在程序的前半部分;反之,错误原因在程序的后半部分。对错误原因所在的那部分再重复使用这个方法,直到把出错范围缩小

16、到容易诊断的程度为止。,2) 归纳法 是从个别现象推断出一般性结论的思维方法。 使用这种方法调试程序时,首先把和错误有关的数据组织起来进行分析,以便发现可能的错误原因。 然后导出对错误原因的一个或多个假设,并利用已有的数据来证明或排除这些假设。 如果已有的数据尚不足以证明或排除这些假设,则需设计并执行一些新的测试用例,以获得更多的数据。,3) 演绎法 从一般原理或前提出发,经过排除和精化的过程推导出结论。 采用这种方法调试程序时,首先设想出所有可能的出错原因,然后试图用测试来排除每一个假设的原因。 如果测试表明某个假设的原因可能是真的原因,则对数据进行细化以准确定位错误。 总结: 上述3种调试

17、途径都可以使用调试工具辅助完成, 如果用遍了各种调试方法和调试工具却仍然找不出错误原因,则应该向同行求助。, 在动手改正错误之前,软件工程师应该仔细考虑下述3个问题:1) 是否同样的错误也在程序其他地方存在? 2) 将要进行的修改可能会引入的“下一个错误”是什么?3) 为防止今后出现类似的错误,应该做什么?,1. 开发软件的目的是? 2. 如何保证软件的质量? 3. 测试阶段的根本目标是? 4. 什么是软件的可靠性? 5. 要经过多少测试,软件才能达到所要求的可靠程度?,7.9 软件可靠性,1. 软件可靠性的定义 软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。 软件

18、的可用性 软件的可用性:即系统可以使用的程度。 软件可用性的一个定义是: 软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。,7.9 软件可靠性 7.9.1 基本概念, 一般来说,对于任何其故障是可以修复的系统,都应该同时使用可靠性和可用性衡量它的优劣程度。 故障:指的是由错误引起的软件的不正确行为。 错误:由开发人员造成的软件差错。 3. 可靠性和可用性之间的主要差别是:1)可靠性意味着在 0 到 t 这段时间间隔内系统没有失效,2)而可用性只意味着在某个时刻 t,系统是正常运行的,3)因此,如果在时刻 t 系统是可用的,则有下述种种可能: 在0到 t 这段时间内,系统

19、一直没失效(可靠); 在这段时间内失效了一次,但是又修复了; 在这段时间内失效了两次修复了两次;,4. 稳态可用性如果在一段时间内,软件系统故障停机时间分别为td1, td2,正常运行时间分别为tu1,tu2,则系统的稳态可用性Ass为:Ass=Tup/(Tup + Tdown), (7.1) 其中:Tup = tui,Tdown =tdi。 5. 平均无故障时间 MTTF 是系统按规格说明书的规定成功运行的平均时间, 它主要取决于系统中潜伏的错误的数目。 6. 平均维修时间 MTTR 是修复一个故障平均需要用的时间, Ass=MTTF/(MTTF+MTTR) (7.2),1. 符号 在估算M

20、TTF的过程中使用下述符号表示有关的 数量: ET 测试之前程序中错误总数; IT 程序长度(机器指令总数); 测试(包括调试)时间; Ed() 在0至期间发现的错误数; Ec() 在0至期间改正的错误数。,7.9.2 估算平均无故障时间的方法,2. 基本假定根据经验数据,可以作出下述假定。 1) 在类似的程序中,单位长度里的错误数 ET / IT近似为常数。美国的一些统计数字表明,通常0.510-2ET / IT210-2 2) 失效率正比于软件中剩余的(潜藏的)错误数,而平均无故障时间MTTF与剩余的错误数成反比。 3) 为了简化讨论,假设发现的每一个错误都立即正确地改正(即,调试过程没有

21、引入新的错误)。因此: Ec() = Ed(),剩余的错误数为:Er() = ET - Ec() ,单位长度程序中剩余的错误数为:r( ) = ET / Ir - Ec() / IT,3. 估算平均无故障时间 经验表明,平均无故障时间与单位长度程序中剩余的错误数成反比,即:MTTF = 1/ K ( ET / IT Ec () / I T), 其中K为常数,K的典型值是200。 估算平均无故障时间的公式,可以评价软件测试的进展情况。由上式可得Ec = ET - IT/(K MTTF), 因此,也可以根据对软件平均无故障时间的要求,估计需要改正多少个错误之后,测试工作才能结束。,7-9 如对一个

22、长度为100000条指令的程序进行集成测试期间记录下下面的数据: (a) 集成测试开始,没有发现错误。 (b)经过160小时的测试,总共改正100个错误,此时,MTTF=0.4h (c) 又经过160小时的测试,总共改正300个错误,此时,MTTF=2h根据上列数据完成下列各题: (1) 估计程序中的错误总数; (2) 为使MTTF达到10h,必须测试和调试这个程序多长时间? (3) 画出MTTF和测试时间之间的函数关系线。,7-8 对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第二个月改正了10个

23、错误),MTTF=15h。要求:(1) 根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间的关系曲线。在画这条曲线时做了什么假设?(2) 为做到MTTF=100h,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?,4. 估计错误总数的方法(1) 植入错误法(2) 分别测试法,4. 估计错误总数的方法 (1) 植入错误法 使用这种估计方法,在测试之前由专人在程序中随机地植入一些错误; 测试之后,根据测试小组发现的错误中原有的和植入的两种错误的比例,来估计程序中原有错误的总数ET。 假设人为地植入的错误数为Ns,经过一段时间的测试

24、之后发现ns个植入的错误,此外还发现了n个原有的错误。如果可以认为测试方案发现植入错误和发现原有错误的能力相同,则能够估计出程序中原有错误的总数为:N = n / ns Ns 其中N即是错误总数 E T 的估计值。,(2) 分别测试法 为了随机地给一部分错误加标记,分别测试法使用两个测试员(或测试小组),彼此独立地测试同一个程序的两个副本,把其中一个测试员发现的错误作为有标记的错误。 具体做法是,在测试过程的早期阶段,由测试员甲和测试员乙分别测试同一个程序的两个副本,由另一名分析员分析他们的测试结果。用表示测试时间,假设:= 0 时错误总数为 B0;=1 时测试员甲发现的错误数为 B1;=1

25、时测试员乙发现的错误数为 B2;=1 时两个测试员发现的相同错误数为 bc。, 如果认为测试员甲发现的错误是有标记的,即程序中有标记的错误总数为 B1,则测试员乙发现的B2个错误中有 bc个是有标记的。假定测试员乙发现有标记错误和发现无标记错误的概率相同,则可以估计出测试前程序中的错误总数为:B0 = B2 / bc B1 使用分别测试法,在测试阶段的早期,每隔一段时间分析员分析两名测试员的测试结果,并且用上式计算 B0。如果几次估算的结果相差不多,则可用 B0的平均值作为 ET 的估计值。,7-10 在测试一个长度为24000条指令的程序时,第 一个月由甲、乙两名测试员各自独立测试这个程序。

26、 经一个月测试后,甲发现并改正20个错误,使MTTF 达到10h。与此同时,乙发现24个错误,其中6个甲 也发现了。以后由甲一个人继续测试这个程序。问: (1) 刚开始测试时程序中总共有多少个潜藏的错误? (2) 为使MTTF达到60h,必须再改正多少个错误?还需用多长测试时间? (3) 画出MTTF与集成测试时间之间的函数关系曲线。,1. 实现包括编码和测试两个阶段。 2. 编码是在对软件进行了总体设计和详细设计之后进行的。程序的质量基本上取决于设计的质量。 3. 软件测试仍然是保证软件可靠性的主要手段。 测试阶段的根本任务是发现并改正软件中的错误; 软件测试是软件开发过程中最艰巨最繁重的任

27、务; 大型软件的测试应该分阶段地进行,通常至少分为单元测试、集成测试和验收测试3个基本阶段; 4. 设计测试方案是测试阶段的关键技术问题。 基本目标是选用最少量的高效测试数据,做到尽可能完善的测试,从而尽可能多地发现软件中的问题。,小结,5. 白盒测试和黑盒测试是软件测试的两类基本方法: 设计白盒测试方案的技术主要有,逻辑覆盖和控制结构测试; 设计黑盒测试方案的技术主要有,等价划分、边界值分析和错误推测。 6. 软件的可靠性 7. 软件的平均无故障时间,7-8 对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25

28、个错误(第二个月改正了10个错误),MTTF=15h。要求:(1) 根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间的关系曲线。在画这条曲线时做了什么假设?(2) 为做到MTTF=100h,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?,7-9 如对一个长度为100000条指令的程序进行集成测试期间记录下下面的数据: (a) 集成测试开始,没有发现错误。 (b)经过160小时的测试,总共改正100个错误,此时,MTTF=0.4h (c) 又经过160小时的测试,总共改正300个错误,此时,MTTF=2h根据上列数据完成下列各题: (1) 估计程序中的错误总数; (2) 为使MTTF达到10h,必须测试和调试这个程序多长时间? (3) 画出MTTF和测试时间之间的函数关系线。,7-10 在测试一个长度为24000条指令的程序时,第 一个月由甲、乙两名测试员各自独立测试这个程序。 经一个月测试后,甲发现并改正20个错误,使MTTF 达到10h。与此同时,乙发现24个错误,其中6个甲 也发现了。以后由甲一个人继续测试这个程序。问: (1) 刚开始测试时程序中总共有多少个潜藏的错误? (2) 为使MTTF达到60h,必须再改正多少个错误?还需用多长测试时间? (3) 画出MTTF与集成测试时间之间的函数关系曲线。,

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

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报