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

YAGNI-不能命名的敏捷实践?[关闭]

  •  16
  • dkretz  · 技术社区  · 17 年前

    随着我越来越多地将敏捷思维融入我的工作方式,yagni(“你不需要它”)似乎变得越来越重要。在我看来,这是过滤出被误导的优先事项并决定什么是最有效的规则之一 下一步工作。

    然而,yagni似乎是一个在SO很少被提及的概念。我进行了强制性搜索,它只出现在一个问题标题中,然后出现在次要角色中。

    这是为什么?我是否高估了它的重要性?

    免责声明。为了抢先回应,我相信我会反对的,让我强调一下,雅格尼是 与快速和肮脏相反 。它鼓励你将宝贵的时间和精力集中在正确使用所需的零件上。

    以下是一些人们可能会问的一些悬而未决的问题。

    我的单元测试是根据用户需求还是框架结构选择的?

    我是否安装(以及测试和维护)了那些仅仅因为脱离框架而存在的单元测试?

    我的框架生成的代码中有多少是我从未看过的(但总有一天可能会咬到我,即使是yagni)?

    我花了多少时间在我的工具上,而不是用户的问题上?

    在结对编程中,观察者的角色价值往往在于“yagni”。

    你使用CRUD工具吗?它是否允许(不,鼓励)您将其用作_RU_工具或C__D工具,或者在只需要一两个代码的情况下创建四段代码(加上四个单元测试)?

    6 回复  |  直到 17 年前
        1
  •  12
  •   tvanfosson    17 年前

    TDD在某种程度上包含了YAGNI。如果你正确地进行TDD,也就是说,只编写那些产生所需功能的测试,然后开发最简单的代码来通过测试,那么你默认遵循YAGNI原则。根据我的经验,只有当我跳出TDD的框框,在测试之前开始编写代码,测试我并不真正需要的东西,或者编写超过通过测试的最简单方法的代码时,我才违反了YAGNI。

    根据我的经验,后者是我在进行TDD时最常见的失礼行为——我倾向于跳到前面,开始编写代码以通过下一个测试。这通常会导致我基于我的代码而不是需要测试的内容的要求产生先入为主的想法,从而影响剩余的测试。

    YMMV。

        2
  •  4
  •   MusiGenesis    17 年前

    Yagni和KISS(保持简单,愚蠢)本质上是相同的原则。不幸的是,我看到KISS被提及的次数和我看到“yagni”的次数一样多。

    在我所处的荒野地区,项目延误和失败的最常见原因是不必要组件的执行不力,所以我同意你的基本观点。

        3
  •  3
  •   Cam Wolff    17 年前

    改变的自由驱使着YAGNI 在瀑布式项目中,核心原则是控制范围。通过与客户签订合同来控制范围。因此,客户在范围文件中尽其所能地填写,因为他们知道一旦合同签署,范围的变更将很困难。因此,您最终得到的应用程序具有一系列功能,而不是一组有价值的功能。

    在敏捷项目中,产品负责人会构建一个优先级产品待办事项列表。开发团队根据优先级(即价值)构建功能。因此,最重要的东西会先建造。您最终会得到一个具有用户重视的功能的应用程序。不重要的事情从清单上掉下来或没有完成。这就是YAGNI。

    虽然YAGNI不是一种实践,但它是优先级积压列表的结果。业务合作伙伴重视为业务提供的灵活性,因为他们可以在迭代中更改产品待办事项列表并重新确定其优先级。只要解释一下,YAGNI就是当我们欣然接受变化时所获得的好处,即使在过程的后期也是如此。

        4
  •  1
  •   Vyas Bharghava    17 年前

    我在SO上看到了很多关于过早优化的帖子,这是yagni的一种形式,或者至少是ydniy(你还不需要它)。

        5
  •  0
  •   Jim Anderson    17 年前

    我发现的问题是,人们倾向于在YAGNI下使用DI容器(除非你的代码库中已经有了)来编写工厂。我同意JB King的观点。对于我与YAGNI合作过的许多人来说,这似乎是偷工减料/编写草率代码的许可证。

    例如,我正在编写一个PinPad API,用于抽象多个型号/制造商的PinPad。我发现,除非我有整体结构,否则我甚至无法编写单元测试。也许我不是一个经验丰富的TDD实践者。我敢肯定,对于我所做的是否是YAGNI,会有不同的看法。

        6
  •  -1
  •   JB King    17 年前

    我不认为YAGNI是快速和肮脏的对立面,真的。它只做需要做的事情,不再做更多的事情,而不是像一个人写的软件必须持续50年那样进行规划。它可能很少出现,因为围绕它没有那么多问题要问,至少在我看来是这样。类似于“不要重复自己”和“保持简单,愚蠢”的规则,这些规则变得普遍,但不一定以101种方式进行剖析和分析。有些事情很简单,通常在做了一点练习后很快就会得到。有些事情是在幕后发展起来的,如果你回头看,你可能会注意到它们可能是陈述事情的另一种方式。

    推荐文章