什么是*完全可接受的*方法的好例子,不使用/需要/需要测试驱动开发?

时间:2010-12-26 09:48:14

标签: tdd

TDD周期是测试,代码,重构,(重复)然后发货。 TDD意味着由测试驱动的开发,特别是意味着理解需求,然后在开发或编写代码之前先编写测试。

我的自然倾向是支持TDD的哲学偏见;我想确信有其他方法现在比TDD更好或甚至更好,所以我问过这个问题。还有其他一些问题表明TDD昂贵,难以实施,提出了挑战......同意,但有什么好的选择呢?


完全可接受的方法的优秀示例有哪些不使用/需要/需要测试驱动开发?

我可以想到很多不是TDD的方法,但可能比它们的价值更麻烦...它不是道德判断,只是它们的成本高于它们的价值......以下是只是作为学习练习可能正常的事情的例子,但我发现在严肃的制作中不接受的方法,而不是TDD可能包括:

  • 检查产品质量 - 专注于提高测试/质量保证的熟练程度可能会有问题,特别是如果您不首先处理需求和开发方面的问题...这包括错误分类,开发人员有很多不同的错误来处理它,有必要采用一种形式的分类 - 每个开发周期变得越来越糟,程序员工作越来越多,睡眠越来越少,努力继续进行死亡游行,直到它们被消耗掉。
  • 迷信......相信你不理解的事情 - 这将涉及借用你相信的代码已经从某个地方得到证实或测试,例如:遗留代码,魔术代码启动程序向导或开源项目,您可以继续修改风暴,将FaceBook Connect滑入用户界面,动态发明一些新的魔术功能(例如使用Twitter API进行混搭) ,GoogleMaps API和Zappos API),向少数人炫耀你的酷“新产品”,然后编写一个简单的“规范”和“测试用例”列表,然后将其转交给Mechanical Turk进行测试。 (因为相信您的产品接下来是Facebook,Twitter或YouTube,会获得额外积分。)

3 个答案:

答案 0 :(得分:4)

洁净室软件工程是一种方法,一方面听起来非常僵硬,静态,“不敏捷”,几乎与TDD的相反,但在另一方面它实际上非常相似。例如,它是高度迭代的,就像所有敏捷方法一样。与TDD一样,您首先编写规范,但与TDD不同,规范采用正确性的数学证明形式而不是可执行测试。

TDD周期

  1. 指定
  2. 重构
  3. 通过可执行规范证明正确性
  4. 洁净室循环

    1. 指定
    2. 重构
    3. 证明正确性
    4. (试验)
    5. 我将测试放在括号中,因为它们通常是(半)自动生成的。因此,虽然它们是开发周期的一部分,但它们并不是程序员必须完成的工作的一部分。

      据我所知,Cleanroom的性能指标与TDD非常相似,这让我相信TDD的真实值实际上并不在测试部分,它在思考部分。执行一个实验很有意思,你可以用一个简单的秒表替换TDD的“红色”部分,它可以锁定键盘30秒,然后你就可以编写一个新的方法。

答案 1 :(得分:2)

有些情况下自动测试不相关或无法实施:

  • 交互式用户界面通常很难自动测试,很多事情实际上取决于真实的用户体验,如果没有真正的人类,很难对其进行测试 - 质量保证。
  • 有些东西不能“测量”或“测试”,而是继续传递给人类进行测试。例如,当您开发一种应嵌入某些设备的图像处理算法时,很难定义什么是“正确”方法甚至是测量它。不是说有些案例很难测试。

我想说有很多案例无法用自动脚本来完成这项工作 - 大多数需要人类技能的人类反应和质量评估。

没有自动测试是完全有效的。

答案 2 :(得分:1)

缺陷驱动的开发 - 当利益相关者想要在3-4个月的时间内完成一年的项目时,我们有时会被迫遵循这一点,保持其他一切不变。 ;-)

这实际上运作得很好。没有等待需求完成,QA正在进行早期构建,利益相关者从头到尾都在解决问题(因为QA / dev没有足够的信息可供他们使用)。唯一的另一面是没有重构。但是,嘿,如果用户感到高兴并且产品在短短3个月内就用完了,从而节省了大量资金,重构/ SOLID原则无关紧要......但只有当原始开发人员不在时,维护才会成为一种痛苦。颈部。