摘要:软件测试的类型通常分为白盒测试和黑盒测试,其中基于等价类的划分法与基于判定表的测试法都是较为典型和实用的黑盒测试技术方法。在实际工作中,为了使测试用例的覆盖更加全面,测试目的更加明确,通常不仅仅局限于某一种测试手段。针对等价类和判定表这两种方法各自的特点,可以将两者有机结合,通过对输入条件进行等价类划分,对输出行为进行判定表列举,用综合的手段进行软件测试工作,从而达到使测试用例的设计覆盖全面、条理清晰的目的。
关键词:等价类;判定表;软件测试
1、概述
软件测试的类型一般来说,可以划分为白盒测试类型和黑盒测试类型。黑盒测试针对的主要是软件功能的正确性和完整性。黑盒测试的理念,是将程序内部的逻辑结构看成一个黑盒子,单纯依据给定的软件需求规格说明中约定的功能要求,设计测试输入数据,观察测试输出结果,通过结果的正确性来验证软件的正确性。黑盒测试的方法比较多,其中较为典型的是等价类划分法和判定表驱动法,实际工作中可以将两种方法有机结合进行软件测试。
2、等价类划分法
等价类划分法的一般定义,是依据程序的实际情况,把测试输入划分成具有代表性的几种分类,类与类之间彼此不相交;然后从每个分类中选取部分数据作为测试用例的输入。这其中选取的输入数据在测试中的作用等价于该类中的其他数据,因此对每一个特定的类来说,不需要将该类中所有的输入都作为测试输入,仅选取本类中具有代表性的输入即可覆盖某一方面的验证,大大减少了测试用例的数量,提高了测试效率。
进行等价类划分时须将对应输入分为有效等价类和无效等价类。有效等价类是指符合程序需求规格说明描述,合理可行且有意义的输入数据所构成的集合。通过有效等价类的输入,可以测试程序是否实现了需求规格说明中所要求实现的功能项。无效等价类是有效等价类的补集,与有效等价类正好相反,通过无效等价类的输入,可以测试程序的功能实现是否会出现意外情况。两种等价类必须同时被考虑,以确保软件的可靠性。
根据通用的定义,可以根据以下原则进行等价类划分:
1)如果输入条件规定了输入值的强制集合,则可确定一个有效等价类和一个无效等价类;
2)如果输入条件规定了取值范围,或者规定了所取值的个数,则可确定一个有效等价类和两个无效等价类;
3)如果规定了一组输入数据的数量为n,且程序需对每个输入值分别处理,则可确定n个有效等价类和一个无效等价类;
4)如果输入条件为布尔值,则可确定一个有效等价类和一个无效等价类。
5)如果输入数据有必须遵守的规则,则可确定一个遵守规则的有效等价类和若干个从不同角度违反规则无效等价类;
6)已知的大等价类可以根据实际情况进一步划分为更小的等价类。
等价类一经确定,可以构造等价类划分表。然后为每一个等价类规定一个唯一的编号,并设计测试用例来 覆盖所有的等价类。用例设计原则为:1个用例应覆盖尽可能多的有效等价类,直到所有有效等价类都被覆盖为止;1个用例仅覆盖一个尚未被覆盖的等价类,直到所有无效等价类都被覆盖为止。
3、判定表驱动法
判定表也叫决策表,在所有的功能性测试方法中,基于判定表的测试方法是最严格的,因为判定表具有逻辑严格性。从20世纪60年代初开始,判定表就一直被用来表示和分析复杂的逻辑关系,作为编写程序的辅助工具。判定表很适合描述不同条件集合下采取行动的若干组合情况。
判定表由4个部分组成,分别为条件桩、动作桩、条件项和动作项。其中条件桩列出了各种可能的单个条件,动作桩列出了可能采取的单个操作,条件项列出了所给条件的多组取值组合,动作项列出了在给定条件项的各种取值情况下对应采取的动作。
判定表的规则是任何一个条件组合的特定取值及其相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。判定表中列出多少组条件取值,也就有多少条规则,条件项和动作项就有多少列。
应该依据软件需求规格说明来建立判定表,首先确定规则的个数,然后列出所有的条件桩和动作桩,填入动作项形成初始判定表,再通过合并相似规则或相同动作来简化,形成最终判定表。
4、等价类结合判定表测试
在实际测试工作中,我们倾向于不仅仅只使用一种测试方法,而是恰当的将多种测试方法有机结合,达到最优的测试效果。这里以实例说明如何将等价类划分与判定表驱动有机结合起来进行软件测试。
某模块具有数据接收和处理功能,其中接收的数据格式包含了方式字、数据域和校验和3个部分。该模块将接收到的数据进行CRC校验,根据接收的数据进行处理:若接收的数据正确,则将对应缓冲区地址内容设置为接收的数据域内容,且置相应的遥测字;若接收的数据错误,则对应缓冲区地址内容不作设置,且置相应的遥测字。
这个实例里,我们可以先对输入条件进行等价类划分,然后通过建立判定表,确立规则,从而得出最终的测试用例。这里的输入条件就是需要接收的数据。根据相应的通信协议,数据格式中的方式字可分为AAh、BBh、CCh、DDh共4种,数据域根据其长度可分为16字节、32字节、128字节3种,校验和可分为正确和错误两种。我们通过通信协议的规定,可以划分出输入数据等价类,对每种输入条件的等价类都进行相应的编号。
根据等价类划分,继续采用判定表驱动法形成测试用例。将已按等价类划分好的输入作为条件桩,产生判定表。
根据该表,根据规则最终产生了7个测试用例,覆盖了所有输入的有效等价类和无效等价类。下面进行两点说明:
1)根据测试方法的一般选择原则,若输入条件之间存在组合关系时,一般选用因果图法结合判定表驱动法进行测试用例的设计。本例中的各个输入之间存在简单的组合关系,但由于各输入均为1组数据,且存在有效和无效的情况,而非独立的状态,或独立的输入条件,采用因果图法易造成图的关系复杂,不利于分析;采用等价类划分法则利于信息的归类与分析,再结合判定表驱动法来理清各等价类的组合关系,使用例设计清晰,并可判断是否覆盖所有的等价类,是否存在可合并的冗余用例。
2)为了简化实例便于说明,本例没有考虑输入边界的取值,实际工作中还可加入对输入条件的边界取值考量,产生更多有效和无效的边界等价类,再加以组合进行测试。
5、总结
测试用例的设计方法种类很多,在实际测试中,应当不局限于单个测试手段。依据每个具体的软件的具体特点,制定具有针对性的测试策略,综合使用各种方法,使其有机结合,从各个角度充分测试,从而更加有效的提高测试效率和测试覆盖度。