您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 软件测试第三章系统测试设计与报告
第3章系统测试设计与报告3.1什么是测试用例所谓的测试用例设计就是将软件测试的行为活动,作一个科学化的组织归纳。软件测试是有组织性、步骤性和计划性的,而设计软件测试用例的目的,就是为了能将软件测试的行为转换为可管理的模式。软件测试是软件质量管理中最实际的行动,同时也是耗时最多的一项。基本时间因素的考虑,软件测试行为必须能够加以量化,才能进一步让管理层掌握所需要的测试过程,而测试用例就是将测试行为具体量化的方法之一。简单的说,测试用例就是设计一个情况,软件程序在这种情况下,必须能够看到程序设计的执行结果。如果程序在这种情况下不能正常运行,而且这种问题会重复发生,那就表示软件程序人员已经测出软件有缺陷,这时候就必须将这个问题标识出来,并且输入到问题跟踪系统内(如果有),通知开发人员。软件案件开发人员接到通知后,将这个问题修改完成于下一个测试版本内,软件测试工程师取得最新的测试版本后,必须利用同一个用例来测试这个问题。确保该问题已修改完成。我们不可能进行穷举测试,为了节约时间和资源、提高测试效率,必须要从数量极大的可用测试数据中精心挑选出具有代表性或特殊性的测试数据进行测试。系统测试用例需要预先写在系统测试设计文档中,该文档应该详细描述每一个测试用例的情况,比如测试环境、运行测试之前的数据、测试操作的详细步骤、测试操作之后的数据、测试操作之后期待的结果等。测试人员开始测试之前首先应该将项目发布在服务器上,在拿到测试设计书之后,按照测试设计书上的要求将数据导入到数据库中,然后严格按操作描述进行测试操作,操作完成之后检查运行结果和测试设计书上描述的期待结果是否一致,如果一直则判定为测试通过,不一致则判定测试未通过。不管是测试通过还是未通过,都需要将测试的整个过程(包括测试操作过程和运行结果)进行抓图保存以作为系统测试的证据。测试通过的证据可以证明测试的用例已经测试完成,在回归测试之前不需要再关心了。而测试未通过的证据则会提交给程序员用于在修改程序的时候重现程序缺陷。为了方便查阅,一般系统测试设计书和报告是整合在一个文档中的。使用测试用例的好处主要体现在以下几个方面:在开始实施测试之前设计好测试用例,可以避免盲目测试并提高测试效率。测试用例的使用令软件测试的实施重点突出、目的明确。在软件版本更新后只需要修正少部分的测试用例便可展开测试工作,降低工作强度,缩短项目周期。功能模块的通用化和复用化使软件易于开发,而测试用例的通用化和复用化则会使软件测试易于开展,并随着测试用例的不断精化其效率也不断攀升。3.2等价类划分等价划分是一种最为典型的黑盒测试设计方法,使用这一方法时,完全不用考虑程序的内部结构,只根据对升序的要求和说明,即需求规格说明书。我们必须仔细分析和推敲说明书的各项需求,特别是功能需求。把说明中对输入的需求和输出的需求区别开来加以分解。由于穷举测试工作量太大,以致于无法实际完成,促使我们在大量的可能数据中选取其中一部分作为测试用例。例如,在不了解等价划分的前提下,我们做计算器程序的加法测试时,测试了1+1、1+2、1+3和1+4之后,还有必要测试1+5和1+6吗?能否放心地认为它们是正确的?我们感觉1+5和1+6与前面的1+1、1+2都是很类似的简单加法。等级划分的方法是把程序的域划分为若干部分,然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的用途等价与这一类中的其他值。也就是说,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误(除非等价类中的某些例子属于另一个等价类,因为几个等价类是可能相交的),使用这一方法设计测试用例,首先必须在分析需求规格说明的基础上划分等价类列出等价类表。3.2.1划分等价类和列出等价类表类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误时等效的。并合地假定:测试某等价类的代表值就等于对这一类其他值的测试。因此,可以把全部输入数据合理的划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据取得较少的测试结果。等价划分有两种不同的情况:有效等价类和无效等价类。有效等价类:指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检查程序是否实现了规格说明中所规定的功能和性能。无效等价类:与有效等价类的定义恰巧相反。设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接受合理的数据,也要能够经受意外的考验。这样的测试才能确保软件更高的可能性。下面给出几条确定等价类的原则:在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。在输入条件规定输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。在条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。在规定了输入数据必须遵守的规则情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。在确知已划分的等价类中,各元素在程序处理中的方式不同情况下,则应再将该等价划分类进一步划分为更小的等价类。在确立等价类之后,建立等价类表,列出所有划分出的等价类如表所示。表3-1等价类示例输入条件有效等价类无效等价类………根据已列出的等价类表,按以下步骤确定测试用例并选取相应的数据:为每个等价类规定一个唯一的编号。设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复第一步,最后使得所有有效等价类均被测试用例所覆盖。设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使所有无效等价类均被覆盖。在寻找等价区间时,想办法把软件的相似输入、输出、操作分成组。这些就是等价区间。比如,在两个数相加用例中,测试1+15和1+99999999似乎有点不同。这是一种直觉,一个是普通的加法,而另一个似乎有些特殊,这个直觉是对的。程序对1和最大数值相加的处理和对两个小一些的数值相加的处理所有不同。后者必须处理溢出情况。因为软件操作可能不同,所以这两个用例属于不同的等价区分。如果具有编程经验,就可能会想到更多可能导致软件操作不同的“特殊”数值。如果不是程序员,也不用担心,你很快就会学到这种技术,无须了解代码细节就可以运用。示例:根据下面给出的规格说明,利用等价划分的方法,给出足够的测试用例。“一个程序读入3个整数,把这3个整数值看作一个三角形的3条边的长度值。这个程序要打印信息,说明这个三角形是等边的、等腰的、非等腰的”。我们可以设三角形的3条边分别为A、B、C。如果它们能够构成三角形的3条边,必须满足:A0、B0、C0,且A+BC、B+CA、A+CB。如果是等腰的,还要判断A=B或B=C或A=C。如果是等边的,则需要判断是否A=B且B=C且A=C。表3-2等价表输入条件有效等价类无效等价类是否是三角形3条边a0(1)a=0(7)b0(2)b=0(8)a0(3)c=0(9)a+bc(4)a+b=c(10)b+ca(5)b+c=a(11)a+cb(6)a+c=b(12)是否是等腰三角形a=b(13)abandbcandca(16)b=c(14)c=a(15)是否是等边三角形a=bandb=candc=a(17)ab(18)bc(19)ca(20)设计测试用例,输入顺序是[A,B,C],如表3-3所示。表3-3测试用例序号[A,B,C]覆盖等价类输出13,4,51,2,3,4,5,6一般三角形20,1,27不能构成三角形31,0,2841,2,0951,2,31061,3,21173,1,21283,3,41,2,3,4,5,6,13等腰三角形93,4,41,2,3,4,5,6,14103,4,31,2,3,4,5,6,15113,4,51,2,3,4,5,6,16非等腰三角形123,3,31,2,3,4,5,6,17等边三角形序号[A,B,C]覆盖等价类输出133,4,51,2,3,4,5,6非等边三角形143,4,31,2,3,4,5,6,14,18153,3,41,2,3,4,5,6,13,20等价分配的目标是把可能的测试用例组合缩减到仍然足以满足软件测试需求为止。因为选择了不完全测试,就会冒一定的风险,所以必须仔细选择分类。关于等价分配最后要讲的一点是,这样做有可能不客观。科学有时也是一门艺术,测试同一个复杂程序的两个测试员,可能会制定出两组不同的等价区分。只要审查等价区间的人都认为它们足以覆盖测试对象就可以了。3.3边界值分析法人们用长期的测试工作经验得知,大量的错误时发生在输入或输出的范围的边界上的,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。例如,在做三角形计算时,要输入三角形的3个边长A、B、C。这3个数值应当满足A0、B0、C0,且A+BC、B+CA、A+CB,才能构成三角形。但如果把6个不等式中的任何一个大于号“”错写成大于或等于“≥”,那就不能构成三角形。总是恰恰出现在容易被疏忽的边界附近。这里所说的边界值是指相当于输入等价类和输出等价类而言。稍高于其边界及稍低于其边界的一些特殊情况。3.3.1边界条件我们可以想象一下,如果在悬崖边可以自信地安全行走,平地就不在话下了。如果软件在能力达到极限时能够运行,那么在正常情况下一般就不会出现什么问题。边界条件是特殊的情况,因为编程从根本上说不怀疑边界有问题。奇怪的是,程序在处理大量中间数值时都是对的,但是可能在边界处出现错误。下面的一段源代码说明了在一个极简单的程序中是如何产生边界条件问题的。示例3-1中,下面C#代码的意图是先创建一个int类型的数组,长度为10,然后给这个数组的每个元素赋值为-1。那么在代码中的for循环里,边界值在哪里呢?例3-1:代码缺陷//定义一个int类型的数组,长度为10int[]num=newint[10];//将num数字的每个元素默认为-1for(inti=1;i=10;i++){num[i]=-1;}我们都知道,在C#/JAVA语言中数组的索引从0开始,如果长度为10的数字,最后一个索引为9。而代码中从1-10,虽然也包括了10个元素,但在num[10]时,索引越界。即使将“=”改为“”,也只是1-9,而num[0]还是为原来的默认值0。诸如此类的总是很常见,在复杂的大型软件中,可能会导致及其严重的软件缺陷。3.3.2次边界值上面讨论的普通边界条件是最容易找到的。它们在产品说明书中有定义,或者在使用软件的过程中确定。而有些边界在软件内部,最终用户几乎看不到,但是软件测试仍有必要检查。这样的边界条件称为次边界条件或者内部边界条件。寻找这样的边界不要求软件测试人员具有程序员那样有阅读代码的能力,但是要求大体了解软件的工作方式。数据取值范围和ASCII表就是这样的例子。1、数据取值范围在Java语言中,有各种数据类型,但每种数据类型的存储数据长度不一样。表3-4列出了部分基本数据类型。表3-4Java数据类型取值范围数据类型占用内存最大空间取值范围byte1字节-128~127short2字节-32768~32767int4字节-2147483648~2147483647long8字节-9223372036854774808~9223372036854774807从表中就可以看出byte的取值范围为“-128~127”,其实在比较成熟的开发工具里,编译检查的时候会将一些比较明显的错误标识出来,如图3-1所示。图3-1Eclipse提示编译错误在Eclipse里,如果将数值127赋给一个byte类型会编译通过;如果是128,此时已经超出byte类型的取值范围,编译器自动将128识别为byte上一级取值范围——int类型,因此提示不能将int类型转换为byte类型。1字节等于8位,一个二进制数的存储空间是一位。27=128,215=32768,231=2147
本文标题:软件测试第三章系统测试设计与报告
链接地址:https://www.777doc.com/doc-2011840 .html