Unit testing Pro';s和Con';事后的单元测试
我有一个大约27k行的大型复杂应用程序。它本质上是一个规则驱动的多线程处理引擎,在构建某些组件时没有透露太多已经过部分测试的信息 我的问题是,在实现单元测试之后,可以说,在实现单元测试之后,做单元测试的利与弊是什么。很明显,传统的测试需要2-3个多月的时间来测试每个方面,而且所有这些都需要工作,而这段时间实际上并不可用 我过去做过很多单元测试,但通常都是在桌面自动化或LOB应用程序上进行的,它们都相当简单。该应用程序本身是高度组件化的,内部由接口驱动。我还没有决定使用什么特定的框架。如有任何建议,将不胜感激Unit testing Pro';s和Con';事后的单元测试,unit-testing,testing,Unit Testing,Testing,我有一个大约27k行的大型复杂应用程序。它本质上是一个规则驱动的多线程处理引擎,在构建某些组件时没有透露太多已经过部分测试的信息 我的问题是,在实现单元测试之后,可以说,在实现单元测试之后,做单元测试的利与弊是什么。很明显,传统的测试需要2-3个多月的时间来测试每个方面,而且所有这些都需要工作,而这段时间实际上并不可用 我过去做过很多单元测试,但通常都是在桌面自动化或LOB应用程序上进行的,它们都相当简单。该应用程序本身是高度组件化的,内部由接口驱动。我还没有决定使用什么特定的框架。如有任何建议
你怎么说 如果您正在进行任何重构,这些测试将帮助您检测过程中出现的任何错误。我认为对现有代码进行单元测试有几个优点
- 回归管理
- 更好地理解代码。测试它将揭示您没有预料到的情况,并将有助于定义代码的行为
- 当您在测试定义不好的方法时,它将指出代码中的设计缺陷
但是我认为考虑单元测试代码的缺点更有趣。好了,没有犯人。添加测试所花费的所有时间都是值得的,即使是在最短的时间周期之外 以下是我想到的每一个例子: 赞成者:
- 由于不必测试随着设计的发展而被删除的方法,因此节省了时间。剩下的是真正需要测试的东西
- 通过添加测试,这使我们有机会查看应用程序中的所有方面,并确定在工作原型就绪后可以添加哪些其他优化
- 编写测试需要投入大量时间,新功能可能会延迟一段时间才能生成所有测试
- 测试将发现可能引入的bug可能会导致这比最初计划的时间更长
添加单元测试的唯一缺点是它确实需要一些开发时间。就我个人而言,我发现在测试上花费的开发时间远远超过了在维护上节省的时间,但这是您需要自己确定的。单元测试仍然非常有用。查看完整的列表和好处说明 您将获得的主要好处是文档化,使更改更容易,并简化了未来的集成
除了您的时间之外,添加单元测试实际上没有任何成本。但是要意识到,您花费在添加单元测试上的时间将减少您在其他开发领域花费的时间,至少减少相同的数量,而且很可能会更多。我认为“事后测试”最大的缺点之一是,您可能会有更困难的测试时间如果您编写代码时没有测试,您通常不会考虑可测试性,最终会编写难以测试的代码。 但是,在您花费额外的时间编写测试并更改代码以获得更好的可测试性之后,您将更加自信地进行更改,一旦您不需要花费大量时间进行调试和检查是否一切正常
最后,您可能会发现以前没有发现的新bug,并花一些时间修复它。但是,嘿,这就是测试的目的(=)单元测试代码有很多原因。我主张事后进行单元测试的主要原因很简单您的代码已损坏,您只是还不知道。 软件中有一个非常简单的规则。如果代码没有经过测试,它就被破坏了。这在一开始可能并不明显,但当您开始测试时,会发现bug。这取决于你决定你有多在乎找到这些bug 除此之外,单元测试还有其他几个重要的好处
- 回归测试将变得更简单
- 其他不太了解情况的开发人员无法破坏您期望的行为
- 测试是一种自我记录的形式
- 可以减少未来修改的时间(无需更多的手动测试,更少的bug?)
单元测试时可能发现的问题 单元测试并不能证明系统工作正常。它证明了每个单元都是一个独立的单元。这并不能证明集成系统能工作 “事后”单元测试对两件事很有用——查找到目前为止您错过的、使用任何其他类型的测试都找不到的bug(特别是对于罕见的情况——对于任何真实世界的系统,在特定的单元中可能会发生大量罕见的情况),以及作为维护期间的回归测试 这两个都不可能