Question

Comme je l'ai de plus en plus absorbé la pensée agile dans la façon dont je travaille, YAGNI ( « vous n'êtes pas en avoir besoin ») semble devenir de plus en plus important. Il me semble être l'une des règles les plus efficaces pour filtrer les priorités peu judicieuses et de décider ce que pas pour travailler ensuite.

Et pourtant YAGNI semble être un concept qui est à peine chuchotait ici à SO. J'ai couru la recherche obligatoire, et il montre que dans un titre de la question -. Et dans un rôle secondaire

Pourquoi est-ce? Est-ce que je les surestimations son importance?

Disclaimer. Pour anticiper les réponses que je suis sûr que je vais dans l'objection, permettez-moi de souligner que YAGNI est le opposé de rapide et sale . Il vous encourage à concentrer votre temps précieux et d'efforts sur l'obtention des pièces que vous avez besoin d'droite.

Voici quelques off-the-top des questions en cours on peut se demander.

sont mes tests unitaires sélectionnés en fonction des besoins des utilisateurs, ou structure de cadre?

Suis-je installer (et les essais et l'entretien) Tests unitaires qui ne sont là parce qu'ils tombent du cadre?

Dans quelle mesure le code généré par mon cadre, j'ai jamais regardé (mais peut-être me mordre un jour, même si YAGNI)?

Combien de temps je dépense à travailler sur mes outils plutôt que le problème de l'utilisateur?

Lorsque deux-programmation, la valeur de rôle de l'observateur est souvent « YAGNI ».

Utilisez-vous un outil CRUD? Est-ce qu'il permet (non, encourager) vous l'utiliser comme un outil de _RU_, ou un outil de C__D, ou créez vous quatre morceaux de code (plus quatre tests unitaires) lorsque vous avez seulement besoin d'un ou deux?

Était-ce utile?

La solution

TDD a englobé YAGNI d'une manière. Si vous faites TDD correctement, à savoir, écrire uniquement les tests qui donnent lieu à des fonctionnalités requises, puis développer le code le plus simple de passer le test, vous suivez le principe de YAGNI par défaut. Dans mon expérience, il est seulement quand je reçois en dehors de la boîte de TDD et commencer à écrire le code avant que des tests, des tests pour des choses que je ne ai pas vraiment besoin, ou le code qui est plus que la façon la plus simple possible de passer le test que je ne respecte pas YAGNI .

Dans mon expérience ce dernier est mon faux pas le plus courant lorsque vous faites TDD - j'ai tendance à sauter en avant et commencer à écrire du code pour passer le test suivant. Cela se traduit souvent en me compromettre les autres tests en ayant une idée préconçue basée sur mon code plutôt que les exigences de ce qui doit être testé.

YMMV.

Autres conseils

YAGNI et Kiss (keep it simple, stupide) sont essentiellement le même principe. Malheureusement, je vois BAISER mentionné à peu près aussi souvent que je vois « YAGNI ».

Dans ma partie du désert, la cause la plus fréquente des retards dans les projets et les échecs est une mauvaise exécution des composants inutiles, donc je suis d'accord avec votre sentiment de base.

La liberté de changer les disques YAGNI . Dans un projet de chute d'eau, le mantra est le contrôle portée. Champ d'application est contrôlée par l'établissement d'un contrat avec le client. Par conséquent, le client enfourne tout ce qu'ils peuvent penser dans le document de portée sachant que les changements à la portée sera difficile une fois que le contrat a été signé. En conséquence, vous vous retrouvez avec des applications qui a une longue liste de caractéristiques, et non un ensemble de fonctionnalités qui ont une valeur.

Avec un projet agile, le propriétaire du produit construit un carnet de produit hiérarchisé. L'équipe de développement construit fonctionnalités basées sur la priorité à savoir, la valeur. En conséquence, les choses les plus importantes se construit d'abord. Vous vous retrouvez avec une application qui a des caractéristiques qui sont appréciées par les utilisateurs. Les choses qui ne sont pas importantes chutes de la liste ou ne se fait pas. C'est YAGNI.

Alors que YAGNI n'est pas une pratique, il est le résultat de la liste des priorités carnet de commandes. Les valeurs partenaire la flexibilité accordée l'entreprise étant donné qu'ils peuvent changer et le carnet de commandes de rétablir les priorités produit d'une itération à. Il suffit d'expliquer que YAGNI est l'avantage acquis lorsque nous acceptons facilement le changement, même tard dans le processus.

Le problème que je trouve que les gens ont tendance à godet même écrire des usines, des conteneurs DI (sauf si vous avez déjà que, dans votre base de code) sous YAGNI. Je suis d'accord avec JB roi là-bas. Pour beaucoup de gens que j'ai travaillé YAGNI semble être le permis de couper les coins ronds / d'écrire du code bâclée.

Par exemple, je rédigeais une API PINPAD pour abstraire plusieurs modèles / fabricants de PINPad. J'ai trouvé à moins que j'ai la structure générale, je ne peux même pas écrire mes tests unitaires. Peut-être que je ne suis pas un practicien très expérimenté de TDD. Je suis sûr qu'il y aura des opinions divergentes quant à savoir si ce que je faisais est YAGNI ou non.

Je l'ai vu beaucoup de messages sur l'optimisation prématurée SO référencement qui est une forme de YAGNI, ou tout au moins ydniy (vous n'avez pas besoin encore).

Je ne vois pas YAGNI comme le contraire de rapide et sale, vraiment. Il fait tout ce qui est nécessaire et pas plus et ne prévoit pas comme quelqu'un logiciel écrit doit durer 50 ans. Il peut venir rarement parce qu'il n'y a pas vraiment de questions à poser autour d'elle, au moins à mon avis. Tout comme les « ne vous répétez pas » et des règles « garder les choses simples, stupides » qui deviennent communs, mais ne sont pas nécessairement disséquées et analysées dans 101 façons. Certaines choses sont assez simples qu'il est généralement obtenu bientôt après avoir fait un peu de pratique. Certaines choses se développer dans les coulisses et si vous retournez et regardez vous pouvez les avis peuvent être une autre façon de dire les choses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top