Тридцать лет назад Йордон и Константин (Yourdon and Constantine) в книге Structured Design определили экономику как двигатель проектирования программ. ПО должно быть спроектировано так, чтобы уменьшилась его общая стоимость. Она делится на начальную стоимость и стоимость сопровождения: стоимостьобщая = стоимостьразработки + стоимостьсопровождения Когда в индустрии был накоплен достаточный опыт разработки ПО, для многих стал сюрпризом тот факт, что начальная стоимость гораздо ниже стоимости сопровождения. Сопровождение обходится дорого, поскольку понимание кода — это процесс, занимающий много времени и подверженный ошибкам. Внесение изменений существенно облегчается, если известно, что именно требуется изменить. Изучение существующего кода является самой трудоемкой частью. После внесения изменений они должны быть протестированы и внедрены. стоимостьсопровождения = стоимостьпонимания + стоимостьизменений + стоимостьтестирования + стоимостьпоставки Одной из стратегий уменьшения общей стоимости являются большие вложения в начальную разработку, в надежде уменьшить стоимость поддержки или же вовсе избавиться от ее необходимости. Но, если код будет непредвиденно меняться, не имеет значения, сколько вы потратите на его подготовку к изменениям. Необдуманные попытки обобщения кода с целью обеспечить будущие нужды, часто пересекаются с непредвиденными изменениями, которые оказываются необходимыми. Увеличение только лишь авансовых затрат на ПО противоречит двум важным экономическим принципам: временной стоимости денег и неопределенности будущего. Если сегодняшний доллар стоит больше завтрашнего, то применяющаяся стратегия должна в целом учитывать возможные затраты. Также в этой стратегии непосредственная выгода должна иметь больший приоритет, чем долгосрочная. Хотя это и звучит призывом бросаться в бой сломя голову, но шаблоны реализации концентрируются на способах получения немедленной выгоды так же, как и на чистоте кода ради возможности будущего развития. Моя стратегия уменьшения общей стоимости заключается в уменьшении стоимости понимания кода в фазе поддержки. Для этого я обращаю внимание программистов на важность общения, взаимодействия друг с другом. Эта стратегия приносит и краткосрочные выгоды — уменьшение количества дефектов, легкость использования общих библиотек, постепенность разработки. |