Основы и принципы программной инженерии

ВВЕДЕНИЕ

Программная инженерия (промышленное программирование) обычно ассоциируется с разработкой больших и сложных программ коллективами разработчиков. Становление и развитие этой области деятельности было вызвано рядом проблем, связанных с высокой стоимостью программного обеспечения, сложностью его создания, необходимостью управления и прогнозирования процессов разработки. В конце 60-х – начале 70-х годов прошлого века произошло событие, которое вошло в историю как первый кризис программирования. Событие состояло в том, что стоимость программного обеспечения стала приближаться к стоимости аппаратуры («железа»), а динамика роста этих стоимостей позволяла прогнозировать, что к середине 90-годов все человечество будет заниматься разработкой программ для компьютеров. Тогда и заговорили о программной инженерии (или технологии промышленного программирования, как это называлось в России) как о некоторой дисциплине, целью которой является сокращение стоимости программ. С тех пор программная инженерия прошла достаточно бурное развитие. Этапы развития программной инженерии можно выделять по-разному. Каждый этап связан с появлением (или осознанием) очередной проблемы и нахождением путей и способов решения этой проблемы Сам термин – software engineering (программная инженерия) — впервые был озвучен в октябре 1968 года на конференции подкомитета НАТО по науке и технике (г. Гармиш, Германия). Присутствовало 50 профессиональных разработчиков ПО из 11 стран. Рассматривались проблемы проектирования, разработки, распространения и поддержки программ. Там впервые и прозвучал термин «программная инженерия» как некоторая дисциплина, которую надо создавать и которой надо руководствоваться в решении перечисленных проблем. Вскоре после этого в Лондоне состоялась встреча 22-х руководителей проектов по разработке ПО. На встрече анализировались проблемы и перспективы развития ПО. Отмечалась возрастающее воздействие ПО на жизнь людей. Впервые серьезно заговорили о надвигающемся кризисе ПО. Применяющиеся принципы и методы разработки ПО требовали постоянного усовершенствования. Именно на этой встрече была предложена концепция жизненного цикла ПО (SLC – Software Lifetime Cycle) как последовательности шагов-стадий, которые необходимо выполнить в процессе создания и эксплуатации ПО.

1.2 Эффективность программной инженерии

Эффективность – требует поиска специальных архитектурных решений, выбора каналов передачи с требуемыми характеристиками и оптимизации программного кода.

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

● обследование объектов и среды проектирования для предварительной формализации целей, назначения и задач проекта;

● первичное прогнозирование возможных характеристик и требований к программному продукту на базе обобщения данных ранее реализованных подобных прототипов и создание концепции проекта;

● подготовка предварительного плана выполнения этапов и частных работ с учетом допустимых затрат ресурсов на их реализацию;

● управление детализацией и реализацией плана производства, его оперативной корректировкой и перераспределением возможных ресурсов в соответствии с особенностями развития компонентов программного комплекса;

● обобщение и накопление результатов планирования и управления конкретным проектом для использования этих данных в качестве прототипов при производстве программных продуктов.

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

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

1.2 Аспект: повторное использование

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

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

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

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

Ключом к совершенствованию повторного использования продукта наличие какой-либо логической разбивки ваших действий и процессов, определение способа их реализации и понимание потребительских свойств для внесения изменений в процесс разработки и обслуживание в дальнейшем.

Связь программной инженерии с другими дисциплинами

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

Информатика (computer science) – научная дисциплина, в которой при помощи математических методов определяют формальные основы вычислимости. В нее входят математическая логика, теория грамматик, методы построения компиляторов, математические формальные методы, используемые в верификации и модельном тестировании и т.д. На первый взгляд информатика и программная инженерия между собой очень похожи, но прикладное применение каждой из дисциплин разное.

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


Связь программной инженерии с другими дисциплинам

Системотехника (system engineering) – это комплекс инженерных дисциплин, направленных на разработку и создание различных искусственных систем в энергетике, телекоммуникации, встроенных систем реального времени и т.д. Программное обеспечение в этом случае зачастую становится частью системы, управляя непосредственно оборудованием. Такие системы относятся к программно-аппаратным, поэтому программисты, разрабатывающие для них ПО, должны очень хорошо разбираться и в работе самой аппаратуры.

