什么是软件测试?什么是“自动化测试”?
什献垴淄睬么是软件测试?
所有做过软件测试的人都知道测试有很多类型。为简单起见,本文中我们将讨论以下三个方面:
> 系统测试:测试完全集成的应用系统
> 集成测试:测试集成的子系统
> 单元测试:测试一些单个的文件或类
在大家做过的系统测试中,有一些跟最终用户将要做的操作是一样的。请注意,我们说的是“一些”,而不是“全部”。导致应用程序运行失败出现bug的最常见的情况是在程序的输入域中输入了预料之外的未经测试过的输入组合。
做集成测试的人不多,做单元测试的就更少了。如果你做过集成或单元测试,你很可能会痛苦地意识到从应用程序的其余部分隔离单个文件或一组文件必须生成的测试代码的数量是巨大的。在最严格的测试等级中,测试代码的编写量大于被测程序代码量的情况并不少见。因此,这些级别的测试通常应用于任务和安全型关键系统的市场中,比如航空、医疗设备、铁路。
什么是“自动化测试”?
众所周知,手工的单元和集成测试过程是非常费力和费时的;因此所有进入这个市场出售的工具都将大力宣传“自动化测试”作为他们的获利点。但是,什么是“自动化测试”?自动化对不同的人理解会不一样。对于许多工程师来说,“自动化测试”意味着他们可以按下一个按钮,或者在“勾选框”中打上绿色的勾,表示他们的代码是正确的,或用“红色X”表示执行失败。
在过去的几年中,测试自动化工具市场已经变得混乱。所有的工具都声称能做同样一件事情:自动化测试。维基百科仅列出了38条C/C++测试框架。然而当潜在的用户在浏览产品资料或观看简单的演示时,许多的这些测试工具看上去都是极其相似的。
本文主要为工程师在评估软件测试自动化工具,尤其是动态的测试自动化工具时应考虑的问题提供参考。
你不能通过阅读文档来评估一个测试工具
所有的文档或者白皮书都是大同小异的。商业用语都是相同的,比如:“行业领导者”、“独一无二的技术”、“自动化的测试”和“领先技术”等。屏幕截图也都是相似的:“条形图”、“流程图”、“HTML报告”和“状态的百分比”。让人看得都麻木了。
遗憾的是这样的工具是不存在的。更重要的是,如果这种工具真的存在,你会想要使用它吗?好好想想吧。工具告诉你,你的代码是“OK”的,这意味着什么呢?它意味着代码格式化很好吗?也许吧。它意味着符合你的编码标准吗?也许吧。它意味着你的代码是正确的吗?显然没有!
完全自动化的测试是无法达到的,也不是可取的。自动化应处理测试过程中那些基本的逻辑算法的部分和劳力密集的部分。这将使软件工程师有更多的时间去做价值更高的测试工作,比如设计更好和更完整的测试。
评估工具时要问到的一个合理的问题是:“这个工具提供了多大程度的自动化?”这其实也是一个公司试图计算工具的投资回报率时所面对的最模糊的而又最主要的不确定性因素。