суббота, января 05, 2008

Жизненный цикл разработки программного обеспечения -- что бы это значило?

Каждый год я рассказываю студентам, что такое ЖЦПС (жизненный цикл программной системы), что такое ЦРПС (цикл разработки программной системы), и в чём разница между ними. И всё было хорошо, пока в этом году один из студентов не пришёл ко мне и не сказал, что он дескать прочитал сделанное Сергеем Орликом переложение SWEBOK на русский язык, и там вводится другой термин (со ссылкой на Скотта Амблера) -- жизненный цикл разработки программного обеспечения. Пытливый студент хотел понять, как этот самый "ЖЦРПО" соотносится с теми двумя понятиями, про которые я рассказывал на лекциях.

Студента пришлось разочаровать, объяснив ему, что термин "жизненный цикл разработки программного обеспечения" вообще не имеет права на существование, потому что он внутренне противоречив. И что там скорее всего имелся в виду термин "цикл разработки программного обеспечения", а слово "жизненный" затесалось туда по недоразумению. Именно это объяснение я и собираюсь здесь привести.

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

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

Таким образом, противоречие в термине ЖЦРПО возникает из-за того, что неясно, какой процесс имеется в виду -- процесс существования (жизни) программной системы или процесс её разработки.

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

Говоря о жизненном цикле некоторого объекта или явления, мы можем иметь в виду один из двух смысловых вариантов.

Первый вариант -- мы рассматриваем процесс существования (жизни) единичного объекта или постоянного явления и можем выявить в этом процессе некоторую цикличность, то есть объект или явление раз за разом проходит некоторую повторяющуюся последовательность состояний. Например, обращение Земли вокруг Солнца (объект) или смена времен года (явление).

Второй вариант -- мы рассматриваем процессы существования (жизни) нескольких различных однотипных объектов или возникающее и исчезающее явление и можем выявить повторяющуюся во всех этих процессах последовательность состояний. Например, процесс жизни растения или животного от зарождения до гибели.

Бывают ситуации, когда применимы оба варианта одновременно, то есть и процессы существования различных однотипных объектов схожи, и в процессе существования единичного объекта можно выделить некоторые циклы. Например, процесс жизни многолетнего растения можно интерпретировать как по второму варианту (зарождение, рост, размножение, гибель), так и по первому варианту, рассматривая циклические сезонные изменения.

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

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

Напоследок хочется отметить, что поиск в русскоязычном Интернете показывает достаточно широкое распространение термина ЖЦРПО, причём в большинстве случаев подразумевается как раз второй вариант уточнения (ЦРПС), а слово "жизненный" просто выступает в роли слова-паразита.

Но в англоязычном Интернете ситуация гораздо хуже -- я вообще не понимаю, как они сами разбираются, что означает термин Software Development Life Cycle (SDLC). Скажем, Википедия при открытии страницы http://en.wikipedia.org/wiki/Software_development_life_cycle перебрасывает на страницу "Software development process", то есть эти понятия трактуются как полностью идентичные, а кроме того, указывается, что синонимом являются также термины "software lifecycle" и "software process", всё смешано в одну кучу. Имеется также страничка "Systems Development Life Cycle", на которой опять таки объявляется, что синонимом этого термина является "Systems Life Cycle". А наряду с этим существуют (видимо, специально для индусов) разъяснения, согласно которым SDLC вообще является синонимом линейной (водопадной) модели процесса разработки ПО. Такие дела.

2 комментария:

Анонимный комментирует...

О, спасибо большое за разъяснения, меня всегда вводило это в заблуждение. Я понимал, что что-то здесь не клеится, но не мог доказать :)

Анонимный комментирует...

Теперь всё понятно, благодарю за информацию.