构建正确的软件,对吧,这很简单,对吧?
阅读:
构建正确的软件,对吧,这很简单,对吧?
我们鼓励我们指导的团队集中精力:交付达到既定目标的产品,从而以最有效、可预测和可靠的方式向利益相关者交付价值。这个交付过程经常包括通过使用行为驱动开发(BDD)和测试驱动开发(TDD)来帮助团队改进他们的内部产品细化和开发实践。在这样做的过程中,根据我的观察,对于如何让团队专注于构建正确的软件和正确地构建软件之间的区别,存在一些混淆。
似乎这种混乱的关键驱动因素之一与接受测试驱动开发(ATDD)适合开发生命周期的关键驱动因素。目前,BDD和ATDD都松散地描述了一个澄清过程,用于迭代或递增的验收标准,了解给定的业务目标,从而导致基于刚刚的情况或基于示例的规范。亚博vip9通道
我们能不能澄清一下?
也许我们可以通过重新定义BDD和ATDD的特定含义和位置来减少关于“构建正确的软件……正确的”的困惑,如下所示:
- 通过面向目标的行为或场景,将BDD围绕BDD的含义正式化。
- 通过将行为连接到自动验收测试,将ATDD围绕建筑“正确”产品的含义形式。
下面是“构建正确的软件……正确的”的高级图:
(1) |
从BDD开始阐明目标,定义基于行为的场景,这些场景将成为面向场景的用户场景的接受标准 |
(2) |
然后,(这是重新定义)使用ATDD作为迭代的面向目标的路线图,在那里交付团队将每个行为转换为一组可执行的步骤,或可执行的验收测试,使用FitNesse、Cucumber或类似的技术 |
(3) |
最后,使用TDD的红绿净循环来开发高质量的产品,具有查看可执行验收测试通过的每个步骤所需要的功能 |
这种方法澄清了术语,并为BDD、ATDD和TDD的开发生命周期提供了特定的含义和位置。根据我的经验,上面的图减少了关于如何“构建正确的软件……正确的”的困惑。
让我知道你的想法。我渴望听到你的想法和疑虑的思考。
评论(3)
janvanderhaegen
嘿isaac,
我个人认为您只描述了敏捷方法,忽略了技术方面,然后再用ATDD和TDD进行补充,从而缩短了BDD。
By Dan North’s definition of BDD (“BDD is a second-generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters.”) you’ll notice that BDD in fact includes ATDD. (“High-automation”, “tested software”). Your definition seems minimize BDD to the outside-in pull-based agile methodology.
通过说明ATDD是BDD的周期之一,我觉得会少令人困惑。
继续沿着这条路走下去,您在ATDD中描述的可执行步骤实际上是单元测试(来自技术POV)。每一步应该生成多个单元测试,例如单元测试在域模型层、集成层的单元测试,单元测试的编写UI层,……TDD Red-Green-Clean周期明显的方式然后和实施软件…(这是BDD)的“多层次/多尺度”方面
我觉得说TDD是BDD的下一个周期会少一些困惑。
最后,我想说的是BDD就是所有的东西:从利益相关者的观点描述亚博vip9通道业务问题,写下这些目标在场景(实例化需求时),使自动化测试(在不同范围的多个)核实每一步,然后Red-Green-Clean直到测试证明该软件(不仅仅是代码)的作品,做走廊测试/审查会议/…,交付软件。
许多业务人亚博vip9通道员缩短了BDD的技术方面,正如许多开发人员缩短了BDD的交互/讨论周期一样。(“给我说明书,我好写代码”……)
小心,
1月
嘿,简,
感谢您花时间阅读这篇文章,也感谢您深思熟虑的回复。我完全同意您关于BDD就是一切的观点——一个用于开发和交付正确产品的迭代交流过程。
即使如此,虽然BDD是整个事物,但它可能包含也可能不包含ATDD,就像ATDD可能包含也可能不包含TDD一样。例如,一些团队使用BDD从高级产品目标中派生行为,而不使用ATDD将这些行为(验收标准)提取到一组自动化验收测试中。同样地,一些团队提取他们的验收标准,然后在不使用TDD的情况下开发解决方案。
因此,虽然有其他方法“建立正确的软件,对”,但我认为我们受益于拥有与TDD的ATDD正式包含BDD的地图。请让我知道你的想法!
真诚地,
-ISAAC.