测试优先编程
测试是提高软件质量的重要手段,可以用于发现bugs,确认是否达到可用级别,是否满足用户需求。再好的测试也无法证明系统中不存在错误,但我们应尽可能地设计出好的测试方法。
测试方法可分为静态测试和动态测试。静态测试是在不实际执行程序的情况下执行的;动态测试则是代码动态行为的测试,它使用给定的测试用例集来执行已编程的代码进行测试。
测试优先编程即先进行测试代码的编写,再着手写实现代码。这似乎是难以理解的,但其实我们根据一个函数的良好的规约就可以写出测试用例。这也有利于我们更好地理解规约、修正规约。有过编程经历的我们应该都有体会,有时编程耗时多并不是因为代码的编写,而是由于对不明原因的bug调试和修改。而测试优先的编程习惯将可以节省大量的调试时间,它可以帮助我们尽早地发现缺陷并尽早着手纠正问题,也可以让我们更早更深入地了解需求和设计、更早地暴露需求和设计的问题,等等。
测试优先编码是基于黑盒测试来进行的:完全从函数spec导出测试用例,而不用考虑函数的内部实现。其测试用例的选择可以基于等价类划分方法进行:将被测函数的输入域划分为等价类,从等价类中导出测试用例,每个等价类代表着满足或违反输入约束的有效或无效数据的集合。我们从每个等价类中取出一个数据代表进行测试即可。如:规定n为正奇数,则其可以从以下三个方面进行划分:1)正数:>0、<=0;2)奇数:奇数、偶数;3)整数:整数、非整数。由此,可以将其划分为8个等价类。此外,由于有很多错误其实时发生在输入域的边界情况,在分区时,我们应将边界情况也包含在分区内,比如对int进行划分,应将其划分为maximum int、一般大于0的数、0、一般小于零的数、minimum int五类。
对于编写的测试用例的质量,可以用代码覆盖度来进行评估。覆盖度越低,测试越不充分。注意,有的代码可能覆盖度永远也不可能达到100%。
浙公网安备 33010602011771号