代码之家  ›  专栏  ›  技术社区  ›  Morfildur

如何在一个不太“易怒”的环境中使用tdd

  •  8
  • Morfildur  · 技术社区  · 15 年前

    我在一家公司工作,OOP是…好吧,不是福比登,但至少被认为“太复杂了”。我的同事写了很多100多行的函数,它们通常都在“funcs.inc.php”或“something.inc.php”中,如果它们使用任何函数,通常不会,因为复制粘贴速度更快。

    我想开始使用TDD,至少对于我写的代码,但由于我必须与他们的代码接口,我看不出如何开始。

    这不是遗留代码,因为他们正在积极开发,我不想修改他们的代码,因为我不想引发冲突。

    除了更换公司外,你建议采用哪种方法?

    5 回复  |  直到 15 年前
        1
  •  11
  •   Carl Manaster    15 年前

    我一直在那个位置,都是在一个不真实的TDD。我通常做的是尽可能为其他人的接口编写测试。在我运行代码之前,我就知道他们是否做了人们常做的事情之一:

    1. 通过重新命名或完全取消某些东西来破坏api
    2. 用未被注意到的细微类型更改破坏了api
    3. 在未经测试的情况下推动了一项有毒修订
    4. 突然出现内存泄漏(我的测试套件知道valgrind)
    5. 封锁他们从未封锁过的地方

    任何一个失败都会导致我说“嘿,你能检查一下(模块)吗,我想它在上一次修订时坏了”

    只丑过一次。其他人对我为他们的代码编写测试感到非常不安,并坚持说我不适合他们的工作。我不能让那个人明白我只是想让我的工作更轻松。

    直接出来说“听着,我花在调试代码上的时间比自己花在工作上的时间还多”从来都不是一个好主意,除非你必须这么做(比如你的老板问你的表现)。大多数情况下,如果你只是给人们送测试,他们很高兴有他们。如果你已经对这个想法产生了抵触情绪,那就试着不要冒犯任何人或者显得傲慢。

    模拟函数/存根是可以的,但剩下的是,如果不运行真正的测试,整个程序仍有可能崩溃。至少,当这种情况发生时,你可以很快排除你的东西,并且(很可能)直指问题。

        2
  •  4
  •   Aaron Digulla    15 年前

    对所有模块使用tdd,并在将它们的模块用于某些用途时编写测试。最终,其他人都会注意到,您生成高质量代码的速度比其他人快得多,他们会好奇为什么。这将是教育他们的绝佳机会。

    如果他们从来没有问过,那么,至少你让你的生活变得简单了一点。

        3
  •  3
  •   JB King    15 年前

    我建议你从下一步要写的东西开始,试着先完成一些测试,然后再为它编写代码。它可以修复一个bug,实现一个增强或新特性,但其思想是试图找到一种在更改之前完成测试的方法。

    或者,你可以把你的一些同事的代码和测试包装起来,并尝试重构它,但我不确定这会有多好。

        4
  •  2
  •   Daren Thomas    15 年前

    您可能希望在独立于代码的情况下测试代码。这将改变您设计代码的方式,但这可能是您无论如何都要执行tdd的原因。

    为要与之隔离的库创建模拟函数。

        5
  •  2
  •   Graviton    15 年前

    你能先在自己的代码上写单元测试吗?不要被其他人打扰;确保您的代码是完全tded的,并且经过了单元测试。

    要模拟与其他库的交互,您可以尝试尝试尝试真实的技术,如mock和stub。