Теперь попробуем ответить на вопрос, что такое программная инженерия.
Новый программный проект разрабатывается 1-2 года, а эволюционирует 6-7 лет. На сопровождение проекта тратится 61% против 39% средств на его разработку. Эффективность разработчиков в зависимости от квалификации колеблется в отношении 1:10, а значит, требуется повышать уровень знаний разработчиков ПО.
Разработку программных систем можно считать инженерной деятельностью, но она имеет некоторые отличия от традиционной инженерии:
- ветви инженерии имеют высокую степень специализации, а в программной инженерии специализация коснулась только отдельных областей (например, операционные системы, трансляторы, редакторы и т.п.);
- программирование объектов основывается на стандартах, с помощью которых отражаются типовые требования заказчиков, т.е. типизация объектов и артефактов в сфере программирования;
- технические решения классифицированы и каталогизированы, а в программной инженерии каждая новая разработка - это новая проблема, для реализации которой устанавливают аналогию с ранее разработанными системами. Одним из инженерных решений каталогизации в программировании является паттерн проектирования.
Для превращения программной инженерии в специальность мировая компьютерная общественность создала профессиональные комитеты, регламентирующие аспекты процесса программирования: ядро знаний SWEBOK, этический кодекс программиста [1.13], учебные курсы (Curricula -2001, 2004) по подготовке специалистов в области программной инженерии, обучение специальности и сертификация специалистов.
Таким образом, возникновение программной инженерии как дисциплины разработки ПО определено следующими важными факторами:
- значительным объемом накопленных знаний в области создания ПО;
- появлением новых методов анализа, моделирования и проектирования ПО;
- совершенствованием методов обнаружения ошибок в ПО;
- эффективной организацией коллективов разработчиков ПО и оценки их трудовой деятельности;
- использованием готовых программных компонентов, высокотехнологических средств и инструментов разработки ПО;
- необходимостью эволюционного развития компонентов и систем, а также их адаптацией к новым изменяющимся условиям операционных сред и компьютерных сетей.
Программная инженерия делает акцент на повышении качества и производительности ПО за счет применения: новых и усовершенствованных методов проектирования ПО; готовых компонентов и методов их генерации; методов эволюции, верификации и тестирования ПО; инструментальных средств; методов управления проектами, оценки качества и стоимости.
Программная инженерия (Software Engineering) - это инженерная дисциплина, в которой инженеры применяют теоретические идеи, методы и средства при разработке ПО, создают продукты в соответствии со стандартами, регламентирующими процессы их проектирования и разработки.
Программная инженерия описывает методы управления программным проектом, качеством и рисками. Применение таких методов позволяет достичь высокого качества программных продуктов.
Эта инженерная дисциплина предоставляет всю необходимую информацию и стандарты для выбора наиболее подходящего метода и процессов жизненного цикла ПО для реализации конкретного проекта.
Программная инженерия (Software Engineering) – это инженерная дисциплина, которая связана со всеми аспектами производства ПО от начальных стадий создания спецификации до поддержки системы после сдачи в эксплуатацию. В этом определении есть две ключевые фразы:
• Инженерная дисциплина
• Все аспекты производства ПО
Как было выяснено ранее, программное обеспечение представляет собой собственно программы плюс вся сопутствующая документация. На протяжении последних десятилетий стоимость разработки ПО неуклонно растет, в результате чего эта стоимость становится весьма высокой. Программная инженерия способствует решению этой проблемы.
Программная инженерия имеет дело со всеми аспектами создания ПО.
В западной литературе часто используются термины: software engineering, system engineering и computer science. В чем разница?
Computer science имеет дело с теорией и основами разработки ПО.
System engineering связано с вопросами разработки систем с участием компьютеров (архитектура, дизайн, интеграция, ПО...).
Software engineering – часть System engineering, имеющая дело с разработкой ПО.
Итак, computer science предоставляет собой безусловно важный, но преимущественно теоретический базис. На практике его недостаточно. К числу открыты можно отнести следующие проблемы:
- Поиск финансирования.
- Работа с заказчиком.
- Подбор персонала.
- Этические вопросы. Микроклимат в коллективе. Команда.
- Обеспечение качества программного продукта.
-...
Всем этим занимается программная инженерия и программные инженеры.