В период появления термина «программная инженерия», когда ресурсы по разработке программного обеспечения стали приближаться к стоимости самих вычислительных средств (компьютеров), что ознаменовалось так называемым «кризисом программирования» - возникла идея удешевления создания программ использованием различных инженерных методов при их создании. Инновационная на тот период идея со временем и стала называться во всем мире программной инженерией и в 21 веке продолжает неуклонно развиваться, обрастая постепенно различными методами ускорения разработки и внедрения программных продуктов.
Модульное программирование
При формировании и становлении программной инженерии сразу отмечалось, что большие затраты ресурсов на создание и внедрение программных продуктов зачастую связаны с написанием одних и тех же частей кода (подобных с небольшими различиями) в совершенно разнотипных программах. Объяснялось это легко – в разных программах их похожие части выполняли однотипные (аналогичные) решения: расчет расходов и доходов, учет ресурсов, задачи с нелинейными уравнениями и тому подобные. Даже поверхностный анализ дает неопровержимый вывод о необходимости применения при написании новых программных продуктов уже ранее разработанных частей программного кода (модулей), что ускоряет данный процесс и экономит ресурсы при разработке.
Таким образом, сформировался один из первых эффективных методов программной инженерии – модульный - состоящий в нахождении и выделении повторяющихся (похожих) элементов кода (фрагментов программ) и оформлении их в виде модулей. Такие фрагменты программ или модули снабжаются, как правило, отдельным описанием, где раскрыты в достаточной степени правила применения, так называемый интерфейс модуля. Модульный интерфейс необходим для установления связей с остальными модулями (при их наличии) и со всем программным продуктом – связи по управления и данным. Сама возможность многократного использования таких выявленных модулей определяется во многом именно сложностью и количеством связей, при этом учитываются возможности согласования по управлению и структуре данных. Постепенно были накоплены большие библиотеки стандартных процедур (модулей) по решению большинства математических задач.
Но, тем не менее, для многих обнаруживаемых и классифицируемых модулей (не математических задач) возможности по их многократному применению оказываются при таком подходе проблематичными именно в виду не универсальности интерфейса с основной программой. Многократное применение модулей со сложными связями позволяют использовать специально разработанные формы или структуры организации их интерфейсов и представления модулей.
Структурное программирование
При возрастании сложности программных продуктов обозначился следующий этап увеличения стоимости разработки программ. К сложным программам относятся системы управления производствами и комплексами, в том числе описывающие поведение различных космических тел и объектов. Сложность оценивается большими показателями по:
- объему кода (более миллиона строк);
- количествам связей между элементами программы;
- коллективу программистов (несколько отделов с узкой специализацией) и пользователей,
- длительности использования во времени.
Для сложных программ (более миллиона строк машинного кода) оказалось, что основная часть затрат ресурсов затрачивается не на их написание, а на внедрение и обеспечение устойчивого функционирования при эксплуатации. При этом из промышленности в программную инженерию был взят новый термин, описывающий жизненный цикл программ. Жизненный цикл программного продукта сложился таким образом из этапов, присущих промышленной инженерии - проектирование, разработка, тестирование, внедрение, сопровождение в процессе функционирования и вывод из эксплуатации.
Структурное программирование сформировалось при проведении работ по сопровождению программного продукта, включая действия по исправлению ошибок в работе и проведение доработок в соответствии с уточненными или изменившимися требованиями. При этом важной причиной затрат ресурсов (иногда - невозможности создания или совершенствования определенных программ) этапа сопровождения оказалось недостаточность проработки этапа проектирования. Недостаточность проработки определяется зачастую сопроводительной документацией, которая оказывалась не полна или не совсем понятна, а порой не полностью соответствовала написанному программному коду, при этом программа была записана запутанно и сложно.
Разработана была соответственно технология структурного программирования, используемая в обязательном порядке и в современности при написании программных продуктов, обеспечивающая простоту понимания кодов и процесса кодирования, имеющая принципы:
- нисходящего функционального проектирования (при таком подходе система делится на основные подсистемы, элементы этих подсистем и т.д);
- использования специальных средств проектирования и автоматизации их использования (языки программирования нового уровня);
- усиления дисциплины при проведении проектирования и создания программных продуктов (написание и соблюдение планов и полное документирование проектов, обеспечение соответствия между программными изделием и документацией).
Каскадный и гибкие методы
Одними из самых современных методов программирования являются каскадный и гибкий циклы создания современных программных продуктов.
Их основное отличие в том, что первый метод (классический) применяется строго последовательно при создании новых или модернизации уже действующих программ, а второй - способен гибко адаптироваться под изменения, как в ходе проектирования, так и в процессе создания проектов
При использовании гибкого метода выше вероятность возникновения неудачных архитектур, но зато и устранять ошибки проще. При каскадном методе архитектурные недостатки могут обнаружиться только при завершении проекта или эксплуатации, при этом переделка намного сложнее и дороже.
И потому применение гибкого метода оправдано только в крупных проектах или растянутых по временным рамкам, либо при периодических изменениях (корректировке) исходных требований, или когда нет возможности четко спланировать изначально все нюансы при создании программного продукта. А вот классический каскадный метод подойдет для всех небольших проектов с четко определенными начальными требованиями и при наличии достаточного числа специалистов высокой квалификации (рисунок 1).
Рисунок 1. Каскадный метод. Автор24 — интернет-биржа студенческих работ
Современное развитие методов программной инженерии при создании программных продуктов позволяет создавать быстро и с затратой минимального количества ресурсов качественные программы, способные прекрасно функционировать на всем своем жизненном цикле от проектирования до выведения (или снятия) из эксплуатации.