Программная инженерия. Часть 1.

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

Проблематика. До конца 60-х годов соответствующая проблематика обозначалась термином «искусство программирования». В этот период после обучения инструментальным средствам, основным алгоритмам, правилам комментирования программ и разбиения их на модули приходилось полностью полагаться на интуицию и творческие способности программистов. На следующем этапе (ориентировочно 1968—1977 гг.) был предложен ряд концепций и методов, которые развивали интуицию и творческие способности, но делали это за счет ограничения свободы действий и регламентации деятельности разработчиков ПО. По аналогии с регламентацией в промышленном производстве их называют технологическими концепциями и методами. Термин «технология программирования» часто используется, особенно в отечественной литературе, для обозначения не только конкретных методов разработки ПО, но и всей проблемной области (с этой целью используется также термин «программе техника»). В настоящее время продолжаются исследование и развитие концепций, найденных в этот период «технологических изобретений», их консолидация в единую дисциплину, поддержка инструментальными средствами и внедрение в практику программистской деятельности.

На незавершенность процесса консолидации указывают попытки фетишизации отдельных аспектов программной инженерии. Например, так называемый «машиностроительный подход» базируется на неправомерной абсолютизации аналогий с технологиями промышленного производства, рассматриваемыми как жестко регламентированные последовательности технологических операций, призванные гарантировать получение продукции с заданными свойствами при минимальной зависимости от индивидуальных (тем более творческих) возможностей отдельных исполнителей. При этом не учитывается, что в отличие от изделий серийного производства новое изделие является новым лишь постольку, поскольку в нем отражены творческие способности исполнителей. Уменьшить вероятность неудачи может, например, конкурс на уровне изделий или их компонентов, отбор или динамическая смена исполнителей, а последовательное устранение влияния способностей исполнителей может гарантировать только отсутствие успеха. Известно, к какому «прогрессу» новой техники привели аналогичные попытки в машиностроении.

С «машиностроительным» тесно связан «административный» подход, абсолютизирующий роль жестких организационных структур, обязательных для исполнения нормативных документов и стандартов. Он не учитывает вариантности рекомендаций программной инженерии, ее ориентации на оптимизацию отношений руководителей с подчиненными и производителей с потребителями в зависимости от специфики ПО. Вместо оптимизации происходит искажение интересов сторон навязанными извне инструкциями (например, потребителю диктуют, что он Должен считать качеством ПО), усугубляемое безудержной бюрократизацией дела. Административные методы не панацея, а неизбежное зло, которое надо минимизировать переходом от приказов к рекомендациям и гарантией от вмешательства всюду, где возможна взаимная договоренность заинтересованных сторон.

Преувеличение роли других подходов или каких-то комплексов программных средств представляется менее опасным. Конечно, название типа «автоматизированная технология программирования» или утверждения типа «структурное программирование исключает возможность ошибок» не прибавляют престижа программной инженерии. Но ведь всем знакома реклама. Достаточно относиться к подобным высказываниям критически и воздерживаться самим от выполнения функций бесплатных рекламных агентов. Хуже, когда неадекватное использование «престижных» терминов размывает понятийный аппарат дисциплины. Например, жизненным циклом ПО иногда называют последовательность этапов разработки (исключается этап сопровождения), причем в самом бессодержательном варианте — техническое задание, эскизный, технический и рабочий проекты. Ориентацию в подобных случаях облегчит приводимый далее обзор некоторых «технологических изобретений».