软件测试有效等价类练习题
最近,DHH 发起了有关TDD的激烈辩论,当时他声称TDD已死 。
这场持续不断的辩论成功吸引了包括我们在内的开发人员世界的关注。
在我们的办公室里发生了一些关于进行测试的正确做法的小型辩论。
在本文中,我将发表自己的看法。
您看到了多少种测试?
从我加入行业开始,我就从事以下测试:
- 单元测试
- 系统/集成/功能测试
- 回归测试
- 测试线束/负载测试
- 烟雾测试/蜘蛛测试
以上测试类别不一定是互斥的。 例如,您可以创建一组自动化功能测试或冒烟测试以用作回归测试。 为了让新手受益,让我们快速回顾一下这些旧概念。
单元测试
单元测试旨在测试代码/组件单元的功能。 对于Java世界,代码单元是类,每个Java类都应该具有单元测试。 单元测试的原理很简单。 当所有组件都正常工作时,整个系统应该正常工作。
组件很少单独工作。 而是,它通常与其他组件交互。 因此,为了编写单元测试,开发人员需要模拟其他组件。 这是DHH和James O Coplien批评Unit Test的问题,付出了巨大的努力却收效甚微。
系统/集成/功能测试
没有具体的命名,因为人们经常使用不同的术语来描述相似的事物。 与单元测试相反,对于功能测试,开发人员旨在测试整个系统功能,其中可能涉及多个组件。
通常,对于功能测试,将检索数据并将其存储到测试数据库。 当然,应该在运行之前预先设置好测试数据。 DHH喜欢这种测试。 它可以帮助开发人员测试系统的所有功能,而无需花费大量精力来设置模拟对象。
功能测试可能涉及声明Web输出。 过去,大多数情况是使用htmlUnit完成的,但是随着Selenium Grid的最新改进,Selenium成为了首选。
回归测试
在这个行业中,与开发新系统相比,您可能最终会花费更多的时间维护系统。 软件一直在变化,并且每当进行更改时都很难避免风险。 回归测试应该捕获由更改引起的任何缺陷。
过去,一家软件公司确实有一支测试人员大军,但是当前的趋势是自动化测试。 这意味着开发人员将交付带有全套测试的软件,这些测试应该在功能受损时被破坏。