针对小公司和应用程序的现实生活单元测试

时间:2010-09-15 14:05:43

标签: unit-testing

在这些由小型软件公司(甚至是独立公司)编写的典型业务应用程序中,单元测试真的有什么好处吗? (我说的是那些典型的定制应用程序,比如自动发票应用程序。)

请注意:我没有质疑单元测试的好处(干净的代码,提高重构能力等),但我质疑小型软件应用程序的ROI < / strong>即可。好的,你会赢得时间追逐错误等,但我似乎并不相信你会赢得足够的时间来处理开发测试的时间增加。

请相信我,因为我可以看到其中的好处,但目前不适用于小型软件应用程序/公司。

PS:在典型的业务应用程序中,有哪些实际的单元测试示例? (发票,客户关系管理等)

7 个答案:

答案 0 :(得分:9)

以下是我看到它为小型应用付费的方式:

  • 您的测试是一种形式 有关您的应用程序的文档 应该工作。让生活更轻松 当你单独离开应用程序时就在你身上 一段时间或下一个人。
  • 你的考试是好的报道 只需要做出那么小的改变 你知道不会破坏任何东西。 您的测试会让您快速了解。
  • 很多时候在小应用程序中的单位 测试可以节省您测试UI的时间 该应用程序。 AKA - 多少次 你必须关闭应用程序进行测试 输入屏幕占用了 正确的信息并吐出 正确的信息。事实并非如此 取代UI测试,但它确实保存 一般的测试时间甚至是 小应用程序。
  • 小型应用程序的发展频率。在我的 经验足够。如果你 不要尽早开始单元测试 更有可能不会在以后和/或 花更多的时间来覆盖那些代码 最初没有完成。现在,如果你 我只记得那段代码是怎么回事 应该全部工作 例..... hmmmm ...
  • 时,这是很好的做法 绝对看到做的价值 它说在一个更大的项目和 希望对它更好。 : - )
  • 测试是一种很好的帮助方式 你看看你是否有设计缺陷 和/或更好的编码方式 一些东西。测试可以是一种形式 设计,真的可以帮助人们看到 如果有些笨拙/ 别扭。

在非常小的应用程序上查看执行TDD的James Shore's youtube play by play。只是看着他通过它看到和听他真的有助于展示TDD和单元测试如何真正有益于即使在小型应用程序中。

答案 1 :(得分:6)

让我们看看,

  1. 如果你的小应用程序被用在客户端堆栈的一个非常关键的部分,那么你就可以获得功能完善的代码。
  2. 如果这个小应用程序用于平衡他们的应收账款,我打赌他们想知道所用的公式是否正确。没有企业想要赠送免费赠品或“赔钱”。
  3. 如果你的应用程序公开了一个API,以便它可以在另一个应用程序中进行扩展和同化,那么你需要单元测试来验证你做得对,他们的工程师正在搞砸它。 (哦,是的,对于一小段代码来说,确实能够保存我的屁股。)
  4. 如果您的小应用程序将被传递给其他人以维护它。他们会感谢你的。
  5. 如果你想要在一个更大的应用程序的其他地方使用某些功能,预先生成的单元测试将节省时间和头痛。想象一下微小的错误,它不会影响你的小应用程序进入一个更大的应用程序,它可能会造成实质性的损害。
  6. 简而言之,有无数的用例,我可以看到单元测试即使对于一个小的,非繁琐的应用程序也能获得回报。看看那里链接的klabranche视频。优异。

答案 2 :(得分:3)

单元测试和TDD让你走得更快。一旦你学会了如何做到这一点,你就可以从一个项目开始更快地完成。这假设你对“完成”的定义不是“将某些东西打在一起并运送它”。完成应包括测试,支持,新功能/增强等。

世界上充斥着很少的VB6控制台应用程序和Access数据库,这些数据库旨在存在数周或数月,这些数据库现在可以保持公司运行并且已经存在多年。扔掉你“不会再次触摸”的应用和应用是一个神话。抛弃这项工作并制作一个新的,更好的应用程序并不具有商业意义。经理/ PM将看一个从头开始编写新应用程序的提议并说,“我们不是已经有一个应用程序已经这样做了吗?只需调整它以使其适用于此。”< / I>

