Pergunta

Como eu cada vez mais absorvido Agile pensar no trabalho como eu, YAGNI ( "você não vai precisar dele") parece tornar-se cada vez mais importante. Parece-me ser um dos mais regras eficazes para filtrar as prioridades erradas e decidir o não ao trabalho na próxima.

No entanto, YAGNI parece ser um conceito que está mal sussurrei sobre aqui no SO. Corri a busca obrigatória, e só aparece em um título da pergunta -. E, em seguida, em um papel secundário

Por que isso? Am I superestimar sua importância?

Disclaimer. Para antecipar as respostas que eu tenho certeza que vou entrar em objeção, deixe-me enfatizar que YAGNI é o oposto e suja rápida . Ela incentiva você a concentrar o seu tempo e esforço preciosos em obter as peças que você precisa direita.

Aqui estão alguns off-the-top perguntas em curso pode-se perguntar.

É minha unidade testes selecionados com base nas necessidades dos utilizadores, ou estrutura de quadro?

Am I a instalação (e testar e manter) testes de unidade que só estão lá porque eles caem fora do quadro?

Como a maior parte do código gerado pelo meu quadro que eu nunca olhou para (mas ainda pode morder-me um dia, mesmo que YAGNI)?

Quanto tempo eu estou gastando trabalhando em minhas ferramentas, em vez do problema do usuário?

Quando par-programação, valor o papel do observador encontra-se frequentemente em "YAGNI".

Do que você use uma ferramenta de CRUD? Será que permitir (ou melhor, incentivar) que você usá-lo como uma ferramenta _RU_, ou uma ferramenta C__D, ou você está criando quatro pedaços de código (além de quatro testes de unidade) quando você só precisa de um ou dois?

Foi útil?

Solução

TDD tem subsumido YAGNI de uma forma. Se você faz TDD corretamente, ou seja, apenas escrever os testes que resultam em funcionalidade necessária, em seguida, desenvolver o código mais simples para passar no teste, então você está seguindo o princípio de YAGNI por padrão. Na minha experiência, é só quando eu fico fora da caixa de TDD e começar a escrever código antes dos testes, testes para coisas que eu realmente não precisa, ou código que é mais do que a forma mais simples possível para passar no teste que eu violar YAGNI .

Na minha experiência, o último é minha gafe mais comuns ao fazer TDD - I tendem a saltar em frente e começar a escrever código para passar o próximo teste. Isso muitas vezes resulta em me comprometer os testes restantes por terem uma ideia preconcebida com base no meu código, em vez dos requisitos do que precisa ser testado.

YMMV.

Outras dicas

YAGNI e KISS (mantê-la simples, estúpido) são essencialmente o mesmo princípio. Infelizmente, eu vejo BEIJO mencionado sobre as vezes que eu vejo "YAGNI".

Na minha parte do deserto, a causa mais comum de atrasos e falhas de projeto é má execução de componentes desnecessários, por isso concordo com seu sentimento básico.

A liberdade de unidades de mudança YAGNI . Em um projeto em cascata, o mantra é escopo de controle. Scope é controlado através do estabelecimento de um contrato com o cliente. Consequentemente, o cliente enche todos eles podem pensar no documento âmbito sabendo que alterações do escopo será difícil uma vez que o contrato foi assinado. Como resultado, você acaba com aplicações que tem uma longa lista de recursos, não um conjunto de características que têm valor.

Com um projeto ágil, o proprietário do produto constrói um product backlog priorizado. A equipe de desenvolvimento constrói recursos com base na prioridade ou seja, o valor. Como resultado, o material mais importante são construídas em primeiro lugar. Você acaba com um aplicativo que tem características que são valorizadas pelos usuários. O material que não é importante cai fora da lista ou não ser feito. Isso é YAGNI.

Enquanto YAGNI não é uma prática, é um resultado da lista backlog priorizado. O parceiro de negócios valoriza a flexibilidade proporcionada o negócio, dado que podem mudar e reprioritized o product backlog de iteração para iteração. É o suficiente para explicar que YAGNI é a vantagem adquirida quando nós prontamente aceitar a mudança, mesmo no final do processo.

A descoberta problema que é que as pessoas tendem a balde mesmo escrevendo fábricas, usando recipientes DI (a menos que você já tem isso em sua base de código) sob YAGNI. Concordo com JB rei lá. Para muitas pessoas com quem trabalhei YAGNI parece ser a licença para cantos cortados / escrever código desleixado.

Por exemplo, eu estava escrevendo uma API PinPad para abstrair vários modelos / PINPad dos fabricantes. Eu encontrei a menos que eu tenho a estrutura geral, eu não posso escrever mesmo meus testes de unidade. Pode ser que eu não sou um praticante muito experiente de TDD. Eu tenho certeza que vai ser diferentes opiniões sobre se o que eu fiz é YAGNI ou não.

Eu vi um monte de posts sobre SO referência a otimização prematura, que é uma forma de YAGNI, ou pelo menos ydniy (você não precisa dele ainda).

Não vejo YAGNI como o oposto e suja rápida, realmente. Ele está fazendo exatamente o que é necessário e não mais e não planejar como as alguém escreve software tem para últimos 50 anos. Pode vir raramente, porque não há realmente que muitas perguntas a fazer em torno dele, pelo menos para a minha mente. Semelhantes às regras "Não se repita" e "mantê-la simples, estúpido" que se tornam comuns, mas não são necessariamente dissecados e analisados ??em 101 maneiras. Algumas coisas são bastante simples, que geralmente é obtido logo depois de fazer um pouco de prática. Algumas coisas se desenvolveram nos bastidores e se você virar e olhar você pode observá-los pode ser uma outra maneira das coisas do Estado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top