В известной статье Никлауса
Вирта («Program development by stepwise
refinement», CACM, 1971. Vol. 14, N 4.
Apr. p. 221-227) разработка программного
обеспечения рассматривается как последовательность
уточняющих шагов. Первоначально даётся
грубый метод решения, который затем уточняется
до тех пор, пока не будет получен удовлетворительный
результат. К такому же выводу, но с иной
стороны, приходит и Фредерик Брукс в известной
книге («Мифический человеко-месяц или
как создаются программные системы», СПб,
Символ-Плюс, 1999). В частности он пишет:
«Поэтому проблема не в том, создавать
или нет опытную систему, которую придётся
выбросить. Вы всё равно это сделаете».
А далее, в разделе «Постоянны только изменения»,
он добавляет: «После уяснения того, что
опытную систему нужно создать, а потом
выбросить, и что перепроектирование с
новыми идеями неизбежно, полезно обратиться
к изменению как явлению природы. Первый
шаг – признание того, что изменение –
это образ жизни, а не постороннее или
досадное исключение» (стр. 108-109). К
этим словам имеет смысл прислушаться.
Рассматривая проект сложной
системы так, как предложено выше, имеет
смысл ещё раз акцентировать внимание на
том, что начало работ по проекту не предусматривает
детального анализа предметной области.
Развитие системы может продолжаться бесконечно
долго, в том числе и без участия разработчиков
системы, силами самих пользователей. Процесс
развития системы имеет ярко выраженный
итерационный характер. При этом могут
добавляться новые уровни и подуровни,
наращиваться интерфейсы, образовываться
новые классы и т.д. После того, как определён
уровень и интерфейсы, происходит его непрерывное
развитие от простейших реализаций до самых
сложных.
Циклы разработки различных
уровней независимы друг от друга и могут
иметь различную протяжённость во времени.
Поскольку взаимодействие между уровнями
осуществляется только посредством интерфейса,
то нет никаких причин осуществлять синхронизацию
работы различных команд, создающих смежные
уровни. Точно также любой из уровней может
быть завершён задолго до окончания работ
по всему проекту. Разработчики могут считать,
что работы по созданию того или иного
уровня иерархии системы завершены, если
уровень реализует весь заявленный в интерфейсе
функционал с должным качеством, а также
содержит необходимые инструменты для развития
этого уровня силами пользователей или
других разработчиков.
|