Unit testing 雅格尼——不能命名的敏捷实践?

Unit testing 雅格尼——不能命名的敏捷实践?,unit-testing,agile,extreme-programming,yagni,Unit Testing,Agile,Extreme Programming,Yagni,随着我越来越多地将敏捷思想融入到工作中,雅格尼(“你不会需要它”)似乎变得越来越重要。在我看来,这似乎是筛选出被误导的优先事项并决定下一步不做什么的最有效规则之一 然而,雅格尼似乎是一个概念,在这里几乎没有耳语在这么久。我运行了强制搜索,它只显示在一个问题标题中,然后是第二个角色 为什么会这样?我是否高估了它的重要性 免责声明。为了抢先做出回应,我确信我会反对,让我强调一下,雅格尼是快速和肮脏的反面。它鼓励你将宝贵的时间和精力集中在正确的零件上 下面是一些人们可能会问的一些不太重要的问题 我的单

随着我越来越多地将敏捷思想融入到工作中,雅格尼(“你不会需要它”)似乎变得越来越重要。在我看来,这似乎是筛选出被误导的优先事项并决定下一步不做什么的最有效规则之一

然而,雅格尼似乎是一个概念,在这里几乎没有耳语在这么久。我运行了强制搜索,它只显示在一个问题标题中,然后是第二个角色

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

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

下面是一些人们可能会问的一些不太重要的问题

我的单元测试是基于用户需求还是基于框架结构选择的

我是否正在安装(以及测试和维护)单元测试,这些单元测试之所以存在,是因为它们脱离了框架

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

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

配对编程时,观察者的角色价值通常在于“yagni”


你使用积垢工具吗?它是否允许(不,鼓励)您使用它作为一个“RU”工具或C_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u。如果您正确地进行了TDD,也就是说,只编写产生所需功能的测试,然后开发最简单的代码来通过测试,那么默认情况下您遵循的是YAGNI原则。根据我的经验,只有当我跳出TDD的框框,在测试之前开始编写代码,测试我并不真正需要的东西,或者编写比通过测试更简单的代码时,我才违反了YAGNI

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


YMMV.

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

yagni和KISS(保持简单,愚蠢)基本上是相同的原则。不幸的是,我看到“吻”和“雅格尼”一样经常被提及


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

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

我发现的问题是,人们甚至倾向于使用YAGNI下的DI容器(除非你的代码库中已经有了DI容器)编写工厂。我同意JB King的观点。对于许多与我共事过的人来说,YAGNI似乎是一个抄近路/编写草率代码的许可证


例如,我正在编写一个PinPad API,用于抽象多个模型/制造商的PinPad。我发现,除非我掌握了整体结构,否则我甚至不能编写单元测试。也许我不是一个经验丰富的TDD实践者。我确信,对于我所做的是否是雅格尼,会有不同的意见。

改变的自由驱动着雅格尼。在瀑布项目中,咒语是控制范围。通过与客户签订合同来控制范围。因此,客户在范围文档中提供了他们所能想到的所有内容,他们知道一旦签订了合同,就很难对范围进行更改。因此,您最终得到的应用程序具有一系列功能,而不是一组有价值的功能

在敏捷项目中,产品负责人构建一个优先的产品待办事项。开发团队基于优先级(即价值)构建特性。因此,最重要的东西首先要建造。最终得到的应用程序具有用户重视的功能。那些不重要的事情从清单上掉下来或者没有完成。那是雅格尼


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

我想知道,当你过早地优化了你最初不需要的东西时,你会怎么称呼它?:)勒多菲尔:史诗般的浪费时间?(伊渥特):这真的不是你的错,但我现在不能让雅尼和他那该死的胡子离开我的脑袋。你应该给这篇文章打电话,你不打算给它命名。我想我会提到我在一篇博文中提到过这篇文章:我也同意关于项目延迟的基本观点,但不要同意雅格尼和基斯是一样的。我见过很多不需要的简单代码和需要的复杂代码。KISS应该是KIASAN(尽可能简单)。不必要的简单组件