在我写的“软件测试的未来”系列中,有人批评说我是个两面派,手工测试和自动化测试都支持,像美国的政客一样,不知道是该亲宝宝呢还是亲宝宝的妈妈。很明显这不是个非此即彼的事。不过我想澄清一些观点。
争论的焦点在于何时选取哪种测试方法,以及何种情况下手工测试更合适或自动化测试更合适。有种观点认为自动化测试更适合回归测试和API测试,手工测试更适合做验收测试和GUI测试。我觉得这种简单化的看法使我们偏离了真正的问题。
我觉得问题的本质与API还是GUI,回归还是功能都没有关系。我们应该从代码是业务逻辑相关还是基础性代码出发。因为这正是这点区分了手工测试和自动化测试。
业务逻辑代码对应投资人或用户掏钱买的那些功能。是实际完成工作的。基础性代码则确保业务逻辑代码运行在合适的环境中。基础性代码使得业务逻辑代码可以用于多用户,更安全,本地化等等。这是支撑业务逻辑干活的平台。
很明显,两种代码都要测试。直觉上,手工测试更适合测业务逻辑,因为这部分人类学习起来要比交给自动化容易。我觉得这个直觉太对了。
手工测试者适合成为领域专家,他们可以把相当复杂的业务逻辑存在强力的测试工具??大脑里。而且手工测试速度比较慢,测试者有时间可以观察分析细微的逻辑问题。速度虽然慢些,但是比较容易。
自动化则胜在测试底层的细节。自动化可以测试崩溃、挂起、错误返回值、返回码、异常和内存使用等等。速度快但是也困难些。想对业务逻辑进行自动化测试比较困难,风险也大。事后想想,我觉得Vista有这个问题,太依赖自动化测试了。如果能加多一些手工测试人员,效果会更好。
所以不管你是要测API还是GUI,回归测试还是头次测试,所选择的测试方法取决于你想要发现什么样的bug。当然会有例外,但总的来说,手工测试胜在测试业务逻辑,而自动化测试胜在测试底层架构。
这是我的观点,根据具体情况选择合适的方法。