Впервые термин «программная инженерия» («технология программирования», как называлась она тогда в нашей стране) появился в начале 70-х годов 20-го века. В то время ресурсы, затрачиваемые на создание программ стали соизмеримы со стоимостью оборудования вычислительных систем («железа»), поэтому возникла необходимость в научной дисциплине, целью которой является сокращение стоимости программ и времени на их разработку.
Определения терминов программной инженерии
Программная инженерия значительно отличается от простого программирования, как профессионал своего дела от обывателя-любителя. Научиться программированию простых программ способен любой человек, вскоре этому научатся и лучшие представители «искусственного разума». Но такие простенькие программы будут несравнимы с фирменными продуктами по всем качественным показателям, особенно по быстродействию, надежности и экономии вычислительных ресурсов.
Программирование – выдача задания имеющимся вычислительным мощностям в виде перечня команд по управлению входными данными для получения требуемого набора выходных показателей, удовлетворяющих целям создания и функционирования конкретной сложной системы.
Программные инженеры – профессиональные программисты, умеющие писать программные продукты с требуемым уровнем качества решения задач, имеющие представление о применяемых процессах и ограничениях при разработке решений, о влиянии выбранных способов решения на устойчивость и безопасность функционирования сложных систем.
Программная инженерия – путь создания безопасных, надежных и неизменных по качеству в течение всего своего жизненного цикла программных продуктов путем их предварительного проектирования, написания, тестирования и сопровождения в ходе решения пользовательских задач.
Настоящий программный инженер, таким образом, способен понять, какими ресурсами можно удовлетворить насущные потребности в решении обнаруженных проблем. И зачастую для определенных задач даже нет необходимости писать отдельную программу, достаточно применять уже написанную или совокупность из нескольких готовых, а при хорошем предварительном проектировании сложных систем проявление каких-либо стандартных проблем в будущем вообще возможно избежать в принципе.
Основные составляющие программной инженерии
Основополагающими составляющими программной инженерии являются:
- предварительное ознакомление с предметной областью и создание, при необходимости, модели (математической или физической) подвергнутой системному анализу структуры;
- уточнение целей и проблем, требующих решения программными методами, разработка архитектуры решения задач программными методами;
- определение возможности применения готовых процедур и написание недостающего кода для созданной архитектуры в выбранном языке (языках) программирования;
- тестирование, устранение ошибок и сборка программного изделия.
В ходе предварительного ознакомления и при уточнении задач перед началом создания продукта программный инженер ставит следующие вопросы и ищет на них ответы:
- можно ли решить обнаруженные проблемы сложной системы в рамках написания или использования одной программы;
- какие определенные задачи будут способны решать по отдельности все созданные или используемые программы;
- как облегчить и ускорить решение задач с помощью применения сторонних разработок, написания нового программного кода, их комбинации.
При уточнении необходимости разработки продукта «с нуля» или возможности использования отдельных созданных процедур и написания только недостающего кода - программный инженер задает уже иные вопросы:
- какие компоненты программного обеспечения будут связываться в единое целое, взаимодействовать друг с другом в создаваемом продукте;
- необходимые критерии для закладывания в продукт возможностей по дальнейшему его расширению;
- требуемые показатели читабельности кода и достаточности комментариев для понимания работы создаваемого программного продукта.
В ходе проведения тестирования возникают уже совершенно непохожие на ранее сформулированные вопросы с поиском ответов:
- созданный продукт работоспособен в различных условиях (например, требуемые для работы ресурсы вычислительной техники, начальные временные установки, операционные среды и программное окружение);
- полученный продукт эффективен с точки зрения экономии ресурсов вычислительной техники, надежности, аккуратности исполнения, устойчивости работы, удобства установки, обслуживания и сопровождения;
- разработанный продукт способен предлагать пользователям удобства;
- полученный продукт устойчив к некорректному вводу начальных условий и ненадежному взаимодействию объектов в сложной системе;
- в программном продукте есть способы повышения защищенности и безопасности от влияний из вне, а также отсутствие не предусмотренных разработчиком (декларируемых) возможностей или дефектов;
- проявление изменений и/или ошибок сопровождается понятным любому пользователю сообщением от разработанного нового продукта;
- правильно ли функционирует системный журнал с фиксацией всех ситуаций возникающих ошибок и возможностью их дальнейшего анализа любым сторонним программистом, а не только автором программного кода;
- применяется ли самое качественное и современное программное обеспечение разработки (языки программирования), сокращающее циклы обратной связи при программировании в ходе создания нового программного продукта.
Цель и процессы программной инженерии
Из всего вышесказанного можно сделать вывод: программная инженерия непосредственно связана напрямую со всеми процессами жизненного цикла любого программного обеспечения.
Цель программной инженерии состоит в реализации самых эффективных, новых и лучших технологий в практических целях для реализации и совершенствования сложных систем, объектов, процессов или явлений.
Сам термин процесса программной инженерии («Software Engineering Process») может характеризоваться обсуждением, поиском и реализацией на практике реальных последовательностей действий по правильным и эффективным способам выполнения поставленных задач.
Связанные непосредственно со всеми процессами жизненного цикла программного обеспечения (разработка либо приобретение, а также сопровождение и вывод из эксплуатации), подавляющее большинство процессов программной инженерии взаимодействуют между собой, а также и как напрямую, так и опосредованно с другими областями знаний.
Все процессы программной инженерии комплексно направлены на выработку наиболее верных решений при построении надежных и безопасных программных продуктов в условиях минимальных временных и ресурсных затрат на их создание, внедрение и сопровождение.