Бизнес-реинжиниринг (business reengineering) – это модернизация бизнеса в отдельно взятой компании за счет внедрения новых методов работы на базе современных информационных систем. Процесс может касаться внутреннего переустройства компании, либо направлен на создание нового клиентского сервиса. Чаще всего эти два процесса взаимосвязаны.

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

ОБЩИЕ ПРИНЦИПЫ ПРОГРАММНОЙ ИНЖЕНЕРИИ: ЭФФЕКТИВНОСТЬ, ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ, НАДЕЖНОСТЬ, СТОЙКОСТЬ К ОШИБКАМ

Основные компоненты CS-науки: Computer Engineering (компьютерная инженерия), System Engineering (системная инженерия), Software Engineering (SE – программная инженерия), соответствующая ТП. Согласно энциклопедии СS (1992) приведем краткое определение этих инженерных дисциплин СS. Компьютерная инженерия – это теории, принципы и методы построения компьютеров (frameworks, суперкомпьютеров и т.п.), а также системного ПО ЭВМ (ОС, трансляторов, загрузчиков и т.д.). Системная инженерия – это теория, методы и принципы построения информационных систем, систем управления и Computer Systems. Программная инженерия – это система методов, способов и дисциплин планирования, разработки, эксплуатации и сопровождения ПО. Принципам и методам построения информационных систем (ИС) В.М. Глушков посвятил свой последний научный труд «Безбумажная информатика» (1982) . В нем информационные системы – это компьютерные системы обработки информации на предприятиях, в органах управления и в производственной сфере. Базис таких систем – документы, не бумажные, а электронные, и система документооборота на всех уровнях управления государственных предприятий и органов. Информационные технологии (ИТ) – базис компьютерной инфраструктуры современных корпораций, предприятий и государственных органов управления, на которых главным источником деятельности является информация и решение различных задач обработки информации локального и глобального характера.

Стандарты программной инженерии

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

На их основе формируются профили стандартов для похожих типов проектов и/или предприятий. Производство программных продуктов давно поставлено на промышленную основу благодаря тому, что процессы стандартизации и сертификации прочно вошли и в программную инженерию.

Наиболее известные международные стандарты программной инженерии:

  • ISO/IEC 12207 — Information Technology — Software Life Cycle Processes — Процессы, происходящие при работе программных средств. В стандарт входят определения базовых понятий, таких как программный продукт и жизненный цикл программного продукта.
  • SEI CMM — Capability Maturity Model (for Software) — модель степени профессионализма при разработке ПО. В стандарте содержится информация о том, каким должен быть уровень профессионального мастерства при разработке программного обеспечения.
  • PMBOK — Project Management Body of Knowledge — Стандарт по управлению проектами.
  • SWBOK — Software Engineering Body of Knowledge — Стандарт по программной инженерии. В него входят описания направлений по разделам (областям знаний) программной инженерии.
  • ACM/IEEE CC2001 — Computing Curricula 2001 – Академический образовательный стандарт в области компьютерных наук. В него входят четыре основных раздела: Computer science, Computer engineering, Software engineering и Information systems, по каждому из которых определены области знаний, состав и планы рекомендуемых курсов.


Стандарты программной инженерии

Сегодня в рамках стандарта SWBOK разрабатывается расширенная версия стандартов по программной инженерии, в которую вошли пятнадцать направлений:

  • Software Requirements — требования к программному обеспечению.
  • Software Design — проектирование программного обеспечения.
  • Software Construction — конструирование программного обеспечения.
  • Software Testing — тестирование программного обеспечения.
  • Software Maintenance — сопровождение программного обеспечения.
  • Software Configuration Management — управление конфигурацией ПО.
  • Software Engineering Management — управление проектом информационных технологий.
  • Software Engineering Process — процесс программной инженерии.
  • Software Engineering Models and Methods — модели и методы разработки ПО.
  • Software Engineering Professional Practice — описание критериев профессионализма и компетентности разработчика программного обеспечения.
  • Software Quality — качество программного обеспечения.
  • Software Engineering Economics — экономические вопросы разработки программного обеспечения.
  • Computing Foundations — основы вычислительных технологий, которые применяют в разработке программного обеспечения.
  • Mathematical Foundations — базовые математические законы и понятия, которые используют в разработке программного обеспечения.
  • Engineering Foundations — базовые понятия инженерной деятельности.

