Законы изменений

Фразу «постоянны только изменения» приписывают древнегреческому философу Гераклиту. Также часто говорят, что выживают только те, кто способен «приветствовать изменения». Кент Бек использует эту фразу в качестве подзаголовка к своему бестселлеру «Экстремальное программирование» (Extrame Programming) [Beck 2005].

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

Некоторые авторы утверждают, что успешное программное обеспечение требует больше технической поддержки, чем неудачное [Brooks 2005, Glass 2003]. Одна из причин – стремление людей использовать любимое ПО в неожиданных ситуациях. Например, в Африке те, у кого нет банковских счетов, рассчитываются друг с другом, переводя деньги с мобильных телефонов. Еще одна причина состоит в том, что успешное ПО часто живет дольше, чем то поколение «железа» и бизнес-процессы, для которых оно первоначально предназначалось. Так, например, ожидалось, что многие программные продукты не переживут XX век, поскольку их придется серьезно модифицировать в связи с проблемой 2000 года (ее еще часто неправильно называют «ошибка миллениума»).

Необходимость учитывать изменения в окружающей среде при разработке ПО настолько фундаментальна, что рано или поздно в литературе мне должны были попасться соответствующие законы. Их предложил профессор Меир Леман:

1. Непрерывные изменения: система, используемая в изменяющейся среде, нуждается в постоянной модернизации, в противном случае удовлетворенность пользователей будет прогрессивно снижаться.

2. Увеличение сложности: если не предпринимать усилий по ее упрощению, то по мере своего развития система будет становиться все сложнее.

3. Саморегулирование: эволюция системы – саморегулируемый процесс, при этом темпы изменения атрибутов системы в течение ее жизненного цикла близки к нормальному распределению.

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

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

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

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

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

У меня имеются мелкие разногласия с некоторыми из законов Лемана (в особенности с третьим[91]), но в любом случае их смысл понятен и верен: система должна постоянно изменяться, иначе ее эффективность снижается. А когда система изменяется, то она становится более сложной, если не предпринимать мер по ее упрощению.

Может быть, самое интересное наблюдение Лемана состоит в том, что количество усилий по внесению изменений в систему и ее адаптации остается (приблизительно) постоянным в течение всего жизненного цикла. Мы вернулись к тому, что постоянны только изменения…