Обычно, говоря о разработке программного обеспечения (ПО), выделяют 6 основных этапов:
1.
Планирование
2.
Составление требований
3.
Проектирование
4.
Разработка
5.
Тестирование
6.
Сопровождение
Последовательность и длительность этапов зависит от выбранной методологии разработки ПО и может существенно отличаться.
Планирование программного проекта - в зависимости от потребностей и выбранной методологии разработки может либо вообще отсутствовать, либо занимать достаточно большую часть разработки. На этом этапе определяются основные задачи, которые должны быть решены в рамках разработки ПО, производится оценка необходимого функционала, техническое обследование объекта автоматизации, оценка финансовых, временных, человеческих, технических и других ресурсов, необходимых для осуществления разработки. Так же определятся, какие будут использованы методы разработки и тестирования. Могут быть построены временные графики, составлен бюджет, план работ и прочие документы.
Составление требований заказчика - на этом этапе происходит сбор, анализ и формализация требований к разрабатываемому ПО со стороны заказчика. Этап служит для выработки максимального взаимопонимания между заказчиком и исполнителем. Обсуждаются форма предоставления информации, необходимый функционал, проблемы и ограничения, которые могут возникнуть при разработке. Составленные требования могут быть протестированы.
Проектирование программного продукта - на этом этапе происходит разработка и детализация модели разрабатываемого программного продукта. На основании построенной модели определяется структура и архитектура ПО, организация и взаимодействие модулей и интерфейсов, структура базы данных, строится диаграмма классов и т.д.. Процесс проектирования проводится с учетом методологии, выбранной на этапе планирования. Может быть составлен прототип разматываемого ПО.
Разработка программного обеспечения - единственный этап, которые не может быть пропущен, вне зависимости от выбранной методологии. На этом этапе происходит преобразования результатов проектирования системы в программный код на используемом языке программирования в соответствии с используемыми стандартами кодирования. На этом же этапе разработчики предоставляют информацию инженерам по тестированию для разработки комплекса тестов, разрабатывают техническую документацию и производят планирование интеграции ПО.
Тестирование программного обеспечения - этап, не имеющий четко определенного начала. Может начаться еще на этапе составления требований. Чем раньше начнется тестирование тем выше вероятность, что программное обеспечение будет в точности соответствовать требованиям и потребностям заказчика, тем раньше будут выявлены критические ошибки проектирования и разработки и тем дешевле обойдется их исправление. Тестирование может проводиться в ручном или автоматическом режиме. По результатам тестов составляется отчет. Методы и виды тестирования подробно описаны на странице
тестирование программного обеспечения.
Сопровождение программного обеспечения - на этом этапе основное внимание уделяется внесению изменений в программное обеспечение. Изменения могут быть связаны с доработками по желанию заказчика, устранением ошибок, изменением функционала или среды окружения. Так же осуществляется консультация, обучение и поддержка пользователей.
Перечисленные этапы, в зависимости от выбранной методологии и модели жизненного цикла, могут следовать друг за другом (в каскадной модели), проходить параллельно либо периодически (в итерационной модели). Под моделью жизненного цикла разработки программного обеспечения подразумевается последовательность процессов, задач и действий, выполняемые при разработке программного обеспечения. Выбор модели зависит от требований, предъявляемых к разработке, выбранной методологии, сложности проекта и прочих условий.
Наибольшей популярность пользуются:
1.
Каскадная модель (водопад)
2.
V-образная модель
3.
Прототипирование
4.
Быстрая разработка (RAD-модель)
5.
Многопроходная модель
6.
Спиральная модель
Каскадная модель (водопад) - все этапы разработки следуют друг за другом в строгой последовательности. Переход к следующему этапу происходит только после окончания предыдущего. Возвращение к пройденным этапам и внесение изменений не предусмотрено. По завершении каждого этапа создается полный комплект документации. Качество разработанного программного обеспечения оценивается по точности соответствования требованиям технического задания. Каскадный подход обычно применяют, если в начале разработки удается достаточно точно сформулировать все требования. В током случае разработка идет выполняется в логичной последовательности, что позволяет достаточно точно оценить сроки выполнения работ и их стоимость. К недостаткам модели относится отсутствие гибкости, сложность и дороговизна внесения изменений в разрабатываемый проект.
V-образная модель - является одной из разновидностей каскадной модели. Особое внимание уделяется тестированию продукта. Выполнение всех этапов разработки происходит, как и в каскадной модели, последовательно. Отличие состоит в том, что каждому из этапов проектирования и разработки соответствует определенный этап тестирования. Так, после кодирования выполняется Модульное и Интеграционное тестирование, проверяющее качество проектирования и реализации системы, затем выполняется Системное тестирование, проверяющее соответствие и правильность требований к программному продукту. Затем начинает этап эксплуатации и сопровождения, на котором проверяется работоспособность проекта в целом и его соответствие поставленным задачам. По сравнению с Каскадной моделью имеет преимущество в высоком качестве тестирования и контроля разработки. Модель, чаще всего, использует если предъявляются особо высокие требования к надежности программного обеспечения.
Модель прототипирования - отличается от предыдущих моделей тем, что на ранних этапах проектирования и разработки программного продукта создается его прототип. Потенциальные пользователи начинают использовать созданный прототип, выявляют его сильные и слабые стороны. За счет этого обеспечивается обратная связь между пользователями и разработчиками, позволяющая вносить изменения в проект на ранних этапах его разработки и проектирования, что существенно снижает стоимость вносимых изменений и максимально приближает готовый продукт к потребностям заказчика. Данная модель, обычно, применяется в случаях, когда требования к разрабатываемому программному обеспечению заранее не известны, неполны или требуют уточнения. Так же эта модель хорошо использовать, если производится новая разработка, не имеющая аналогов.
Модель быстрой разработки (
RAD-модель) - как понятно из названия, модель направленна на быструю разработку приложений. Особенность модели состоит в постоянном привлечении к работе заказчика, что существенно снижает риски внесения изменений в проект на поздних стадиях, укоряет выработку требований и апробацию прототипов разрабатываемого программного обеспечения. Разработка ориентирована на автоматизацию программирование, повторное использование кода и использование уже готовых сторонних модулей.
Многопроходная модель (
Итерационная) - отличается тем, что этапы проектирования, кодирования и тестирования программного продукта за все время разработки проводятся насколько раз (проходят насколько итераций).
Спиральная модель - очень похожа на многопроходную модель. Особенность модели состоит в том, что ПО создается не сразу целиком, а по частям. Создается прототип, который можно начинать использовать. При этом производится постепенное наращивание функционала, улучшение и переработка интерфейса, доработки и исправление ошибок. При выборе спиральной модели не требуется раннее формулирование всех требований к программному обеспечению, поскольку они уточняются в процессе разработки. Модель заключает все достоинства каскадной и интеграционной модели, позволяет заказчику увидеть программный продукт на более ранних этапах и вовремя внести корректировки в разработку. Особенность модели состоит в том, что она может не иметь четко ограниченных по времени этапов и продолжать до бесконечности, поскольку любая реакция заказчика может вызвать новый цикл разработки. Является одной из самых гибких моделей. Подходит для больших и очень сложных проектов, а так же для проектов, требования к которым заранее не известны.