Unit testing 单元测试和这样做的动机

Unit testing 单元测试和这样做的动机,unit-testing,Unit Testing,我目前正在对一个应用程序进行单元测试,这个应用程序不是为了很好地支持单元测试而构建的,有很多依赖项、重构,而且构建应用程序的开发人员在开始开发时没有想到单元测试。我的工作是研究单元测试,对应用程序进行单元测试,并将单元测试引入组织。 当我在开发应用程序并编写单元测试时,有时很难保持良好的动机并为代码的困难部分编写良好的测试 现在我的问题是: 1。如何让自己有动力编写好的单元测试?(对于传统代码) 2.激励同事编写单元测试很重要吗? 3.作为一名雇主,如何让员工在编写良好的单元测试时保持积极性?人

我目前正在对一个应用程序进行单元测试,这个应用程序不是为了很好地支持单元测试而构建的,有很多依赖项、重构,而且构建应用程序的开发人员在开始开发时没有想到单元测试。我的工作是研究单元测试,对应用程序进行单元测试,并将单元测试引入组织。
当我在开发应用程序并编写单元测试时,有时很难保持良好的动机并为代码的困难部分编写良好的测试

现在我的问题是:
1。如何让自己有动力编写好的单元测试?(对于传统代码)
2.激励同事编写单元测试很重要吗?

3.作为一名雇主,如何让员工在编写良好的单元测试时保持积极性?

人们因为福利而获得积极性。人们不想做他们认为是更多的工作。单元测试意味着更少的工作。这意味着更多地和女孩约会。这意味着你不必每天晚上编码到晚上11点,所以要多做爱。这意味着更多地去度假。这意味着,对于那些对做爱不感兴趣的人来说,更快地生产软件

我发现当我开始做TDD时(2002年或2003年),有点奇怪。。。但即使仅仅几天,我就开始注意到巨大的生产力优势

TDD的最大好处是您可以将程序重构为更好的设计。。。或者只是更改某个名称……只要该设计没有破坏测试,您就可以100%相信您的更改没有破坏某些东西

显然,项目越大,其价值就越高。对于大型项目来说,这绝对是一个节省时间的天赐良机

另一个很大的好处是,如果您在系统中创建了一个bug,您将立即知道。没有花费数小时追踪它。谁喜欢追踪虫子?我不。你的同事也不会

TDD的目标是编写测试、编写代码并运行测试。如果您在添加新代码时注意到一大堆测试中断。。。那你马上就知道是什么引起的。实际上,不需要调试程序,也不需要在程序中到处放置print语句来找出错误所在。节省了这么多时间

另一个很大的好处是,您可以从您想要的设计开始——从高层次开始,在开始编码之前不必担心实现。随着工作的进行,您可以处理更细粒度的细节。因此,这意味着类的设计肯定比自下而上的设计更加正确。这意味着不必为了得到你想要的设计而对它进行太多的重构,因为你无法透过树木看到森林

另一个惊人的好处是,您对整个代码更有信心。你知道这是有效的。这已经证明了。虽然它不能证明你不会有任何bug,但它确实证明了你想象中可能发生的所有预期问题都已经得到了解决

随着经验的积累,你会想出越来越多的方法来打破这个体系。每次你想出一个,你就写一个测试来打破它,然后你就写代码来修复它。在完成了你的所有想法后,你的系统一定会非常坚固。从本质上讲,这是一种思想,不能通过盲目编码来实现

这意味着你可以上床,你不必担心一个电话让你回去工作去修复一个关键的bug

无论如何,这是我在TDD上的推销。福利

作为一个雇主,你如何让你的员工在编写好的单元测试时保持积极性

  • 有一个评估单元测试代码覆盖率和单元测试质量的性能指标,由一些健壮的过程(同行评审?)决定

  • 对良好的单元测试所带来的诸多好处(例如,改进所花费的维护资源、减少错误数量、轻松/安全的重构/重新实现)有非常清晰的介绍

  • 有一种测试的文化。如果没有完全覆盖新的/更改的功能,则没有代码发布/签入。包含测试评审的核心评审。测试用例是需求/规范的一部分

在编写单元测试时,激励同事是重要的吗

  • 对。单元测试不是很容易,尤其是好的、勤奋的单元测试。与成本相比,收益并非立竿见影。因此,人们往往会吝啬于此,除非他们要么是被政策所迫,要么是被例子说服,要么是被文化洗脑。理想情况下,所有3个

虽然我同意到目前为止的其他帖子,但我想补充一点,根据我的经验,为遗留代码创建单元测试是开始重构邪恶的最好方法之一。当然,这看起来像是一件苦差事,但它将有助于提高您对代码库的了解,它的优点和缺点,并为您提供改进质量的机会

…只要单元测试有意义,并且实际上涵盖了所有的特殊情况。有时,这些特殊情况会在开发过程中变得明显。所以你必须回到那个测试并扩展它:)+1单元测试意味着你得到了更多的爱,是的,我不主张测试一堆无用的废话。我甚至不太在意代码覆盖率数字。我只是做了足够的测试,直到感觉良好为止。测试在我现在制作软件的过程中根深蒂固,我只是不去想这些事情。我只是做软件。+1:“虽然它不能证明你不会有任何bug,但它确实证明了你想象中可能发生的所有预期问题都已经得到了解决”。嗯,听起来很像我现在的处境!^^特别是关于代码ba的知识