Академический Документы
Профессиональный Документы
Культура Документы
Программная инженерия
Сопровождение программного обеспечения
(Software Maintenance)
®
Глава базируется на IEEE Guide to the Software Engineering Body of Knowledge - SWEBOK , 2004.
Содержит перевод описания области знаний SWEBOK® “Software Maintenance”, с комментариями и
замечаниями.
"Основы программной инженерии" разработаны на базе IEEE Guide to SWEBOK® 2004 в соответствии с IEEE
SWEBOK 2004 Сopyright and Reprint Permissions: "This document may be copied, in whole or in part, in any form or
by any means, as is, or with alterations provided that (1) alterations are clearly marked as alterations and (2) this
copyright notice is included unmodified in any copy."
"Основы программной инженерии" Сopyright © 2004-2010 Сергей Орлик. Все права защищены.
SWEBOK Сopyright © 2004 by The Institute of Electrical and Electronics Engineers, Inc. All rights reserved.
Программная инженерия
Сопровождение программного обеспечения (Software Maintenance)
Если проблема 2000 года, в свое время, оказала особое влияние на изменение отношения к
сопровождению на Западе, то расширение применения продуктов Open Source во всем мире и
связанная с ним волна надежд на получение дешевого решения существующих задач привела к
тому, что вопросы сопровождения вышли для многих организаций на первый план. Ситуация во
многих ИТ-подразделениях показывает, что такие надежды оправдались только частично.
Использование продуктов Open Source не стало дешевой альтернативой и, в ряде случаев, привело
даже к большим проектным затратам именно в силу недостаточно проработанной политики
эксплуатации и сопровождения построенных на их основе прикладных решений. Это ни в коем
случае не значит, что волна Open Source “захлебнулась”. Это означает только, что игнорирование
оценки стоимости сопровождения привело к превышению бюджетов, недостатку ресурсов и, в конце
концов, частому провалу инициатив по использованию таких продуктов в корпоративной среде.
Неготовность рассматривать жизненный цикл во времени как продолжающийся и после передачи
системы в эксплуатацию, непроработанность соответствующих процедур корректировки продукта
после его выпуска – основная беда и в бизнесе-среде, для которой программное обеспечение лишь
инструмент, и в компаниях-интеграторах, “забывающих” о необходимости развития успеха после
внедрения системы у заказчика, и у независимых поставщиков программных продуктов, которые,
выпуская новую версию лучшего в своем классе продукта, начинают работать над новой версией,
уделяя недостаточное внимание поддержке и обновлению уже существующих версий.
Рисунок 6. Область знаний “Сопровождение программного обеспечения” [SWEBOK, 2004, с.6-2, рис.
1]
В свою очередь, стандарт жизненного цикла 12207 (IEEE, ISO/IEC, ГОСТ Р ИСО/МЭК) позиционирует
сопровождение как один из главных процессов жизненного цикла. Этот стандарт описывает
сопровождение как процесс модификации программного продукта в части его кода и документации
для решения возникающих проблем <при эксплуатации> или реализации потребностей в
улучшениях <тех или иных характеристик продукта>. Задача состоит в модификации продукта при
условии сохранения его целостности. Международный стандарт ISO/IEC 14764 (Standard for Software
Engineering - Software Maintenance) определяет сопровождение программного обеспечения в тех же
терминах, что и стандарт 12207, придавая особое значение работам по подготовке к деятельности
по сопровождению до передачи системы в реальную эксплуатацию, например, вопросам
планирования регламентов и операций по сопровождению.
В общем случае, работы по сопровождению должны проводиться для решения следующих задач:
устранение сбоев
улучшение дизайна
реализация расширений <функциональных возможностей>
создание интерфейсов взаимодействия с другими (внешними) системами
адаптация (например, портирование) для возможности работы на другой аппаратной
платформе (или обновленной платформе), применения новых системных возможностей,
функционирования в среде обновленной телекоммуникационной инфраструктуры и т.п.
миграции унаследованного (legacy) программного обеспечения
вывода программного обеспечения из эксплуатации
Говоря о предотвращении деградации производительности, мы должны понимать, что это, при всем
желании совершенствования системы, может делаться и за счет обновления мощности аппаратной
части и/или соответствующей телекоммуникационной инфраструктуры, если это более обосновано,
чем модификация самой программной системы. На самом деле это вопрос того, что окажется
дешевле (и менее рискованно), т.е. связано с затратами/ стоимостью соответствующих работ,
оборудования и поддержки обновленного системного окружения (что, к сожалению, часто также не
учитывается даже при более-менее сложившейся практике сопровождения).
* судя по всему, SWEBOK в данном случае подразумевает функции не программного обеспечения, а процессов
сопровождения и функции персонала сопровождения, как таковые.
В 1969 году Леман (см. рекомендуемую литературу к данной секции SWEBOK) впервые связал
деятельность по сопровождению и вопросы эволюции программного обеспечения. Результаты более
чем 20-ти летних исследований во главе с Леманом привели к формулированию ряда важных
положений, ключевое из которых утверждает, что деятельность по сопровождению, по-сути,
представляет собой эволюционную разработку программных систем. Принятию тех или иных
решений в процессе сопровождения, помогает понимание того, что происходит с программной
системой в процессе ее эксплуатации. Существующее (особенно, корпоративное) программное
обеспечение никогда не бывает полностью завершенным и продолжает эволюционировать в
течение всего срока эксплуатации. В процессе эволюционирования, программная система
становится все более сложной до тех пор, пока не предпринимаются специальные усилия (в том
числе, в рамках специального проекта по модификации) по уменьшению его сложности.
Многие источники, в частности, стандарт IEEE 1216, определяют три категории работ по
сопровождению: корректировка, адаптация и совершенствование. Такая классификация была
обновлена в стандарте ISO/IEC 14764 Standard for Software Engineering - Software Maintenance
введением четвертой составляющей. Таким образом, сегодня говорят о четырех категориях
сопровождения:
Корректирующее сопровождение (corrective maintenance): “реактивная” модификация
программного продукта, выполняемая уже после передачи в эксплуатацию для устранения
сбоев;
Адаптирующее сопровождение (adaptive maintenance): модификация программного продукта
на этапе эксплуатации для обеспечения продолжения его использования с заданной
эффективностью (с точки зрения удовлетворения потребностей пользователей) в
изменившемся или находящемся в процессе изменения окружении; в первую очередь,
подразумевается изменение бизнес-окружения, порождающее новые требования к системе;
Совершенствующее сопровождение (perfective maintenance): модификация программного
продукта на этапе эксплуатации для повышения характеристик производительности и
удобства сопровождения;
Профилактическое сопровождение (preventive maintenance): модификация программного
продукта на этапе эксплуатации для идентификации и предотвращения скрытых дефектов до
того, когда они приведут к реальным сбоям.
ISO/IEC 14764 (Standard for Software Engineering - Software Maintenance) классифицирует адаптивное
и совершенствующее сопровождение как работы по расширению <функциональности> продукта.
Этот стандарт также объединяет корректирующую и профилактическую деятельность в общую
категорию работ по корректировке системы. Профилактическое сопровождение (новейшая категория
работ по сопровождению) наиболее часто проводится для программных систем, связанных с
вопросами безопасности <людей>.
Ограниченное понимание подразумевает как быстро инженер по сопровождению может понять где
необходимо внести исправления или изменения в код системы, которую он не разрабатывал.
Исследования показывают, что от 40 до 60 процентов усилий по сопровождению тратится на анализ
и понимание сопровождаемого программного обеспечения. Формирование целостного взгляда о
системе представляет большое значение для инженеров. Этот процесс более сложен в случае
анализа текстового представления системы – ее исходного кода, особенно, когда процесс эволюции
системы от сборки к сборки, от релиза к релизу, в нем никак не отмечен, не документирован и когда
разработчики не могут объяснить историю и структуру изменений, что, к сожалению, случается
достаточно часто.
Стоимость повторения полного набора тестов для основных модулей системы может быть
существенным как по времени, так и по стоимости. Для сопровождения системы особо значимым
является выборочное регрессионное тестирование (см. область знаний Software Testing, тему 2.2.6
Регрессионное тестирование) системы или его компонент для проверки того, что внесенные
изменения для привели к непреднамеренному изменению поведения программного обеспечения.
Вопрос состоит в том, что часто сложно найти время для необходимого тестирования. Не меньшей
проблемой является и координации в проведении тестов различными членами группы
сопровождения, занимающимеся решением различных задач. Если же система выполняет
критичные <для бизнеса> функции, временный вывод системы из эксплуатации (как говорят,
перевод системы в offline) для выполнения тестов часто оказывается просто невозможен.
Анализ влияния описывает как проводить (в частности, с точки зрения эффективности затрат)
полный анализ возможных последствий и влияний изменений, вносимых в существующую систему.
Персонал сопровождения должен обладать необходимыми знаниями о специфике системы (в
идеальном случае, иметь полное представление о системе на уровне ее разработчиков) – ее
содержании и структуре. Инженеры используют эти знания для выполнения работ по анализу
влияния, идентифицируя все системы* и программные продукты, на которые могут повлиять
изменения, вносимые в обслуживаемую программную систему. При этом, должны быть определены
риски, связанные с внесением обсуждаемых изменений.
* Как мы видим из описания данных работ в SWEBOK, речь идет не только о компонентах системы,
но и о ее окружении, включая другие системы, функционирующие в том же операционном/системном
окружении.
Запросы на изменения** (change requests - CR), иногда упоминаемые как запросы на модификацию
(modification request - MR), часто также называемые отчетами о проблемах (problem report - PR),
должны анализироваться и трансформироваться в термины программной системы. Эти шаги
выполняются после того, как соответствующий запрос на изменение начинает обрабатываться в
рамках процесса управления изменениями или, как принято называть, конфигурационного
управления, и фиксируется в системе конфигурационного управления (см. область знаний
Configuration Management).
При этом, оптимальность пути не всегда означает наиболее ”красивое” технологическое решение.
Иногда это может быть временное решение, может быть даже нарушающее архитектурные шаблоны
системы, однако, обоснованное с точки зрения сроков и стоимости его реализации. В то же самое
время, результаты анализа направляются разработчикам системы, обычно работающим над
следующей версией, для включения соответствующего изменения уже в рамках принятого стиля
кодирования, соглашений, архитектурных шаблонов и т.п. Безусловно, такой путь многим может
показаться просто неэтичным, с точки зрения “настоящего” инженерного подхода. Однако, если
разработчики готовят следующую версию системы, затрагивая модуль, модифицируемый службой
сопровождения, с точки зрения бизнес-решений, “некрасивый”, но быстрый путь достижения
требуемого поведения системы, в большинстве случаев, будет выглядеть более обоснованным, чем
принятие на себя персоналом сопровождения функций разработчиков системы. Иногда, если
требуемое изменение не столь критично, чтобы решение было предоставлено “вчера” (хотя
пользователи, практически всегда, именно так характеризуют свои запросы в терминах приоритета),
логичным выглядит откладывание проведения соответствующих модификаций и передача этих
работ непосредственно разработчикам. Как это часто можно услышать – “будет доступно в
следующем релизе”. Ничего не напоминает? Но, экономически, это часто бывает более чем
оправдано.
Это серьезный вызов для менеджеров, отвечающих за вопросы сопровождения и, вообще говоря,
является классической задачей общего менеджмента. Решение этой задачи, в первую очередь,
находится в руках старшего менеджмента, формирующего соответствующий стиль отношений между
функциональными и вспомогательными подразделениями. На более высоком уровне, для
организаций и бизнесов - потребителей информационных технологий, эта задача связана с
внутрикорпоративными департаментами автоматизации, в целом, которые слишком часто
воспринимаются только как центры затрат, а информационные технологии не рассматриваются как
актив. В результате, такая позиция приводит к снижению эффективности работы подразделений
автоматизации, а, следовательно, и падению качества информационного обеспечения бизнеса, что
сказывается, в подавляющем большинстве случаев, и на бизнесе, как таковом.
* такой перевод, вместо просто “кадрового обеспечения”, в большей степени соответствует принятому
использованию термина staffing. Часто, staffing подразумевает и высокую текучесть кадров.
Процесс (в общем случае, жизненный цикл, прим. автора) является набором работ (activities),
методов, практик и, своего рода, трансформаций, которые используются людьми для разработки и
сопровождения программных систем и ассоциированных с ними продуктов. На уровне процесса,
деятельность по сопровождению программного обеспечения имеет очень много общего с
разработкой, например, в части конфигурационного управления, являющегося критически важной
составляющей обоих видов деятельности. В то же время, сопровождение включает работы, не
представленные в процессе разработки (в теме 3.2 представлено описание такого рода уникальных
работ). Эта деятельность требует от менеджмента специального внимания.
При решении вопроса, где (кем) будут осуществляться функции по сопровождению, может быть
принято решение оставить их непосредственно тем, кто разрабатывал систему (как в терминах
организации/компании, так и подразумевая непосредственно коллектив разработчиков), или
передать другой команде или стороне (maintaner). Часто, выбор сопровождающей организации
осуществляется исходя из тех соображений, которые выглядят обоснованными для обеспечения
Часто можно наблюдать, когда для решения вопросов сопровождения (при сохранении
“стратегического контроля”), компании, для которых информационные технологии не являются
профильными, но воспринимаются в качестве актива, формируют специализированные дочерние
бизнес-структуры, которым и передаются функции сопровождения, а также и непосредственно
разработки программных систем и, более того, поддержки и развития всей ИТ-инфраструктуры. Это
делается с тем, чтобы функционируя в качестве самостоятельной бизнес-сущности, уже бывшие
внутрикорпоративные подразделения автоматизации, могли обеспечить большую прозрачность
финансовых потоков, затрат, связанных с информационным технологиями. Но, это тема уже
относится к общим вопросам управления и, безусловно, требует самостоятельного обсуждения, в
контексте, опять-таки, конкретной организации или бизнес-структуры. Однако, нельзя было не
обозначить важность обсуждаемого вопроса в данном контексте, ведь именно деятельность по
сопровождению часто подвигает организации-потребители ИТ к принятию столь серьезных
организационных и бизнес-решений.
При этом, подчеркивает SWEBOK, контроль сложно измерить. В свою очередь, перед аутсоурсером
(организацией, принимающей на себя ответственность по сопровождению) стоит серьезная
проблема по определению содержания соответствующих работ, в том числе, для описания
содержания соответствующего контракта. Отмечается, что около 50% сервисов, предоставляемых
аутсоурсером, проводятся без соответствующего детального и однозначно интерпретируемого
соглашения (service level agreement, SLA). Компании, занимающиеся аутсоурсингом, обычно
затрачивают несколько месяцев на оценку программного обеспечения прежде, чем заключают
соответствующий контракт. Еще один вопрос, требующий специального внимания, заключается в
необходимости определения процесса и процедур передачи программного обеспечения на внешнее
сопровождение.
Как уже отмечалось, инженеры должны понимать разницу в различных категориях сопровождения.
Это, в большой степени, необходимо для оценки соответствующих затрат. С точки зрения
планирования, как составной части проектной и управленческой деятельности, оценка стоимости
является важным аспектом деятельности по сопровождению программного обеспечения.
При обсуждении анализа влияния (см. 2.1.3 Impact Analysis) говорилось о том, что такой анализ
помогает в оценке стоимости работ по сопровождению. На эти затраты оказывает влияние
множество технических и других факторов. ISO/IEC 14764 (Standard for Software Engineering -
Среди тех подходов, которые позволяют повысить точность оценок, полученных при использовании
параметрических моделей – применение опыта (в форме экспертного мнения, например, при
использовании техники оценки “Delphi”, название которой происходит от “делфийского оракула”),
аналогий, а также структуры декомпозиции работ. Наилучшие результаты получаются в случае
сочетания эмпирических методов с имеющимся опытом. Получаемые данные используются как
результат программы измерения аспектов сопровождения.
за дальнейшую поддержку;
На практике сложно провести грань между разделяемыми в SWEBOK функциями Help Desk и
Software Support –эти функции, обычно, совмещены с процессной точки зрения.
Столь длинный перевод названия данной темы связан с содержанием соответствующих работ,
описываемых SWEBOK, как работы персонала сопровождения, не включающие явного
взаимодействия с пользователями, но необходимые для осуществления соответствующей
деятельности. К таким работам относятся: планирование сопровождения. Конфигурационное
управление (software configuration management), проверка и аттестация (V&V – verification and
validation), оценка качества программного обеспечения (software quality assessment), различные
аспекты обзора, анализа и оценки (reviews), аудит (audit) и обучение (training) пользователей.
В силу особой значимости (с точки зрения автора - обязательности) ряда упомянутых работ, им
посвящены следующие под-темы данной секции области знаний по сопровождению программного
обеспечения.
Несмотря на то, что разработка программных системы, обычно, занимает от несколько месяцев (что
более типично) до нескольких лет, сопровождение (как деятельность по поддержке использования) и
активная эксплуатация систем занимает несколько лет, а то и более* (5-10-...). Проведение оценки
ресурсов – неотъемлемая часть планирования. Ресурсы, необходимые для сопровождения должны
быть оценены и заложены в бюджет еще при разработке системы. Планирование работ по
сопровождению должно начинаться одновременно с принятием решения о создании системы и
согласоваться с целями обеспечения качества (отмечается в IEEE 1061-98 Standard for a Software
Quality Metrics Methodology).
* эта оценка согласуется и с опытом Сергея Орлика, когда в начале 90-х он принимал
непосредственное участие в проектировании и разработке системы автоматизации добровольного
медицинского страхования (в одной из крупнейших российских страховых компаний), выведенной, в
дальнейшем, из эксплуатации на рубеже 2000 года, то есть система функционировала около 7 лет, а
некоторые ее фрагменты как самостоятельные приложения и того дольше. Многие банковские
приложения, особенно, на западе, в первых своих версиях были разработаны еще в середине 80-х, а
некоторые ИТ-системы в мире были созданы (в своем изначальном варианте) и в 70-е годы, что, в
частности, привело к усиленному вниманию к проблеме 2000 года (Y2K problem).
Необходимо отметить, что реализация продукта в новом качестве (форме) при сохранении основной
функциональности оригинального продукта, является неотъемлемой и определяющей частью
реинжиниринга, в отличие от обратного инжиниринга, рассматриваемого ниже и являющегося
важной составной частью реинжиниринга.
“Обратный” инжиниринг (часто путаемый с реинжинирингом, в том числе, в понимании SWEBOK) или
это процесс анализа программного обеспечения с целью идентификации программных компонент и
связей между ними, а также формирования представления о программном обеспечении, с
дальнейшей перестройкой в новой форме (уже, в процессе реинжиниринга). Обратный инжиниринг
является пассивным, предполагая отсутствие деятельности по изменению или созданию нового
программного обеспечения. Обычно, в результате усилий по обратному инжинирингу создаются
модели вызовов (call graphs) и потоков управления (control flow graphs) на основе исходного кода
системы. Один из типов обратного инжиниринга – создание новой документации на существующую
систему (redocumentation). Другой из распространенных типов – восстановление дизайна системы
(design recovery).
* для обеих тем – 4.2 и 4.3 возможно применение слова реконструкция, в зависимости от контекста,
означающее как полную перестройку или воссоздание чего-либо, идентичного по определенным
характеристикам оригинальному образцу, так и восстановление какой-либо сущности по сохранившимся и/или
доступным внешним признакам, где восстановление может подразумевать опять -таки создание нового образца
или представления об оригинальной сущности.
4.1.5 Создание новой системы: рассматривает текущую версию и систему в целом, как
устаревшую – legacy.