ЯГНИ - Гибкая практика, которую нельзя назвать?

Поскольку я все больше погружаюсь в гибкое мышление в то, как я работаю, ягни ("тебе это не понадобится"), кажется, становится все более и более важным. Мне кажется, это одно из самых эффективных правил для фильтрации ошибочных приоритетов и решения, над чем не следует работать дальше.

Тем не менее, ягни, кажется, является концепцией, о которой едва слышно говорят в SO. Я запустил обязательный поиск, и он отображается только в одном заголовке вопроса, а затем во второстепенной роли.

Почему это? Я переоцениваю его важность?

Отказ от ответственности. Чтобы опередить ответы, я уверен, что получу возражения, позвольте мне подчеркнуть, что ягни - противоположность быстрой и грязной. Это побуждает вас сосредоточить свое драгоценное время и усилия на том, чтобы правильно подобрать необходимые вам детали.

Вот некоторые нерешенные текущие вопросы, которые можно задать.

Мои модульные тесты выбраны на основе требований пользователя или структуры фреймворка?

Я устанавливаю (и тестирую и поддерживаю) модульные тесты, которые существуют только потому, что они выпадают из фреймворка?

Какую часть кода, сгенерированного моей платформой, я никогда не просматривал (но все же мог бы укусить меня однажды, даже если ягни)?

Сколько времени я трачу на работу над своими инструментами, а не над проблемой пользователя?

При парном программировании значение роли наблюдателя часто заключается в "ягни".

Вы используете инструмент CRUD? Позволяет ли он (нет, поощряет) использовать его как инструмент _RU_ или как инструмент C__D, или вы создаете четыре куска кода (плюс четыре модульных теста), когда вам нужен только один или два?

6 ответов

Решение

TDD покорила YAGNI в пути. Если вы правильно выполняете TDD, то есть пишете только те тесты, которые приводят к требуемой функциональности, затем разрабатываете самый простой код для прохождения теста, тогда вы по умолчанию следуете принципу YAGNI. По моему опыту, только когда я выхожу за пределы коробки TDD и начинаю писать код перед тестами, тестами для вещей, которые мне действительно не нужны, или кодом, который является более чем простым способом пройти тест, я нарушаю YAGNI,

По моему опыту, последнее - моя самая распространенная ошибка при работе с TDD - я стремлюсь прыгнуть вперед и начать писать код, чтобы пройти следующий тест. Это часто приводит к тому, что я скомпрометирую оставшиеся тесты, имея предвзятую идею, основанную на моем коде, а не требования того, что нужно тестировать.

YMMV.

Ягни и ПОЦЕЛУЙ (будь проще, глупый) по сути один и тот же принцип. К сожалению, я вижу, что KISS упоминается примерно так же часто, как и слова "ягни".

В моей части дикой природы наиболее распространенной причиной задержек и сбоев проекта является плохое выполнение ненужных компонентов, поэтому я согласен с вашим основным мнением.

Свобода смены дисков YAGNI. В проекте с водопадом мантра - это сфера контроля. Область действия контролируется путем заключения договора с заказчиком. Следовательно, клиент заполняет все, что он может придумать, в документе о сроках, зная, что после того, как контракт будет подписан, изменить сферу будет сложно. В результате вы получите приложения, которые имеют список функций, а не набор функций, которые имеют значение.

В гибком проекте владелец продукта создает приоритетное резервирование продукта. Команда разработчиков строит функции на основе приоритета, т.е. стоимости. В результате самые важные вещи создаются в первую очередь. В итоге вы получите приложение, которое имеет функции, которые ценятся пользователями. То, что не важно, выпадает из списка или не выполняется. Это ЯГНИ.

Хотя YAGNI не является практикой, он является результатом приоритетного списка невыполненных работ. Деловой партнер ценит гибкость, предоставляемую бизнесу, учитывая то, что он может изменять и перераспределять резервы продукта от итерации к итерации. Достаточно объяснить, что YAGNI - это преимущество, получаемое, когда мы с готовностью принимаем изменения, даже на поздних стадиях процесса.

Проблема, которую я нахожу, состоит в том, что люди склонны создавать даже фабрики, используя DI-контейнеры (если у вас их нет в базе кода) под YAGNI. Я согласен с JB King там. Для многих людей, с которыми я работал, YAGNI кажется лицензией на то, чтобы срезать углы / писать неаккуратный код.

Например, я писал API-интерфейс PinPad для абстрагирования PINPad для нескольких моделей / производителей. Я обнаружил, что если у меня нет общей структуры, я не могу написать даже свои юнит-тесты. Может быть, я не очень опытный практик TDD. Я уверен, что будут разные мнения о том, что я сделал, ЯГНИ или нет.

Я видел много постов о SO, ссылающихся на преждевременную оптимизацию, которая является формой yagni или, по крайней мере, ydniy (она вам пока не нужна).

Я не вижу YAGNI как противоположность быстрой и грязной, на самом деле. Он делает только то, что нужно и не более, и не планирует, как программное обеспечение, которое кто-то пишет, должно длиться 50 лет. Это может случиться редко, потому что на самом деле вопросов не так много, по крайней мере, на мой взгляд. Подобно правилам "не повторяйся" и "не усложняй, глупые", которые становятся общими, но не обязательно анализируются и анализируются 101 способом. Некоторые вещи настолько просты, что обычно их получают вскоре после небольшой практики. Некоторые вещи развиваются за кулисами, и если вы повернетесь и посмотрите, вы можете заметить, что они могут быть другим способом заявить о себе.

Другие вопросы по тегам