在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,则可以确立一个有效等价类和一个无效等价类;
在输入条件是一个布尔量的情况下,可以确定一个有效的等价类和一个无效的等价类;
在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可以确立n个有效等价类和一个无效等价类;
在规定了输入数据必须遵守的规则的情况下,可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将改等价类进一步的划分为更小的等价类。
(2)边界值分析法
根据经验法则,大量的错误是发生在输入或输出范围的边界上的,而不是发生在输入输出范围的内部。
因此针对各种边界情况涉及测试用例,可以查出更多的错误。
而使用边界值的分析方法涉及测试用例,首先应确定边界情况。
通常输入和输出等价类的边界,应当选取正好等于,刚刚大于或者刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
边界值选择的原则:
如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围的边界的值作为测试输入数据。
如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数小一,和比最大个数大一的数作为测试数据。
将前面两个原则应用于输出条件,即涉及测试用例使输出值达到边界值及其左右的值。
如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例数据;
分析规格说明,找出其他可能的边界条件。
(3)因果图法
因果图是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况,如图3所示。
利用因果图生成测试用例的基本步骤有:
分析软件规格说明描述中哪些是原因(输入,包括前提条件,操作过程),哪些是结果(输出),并给每个原因和结果赋予一个标识符;
分析软件规格说明描述的语义,找出原因和结果之间,原因和原因之间的关系,根据这些关系,画出因果图;
在因果图上用一些记号表明约束或限制条件;
把因果图转换为判定表;
把判定表的每一列拿出来作为依据,设计测试用例。
图3因果图的基本符号和约束符号
(4)场景法
场景法一般包含基本流和备用流,从一个流程开始,通过描述经过的路径来确定的过程,经过遍历所有的基本流和备用流来完成整个场景。
其中,基本流就是正常的,正确场景;备选流一般指中断操作的场景,如图4所示两种场景的关系。
图4两种场景的关系
(5)正交实验设计法
使用正交试验设计法首先要知道正交表,正交表是研究多因素多水平的一种设计方法,它是格局正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点,正交试验设计是一种基于正交表的、高效率、快速、经济的试验设计方法。
正交表由三个成分构成,Runs:
正交表的行数,即实验的次数;Factors:
正交表的列数,即因素数;Levels:
水平数,任何单个因素能够取得的值的最大个数。
(6)判定表驱动分析法
判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。
判定表由以下部分构成:
条件桩(ConditionStub):
列出了问题的所有条件。
通常认为列出的条件的次序无关紧要;
动作桩(ActionStub):
列出了问题规定可能采取的操作。
这些操作的排列顺序没有约束;
条件项(ConditionEntry):
列出针对它左列条件的取值在所有可能情况下的真假值;
动作项(ActionEntry):
列出在条件项的各种取值情况下应该采取的动作。
(7)错误推测法
错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法。
错误推测方法的基本思想:
列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。
3、灰盒测试(Gray-BoxTesting)
灰盒测试更像是白盒测试和黑盒测试的混合测试,现阶段对灰盒测试没有更明确的定义,但更多的时候,我们的测试做的就是灰盒测试,即既会做黑盒测试又会做白盒测试。
三、计算机软件测试过程
1、单元测试
在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。
(1)模块接口测试
在单元测试的开始,应对通过被测模块的数据流进行测试。
测试项目包括:
调用本模块的输入参数是否正确;
本模块调用子模块时输入给子模块的参数是否正确;
全局量的定义在各模块中是否一致;
在做内外存交换时要考虑:
文件属性是否正确;
OPEN与CLOSE语句是否正确;
缓冲区容量与记录长度是否匹配;
在进行读写操作之前是否打开了文件;
在结束文件处理时是否关闭了文件;
正文书写/输入错误,
I/O错误是否检查并做了处理。
(2)局部数据结构测试
不正确或不一致的数据类型说明;
使用尚未赋值或尚未初始化的变量;
错误的初始值或错误的缺省值;
变量名拼写错或书写错;
不一致的数据类型;
全局数据对模块的影响;
(3)路径测试
选择适当的测试用例,对模块中重要的执行路径进行测试;
应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误;
对基本执行路径和循环进行测试可以发现大量的路径错误;
(4)错误处理测试
出错的描述是否难以理解
出错的描述是否能够对错误定位
显示的错误与实际的错误是否相符
对错误条件的处理正确与否
在对错误进行处理之前,错误条件是否已经引起系统的干预等
(5)边界测试
注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。
对这些地方要仔细地选择测试用例,认真加以测试;
如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素;
2、集成测试(IntegratedTesting)
通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。
把模块集成成为系统的方式有两种:
一次性集成方式和增殖式集成方式
(1)一次性集成方式(bigbang)
它是一种非增殖式组装方式。
也叫做整体拼装。
使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。
(2)增殖式集成方式
这种集成方式又称渐增式集成,首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统。
在集成的过程中边连接边测试,以发现连接过程中产生的问题,通过增殖逐步组装成为要求的软件系统。
自顶向下的增殖方式
自底向上的增殖方式
混合增殖式测试
3、确认测试(ValidationTesting)
确认测试又称有效性测试。
任务是验证软件的功能和性能及其它特性是否与用户的要求一致。
对软件的功能和性能要求在软件需求规格说明书中已经明确规定。
它包含的信息就是软件确认测试的基础。
进行有效性测试(黑盒测试)
软件配置复查
4、验收测试(AcceptanceTesting)
在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。
验收测试是以用户为主的测试。
软件开发人员和QA(质量保证)人员也应参加。
由用户参加设计测试用例,使用生产中的实际数据进行测试。
在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。
5、系统测试(SystemTesting)
系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。
四、总结
随着科技和时代的发展,软件的规模和复杂程度越来越大,从而对软件质量提出更高的要求,为了满足用户日趋复杂的需求,软件开发趋向繁琐化和复杂化,软件投入使用的过程中出现漏洞和缺陷的数量也在不断增加。
所以,采用高效的软件测试时软件质量、可靠性和稳定性的重要保障,通过调查相关数据了解,目前软件测试的工作量在整个软件开发工作总量中的比例达到40%以上,对于测试的成本投入也达到了软件开发总额的50%。
可以说软件测试是软件开发过程中不可缺少的环节,软件测试的成功对软件开发的成功具有决定性的意义。
耿娜