Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Общие принципы программной инженерии: эффективность, повторное использование, надежность, стойкость к ошибкам

Содержание:

Введение

Основные компоненты CS-науки: Computer Engineering (компьютерная инженерия), System Engineering (системная инженерия), Software

Engineering (SE – программная инженерия), соответствующая ТП. Согласно энциклопедии СS (1992) приведем краткое определение этих инженерных дисциплин СS.

Компьютерная инженерия – это теории, принципы и методы построения компьютеров (frameworks, суперкомпьютеров и т.п.), а также системного ПО ЭВМ (ОС, трансляторов, загрузчиков и т.д.). Системная инженерия – это теория, методы и принципы построения информационных систем, систем управления и Computer Systems. Программная инженерия –

это система методов, способов и дисциплин планирования, разработки,

эксплуатации и сопровождения ПО.

На сегодняшний день нет единого определения понятия «программная инженерия».

Ниже приведено несколько таких определений, данных крупными специалистами в этой

области, или зафиксированные в документах ведущих организаций [2]:

· установление и использование обоснованных инженерных принципов (методов)

для экономного получения ПО, которое надежно и работает на реальных

машинах. [Bauer 1972].

· та форма инженерии, которая применяет принципы информатики (computer

science) и математики для рентабельного решения проблем ПО. [CMU/SEI-90-

TR-003]

· применение систематического, дисциплинированного, измеряемого подхода к

разработке, использованию и сопровождению ПО [IEEE 1990].

· дисциплина, целью которой является создание качественного ПО, которое

завершается вовремя, не превышает выделенных бюджетных средств и

удовлетворяет выдвигаемым требованиям [Schach, 99]

Для того, чтобы получить представление о том, что такое программная инженерия,

следуя [3] попробуем разобраться в следующих вопросах:

· Что такое программное обеспечение (software)?

· Что такое программная инженерия?

· В чем отличие программной инженерии от информатики (computer science)?

· В чем отличие программной инженерии от других инженерий?

· Что такое методы программной инженерии?

· Что такое CASE (Computer-Aided Software Engineering)?

· Какими свойствами обладает хорошая программа?

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

Программная инженерия 

(англ. software engineering) — приложение систематического, дисциплинированного, измеримого подхода к разработке, функционированию и сопровождению программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению (ISO/IEC/IEEE 24765:2017).

В чем отличие программной инженерии от информатики (computer science)

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

«Прикладная информатика» - это специальность пограничная между собственно информатикой и множеством других областей знаний, в каждой из которых постоянно требуется ИТ-специалист. К примеру, экономика – самостоятельная наука, но эффективная работа экономистов зависит от налаженной работы с различными информационными технологиями. А за это отвечает техник - программист с необходимыми знаниями в области экономики. Или возьмём для примера топ-менеджера. Чтобы эффективно управлять и оперативно выполнять задания руководства, ему необходимо контролировать множество процессов, которые пространственно могут быть распределены очень широко – по какому-то городу, в разных городах или даже в других странах. Без информационных технологий здесь никак не обойтись. Но чтобы эти технологии работали как по часам, нужен техник-программист со знаниями в сфере менеджмента. Таким образом, техник программист – это универсал, которому всегда найдется место в любой сфере человеческой деятельности, где есть информационные технологии, будь то юриспруденция, менеджмент, дизайн, экономика или что-либо другое.

В чем отличие программной инженерии от других инженерий?

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

Прежде всего, отметим, что жизненный цикл продукта любой инженерии в упрощенном виде включает фазы: проектирование, создание образца, испытание, производство, эксплуатация.
Компьютерная программа – это (в отличие от объектов других инженерий) не материальный объект (просьба не путать с носителем программы – устройством памяти любого типа). Отсюда следуют следующие отличия. Фаза производства состоит в копировании образца на другие носители. Стоимость фазы исчезающее мала. Если кодирование считать элементом проектирования (что очень близко к истине), то отсутствует также и фаза создания образца (строится компилятором и линковщиком)

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

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

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

· Что такое методы программной инженерии?

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

Методы программной инженерии можно разделить на три группы:

• методы прототипирования, базирующиеся на различных формах прототипов;

• формальные методы, обоснованные математически;

• эвристические методы, касающиеся неформализованных подходов

(структурные, ориентированные на данные, объектно- ориентированные).

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

Что такое CASE (Computer-Aided Software Engineering)

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

Какими свойствами обладает хорошая программа?

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

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

Надежность (dependability). Надежность ПО включает такие элементы как:

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

Безопасность – сбои в работе программы не должны приводить к опасным последствиям (авариям)
Защищенность от случайных или преднамеренных внешних воздействий (защита от дурака, вирусов, спама).

Эффективность (efficiency). ПО не должно впустую тратить системные ресурсы, такие как память, процессорное время, каналы связи. Поэтому эффективность ПО оценивается следующими показателями: время выполнения кода, загруженность процессора, объем требуемой памяти, время отклика и т.п.

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

Наследование ранее созданного ПО (legacy systems). Существует достаточно много систем, созданных много лет назад, морально устаревших, но продолжающих работать. Проблема наследования таких систем состоит в их сопровождении – поддержке и развитии.
Разнородность программных систем. ПО должно работать в распределенных сетях, на разнородном оборудовании, в разных средах, под управлением различных операционных систем.
Сокращение времени на разработку. Запросы рынка требования к программным системам меняются очень быстро. Суть проблемы состоит в том, чтобы сократить время разработки ПО без снижения его качества. 
Эти трудности часто оказываются связанными между собой. Задача разработки сетевого варианта старой локальной базы данных в ограниченные сроки является достаточно типичной

ИСТОЧНИКИ

http://www.computer-museum.ru/books/lavrischeva_3_basics.pdf

http://www.unn.ru/pages/issues/aids/2007/16.pdf

https://fb.ru/article/263833/software---eto-chto-takoe-chto-za-programma-software

https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%B8%D1%8F

https://otvet.mail.ru/question/167694740

http://referat911.ru/Programmirovanie-i-kompyutery/programmnaya-inzheneriya/593748-3480060-place1.html

https://megalektsii.ru/s63648t1.html

https://studme.org/174119/informatika/metody_programmnoy_inzhenerii

https://extxe.com/9681/additivnye-tehnologii-i-bystroe-prototipirovanie/

https://studme.org/184191/informatika/case_sredstva_computer_aided_software_engineering

https://megalektsii.ru/s63650t1.html