Итерационная модель разработки

Итерационная модель разработки - процесс проектирования и реализации кода продукта, при котором не вносятся серьёзные изменения в архитектуру, а лишь направляются эволюционные процессы развития. Вот так вот мудрёно я завернул. Скукотища? =) Читайте дальше, ещё не такое увидите!

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

В статье Стартап. Этап 2 - Проектирование я привёл список того, что обычно следует продумать на стадии проектирования, но все эти пункты носят рекомендательный характер. В реальности же описать и предусмотреть в одиночку все нюансы не под силу никому.

Итерационная модель разработки применяется для упрощения ведения проекта. Давайте рассмотрим это на примере. Допустим, Вам нужно написать систему сбора и анализа статистики. Довольно типовая задача, верно?

Конечно же, хочется замахнуться на глобальную, уникальную, универсальную (маниакальную и прочие -альную) систему, которая будет уметь в зависимости от переданного пресета настроек и входных файлов формировать различные отчёты с применением статистических методов анализа, а также рисовать красивые графики и - чего доброго! - прогнозировать! Уверяю Вас, сколько бы Вы ни сидели с UML-библией, бумагой, ручкой и кружкой чая, всё равно до конца продумать систему такого уровня не получится. Кстати говоря, живую реализацию такого уровня я ещё нигде не встречал, может быть, кто-то укажет мне на неё? Буду признателен…

Разработку в таком случае нужно вести аккуратно, по пути эволюционному, итерационно. Шаг за шагом. Сформулируйте минимальные требования к рабочей системе. Обращаю Ваше внимание, нужно постоянно видеть перед собой цель и не плодить мёртвый код! Как только требования определены, реализуйте код, будьте предельно сдержанны, побольше комментариев к коду. После завершения цикла (микроцикла, если Вам угодно), проведите анализ выполненной работы, сопоставьте текущее направление разработки с конечными целями, скорректируйте дальнейшие действия.

Код при таком подходе должен постоянно меняться, улучшаться, эволюционировать. Не бойтесь отсекать лишнее - это всего-лишь код, но он может стать раковой опухолью. Итерационная разработка очень плотно связана с профилированием кода, написание же Unit Test’ов затруднено из-за высокого полиморфизма архитектуры во времени. Не забывайте, что один из главных постулатов эволюции - усложнение структурных образований за счёт деления и мутаций. Меня могут побить биологи, но для кода это совершенно справедливо. Усложняясь, функции (ну и конечно же модули, классы, группы классов) должны делиться, с умом разграничивая свой функционал между наследниками. Самое главное - не отпустить их жить своей жизнью. Постоянно направляйте их развитие в сторону глобальной конечной цели. К сожалению многие OpenSource разработчики (да и “проприетарные” тоже) уводят свои продукты далеко в сторону от первоначальной идеи, и тут появляются fork’и. =)

Вернёмся к микроциклам. Их длина может варьироваться от 2-3 часов до 2-3 дней. Оптимальным интервалом является 4-8 часовой микроцикл (половина, либо полный рабочий день). За это время должна быть сформирована задача, найден подход (довольно просто: он сам должен “родиться”), реализовано решение и подведены итоги, желательно с отчётом (строчки в лог-файл проекта будет достаточно).

Какой бы эта модель разработки Вам не представлялась, у неё есть серьёзный минус: затруднена смена (частичная или полная) архитектуры проекта. Дорогу нужно выбирать в начале пути. Главным плюсом могу назвать готовность системы выполнять свои функции (путь и частично) практически с самого начала разработки.

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

Комментариев: 7

  1. Петр пишет:

    Глобально никак нельзя,другие непоймут.

  2. Stac пишет:

    Да, хорошо бы следовать твоим рекомендациям…
    Но у меня почти никогда это не получается.
    Когда пишу даже саму маленькую и простую программу в мозгу всегда прокрутиваются выозможные перспективы ее развития. Что сказывается на коде, конечно.
    К сожалению, большинство программ моих предполагаемого развития не проходит.
    Но…
    Буквально недавно я писал программу для выполнения простой задачи преобразования данных (на входе файл одного формата, на выходе - другого).
    Она была решена успешно и заказчику понравилось. Была поставлена аналогичная задача, но я понял, что написанная программа должным образом с ней не справится и итерационная модель не прокатит, придется писать с нуля, скорее всего даже на другом языке….

  3. Павел Воронин пишет:

    Это лишь одна из моделей разработки.

  4. seregaborzov пишет:

    да что-то трудновато читается =)

  5. Павел Воронин пишет:

    Ну извините. Буду писать проще и структурированнее.

  6. Павел Воронин пишет:

    Именно! Спасибо, что прочли, вникли и поняли. =)

  7. Sergei_T пишет:

    Простое правило - не порождать лишние сущности без необходимости