2009-06-29 11 views
3

G'Day,причин не overdesign решения текущей проблемы

Хотя с думать об этом вопросе здесь о overdesigning for possible future changes это заставило меня задуматься.

Какие причины вы можете противопоставить людям, которые настаивают на выдувании конструкций, потому что «они могут захотеть использовать его где-то еще на каком-то этапе в будущем»?

Аналогичным образом, что вы делаете, когда люди берут требования, а затем возвращаются с раздутым дизайном с большим количеством дополнительных «звонков и свистков», о которых вы не просили?

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

Я говорю о том, что делать, когда люди настаивают на добавлении или наличии посторонних функций, чтобы «мы могли использовать его где-то еще на каком-то этапе в будущем?»

ответ

5

В Википедии есть много веских причин.

http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It

  • Время, потраченное берется от добавления, тестирования или совершенствования необходимой функциональности.
  • Новые функции необходимо отлаживать, документировать и поддерживать.
  • Любая новая функция налагает ограничения на то, что может быть сделано в будущем, поэтому ненужная функция теперь может помешать реализовать необходимую функцию позже.
  • До тех пор пока функция не нужна, трудно полностью определить, что она должна делать, и протестировать ее . Если новая функция не соответствует требованиям , она определена и протестирована, возможно, она не работает , даже если она в конечном итоге равна .
  • Это приводит к раздуванию кода; программное обеспечение становится все больше и больше сложным.
  • Если нет спецификаций и какого-либо контроля версий, функция может быть неизвестна программистам, которые могли бы использовать ее.
  • Добавление новой функции может предложить другие новые функции. Если эти новые функции реализованы, это может привести к эффекту снежного кома в направлении ползучего фетуризма.

Смотрите также: http://en.wikipedia.org/wiki/KISS_principle

1

Это равновесие, как правило, я над дизайн только там, где это дешево, чтобы сделать это. Например, я бы не написал функцию, которая принимает 2 параметра и добавляет их, вместо этого я бы написал функцию, которая принимает n-параметры и добавляет их. Тем не менее, я не напишу функцию, которая принимает n-параметры и добавляет их с помощью сборки.

3

Особенно на встроенном устройстве размер - это деньги (большая часть Flash, скажем, стоит больше и имеет более длительное время программирования при изготовлении или более периферийных компонентов).

Даже в приложении Windows, чем больше ваше приложение и чем больше функций он имеет, тем больше он стоит развивать; подождите, пока вы знаете, что нужно, а что нет, и вы будете тратить гораздо меньше денег на разработку вещей, которые, оказывается, совсем не нужны.

Кроме того, любая дополнительная функциональность приносит с собой потенциальные ошибки.

Хорошо подумать о требованиях перед тем, как что-то разработать, но чрезмерное проектирование часто просто заимствует проблемы.

+0

Чем больше это стоит, тем лучше и лучше. –

+0

@ Карл: Хорошая точка. – Vicky

2

Их: «Мы можем использовать его где-то еще на каком-то этапе в будущем».

Я: «Да, мы можем. И мы не можем. И мы не можем теперь знать, каким образом мы можем захотеть. И если мы действительно хотим это на каком-то этапе в будущем - это время когда мы узнаем, как мы это хотим. Именно тогда мы можем с уверенностью записать это. С другой стороны, если мы напишем его сегодня, но никогда не нуждаемся в нем, мы потратили ресурсы на разработку чего-то, чего не сделали и мы добавили в наш код раздувание, поэтому сложнее найти фрагменты нашей базы кода, которые используются :, потому что у нас есть весь этот (в настоящее время) ненужный код, вытесняющий полезный материал ».

1

Вы говорите

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

и я предполагаю, что иногда люди видят эту линию как размытую, что «имеет смысл» для вас, может быть чрезмерным для кого-то другого.

3

В нашей команде мы просто говорим «ЯГНИ». Это напоминает людям, почему. В Интернете есть больше, чем достаточное количество материалов о YAGNI, если вы считаете, что вам нужно собрать его, чтобы предоставить отчет.

На самом деле, если кто-то скажет «ЯГНИ» вам в нашей команде, он немного сокращает, потому что это похоже на высказывание «C'mon, вы знаете лучше, чем это», что всегда немного болит. :)

1

Overdesign (решение проблемы способом, который является более общим, чем необходимо), определенная часть архитектуры приемлема, только если вы можете себе это позволить.

Если вы принимаете посторонние функции (что, вообще говоря, отличается от переоценки), вам нужно - снова - принять расходы, которые приходят с ним (время ==> деньги) - если вы не можете позволить себе эти дополнительные расходы то вы получили свой ответ :)

1

Существует большая разница в обеспечении будущей функциональности и добавлении будущих функций. Хорошая конструкция должна иметь «крючки» или что-то еще, чтобы обеспечить новые функции или модификации.

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

Другое дело, если они действительно работают на вас. Если это так, вы можете избавиться от них или понизить их в своих обзорах производительности.