Жизненный цикл разработки системы (süsteemiarenduse elutsükkel, Systems Development Life Cycle) (также жизненный цикл разработки программного обеспечения) – это процесс, в ходе которого создается новая или изменяется старая система программного обеспечения, а также модели и методы, которые разработчики используют при разработке систем. Программное обеспечение является конечным продуктом процесса разработки системы. Процесс разработки системы состоит как из проектирования продукта (дизайна), так и из изготовления продукта. Цель процесса разработки системы – изготовить высококачественной продукт, то есть программное обеспечение, который отвечает потребностям и ожиданиям пользователей, может быть изготовлен к установленному сроку и быть в пределах оговоренной стоимости, работает эффективно и результативно в текущей и планируемой ИТ-инфраструктуре и не является дорогим в сопровождении и развертывании.
Что касается программного обеспечения, ровно, как и любого другого продукта, его жизненный цикл (процесс разработки) можно разделить на фазы. Наименования фаз и детализация разделения на фазы меняется в зависимости от автора. Однако это не означает, что перечень основных действий по разработке как-то отличается. Типичными частями жизненного цикла можно считать: анализ (analüüs, analysis), проектирование / планирование (projekteerimine / kavandamine, design), реализация (teostus, implementation) и сопровождение (hooldus, maintenance).
Исходя из этого, рассмотрим, какие виды деятельности содержат перечисленные фазы разработки.
На этапе анализа, так и в ходе всей разработки, составление спецификации требований, предъявляемых к программному обеспечению, является одной из самых важных целей. Без этого невозможно переходить на следующие шаги. Из-за своей важности работа с требованиями часто рассматривается как отдельная фаза. Требования дают представление о том, что хочет пользователь с помощью программного обеспечения сделать какое программное, какие цели ему нужно достигнуть. Другими словами, здесь имеем дело с определением функциональности программного обеспечения (функциональные требования). Кроме того, также важны нефункциональные требования. Это часто дополнительные ограничения или условия, с которыми необходимо считаться при работе системы.
Пример функциональных требований: ученик желает посмотреть свои оценки в привычной на текущий момент учебной информационной системе (õpiinfosüsteem ÕIS). Учителю нужно просматривать, добавлять, редактировать и удалять оценки обучаемых учеников (конечно, своего предмета). На этом перечень требований ÕIS не исчерпывается. Здесь появляется еще один факт, состоящий в том, что требования обычно связаны с ролями – у разных пользователей системы имеются различные предпочтения и права. Нефункциональные требования могут, например, включать в себя условие, такое, что система должна работать непрерывно, и максимально допустимая длина перерыва может равняться получасу.
Проектирование (планирование, projekteerimine / kavandamine) в соответствии с определением стандарта IEEE – это «определение характеристик архитектуры системы или компонентов, составляющих, интерфейсов и других частей». Англоязычное слово «дизайн» обозначает как действие, так и продукт, полученный в результате этого действия, на эстонском языке можно результат наименовать «kavand» или «projekt». Планирование является частью процесса разработки, в течение которой анализируются требования, необходимые для создания внутренней структуры программного обеспечения. Созданное описание, в свою очередь, является фундаментом для реализации. Проект программного обеспечения должен описывать архитектуру системы, т.е. как система подразделяется на части (компоненты), и каковы их интерфейсы (возможности сопряжения с другими компонентами). Компоненты должны быть описаны с такой точностью, которая позволила бы начать их реализацию.
В классическом жизненном цикле программного обеспечения в соответствии со стандартом ISO / IEC 12207 Software life cycle processes, часть проектирования состоит из двух этапов:
- архитектурное проектирование, в течение которого оговариваются так называемые компоненты высокого уровня, связи между наиболее крупными и общими частями программного обеспечения;
- детальная разработка компонентов, в течение которого определяется их структура (процедуры, объекты, алгоритмы и т.д.).
На фазе реализации (исполнения, realisatsioon / teostus) составляется программное обеспечение, исходя из созданного на этапе проектирования программного проекта. Разделение на компоненты создает предпосылки по разделению труда, т.е. когда для кодирования маломальской большой системы привлекают к работе команду программистов. На фазе реализации проводится также тестирование запрограммированных частей, т.е. поиск ошибок. Первоначально поиск ошибок проводится в логике компонентов.
На самом деле развитие не происходит так прямолинейно, когда сначала делается доскональный проект для всей систем и только затем приступают к программированию. Скорее эти фазы переплетаются, и по мере становления проекта часть системы создается и также реализуется. В то же время, однако, продолжается проектирование и остальных частей системы.
Последней частью фазы реализации является проверка достоверности (valideerimine) системы. Это также по существу тестирование, где, однако, главной целью является выяснение того, отвечает ли созданная система требованиям пользователей, проще говоря – делает ли система то, что хочет пользователь.
Сопровождением программного обеспечения называют изменение программного обеспечения после его передачи клиенту, которое необходимо для исправления ошибок, чтобы повысить производительность или улучшить другие свойства. Целями сопровождения являются подгонка системы с учетом изменившейся среды (условий) и в соответствии с изменившимися желаниями пользователя, а также поддержка работоспособности системы программного обеспечения как можно дольше. Важным аспектом сопровождения является обеспечение функционирования программного обеспечения, написанного сторонними программистами (исправление, дополнение, преобразование), из этого, в свою очередь, вытекают зависимости с проведенной на предыдущих фазах работой по качеству. Хорошо продуманное, закодированное и задокументированное программное обеспечение гораздо проще, быстрее и, следовательно, дешевле поддерживать.
Разработка программного обеспечения заканчивается с передачей программного обеспечения клиенту. Готовая программа должна быть такой, какую хотел иметь клиент. Однако программное обеспечение должно развиваться далее. В ходе работы обнаруживаются аномалии, изменяется рабочая среда, возникают новые требования. Необходимость изменений регистрируется, определяется влияние изменений, код изменяется, делаются тесты, выдается новая версия программного обеспечения и при необходимости также организуется обучение.
Для сравнения, Ян Соммервилль (Ian Sommerville) в своей книге «Software Engineering» («Разработка программного обеспечения»), обыгрывает следующие виды деятельности процесса создания и эксплуатации программного обеспечения. Размышляя над тем, что их сущность покрывает описания вышеприведенных фаз.
1. Описание программного обеспечения, в ходе которого клиенты и разработчики программного обеспечения (инженеры-программисты) определяют в результате совместной работы функциональность создаваемого программного обеспечения и налагаемые ограничения.
2. Разработка программного обеспечения, в ходе которого проектируется и программируется программное обеспечение
3. Проверка достоверности (соответствия) программного обеспечения, в ходе которого контролируется программное обеспечение с целью, чтобы убедиться, что оно такое, какое, как хотел клиент.
4. Дальнейшая разработка программного обеспечения, в ходе которого программное обеспечение изменяется, чтобы удовлетворять меняющимся требованиям клиента, требованиям рынка и меняющимся условиям бизнеса.В жизненный цикл разработки системы должны относиться все вышеописанные действия, но эти этапы не должны, безусловно, быть описаны как линейное множество строк.