即使技术再成熟,完全自动生成的用例也是与功能无关的,即使覆盖所有路径,其效果不会比“跟着代码走”强,因此,主要依靠完全自动生成的用例来测试是不现实的,例如,TrimLeft(char*)(删除字符串左边空格)与CheckUserName(char*)(检查用户名的合法性并删除非法字符),输入都是字符串,用例是完全不同的,工具不可能自动了解这种基本区别。
多数自动化工具在宣传自动用例生成功能的时候,喜欢用排序算法之类的示例,这是很巧妙的选择,因为在这些小程序中,数据没有实际意义,只有大小之分,容易表现出自动用例的效果,但在实际项目中,多数数据是有实际意义的,工具不可能了解这些实际意义,生成的用例多是无意义的垃圾。
自动用例的价值
自动用例的价值在哪里?在于发现极端错误。除0错、空指针、数组越界,非法输入、大数输入等常常造成程序崩溃或超时,即使没有根据功能设定预期输出,工具也能自动捕捉这种错误。极端错误通常是边界和非法输入引起的,这类输入容易被程序员和测试员遗漏,但却容易自动生成用例。因此,自动用例可以作为人工用例的补充,用于捕捉极端错误,从这个意义上说,自动用例测试称为自动边界测试更恰当些。
自动用例通常用循环方式组合各种输入来生成,数量庞大,因此,应跟普通用例分开,完全由工具自动维护。试图生成大量自动用例,然后人工选择和修改,不但修改工作量大,而且维护困难。