Введение в технологию программирования

       

Сопровождение


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

Основными задачами сопровождения являются:

  • исправление ошибок;
  • регулярное проведение замеров производительности (профилирование);
  • улучшение "времяпожирающих" мест в программе (еще говорят "бутылочное горлышко");
  • улучшение документации;
  • расширение функциональности;
  • принятие решения о прекращении эксплуатации программы или ее реинжиниринге (переводе программы на другую платформу).

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

Важным элементом сопровождения является "горячая линия" – 24 часа в сутки, 7 дней в неделю должен быть доступен специалист (по телефону или по электронной почте), готовый ответить на вопрос, принять замечание, просто поговорить с пользователем, и этому специалисту нужны инструментальные средства для быстрой подготовки ответов. Словом, вопросы сопровождения должны быть предусмотрены при разработке.

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

Часто бывает, что, исправив одну ошибку, получаешь две других.

Профессиональные организации, получив контракт на сопровождение большой программы, тратят время и деньги на ее изучение, анализ модульной структуры, потоков управления и т.д. Такое действие называется reverse engineering (возвратное проектирование). Иногда используется термин knowledge mining (дословно – "откапывание знаний") – восстановление утраченных знаний о программе только на основе ее текста. Если есть подходящие инструментальные средства, то очень полезно удалить недостижимые участки кода (в старых программах их объем может достигать 30%), провести удаление goto и реструктуризацию программы (гораздо легче понимать стройную иерархическую структуру, чем "клубок змей" или "спагетти"). Есть и другие специальные средства, которые мы рассмотрим в следующем параграфе.


Содержание раздела