ОСНОВЫ И ПРИНЦИПЫ ПРОГРАММНОЙ ИНЖЕНЕРИИ
Содержание:
ВВЕДЕНИЕ
Программная инженерия (промышленное программирование) обычно ассоциируется с разработкой больших и сложных программ коллективами разработчиков. Становление и развитие этой области деятельности было вызвано рядом проблем, связанных с высокой стоимостью программного обеспечения, сложностью его создания, необходимостью управления и прогнозирования процессов разработки. В конце 60-х – начале 70-х годов прошлого века произошло событие, которое вошло в историю как первый кризис программирования. Событие состояло в том, что стоимость программного обеспечения стала приближаться к стоимости аппаратуры («железа»), а динамика роста этих стоимостей позволяла прогнозировать, что к середине 90-годов все человечество будет заниматься разработкой программ для компьютеров. Тогда и заговорили о программной инженерии (или технологии промышленного программирования, как это называлось в России) как о некоторой дисциплине, целью которой является сокращение стоимости программ. С тех пор программная инженерия прошла достаточно бурное развитие. Этапы развития программной инженерии можно выделять по-разному. Каждый этап связан с появлением (или осознанием) очередной проблемы и нахождением путей и способов решения этой проблемы Сам термин – software engineering (программная инженерия) - впервые был озвучен в октябре 1968 года на конференции подкомитета НАТО по науке и технике (г. Гармиш, Германия). Присутствовало 50 профессиональных разработчиков ПО из 11 стран. Рассматривались проблемы проектирования, разработки, распространения и поддержки программ. Там впервые и прозвучал термин «программная инженерия» как некоторая дисциплина, которую надо создавать и которой надо руководствоваться в решении перечисленных проблем. Вскоре после этого в Лондоне состоялась встреча 22-х руководителей проектов по разработке ПО. На встрече анализировались проблемы и перспективы развития ПО. Отмечалась возрастающее воздействие ПО на жизнь людей. Впервые серьезно заговорили о надвигающемся кризисе ПО. Применяющиеся принципы и методы разработки ПО требовали постоянного усовершенствования. Именно на этой встрече была предложена концепция жизненного цикла ПО (SLC – Software Lifetime Cycle) как последовательности шагов-стадий, которые необходимо выполнить в процессе создания и эксплуатации ПО.
1. ОБЩИЕ ПРИНЦИПЫ ПРОГРАММНОЙ ИНЖЕНЕРИИ: ЭФФЕКТИВНОСТЬ, ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ, НАДЕЖНОСТЬ, СТОЙКОСТЬ К ОШИБКАМ
Основные компоненты CS-науки: Computer Engineering (компьютерная инженерия), System Engineering (системная инженерия), Software Engineering (SE – программная инженерия), соответствующая ТП. Согласно энциклопедии СS (1992) приведем краткое определение этих инженерных дисциплин СS. Компьютерная инженерия – это теории, принципы и методы построения компьютеров (frameworks, суперкомпьютеров и т.п.), а также системного ПО ЭВМ (ОС, трансляторов, загрузчиков и т.д.). Системная инженерия – это теория, методы и принципы построения информационных систем, систем управления и Computer Systems. Программная инженерия – это система методов, способов и дисциплин планирования, разработки, эксплуатации и сопровождения ПО. Принципам и методам построения информационных систем (ИС) В.М. Глушков посвятил свой последний научный труд «Безбумажная информатика» (1982) [8]. В нем информационные системы – это компьютерные системы обработки информации на предприятиях, в органах управления и в производственной сфере. Базис таких систем – документы, не бумажные, а электронные, и система документооборота на всех уровнях управления государственных предприятий и органов. Информационные технологии (ИТ) – базис компьютерной инфраструктуры современных корпораций, предприятий и государственных органов управления, на которых главным источником деятельности является информация и решение различных задач обработки информации локального и глобального характера.
1.1 Основы и принципы программной инженерии
Программы различаются по назначению, выполняемым функциям, формам реализации. Однако можно полагать, что существуют некоторые общие принципы, которые следует использовать при разработке программ.
Частотный принцип - основан на выделении в алгоритмах и данных особых групп по частоте использования. Для действий, наиболее часто встречающихся при работе программ, создаются условия их быстрого выполнения. К часто используемым данным обеспечивается наиболее быстрый доступ. «Частые» операции стараются делать более короткими. Следует отметить, что лишь не более 5 % операторов программы оказывают ощутимое влияние на скорость выполнения программы. Этот факт позволяет значительную часть операторов программы кодировать без учета скорости вычислений, обращая основное внимание при этом на «красоту» и наглядность текстов.
Принцип модульности - в данном контексте понимают функциональный элемент рассматриваемой системы, имеющий оформление, законченное и выполненное в пределах требований системы, и средства сопряжения с подобными элементами или элементами более высокого уровня данной или другой системы. Способы обособления составных частей программ в отдельные модули могут различаться существенно. В значительной степени разделение системы на модули определяется используемым методом проектирования программ.
Принцип функциональной избирательности - является логическим продолжением частотного и модульного принципов и используется при проектировании программ. В программах выделяется некоторая часть важных модулей, которые постоянно должны быть в состоянии готовности для эффективной организации вычислительного процесса. Эту часть в программах называют ядром или монитором. При формировании состава монитора требуется учесть два противоречивых требования. В состав монитора, помимо чисто управляющих модулей, должны войти наиболее часто используемые модули. Количество модулей должно быть таким, чтобы объем памяти, занимаемой монитором, был не слишком большим. Программы, входящие в состав монитора, постоянно хранятся в оперативной памяти. Остальные части программ постоянно хранятся во внешних запоминающих устройствах и загружаются в оперативную память только при необходимости, перекрывая друг друга также при необходимости.
Принцип генерируемости - основное положение этого принципа определяет такой способ исходного представления программы, который бы позволял осуществлять настройку на конкретную конфигурацию технических средств, круг решаемых проблем, условия работы пользователя.
Принцип функциональной избыточности - учитывает возможность проведения одной и той же работы различными средствами. Особенно важен учет этого принципа при разработке пользовательского интерфейса для выдачи одних и тех же данных разными способами вызова из-за психологических различий в восприятии информации.
Принцип «по умолчанию» - применяется для облегчения организации связей с системой, как на стадии генерации, так и при работе с уже готовыми программами. Принцип основан на хранении в системе некоторых базовых описаний структур, модулей, конфигураций оборудования и данных, определяющих условия работы с программой. Эту информацию программа использует в качестве заданной по умолчанию, если пользователь забудет или сознательно не конкретизирует ее.
1.2 Эффективность программной инженерии
Эффективность – требует поиска специальных архитектурных решений, выбора каналов передачи с требуемыми характеристиками и оптимизации программного кода.
Задачи рационального сочетания целей, стратегий действий, конкретных процедур и доступных ресурсов необходимо решать для достижения основной цели — получения программного продукта с заданными функциональными характеристиками и качеством. Базой эффективного управления проектом программного комплекса является план, в котором задачи исполнителей частных работ должны быть согласованы с выделяемыми для них ресурсами, а также между собой, по результатам и срокам их достижения. Планирование программных проектов должно обеспечивать компромисс между требующимися характеристиками создаваемой системы и ограниченными ресурсами, необходимыми на ее разработку и применение. По мере уточнения исходных требований к объекту разработки, внешней среде применения и ресурсам, в процессе системного анализа и проектирования возрастает достоверность планирования, которое должно проходить этапы:
● обследование объектов и среды проектирования для предварительной формализации целей, назначения и задач проекта;
● первичное прогнозирование возможных характеристик и требований к программному продукту на базе обобщения данных ранее реализованных подобных прототипов и создание концепции проекта;
● подготовка предварительного плана выполнения этапов и частных работ с учетом допустимых затрат ресурсов на их реализацию;
● управление детализацией и реализацией плана производства, его оперативной корректировкой и перераспределением возможных ресурсов в соответствии с особенностями развития компонентов программного комплекса;
● обобщение и накопление результатов планирования и управления конкретным проектом для использования этих данных в качестве прототипов при производстве программных продуктов.
На каждом этапе должен проводиться поиск эффективных технически -инженерные решения реализации проекта, исследование и сопоставление альтернативных действий, которые должны приводить к достижению поставленных целей производства программного продукта. В результате процессы планирования проекта и его выполнения обычно развиваются параллельно. Уже при первичном прогнозировании развития проекта должны оцениваться альтернативные характеристики объекта и среды разработки и выбираться наиболее подходящие для производства в соответствии с поставленными целями и имеющимися ресурсами. Сравнение альтернатив следует проводить по величине достигаемого эффекта проекта в зависимости от затрат на его достижение (желательно, по показателю «эффективность/стоимость»).
Программные комплексы все больше встраиваются в различные заказные технические системы. Работа с такими проектами требует от программных специалистов широкого взгляда на общие технические и инженерные задачи проектирования сложных систем. Специалистам занимающимся аналитикам программных проектов необходимо участвовать в выработке требований для всей системы, а также понимать прикладную область применения продукта еще до начала обдумывания функций компонентов и их интерфейсов, требованиям которых должен будет отвечать программный продукт.
1.2 Аспект: повторное использование
Под этим подразумевается, повторное эксплуатация продукта с возможность удержать потребителя для повторной покупки ПО и завлекания во все сторонние продукты от разработчика, издателя и магазина.
Так же существует хороший факт, позволяющий акцентироваться на возможности улучшения процесса. Возможность повторного использования программного обеспечения не препятствует улучшению процесса.
Если задуматься о процессах, которые входят в создание программного обеспечения - разработка требований, проектирование системы, внедрение системы, развертывание системы, управление требованиями, управление конфигурациями, проверка и проверка работоспособности, отслеживание изменений и ряд других, то они повторяются на каждый проект, независимо от того, сколько у вас повторного использования. Кроме того, каждый из них имеет количественные и качественные меры, которые могут быть использованы для определения того, насколько хорош этот конкретный процесс или деятельность, и, как результат, насколько хорош процесс развития в целом.
В крайнем случае можно взять надежную линейку программных продуктов и смерить с сопоставимой конкуренции причаствующим в повторном использовании продукта. С другой стороны, вы можете предполагать разработку новых месторождений. Все еще необходимо выполнять все эти процессы в разной степени, хотя они могут происходить с разной скоростью или, возможно, даже в разных последовательностях. Например, при большом количестве повторного использования большая часть выделенного времени может быть потрачена на интеграцию и проверку /проверку на системном уровне. При новых усилиях по развитию в процессе проектирования и реализации может потребоваться больший процент времени. Пока вы выполняете процесс хотя бы один раз в ходе проекта, его можно измерить (количественно и качественно). После того, как вы внесете корректировки и посмотрите, как эти корректировки влияют на некоторую меру как области процесса, так и общей возможности доставки программного обеспечения, а затем уточняют процесс для других проектов.
Ключом к совершенствованию повторного использования продукта наличие какой-либо логической разбивки ваших действий и процессов, определение способа их реализации и понимание потребительских свойств для внесения изменений в процесс разработки и обслуживание в дальнейшем.
1.3 Надежность и стойкость к ошибкам в программной инженерии
Надежность — набор атрибутов, относящихся к способности программного обеспечения сохранять свой уровень качества функционирования при установленных условиях за установленный период времени. Следует заметить, что характер отказов программного средства зависит от внутренних дефектов и условий функционирования ПО. Характер отказов детализируется следующими субхарактеристиками:
• завершенность характеризует частоту отказов при наличии ошибок в программном обеспечении, традиционно измеряется в наработке на отказ при отсутствии средств рестарта;
• устойчивость к ошибкам— сохранение работоспособного состояния в случаях программных ошибок или взаимодействия с внешней средой, традиционно измеряется в наработке на отказ при наличии средств автоматического рестарта;
• восстанавливаемость характеризует возможности восстанавливать определенный уровень качества функционирования и данные, непосредственно поврежденные в случае отказа, а также ресурсы, необходимые для этого. Обычно измеряется длительность восстановления;
• доступность (готовность) — относительное время работоспособного функционирования, измеряется как вероятность нахождения в работоспособном состоянии;
• соответствие— соответствие стандартам надежности.
рассмотрим более подробно характеристику качества — надежность. Как было сказано выше (и как следует из стандарта), надежность программного средства является динамическим понятием (как и для аппаратных средств), поскольку проявляется во времени. В соответствии со стандартом надежное ПО должно иметь низкую вероятность отказа при функционировании в реальном времени. Кроме того, поскольку теория надежности разрабатывалась первоначально для технических средств, существуют некоторые особенности при ее применении к программным средствам. В частности, если проанализировать определение надежности, то очевидно, что понятия и методы теории надежности применимы только к программным средствам, которые функционируют в реальном времени и непосредственно взаимодействуют с внешней средой.
Очевидно, что работоспособность программных средств можно гарантировать при конкретных исходных данных, которые использовались при тестировании и испытаниях. Как было сказано ранее, к нарушению работоспособности программ при безотказности аппаратуры обычно приводит обработка программой реальных входных данных, которые по каким-либо причинам приводят к неадекватной работе программы: выполнению не по требуемому маршруту, зацикливанию и т. п. Чаще всего это означает, что тщательного тестирования на конкретных входных данных и данной конфигурации программного обеспечения не проводилось. Поэтому для обеспечения надежности в плане субхарактеристики завершенности необходимо тщательное тестирование, которое снизит уровень невыделенных ошибок и повысит наработку до отказа при отсутствии средств рестарта, а в плане субхарактеристик устойчивости к ошибкам и восстанавливаемости — разработка средств рестарта и введения временной, информационной и программной избыточности, позволяющих увеличить наработки на отказ и снизить время восстановления.
Следует обратить внимание, что так же, как и в случае аппаратного обеспечения, необходимо разделять такие понятия, как отказ и сбой. Если время восстановления меньше некоторого порогового значения, являющегося для объекта или системы критическим, то в этом случае дефекты функционирования программ следует относить к сбоям, в противном случае — к отказам. Очевидно, что для любого объекта управления (или системы) существует некоторое допустимое время, определяемое аналитически или на основе эксперимента, когда в отсутствие данных от программного средства он может нормально функционировать. Очевидно, что чем менее инерционным является объект управления, тем меньшее время он может функционировать без нарушения работоспособности в отсутствие воздействий от программного обеспечения. Таким образом, в отличие от понятий сбоя и отказа для аппаратных средств, для понятий сбоя и отказа программных средств не рассматривается случай физического разрушения программ, следовательно, восстановление связано не с понятием ремонтопригодности, а с наличием средств рестарта, которые обеспечивают перевод отказовой ситуации в нормальное функционирование.
Теория надежности программных средств оперирует теми же понятиями, что и теория надежности аппаратных средств, однако, как было сказано ранее, в случае показателей надежности программных средств они имеют свою специфику. Рассмотрим основные показатели надежности, применяемые для оценки надежности ПО. Определения большинства из них совпадают с определением соответствующих показателей для аппаратных средств.
Наработка на отказ — для ее определения измеряется время работоспособного состояния между двумя последовательными отказами или началами нормального функционирования системы после них. В данном контексте рассматривается случай, когда объект переходит в неработоспособное состояние, т. е. длительность восстановления превышает пороговое значение.
Здесь также следует учесть, что в вычислительных системах сбои (несмотря на аппаратные противосбойные мероприятия) появляются на порядок чаще, чем устойчивые отказы. Для оценки показателей надежности по отношению к сбоям могут применяться такие же оценки, как и по отношению к устойчивым отказам.
При этом большое значение приобретают средства контроля и восстановления (рестарта), которые позволяют за счет быстрого восстановления перевести отказовую ситуацию в режим нормального функционирования. Поскольку в реальных системах невозможно достичь наработки на отказовую ситуацию (реализовать программное средство без дефектов), которая была бы соизмерима с наработкой на отказ аппаратуры, на которой функционирует программное средство, то задача восстановления нормального функционирования ПО не может быть эффективно решена без наличия средств рестарта. Их проектированию и реализации должно уделяться серьезное внимание.
Восстанавливаемость характеризуется полнотой и длительностью восстановления функционирования программ в процессе перезапуска — рестарта, поскольку перезапуск должен обеспечивать возобновление нормального функционирования ПС, на что нужны ресурсы ЭВМ и время.
Коэффициент готовности — вероятность иметь восстанавливаемую систему в работоспособном состоянии в произвольный момент времени.
Среднее время восстановления — математическое ожидание времени восстановления работоспособного состояния объекта после отказа.
Таким образом, в отличие от аппаратных средств, где восстановление является не только аппаратной характеристикой, но и учитывает навыки обслуживающего персонала, в программных средствах восстановление может проходить и без участия оператора, особенно в тех случаях, когда отказ не связан с аппаратурой и восстановление происходит за счет средств рестарта.
ЗАКЛЮЧЕНИЕ
Проведенный анализ позволяет сделать вывод, что программная инженерии касается не только слепого действия, а более масштабных размеров, и также связанные с данным процессом, действия, которые могут и должны применяться с конструктивной стороны, командами и отдельными специалистами. Учитывать многие аспекты, которые позволяют сделать качественный продукт, следуя основными принципами.
Важно подметить и то, что программная инженерия имеет не одно понятие и спутать тоже возможно. В описанном выше материале мы теперь прекрасно понимаем с чем мы имеем дело и что это, получая необходимые знания.
Программная инженерия сильно отличается от других инженерных дисциплин нематериальностью программного обеспечения и дискретной природой его функционирования. Важные следствия:
- отсутствие производственной фазы в традиционном промышленном смысле;
- Фаза сопровождения программного обеспечения в основном связана с продолжающейся его разработкой или эволюцией, а не с традиционным ремонтом и обслуживанием по причине физического износа.
Программная инженерия концентрируется на абстрактных/логических объектах вместо конкретных/физических и стремится интегрировать принципы математики и информатики с инженерными подходами, разработанными для производства материальных технических объектов.
Основанием программной инженерии является информатика, а не естественные науки, при этом основной упор делается на дискретную, а не на классическую (непрерывную) математику.
Основываясь на математике и компьютерной технике, программная инженерия занимается разработкой моделей и надежных методов производства высококачественного программного обеспечения, и данный подход распространяется на все уровни – от теории и принципов до реальной практики создания ПО.
Список литературы
Электронные ресурсы
- Принципы разработки программного обеспечения https://studwood.ru/1920236/informatika/printsipy_razrabotki_programmnogo_obespecheniya
- Е.М. Лаврищева Программная инженерия: http://www.computer-museum.ru/books/lavrischeva_3_basics.pdf
- С.Н. Карпенко Введение в программную инженерию: http://www.unn.ru/pages/issues/aids/2007/16.pdf
- Построение гипермедиа систем — Информатика, программирование https://stud-baza.ru/postroenie-gipermedia-sistem-kursovaya-rabota-informatika-programmirovanie
- Повторное использование: https://sprosi.pro/questions/57903/povtornoe-ispolzovanie-programmnogo-obespecheniya-isklyuchaet-vozmojnost-povtoryaemosti-protsessa
- Программная_инженерия.Курс_лекций:http://repo.ssau.ru/bitstream/Uchebnye-izdaniya/Programmnaya-inzheneriya-Elektronnyi-resurs-elektron-uchebmetod-kompleks-po-discipline-v-LMS-Moodle-71103/1/Зеленко%20Л.%20С.%20Программная.pdf
- Гипертекстовые и мультимедийные информационные технологии (Векторные и растровые изображения)
- ГИПЕРТЕКСТОВЫЕ ТЕХНОЛОГИИ КАК СРЕДСТВО ИНТЕГРАЦИИ ТЕКСТОВОЙ ИНФОРМАЦИИ И ИНФОРМАЦИИ, ПРЕДСТАВЛЯЕМЫХ В ДРУГИХ МОДАЛЬНОСТЯХ (ПОНЯТИЕ И ИСТОРИЯ РАЗВИТИЯ ГИПЕРТЕКСТА)
- Технологии распознавания текстов. Документооборот
- Исследования интеллекта у людей творческих профессий
- Правовые акты управления: понятие, функции и формы (Понятие, функции и формы правовых актов управления)
- Характеристика компании CISLink (Характеристика компании CISLink)
- Обзор эффективных техник самомотивации
- Принтеры и особенности их функционирования
- Современные офисные программы
- Источники административного права (Систематизация административного права)
- Модель кругооборота благ, ресурсов, доходов, расходов
- Информационные технологии в юридической деятельности (Технология электронной подписи)