这就是梦魇内部应用程序的诞生方式。我相信你一直在那里。我怀疑这是你的第一个牛仔竞技表演。

现在,如果该应用具有较高的测试覆盖率(功能覆盖和边缘情况,而不仅仅是覆盖的线条),很好地解耦(因为这是测试的前提条件),那么它很容易维护和扩展。



为什么你想通过像ROI这样的商业谈话来理顺良好的工程实践?如果您在编写测试时遇到了痛苦,那么您需要更多的练习,设计不合理的代码是不可测试的,或者两者兼而有之。

一旦习惯了TDD,甚至只是GDT(内疚驱动测试,也就是代码后的测试),编写测试并编写更易测试的代码是很自然的。这样可以生成更清晰的代码库,更加模块化和分离。无论你写的代码是什么,你都有很高的置信度。

你会发现你根本不会错过调试器。 :)

答案 3 :(得分:2)

如果编写测试是如此痛苦,你觉得有必要反对它我想知道你正在经历什么样的痛苦以及为什么,也许有一些关于你如何测试的东西不是那么有效。当我负责建造甚至小型项目时,测试一直是一个很大的帮助。

在我进行单元测试之前,我会这样做:

1)编写应用程序某些部分的代码

2)拼凑一个自定义测试工具(最有可能的是,在类中添加一些public static void main方法)

3)修复代码直到测试工作,在修复之间手动运行测试

4)继续下一段代码并删除或放弃测试

最终当事情发生时,我会感到惊讶。

所以我之前写过测试,只是它们是原始的手工制品,不可重复使用且没有良好的覆盖范围,我最终将它们扔掉了。现在,我所做的主要区别是我用较小的位编写代码,并保持测试并继续运行它们。并且有很多惊喜。对我而言,这不是障碍,而是一种明显的改善。

答案 4 :(得分:1)

我不知道我的观点是否会说服你,但现在就是。

  1. 即使在小型应用程序中练习单元测试也会让您更舒适地使用它们。有时,您在小型应用编码中学习或练习比大型项目更好;

  2. 小型或大型项目,仅仅是因为您作为高质量开发人员的声誉,单元测试您的代码将减少缺陷,而不是说大多数完美无瑕的代码。此外,任何应用都应该得到很好的发展;

  3. 习惯于对您开发的任何项目进行单元测试,这将使自己成为更好的程序员;

  4. 我认为TDD是一种工作方法,因此,为什么在项目较小时使用不同的方法进行开发?我个人认为没有优势。在较小或较大的项目上使用相同的技术,方法和方法,这将点亮一些自动化来对代码的任何部分进行单元测试,您将不再需要考虑为代码覆盖编写的测试,我会提前写下这些遗漏,因为你总是以同样的方式做你的工作;

  5. 在另一个人需要纠正或添加更复杂的功能的情况下,这将确保他在出现问题时必须测试他的东西,因为你的所有人都将提前进行测试。所以这个人可以建立坚实的基础,也就是你的质量代码;

  6. 采用一种开发方式,例如单元测试你所做的一切,无论大小,对我来说都是优化和分解我的代码。总是使用一个为我做的功能。我创建了一个项目,我调用该函数来编写项目的单元测试。这就像开始一个项目一样。这将变得更容易,更容易。

  7. 最后,我不知道我是否说服了我的观点,但至少我希望这会给你带来很好的反思,以便你可以根据自己的需要做出自己的决定。

    度过美好的一天!

答案 5 :(得分:1)

尝试以下简单问题:

  • 您如何测试软件?手动?脚本?单元测试(部分)。

  • 您对自己和/或脚本的信任程度是多少?

  • 你花了多少时间做这件事?几秒钟?我打赌更多。

  • 您有没有人讨论设计或算法?单元测试可以帮助您设计,简化和重构。

  • 谁会审核您的代码?测试会让您一次又一次地查看代码。

在一个小项目中,您似乎有更多理由进行测试: - )

答案 6 :(得分:0)

我能想到的唯一“小”应用程序是合理的,没有单元测试是“Hello world”应用程序。否则,即使为最简单的应用程序编写一个单元测试也是有益的。