软件工程:软件测试

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

测试假设有一个把数字串转变成整数的函数。运行程序的计算机字长16位,用二进制补码表示整数。这个函数是用Pascal语言编写的,它的说明如下:functionstrtoint(dstr:shortstr):integer;函数的参数类型是shortstr,它的说明是:typeshortstr=array[1..6]ofchar;被处理的数字串是右对齐的,也就是说,如果数字串比6个字符短,则在它的左边补空格。如果数字串是负的,则负号和最高位数字紧相邻(负号在最高位数字左边一位)。考虑到Pascal编译程序固有的检错功能,测试时不需要使用长度不等于6的数组做实在参数,更不需要使用任何非字符数组类型的实在参数。分析这个程序的规格说明,可以划分出如下等价类:有效输入的等价类有(1)1~6个数字字符组成的数字串(最高位数字不是零);(2)最高位数字是零的数字串;(3)最高位数字左邻是负号的数字串;无效输入的等价类有(4)空字符串(全是空格);(5)左部填充的字符既不是零也不是空格;(6)最高位数字右面由数字和空格混合组成;(7)最高位数字右面由数字和其他字符混合组成;(8)负号与最高位数字之间有空格;合法输出的等价类有(9)在计算机能表示的最小负整数和零之间的负整数;(10)零;(11)在零和计算机能表示的最大正整数之间的正整数;非法输出的等价类有(12)比计算机能表示的最小负整数还小的负整数;(13)比计算机能表示的最大正整数还大的正整数。因为所用的计算机字长16位,用二进制补码表示整数,所以能表示的最小负整数是-32768,能表示的最大正整数是32767。1.软件可靠性的定义对于软件可靠性有许多不同的定义,其中多数人承认的一个定义是:软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。7.9软件可靠性7.9.1基本概念在上述定义中包含的随机变量是时间间隔。显然,随着运行时间的增加,运行时出现程序故障的概率也将增加,即可靠性随着给定的时间间隔的加大而减少。按照IEEE的规定,术语“错误”的含义是由开发人员造成的软件差错(bug),而术语“故障”的含义是由错误引起的软件的不正确行为。在下面的论述中,将按照IEEE规定的含义使用这两个术语。2.软件的可用性通常用户也很关注软件系统可以使用的程度。一般说来,对于任何其故障是可以修复的系统,都应该同时使用可靠性和可用性衡量它的优劣程度。软件可用性的一个定义是:软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。可靠性和可用性之间的主要差别是,可靠性意味着在0到t这段时间间隔内系统没有失效,而可用性只意味着在时刻t,系统是正常运行的。因此,如果在时刻t系统是可用的,则有下述种种可能:在0到t这段时间内,系统一直没失效(可靠);在这段时间内失效了一次,但是又修复了;在这段时间内失效了两次修复了两次;……如果在一段时间内,软件系统故障停机时间分别为td1,td2,…,正常运行时间分别为tu1,tu2,…,则系统的稳态可用性为:Ass=Tup/(Tup+Tdown)(7.1)其中Tup=∑tui,Tdown=∑tdi如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则(7.1)式可以变成Ass=MTTF/(MTTF+MTTR)(7.2)平均维修时间MTTR是修复一个故障平均需要用的时间,它取决于维护人员的技术水平和对系统的熟悉程度,也和系统的可维护性有重要关系。平均无故障时间MTTF是系统按规格说明书规定成功地运行的平均时间,它主要取决于系统中潜伏的错误的数目,因此和测试的关系十分密切。软件的平均无故障时间MTTF是一个重要的质量指标,往往作为对软件的一项要求,由用户提出来。为了估算MTTF,首先引入一些有关的量。(meantimetofailure,平均失效前时间)1.符号在估算MTTF的过程中使用下述符号表示有关的数量:ET——测试之前程序中错误总数;IT——程序长度(机器指令总数);τ——测试(包括调试)时间;估算平均无故障时间的方法Ed(τ)——在0至τ期间发现的错误数;Ec(τ)——在0至τ期间改正的错误数。2.基本假定根据经验数据,可以作出下述假定。(1)在类似的程序中,单位长度里的错误数ET/IT近似为常数。美国的一些统计数字表明,通常0.5×10-2≤ET/IT≤2×10-2也就是说,在测试之前每1000条指令中大约有5~20个错误。(2)失效率正比于软件中剩余的(潜藏的)错误数,而平均无故障时间MTTF与剩余的错误数成反比。(3)此外,为了简化讨论,假设发现的每一个错误都立即正确地改正了(即,调试过程没有引入新的错误)。因此Ec(τ)=Ed(τ)剩余的错误数为Er(τ)=ET-Ec(τ)(7.3)单位长度程序中剩余的错误数为εr(τ)=ET/Ir-Ec(τ)/IT(7.4)3.估算平均无故障时间经验表明,平均无故障时间与单位长度程序中剩余的错误数成反比,即MTTF=1/[K(ET/IT-Ec(τ)/IT)](7.5)其中K为常数,它的值应该根据经验选取。美国的一些统计数字表明,K的典型值是200。估算平均无故障时间的公式,可以评价软件测试的进展情况。此外,由(7.5)式可得Ec=ET-IT/(K×MTTF)(7.6)因此,也可以根据对软件平均无故障时间的要求,估计需要改正多少个错误之后,测试工作才能结束。4.估计错误总数的方法程序中潜藏的错误的数目是一个十分重要的量,它既直接标志软件的可靠程度,又是计算软件平均无故障时间的重要参数。显然,程序中的错误总数ET与程序规模、类型、开发环境、开发方法论、开发人员的技术水平和管理水平等都有密切关系。下面介绍估计ET的两个方法。(1)植入错误法使用这种估计方法,在测试之前由专人在程序中随机地植入一些错误,测试之后,根据测试小组发现的错误中原有的和植入的两种错误的比例,来估计程序中原有错误的总数ET。假设人为地植入的错误数为Ns,经过一段时间的测试之后发现ns个植入的错误,此外还发现了n个原有的错误。如果可以认为测试方案发现植入错误和发现原有错误的能力相同,则能够估计出程序中原有错误的总数为N^=n/ns×Ns(7.7)其中N^即是错误总数ET的估计值。(2)分别测试法植入错误法的基本假定是所用的测试方案发现植入错误和发现原有错误的概率相同。但是,人为地植入的错误和程序中原有的错误可能性质很不相同,发现它们的难易程度自然也不相同,因此,上述基本假定可能有时和事实不完全一致。如果有办法随机地把程序中一部分原有的错误加上标记,然后根据测试过程中发现的有标记错误和无标记错误的比例,估计程序中的错误总数,则这样得出的结果比用植入错误法得到的结果更可信一些。为了随机地给一部分错误加标记,分别测试法使用两个测试员(或测试小组),彼此独立地测试同一个程序的两个副本,把其中一个测试员发现的错误作为有标记的错误。具体做法是,在测试过程的早期阶段,由测试员甲和测试员乙分别测试同一个程序的两个副本,由另一名分析员分析他们的测试结果。用τ表示测试时间,假设τ=0时错误总数为B0;τ=τ1时测试员甲发现的错误数为B1;τ=τ1时测试员乙发现的错误数为B2;τ=τ1时两个测试员发现的相同错误数为bc。如果认为测试员甲发现的错误是有标记的,即程序中有标记的错误总数为B1,则测试员乙发现的B2个错误中有bc个是有标记的。假定测试员乙发现有标记错误和发现无标记错误的概率相同,则可以估计出测试前程序中的错误总数为B0^=B2/bcB1(7.8)使用分别测试法,在测试阶段的早期,每隔一段时间分析员分析两名测试员的测试结果,并且用(7.8)式计算B0^。如果几次估算的结果相差不多,则可用B0^的平均值作为ET的估计值。此后一名测试员可以改做其他工作,由余下的一名测试员继续完成测试工作,因为他可以继承另一名测试员的测试结果,所以分别测试法增加的测试成本并不太多。练习7-10在测试一个长度为48000条指令的程序时,第一个月由甲、乙两名测试员各自独立测试这个程序。经一个月测试后,甲发现并改正20个错误,使MTTF达到8h。与此同时,乙发现24个错误,其中6个甲也发现了。以后由甲一个人继续测试这个程序。问:(1)刚开始测试时程序中总共有多少个潜藏的错误?(2)为使MTTF达到240h,必须再改正多少个错误?还需用多长测试时间?简答(1)采用了分别测试法,因此,可以估算出刚开始测试时程序中错误总数为:ET=24/6×20=80(2)因为8=48000÷[K(ET-20)]=48000÷(60K),所以K=100因为240=48000÷[100(80-EC)]所以EC=78为了使平均无故障时间达到240H,总共需要改正78个错误,测试员甲在与乙分别测试时已经改正了20个错误,因此,还需再改正58个错误。

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功