Технология разработки программного обеспечения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Технология разработки программного обеспечения



ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федерального государственного образовательного бюджетного учреждения

высшего профессионального образования

«Поволжский государственный университет телекоммуникаций и информатики»

КОЛЛЕДЖ СВЯЗИ

ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Конспект лекций

Самара, 2013

Введение

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

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

МДК «Технология разработки программного обеспечения» позволяет освоить этапы разработки программного обеспечения, модели жизненного цикла программного продукта, проблемы проектирования сложных программных средств, основные методы разработки программного обеспечения и др.

В результате изучения профессионального модуля студент должен:

уметь:

- владеть основными методологиями процессов разработки программного обеспечения;

- использовать методы для получения кода с заданной функциональностью и степенью качества;

знать:

- модели процесса разработки программного обеспечения;

- основные принципы процесса разработки программного обеспечения;

- основные подходы к интегрированию программных модулей;

- основные методы и средства эффективной разработки;

- основы верификации и аттестации программного обеспечения;

- концепции и реализации программных процессов;

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

- методы организации работы в коллективах разработчиков программного обеспечения;

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

- стандарты качества программного обеспечения;

- методы и средства разработки программной документации

Тема 1.1 Программное обеспечение (ПО): основные понятия и определения. Классификация ПО. Спецификация ПО.

Классы программного обеспечения

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

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

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

· аппаратная часть автономных компьютеров и сетей ЭВМ;

· функциональные задачи различных предметных областей;

· технология разработки программ.

Рис. 1. Классы программных продуктов

 

Для поддержки информационной технологии в этих областях выделим соответственно три класса программных продуктов, представленных на рис. 1:

· системное программное обеспечение;

· пакеты прикладных программ;

· инструментарий технологии программирования.

 

Системное программное обеспечение (System Software) — совокупность программ и программных комплексов, предназначенная для обеспечения работы компьютера и сетей ЭВМ.

Системное программное обеспечение выполняет следующие задачи:

· создание операционной среды функционирования других программ;

· обеспечение надежной и эффективной работы самого компьютера и вычислитель­ной сети;

· проведение диагностики, локализации сбоев, ошибок и отказов и профилактики аппаратуры компьютера и вычислитель­ных сетей;

· выполнение вспомогательных технологических процессов (копирование, архивиро­вание, восстановление файлов программ и баз данных и т.д.).

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

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

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

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

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

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

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

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

Правильность программы не является дополнительной характеристикой программы в отличие от эффективности.

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

Требования к эффективности программы обычно определяют на стадии проектирования.

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

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

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

Можно лишь обратить внимание на те аспекты, где скрыты резервы оптимизации и проиллюстрировать их на примерах.

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

Существуют два подхода к оптимизации программ: «чистка» и перепрограммирование. Оба подхода имеют как достоинства, так и недостатки.

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

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

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

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

Оптимизация эффективности эксплуатации программного обеспечения.

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

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

Важным частным случаем запаса на развитие программы является ее универсальность и настройка по параметрам. Например, вряд ли можно найти много алгоритмов, для которых существенно то, что матрица имеет размер 20x20, а для матрицы размером 21x21 они уже непригодны. При этом, если в алгоритме нет ничего «существенного квадратного», то лучше считать размер матрицы с некоторыми параметрами — М и N.

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

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

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

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

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

Конкретные методы блокировки ошибок и степень контроля данных выбираются в зависимости от конкретных условий и обстоятельств.

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

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

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

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

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

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

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

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

К организационным мерам можно отнести периодическое копирование файлов данных и хранение их в надежном месте (например, в сейфе).

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


Авторская разработка

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

Этот принцип был достаточно широко распространен в 70-80-е годы XX века. Сейчас он применяется редко [Кулаичев 1999]. Примерами авторских разработок являются операционная система Диспак (В.Ф. Тюрин), текстовый редактор Лексикон (Е. М. Веселов), трансляторы с языков Algol-68 (П. Наур) и Pascal (H. Вирт).

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

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

По данным А. П. Кулаичева [Кулаичев 1999], авторская разработка может выигрывать по производительности в тридцать и более раз у коллективной разработки, что достигается за счет:

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

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

Объем программного продукта, выполненного методом авторской разработки, в 5-20 раз меньше по сравнению с индустриальными аналогами.

Авторская разработка предполагает достижение профессионального успеха, известности и славы в одиночку. Такое вполне реально, следует только правильно выбрать профессиональную "нишу", область ведения разработки.

Коллективная разработка

