软件测试工程师培训软件测试用例的设计方法回顾—软件测试的流程测试计划测试设计测试开发测试执行测试评估测试模式测试模式测试团队测试组管理员测试组成员测试方法论测试工具测试计划及设计工具测试开发及执行工具测试评估及缺陷跟踪工具测试用例的定义和特征测试用例的定义:(1)测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。(2)测试用例是执行的最小实体。测试用例的特征:(1)最有可能抓住错误的;(2)不是重复的、多余的;(3)一组相似测试用例中最有效的;(4)既不是太简单,也不是太复杂。设计测试用例的基本准则测试用例的代表性:能够代表并覆盖各种合理的和不合理的、合法的和非法的、边界的和越界的以及极限的输入数据、操作和环境设置等。测试结果的可判定性:即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果。测试结果的可再现性:即对同样的测试用例,系统的执行结果应当是相同的。设计测试用例的着眼点根据产品规格,测试基本功能;考虑设计一般用户(非专业人员)的使用方案;考虑设计稀有或特殊的使用方案;与系统其他组成部分的配合(如FAX和上网可能要用到MODEM,测试中考虑对设备的共享);考虑特殊情况(如内存和硬件的冲突等);设计极端情况(如内存泄漏、破坏性测试等);好的测试用例集能花费最小的代价(人力、物力、财力、时间)做最好的测试。什么是软件缺陷软件未达到产品说明书标明的功能。软件出现了产品说明书指明不会出现的误。软件功能超出产品说明书指明范围。软件未达到产品说明书虽未指出但应达到的目标。软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。为什么会出现软件缺陷导致软件缺陷最大的原因是产品说明书。软件缺陷的第二大来源是设计方案。编写代码其他其他10%软件产品说明书(需求)56%编写代码7%设计27%软件缺陷的修复费用从开始到计划、编制、测试、一直到公开使用的过程中,都有可能发现软件缺陷。随着时间推移,修复软件缺陷的费用呈几何数级地增长。020406080100编制说明书设计阶段编写代码测试发布软件缺陷在不同阶段发现时修改的费用示意图什么是黑盒测试黑盒测试法把程序看成一个黑盒子,完全不考虑程序内部结构和处理过程。黑盒测试是在程序接口进行测试,它只是检查程序功能是否按照规格说明书的规定正常使用。黑盒测试又称功能测试。黑盒测试主要是为了发现以下几类错误:①是否有不正确或遗漏了的功能?②在接口上,输入能否正确地接受?能否输出正确的结果?③是否有数据结构错误或外部信息(例如数据文件)访问错误?④性能上是否能够满足要求?⑤是否有初始化或终止性错误?什么是通过测试在设计和执行测试用例时,总是首先进行通过测试。在破坏性试验之前看看软件基本功能是否实现是很重要的,否则在正常使用软件时就会奇怪为什么有那么多软件缺陷。什么是失败测试确信软件在普通情况下正确运行之后,就可以采取各种手段通过搞垮软件来找出缺陷。纯粹为了破坏软件而设计和执行的测试用例称为失败测试或迫使出错测试为什么做测试用例完全测试是不可能的:•输入量太大;•输出结果太多;•软件实现途径太多;•软件说明书没有客观标准。从不同角度看,软件缺陷的标准不同。什么是测试用例为达到最佳的测试效果或高效的揭露隐藏的错误而精心设计的少量测试数据,称之为测试用例。我们不可能进行穷举测试,为了节省时间和资源、提高测试效率,必须要从数量极大的可用测试数据中精心挑选出具有代表性或特殊性的测试数据来进行测试。一个好的测试用例是在于它能发现至今未发现的错误。使用测试用例的好处在开始实施测试之前设计好测试用例,可以避免盲目测试并提高测试效率。测试用例的使用令软件测试的实施重点突出、目的明确。在软件版本更新后只需修正少部分的测试用例便可展开测试工作,降低工作强度、缩短项目周期。功能模块的通用化和复用化使软件易于开发,而相对于功能模块的测试用例的通用化和复用化则会使软件测试易于开展,并随着测试用例的不断精化其效率也不断攀升。测试用例的设计过程测试设计员(分析设计员)依据不同阶段的测试计划、设计模型和实施模型来设计该阶段测试用例。测试设计员是具有丰富测试经验或具有软件分析设计能力的高级测试工程师。如果没有测试设计员,则可用分析设计员代替。针对白盒,还应有驱动程序和桩模块。测试点的确定ISO质量体系:在概要设计或详细设计中应明确指出每个单元模块的测试要点、指标和方法。CMM质量体系:在系统的用例模型描述中应明确指出每个用例模型的优先级及用例工作流程,每一个用例模型为一个测试点,用例模型中每一个测试需求至少应有两个测试用例。理解上的误区测试用例应由测试设计员或分析设计员来制定,而不是普通的测试员。测试点应由分析设计员确立,与测试人员无关。测试工作展开于项目立项后,而不是代码开发完成之后。测试对象不仅仅是源代码,还包括需求分析、需求规格说明书、概要设计、概要设计说明书、详细设计、详细设计说明书、使用手册等各阶段的文档。测试用例的设计方法等价类划分边界值分析因果图判定决策表错误猜测法如何测试一个两位数的加法计算器测试需求:•测试两个参数的值相加后的结果是否正确。其中:输入的数值在-99到99之间大于99或小于-99的输入应被拒绝,并显示错误信息如何测试一个两位数的加法计算器根据测试需求,我们开始测试。分别给第一个参数和第二个参数输入表中的值,得到的测试结果如表所示:很明显,如果我们对第一个参数的值分别取从-99到99的199个数,第二个参数的值分别取从-99到99的199个数,我们不可能对两位数相加的所有情况进行穷举测试。如果不能进行穷举测试,我们将面临以下问题:在测试了1+1,1+2,1+(-1)和1+(-2)之后,还是否有必要测试1+3,1+4呢?如果不对加法计算器程序进行穷举测试,能否放心的认为所有的参数组合都是正确的呢?对以上两个问题,我们是不是找不到解决的办法?等价类划分等价类划分的办法是把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据当作测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值,也就是说,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。怎样划分等价类(一)1.如果输入条件规定了取值的范围或值的个数,则可确定一个有效等价类和两个无效等价类;2.如果一个输入条件说明了一个“必须成立”的情况,则可划分一个有效等价类和一个无效等价类;3.如果输入条件规定了输入数据的一组可能的值,而且程序是用不同的方式处理每一种值,则可为每一种值划分一个有效等价类,并划分一个无效等价类;4.如果我们确知,已划分的某等价类中的各元素(例子)在程序中的处理方式是不同的,则应据此将此等价类进一步划分成更小的等价类。5.在确立了等价类之后,建立等价类表,列出所有划分出的等价类:确定等价类测试用例的步骤为每个等价类规定一个惟一的编号;设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖;设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使所有无效等价类均被覆盖。等价类划分第一步:在本案例中我们根据测试需求可以把两位数加法分为如图的三个等价类:一个有效数据的等价类,两个无效数据等价类(有效数据等价类就是:由那些对程序的规格说明有意义的、合理的输入数据所构成的集合;无效数据等价类就是:那些对程序的规格说明不合理的或无意义的输入数据所构成的集合)。等价类划分第二步:在实际工作中,我们通常在确立了等价类以后,把程序中所有的等价类建立等价类表,以便在编写测试用例的时候有所依据。等价类划分第三步:根据上面的等价类表,我们就可以确定测试用例了,步骤为:•为等价类表中的每一个等价类分配一个唯一的编号。•设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这一步骤,从而使所有有效等价类均被测试用例所覆盖。•与上一步类似,设计一个新的测试用例,使它只覆盖一个无效等价类。重复这一步骤,从而使所有无效等价类均被测试用例所覆盖。等价类划分第四步:细化等价类划分•在测试“-99=数值=99”的这个等价类区间的时候,我们会发现如10+40,-20+30和-30+(-30)这类的正数相加,正数负数相加,负数相加也是不同的等价区间。因此我们可以使用更多的等价类划分:根据以上等价类划分的结果,得出下表的等价类表等价类划分第五步:根据上面划分的4个等价类,我们至少需要有5个测试用例等价类划分测试需求•假定一台ATM机允许提取增量为50人民币,总额为从50人民币到5000人民币(含5000人民币)不等的现金。测试能否提取想提请的钱数(不考虑由于硬件的原因造成的提取错误)。等价类划分第一步:划分等价类•根据测试需求,需要考虑如下三个等价类划分:一个等价类是有效数据,另外两个是无效数据。等价类划分第二步:建立等价类表等价类划分第三步:确定测试用例等价类划分第四步:细化等价类划分。•只要运用等价类划分,我们就只需要一个有效的测试用例和两个无效的测试用例就能进行充分的覆盖。还可以尝试将等价类进一步细化,考虑提取钱的数目为负的钱数,零钱数或特别大可能引起ATM机崩溃等等;这些等价类的进一步细化请大家自己给予考虑。等价类划分等价类的特点:通过上面的例子可以看出称为等价类的一组数据它们都:•测试相同的内容•如果等价类中的一个测试能够捕获一个缺陷,那么选择该等价类中的其他测试也能捕获该缺陷•如果等价类中的一个测试不能捕获缺陷,那么选择该等价类中的其他测试也不会捕获缺陷•如果正确的划分等价类,可以大大降低测试用例的数量,测试会准确有效。如果错误的将两个不同的等价类当作一个等价类,那就会遗漏一种测试情况。相反的,把同一个等价类看作了两个不同的等价类,那么测试就会是冗余的。等价类划分等价类划分中的核心要点:为了避免测试用例的冗余或遗漏,如何确定等价类是使用等价类划分方法中的一个重要问题。我们必须在分析需求规格说明书的基础上划分等价类,列出等价类表,从而确定测试用例。下面给出进行等价类划分的几个参考依据:•若某个输入条件说明了一个必须成立的情况,则可划分一个有效等价类和一个无效等价类。例如上面的例子,输入数据除了在-99和99之间,还隐含了输入数据必须是数字的条件,这样我们还可以设置无效等价类为输入字母数据,有效等价类为输入数字数据。•若某个输入条件对取值的范围或值的个数进行了规定,则可确定一个有效等价类和两个无效等价类。例如,每个输入数据值是从100到200,则可划分一个有效等价类,大于等于100且小于等于200;两个无效等价类,小于100的数值和大于200的数值。•如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类.等价类划分若在某个输入条件中对输入数据的一组可能值进行了规定,并且程序是用不同的方式处理每一种值的,则可为每一种值划分一个有效等价类,并针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。例如,在彩票对奖方案中规定对显示图案为梅花、黑桃、方块和红桃的彩票分别计算中奖金额。因此可以确定四个有效等价类梅花、黑桃、方块和红桃,以及一个无效等价类,它是所有不符合以上花色的彩票的集合。如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。例如,C语言规定语句必须以“;”结束。这时就可以确定一个有效等价类“以‘;’结束”,若干个无效等价类“以‘:’结束”、“以‘,’结束”等等若已划分的某等价类中的各元素在程序中的处理方式是不同的,则应当将此等价类进一步划分成更小的等价类。例如我们把两位数加法的输入划分为输入数字为有效,输入字母为无效,因为当数值大于99和小于-99的时候的处理方式又是不同的,所以我们要继续