Testing 自动化测试没有帮助的场景

Testing 自动化测试没有帮助的场景,testing,tdd,Testing,Tdd,在什么情况下,单元测试和TDD之类的东西比它们的价值更麻烦 我想到的一些东西是: 生成测试数据时很棘手:有时,能够生成有效的、非平凡的测试数据本身就是一个挑战 当验证代码正确性的唯一实用方法是运行它时 当您测试设计的视觉元素时 还有什么其他情况吗?我不确定这是否有用。在某些情况下,它可能更困难,您可能会选择不使用它——例如,在UI的可视化布局中。也可能有浪费精力的时候——例如,单元测试设计器生成的代码或框架不是您编写的。生成数据不应该成为单元测试的障碍。您的测试应该足够小,并且足够集中,这样

在什么情况下,单元测试和TDD之类的东西比它们的价值更麻烦

我想到的一些东西是:

  • 生成测试数据时很棘手:有时,能够生成有效的、非平凡的测试数据本身就是一个挑战
  • 当验证代码正确性的唯一实用方法是运行它时
  • 当您测试设计的视觉元素时

还有什么其他情况吗?

我不确定这是否有用。在某些情况下,它可能更困难,您可能会选择不使用它——例如,在UI的可视化布局中。也可能有浪费精力的时候——例如,单元测试设计器生成的代码或框架不是您编写的。生成数据不应该成为单元测试的障碍。您的测试应该足够小,并且足够集中,这样您通常不需要为任何单个测试生成整个数据集,因此模拟在这些情况下是非常有用的技术。如果我发现自己一遍又一遍地模仿同样的东西,我有时会将它合并成一个所有测试都可以依赖的假数据库类


无论是单元测试还是运行代码都无法验证其正确性。单元测试可以帮助消除bug,特别是使用TDD,并确保发现的bug得到修复。如果需要确保代码正确,则需要应用不同的、基于逻辑的技术来证明正确性。这些都超出了单元测试的范围。

我不会说在任何情况下,自动化测试都是无益的

当然,也有一些地方的帮助不大。我不认为创建夹具数据是其中之一。有一些工具可以提供帮助,比如(至少在Ruby中)。事实上,如果你的模型太复杂了,你需要创建一个具有各种关联的十二个对象,我会考虑代码的味道,也许模型并不是那么简单。 也就是说,在一些情况下,缺点可能大于优点。前几天我写了一些代码,它派生了一个外部进程。我不关心输出,我不关心返回代码,我甚至不关心它是否工作正常,它完全是一个火和忘记,如果有什么不正常的工作,另一个进程会来清理,稍后


在这种情况下,我没有费心编写任何测试,因为这样做的好处不值得花时间设置一个假的外部程序来验证我的论点等等。

我相信你的前两点是无效的

  • 创建测试数据可能是一个挑战(事实上,它通常是编写单元测试的主要部分),但这只是您必须接受的东西,而不是放弃单元测试的理由。这不可能是不可能的,否则你怎么知道你的应用程序工作正常
  • 单元测试运行代码是为了验证其正确性——我看不出问题所在
当然,应用程序的某些方面是无法进行单元测试的——视觉布局(屏幕或打印)就是其中一个方面,一般来说,可用性也是如此——这些东西实际上是无法正式指定的


单元测试可能不适用的一种情况是,当您面对一个现有的应用程序时,该应用程序的开发并没有考虑到可测试性甚至模块性(反模式)。但即便如此,如果您知道必须在相当长的一段时间内维护和扩展这个beast,那么找到一种方法来自动测试应用程序的至少一些部分几乎总是可能和有用的。没有人说在做任何其他事情之前,你必须编写一个测试套件来实现100%的代码覆盖率。

只是一些随机的想法:

  • 我想微软没有一个 它的各种方法的单元测试 关闭计算机。可以是 完成了虚拟化,但它是 可能不值得
  • 对于硬件制造商:确保驱动程序适用于不同的硬件 也可能是手动完成的(您好 你把我的gfx卡弄坏了 ())
  • 运行一次shell脚本。只要调整它们,直到它们工作

  • 但这些都是无关紧要的情况。我还认为,它们几乎总是可能的,而且从长远来看,回报往往比你一开始投资的回报更多。

    我坚信深思熟虑的测试;然而,我发现单元测试和TDD主要是浪费时间

    从经验的角度来看:
  • 没有经验证据表明代码质量更高
  • 没有经验证据表明生产率更高
  • 没有经验证据表明成本节约
  • 以伪科学的方式呈现的“故事”表明TDD是有益的,但没有对照组,也没有真正的指标 TDD的好处:
  • “了解”TDD的福音传道者通过推广他们的专业知识而受益
  • 销售/推广单元测试工具的软件团体受益匪浅
  • 如果您的开发人员不是高水平的,那么单元测试可能会有一些好处

    • 单元测试只捕获最明显的错误
    • 如果开发人员一直通过单元测试发现bug,我会替换它们
    • 如果我将开发外包给班加罗尔的一家车身车间,我会实施单元测试。否则,我将坚持与强大的开发人员合作——从长远来看,这些人更具成本效益
  • 主观分析:
  • 如果你倾听TDD支持者的观点,你可以用祈祷代替TDD,推理的有效性不会改变
  • 单元测试是代码-您正在将代码库的大小增加一倍/三倍。。。花在分析代码上的时间可能会更好
  • 高质量的软件来自于敌对/合作的团队。写入
    * When generating test data is tricky: Sometimes, being able to come up with valid, non trivial test data is a challenge in itself.
    
    * When the only practical way of verifying correctness of the code is to run it.
    
    * When you're testing visual elements of the design.