Одним из основных вопросов коллективной разработки является разделение труда - от равноправных соисполнителей до организации в виде жесткой иерархии (например, бригады главного программиста).

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

Технические командные роли

Равноправные соисполнители

Бригада равноправных соисполнителей обычно состоит из специалистов, занимающихся примерно подобными задачами в рамках одного проекта. Естественно, специализаций в рамках одной бригады может быть несколько. В разд. 1.7.6.2 уже приводился примерный состав такой бригады разработчиков. Напомним его:

· инженеры-разработчики (специалисты по инженерии программирования и программисты);

· технические писатели;

· инженеры тестирования;

· инженеры качества;

· специалисты по сопровождению продукта;

· специалисты по продажам продукта.

Тип работы определяет содержание и природу выполняемой работы. Приведем список типов работ и областей специализации на основе классификации Конгер [Conger 1994].

· Разработка приложений.

o Программист.

o Специалист по инженерии программирования.

o Специалист по инженерии знаний.

· Работа с приложениями.

o Специалист по приложениям.

o Администратор данных.

o Администратор базы данных.

· Техническая поддержка.

o Системный администратор.

o Сетевой администратор.

o Администратор коммуникаций,

· Обеспечение качества продукта.

o Технический писатель.

o Инженер тестирования.

o Инженер качества.

· Маркетинг.

o Специалист по сопровождению продукта.

o Специалист по продажам продукта.

· Системное интегрирование.

o Системный интегратор.

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

Общинная модель разработки

Общинная модель характеризуется тремя основными факторами.

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

· Разработка ведется на базе открытых исходных текстов. По ним можно разобраться с сутью задачи и в любой момент подключиться к разработке.

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

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

· Каждая хорошая программа начинается с энтузиазма разработчика.

· Хорошие программисты знают, что можно написать, а великие - что можно переписать.

· При правильном отношении интересная проблема найдет вас сама.

· Когда вы теряете интерес к программе, ваша последняя обязанность - передать ее компетентному преемнику.

· Следует выпускать ранние и частые версии программ.

· Обнаружить проблему и исправить ее могут разные люди.

· Иногда использовать идеи пользователей лучше, чем свои идеи.

 

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федерального государственного образовательного бюджетного учреждения

высшего профессионального образования

«Поволжский государственный университет телекоммуникаций и информатики»

КОЛЛЕДЖ СВЯЗИ

ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Конспект лекций

Самара, 2013

Введение

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

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

МДК «Технология разработки программного обеспечения» позволяет освоить этапы разработки программного обеспечения, модели жизненного цикла программного продукта, проблемы проектирования сложных программных средств, основные методы разработки программного обеспечения и др.

В результате изучения профессионального модуля студент должен:

уметь:

- владеть основными методологиями процессов разработки программного обеспечения;

- использовать методы для получения кода с заданной функциональностью и степенью качества;

знать:

- модели процесса разработки программного обеспечения;

- основные принципы процесса разработки программного обеспечения;

- основные подходы к интегрированию программных модулей;

- основные методы и средства эффективной разработки;

- основы верификации и аттестации программного обеспечения;

- концепции и реализации программных процессов;

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

- методы организации работы в коллективах разработчиков программного обеспечения;

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

- стандарты качества программного обеспечения;

- методы и средства разработки программной документации

Тема 1.1 Программное обеспечение (ПО): основные понятия и определения. Классификация ПО. Спецификация ПО.

Классы программного обеспечения

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

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

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

· аппаратная часть автономных компьютеров и сетей ЭВМ;

· функциональные задачи различных предметных областей;

· технология разработки программ.

Рис. 1. Классы программных продуктов

 

Для поддержки информационной технологии в этих областях выделим соответственно три класса программных продуктов, представленных на рис. 1:

· системное программное обеспечение;

· пакеты прикладных программ;

· инструментарий технологии программирования.

 

Системное программное обеспечение (System Software) — совокупность программ и программных комплексов, предназначенная для обеспечения работы компьютера и сетей ЭВМ.

Системное программное обеспечение выполняет следующие задачи:

· создание операционной среды функционирования других программ;

· обеспечение надежной и эффективной работы самого компьютера и вычислитель­ной сети;

· проведение диагностики, локализации сбоев, ошибок и отказов и профилактики аппаратуры компьютера и вычислитель­ных сетей;

· выполнение вспомогательных технологических процессов (копирование, архивиро­вание, восстановление файлов программ и баз данных и т.д.).

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

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

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

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

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

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



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 109; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.166.98 (0.105 с.)