Кто такой программный инженер

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

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

Основные составляющие программной инженерии:

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

Только до25 декабря

Пройди опрос иполучи обновленный курс от Geekbrains

Дарим курс по digital-профессиям
и быстрому вхождения в IT-сферу

Чтобы получить подарок, заполните информацию в открывшемся окне

Перейти

Скачать файл

В ходе знакомства с постановкой задачи перед началом работы по созданию ПО программный инженер старается найти ответы на следующие вопросы:

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

Когда станет понятно, будет ли это новый продукт с «нуля», или компоновка уже существующих процедур с написанием недостающих кодов, программный инженер ставит перед собой совсем другие вопросы:

  • какие блоки ПО необходимо логически связать, чтобы они работали в новом продукте как единое целое;
  • по каким критериям будут выбираться возможности дальнейшего расширения продукта;
  • насколько доступным должен быть программный код и комментарии к нему, чтобы можно было разобраться в работе создаваемого программного продукта;

В ходе тестирования ПО возникают совершенно отличные от предыдущих вопросы, на которые надо найти ответ:

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

Что такое системная инженерия?

Системная инженерия фокусируется на:

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

1.1 Основы и принципы программной инженерии

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

Частотный принцип — основан на выделении в алгоритмах и данных особых групп по частоте использования. Для действий, наиболее часто встречающихся при работе программ, создаются условия их быстрого выполнения. К часто используемым данным обеспечивается наиболее быстрый доступ. «Частые» операции стараются делать более короткими. Следует отметить, что лишь не более 5 % операторов программы оказывают ощутимое влияние на скорость выполнения программы

Этот факт позволяет значительную часть операторов программы кодировать без учета скорости вычислений, обращая основное внимание при этом на «красоту» и наглядность текстов

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

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

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

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

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

Важность системной инженерии:

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

Системная инженерия учитывает как деловые, так и технические требования клиентов, чтобы предоставить высококачественное решение, которое удовлетворяет потребности клиентов и других участников, подходит для его предполагаемого использования в реальных условиях и позволяет избежать или свести к минимуму вредные непреднамеренные последствия.

Целью всех проектов системной инженерии является контроль рисков, в частности, риск непредоставления того, что хочет и в чем нуждается потребитель, несвоевременная доставка, перерасход средств и негативные непредвиденные последствия. Степень снижения такого риска является одним из показателей эффективности методов системной инженерии. И наоборот, мерой приемлемости для клиента отсутствия деятельности по системному проектированию является количество дополнительной опасности, возникающей в результате.

ЗАКЛЮЧЕНИЕ

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

Важно подметить и то, что программная инженерия имеет не одно понятие и спутать тоже возможно. В описанном выше материале мы теперь прекрасно понимаем с чем мы имеем дело и что это, получая необходимые знания

Программная инженерия сильно отличается от других инженерных дисциплин нематериальностью программного обеспечения и дискретной природой его функционирования. Важные следствия:

  1. отсутствие производственной фазы в традиционном промышленном смысле;
  2. Фаза сопровождения программного обеспечения в основном связана с продолжающейся его разработкой или эволюцией, а не с традиционным ремонтом и обслуживанием по причине физического износа.

Программная инженерия концентрируется на абстрактных/логических объектах вместо конкретных/физических и стремится интегрировать принципы математики и информатики с инженерными подходами, разработанными для производства материальных технических объектов.

Основанием программной инженерии является информатика, а не естественные науки, при этом основной упор делается на дискретную, а не на классическую (непрерывную) математику.

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: