在这些由小型软件公司(甚至是独立公司)编写的典型业务应用程序中,单元测试真的有什么好处吗? (我说的是那些典型的定制应用程序,比如自动发票应用程序。)
请注意:我没有质疑单元测试的好处(干净的代码,提高重构能力等),但我质疑小型软件应用程序的ROI < / strong>即可。好的,你会赢得时间追逐错误等,但我似乎并不相信你会赢得足够的时间来处理开发测试的时间增加。
请相信我,因为我可以看到其中的好处,但目前不适用于小型软件应用程序/公司。
PS:在典型的业务应用程序中,有哪些实际的单元测试示例? (发票,客户关系管理等)
答案 0 :(得分:9)
以下是我看到它为小型应用付费的方式:
在非常小的应用程序上查看执行TDD的James Shore's youtube play by play。只是看着他通过它看到和听他真的有助于展示TDD和单元测试如何真正有益于即使在小型应用程序中。
答案 1 :(得分:6)
让我们看看,
简而言之,有无数的用例,我可以看到单元测试即使对于一个小的,非繁琐的应用程序也能获得回报。看看那里链接的klabranche视频。优异。
答案 2 :(得分:3)
单元测试和TDD让你走得更快。一旦你学会了如何做到这一点,你就可以从一个项目开始更快地完成。这假设你对“完成”的定义不是“将某些东西打在一起并运送它”。完成应包括测试,支持,新功能/增强等。
世界上充斥着很少的VB6控制台应用程序和Access数据库,这些数据库旨在存在数周或数月,这些数据库现在可以保持公司运行并且已经存在多年。扔掉你“不会再次触摸”的应用和应用是一个神话。抛弃这项工作并制作一个新的,更好的应用程序并不具有商业意义。经理/ PM将看一个从头开始编写新应用程序的提议并说,“我们不是已经有一个应用程序已经这样做了吗?只需调整它以使其适用于此。”< / I>
这就是梦魇内部应用程序的诞生方式。我相信你一直在那里。我怀疑这是你的第一个牛仔竞技表演。
现在,如果该应用具有较高的测试覆盖率(功能覆盖和边缘情况,而不仅仅是覆盖的线条),很好地解耦(因为这是测试的前提条件),那么它很容易维护和扩展。
为什么你想通过像ROI这样的商业谈话来理顺良好的工程实践?如果您在编写测试时遇到了痛苦,那么您需要更多的练习,设计不合理的代码是不可测试的,或者两者兼而有之。
一旦习惯了TDD,甚至只是GDT(内疚驱动测试,也就是代码后的测试),编写测试并编写更易测试的代码是很自然的。这样可以生成更清晰的代码库,更加模块化和分离。无论你写的代码是什么,你都有很高的置信度。
你会发现你根本不会错过调试器。 :)
答案 3 :(得分:2)
如果编写测试是如此痛苦,你觉得有必要反对它我想知道你正在经历什么样的痛苦以及为什么,也许有一些关于你如何测试的东西不是那么有效。当我负责建造甚至小型项目时,测试一直是一个很大的帮助。
在我进行单元测试之前,我会这样做:
1)编写应用程序某些部分的代码
2)拼凑一个自定义测试工具(最有可能的是,在类中添加一些public static void main方法)
3)修复代码直到测试工作,在修复之间手动运行测试
4)继续下一段代码并删除或放弃测试
最终当事情发生时,我会感到惊讶。
所以我之前写过测试,只是它们是原始的手工制品,不可重复使用且没有良好的覆盖范围,我最终将它们扔掉了。现在,我所做的主要区别是我用较小的位编写代码,并保持测试并继续运行它们。并且有很多惊喜。对我而言,这不是障碍,而是一种明显的改善。
答案 4 :(得分:1)
我不知道我的观点是否会说服你,但现在就是。
即使在小型应用程序中练习单元测试也会让您更舒适地使用它们。有时,您在小型应用编码中学习或练习比大型项目更好;
小型或大型项目,仅仅是因为您作为高质量开发人员的声誉,单元测试您的代码将减少缺陷,而不是说大多数完美无瑕的代码。此外,任何应用都应该得到很好的发展;
习惯于对您开发的任何项目进行单元测试,这将使自己成为更好的程序员;
我认为TDD是一种工作方法,因此,为什么在项目较小时使用不同的方法进行开发?我个人认为没有优势。在较小或较大的项目上使用相同的技术,方法和方法,这将点亮一些自动化来对代码的任何部分进行单元测试,您将不再需要考虑为代码覆盖编写的测试,我会提前写下这些遗漏,因为你总是以同样的方式做你的工作;
在另一个人需要纠正或添加更复杂的功能的情况下,这将确保他在出现问题时必须测试他的东西,因为你的所有人都将提前进行测试。所以这个人可以建立坚实的基础,也就是你的质量代码;
采用一种开发方式,例如单元测试你所做的一切,无论大小,对我来说都是优化和分解我的代码。总是使用一个为我做的功能。我创建了一个项目,我调用该函数来编写项目的单元测试。这就像开始一个项目一样。这将变得更容易,更容易。
最后,我不知道我是否说服了我的观点,但至少我希望这会给你带来很好的反思,以便你可以根据自己的需要做出自己的决定。
度过美好的一天!
答案 5 :(得分:1)
尝试以下简单问题:
您如何测试软件?手动?脚本?单元测试(部分)。
您对自己和/或脚本的信任程度是多少?
你花了多少时间做这件事?几秒钟?我打赌更多。
您有没有人讨论设计或算法?单元测试可以帮助您设计,简化和重构。
谁会审核您的代码?测试会让您一次又一次地查看代码。
在一个小项目中,您似乎有更多理由进行测试: - )
答案 6 :(得分:0)
我能想到的唯一“小”应用程序是合理的,没有单元测试是“Hello world”应用程序。否则,即使为最简单的应用程序编写一个单元测试也是有益的。