Программная инженерия. Часть 1. Проектирование систем
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
Поволжский государственный технологический университет
Год издания: 2016
Кол-во страниц: 168
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-8158-1767-8
Артикул: 782403.01.99
Изложены теоретические основы и практические методы инженерии программного обеспечения для начальных этапов разработки (анализ требований, архитектурное проектирование и планирование) программных систем.
Пособие предназначено для студентов, обучающихся по направлению «Прикладная информатика».
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
В. И. Абдулаев Программная инженерия Часть 1. Проектирование систем Учебное пособие Йошкар-Ола 2016
УДК 004.41(075.8) ББК 32.97 А 13 Рецензенты: кандидат физико-математических наук, профессор кафедры «Информационные системы в экономике» ПГТУ А. В. Бородин; кандидат физико-математических наук, доцент кафедры «Информационные системы в экономике» ПГТУ Л. В. Петрова Печатается по решению редакционно-издательского совета ПГТУ Абдулаев, В. И. А 13 Программная инженерия: учебное пособие: в 2 ч. / В. И. Аб дулаев. – Йошкар-Ола: Поволжский государственный технологический университет, 2016. ISBN 978-5-8158-1766-1 Ч. 1. Проектирование систем – 168 с. – ISBN 978-5-8158-1767-8 Изложены теоретические основы и практические методы инженерии программного обеспечения для начальных этапов разработки (анализ требований, архитектурное проектирование и планирование) программных систем. Пособие предназначено для студентов, обучающихся по направле нию «Прикладная информатика». УДК 004.41(075.8) ББК 32.97 ISBN 978-5-8158- 1767-8 (ч. 1) © Абдулаев В. И., 2016 ISBN 978-5-8158- 1766-1 © Поволжский государственный технологический университет, 2016
ОГЛАВЛЕНИЕ Введение .............................................................................................. 5 1. ПРОБЛЕМЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ................................................................................. 9 1.1. Природа программного обеспечения ................................ 9 1.2. Области приложений программного обеспечения .......... 14 1.3. Ключевые проблемы программной инженерии .............. 16 1.4. Затраты, сроки и качество ................................................ 17 1.5. Масштаб и изменения ...................................................... 23 1.6. Выводы по разделу .......................................................... 26 Вопросы для самопроверки ..................................................... 27 2. ПРОЦЕССЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ............................................................................... 28 2.1. Процесс и проект ............................................................. 30 2.2. Компонентные процессы производства программного продукта .................................................................................. 31 2.3. Модели процесса разработки программного обеспечения ............................................................................ 35 2.4. Процесс проектного управления. .................................... 63 2.5. Выводы по разделу .......................................................... 64 Вопросы для самопроверки ....................................................... 67 3. АНАЛИЗ И СПЕЦИФИКАЦИЯ ТРЕБОВАНИЙ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ ........................................ 69 3.1. Ценность хороших SRS ................................................... 70 3.2. Процесс разработки требований. ..................................... 71 3.3. Спецификация требований .............................................. 72 3.4. Другие подходы к анализу требований к программному обеспечени. ................................................. 99 3.5. Валидация требований ................................................... 103 3.6. Выводы по разделу ........................................................ 106 Вопросы для самопроверки ................................................... 107
4. ПРОЕКТНОЕ ПЛАНИРОВАНИЕ .............................................. 108 4.1. Оценка трудозатрат ........................................................ 109 4.2. Календарный график и штатная численность проекта . 116 4.3. Планирование качества .................................................. 118 4.4. Планирование управления рисками .............................. 121 4.5. План мониторинга проекта ............................................ 124 4.6. Детальный план-график ................................................. 127 4.7. Выводы по разделу ........................................................ 130 Вопросы для самопроверки ................................................... 132 5. АРХИТЕКТУРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ............ 134 5.1. Роль архитектуры программного обеспечения ............. 134 5.2. Архитектурные представления системы (Architecture Views)............................................................... 137 5.3. Представление «Компоненты и коннекторы» ............... 140 5.4. Архитектурные стили для C&C представления. ........... 148 5.5. Документирование процесса архитектурного проектирования ..................................................................... 155 5.6. Оценивание архитектур ................................................. 158 5.7. Выводы по разделу ........................................................ 159 Вопросы для самопроверки ................................................... 161 Глоссарий ........................................................................................ 162 Список литературы ......................................................................... 167
ВВЕДЕНИЕ Программное обеспечение компьютеров продолжает оставаться самой важной технологией на данной стадии мирового развития. Оно является сегодня главным примером «закона непредвиденных последствий», сформулированного известным американским социологом Робертом Мертоном и гласящего, что любое действие, предпринимаемое для достижения определенной цели, порождает также побочные результаты, среди которых хотя бы один является непредвиденным. Действительно, в середине ХХ века никто не мог предсказать, что программное обеспечение окажется обширной новой предметной областью, подобной областям энергетики, машиностроения, авиации, и станет совершенно необходимой технологией для бизнеса, науки и производства, что оно будет способствовать созданию новых технологий (например, генной инженерии и нанотехнологий), расширению существующих технологий (например, телекоммуникационных), радикальным изменениям старых технологий (например, медиа-технологий); что программное обеспечение окажется главным движителем революции персональных компьютеров, что оно будет покупаться пользователями с помощью сотовых телефонов, медленно эволюционируя от продукта к web-сервису; что компании, производящие программное обеспечение, по масштабу и влиянию обгонят компании индустриальной эры, а обширная мировая сеть, управляемая программным обеспечением, подвергнет эволюционным изменениям буквально все, начиная от библиотечных исследований, до покупок товаров потребителями, от политических дебатов до обычаев заводить знакомства. Никто не мог предвидеть, что программное обеспечение ока жется встроенным в системы всех типов: транспортные, медицинские, телекоммуникационные, военные, промышленные, развлекательные, офисные… Список можно продолжать бесконечно. И если верить закону непредвиденных последствий, мы увидим еще много эффектов, о которых сейчас и не подозреваем.
Никто не мог предвидеть, что миллионы компьютерных про грамм будут нуждаться в корректировках, адаптации и расширении в процессе их использования. Что бремя этой работы, называемой «сопровождением программного обеспечения», должно будет нести гораздо большее число людей, чем будет занято в производстве нового программного обеспечения. Термин software engineering был впервые предложен в 1968 году на конференции, посвященной так называемому кризису программного обеспечения. Этот кризис был вызван появлением мощной (по меркам того времени) вычислительной техники третьего поколения. Новая техника позволяла воплотить в жизнь не реализуемые ранее программные приложения. В результате программное обеспечение достигло размеров и уровня сложности, намного превышающих аналогичные показатели у программных систем, реализованных на вычислительной технике предыдущих поколений. Оказалось, что неформальный подход, применявшийся ранее к построению программных систем, недостаточен для разработки больших систем. На реализацию крупных программных проектов иногда уходили многие годы. Стоимость таких проектов многократно возрастала по сравнению с первоначальными расчетами, сами программные системы получались ненадежными, сложными в эксплуатации и сопровождении. Разработка программного обеспечения оказалась в кризисе. Стоимость аппаратных средств постепенно снижалась, тогда как стоимость ПО стремительно возрастала. Возникла необходимость в новых технологиях и методах управления комплексными сложными проектами разработки больших программных систем. По мере быстрого роста многообразия требуемых программных систем и возрастания сложности их программного обеспечения сообщество его производителей постоянно предпринимало попытки по созданию технологий, которые позволяли бы легче, быстрее и дешевле делать и сопровождать качественное программное обеспечение. Наиболее успешные из этих технологий оказались «заточены» под конкретные области приложений (например, разработка web-сайтов и
их развертывание), другие фокусируются на технологических областях (например, объектно-ориентированных системах или объектноориентированном программировании), некоторые предназначены для широкого использования (например, для разработки систем, работающих под управлением операционной системы Linux). Продолжаются поиски универсальной технологии, которая бу дет работать во всех этих областях, но вероятность ее появления в ближайшем будущем считается малой. Состояние современной компьютерной цивилизации, обрисо ванное в начале введения, во многом является результатом развития и применения программной инженерии, постепенно превращающей искусство создания программ в инженерное ремесло. Возникла новая отрасль экономики, по исторической традиции называемая индустрией производства программного обеспечения, хотя конечными продуктами этой отрасли уже давно являются программные продукты, т.е. не только программное обеспечение, а и прилагаемые к нему огромные электронные библиотеки изображений и документов, аудио- и видеофайлов и т.п. А с недавнего времени индустрия ПО освоила новый вид продуктов – программы как услуги (сервис SaaS), например, использование офисных программ через интернет-сервис Office360. Однако какие бы продукты не производились индустрией ПО, главным их компонентом, определяющим ключевые для любой индустрии показатели – затраты, сроки и качество – является именно программное обеспечение. В предлагаемом читателю учебном пособии представлена си стема знаний, которые могут использоваться теми, кто создает компьютерное программное обеспечение и должен делать это правильно. Эта система знаний охватывает процесс разработки программного обеспечения, множество методов и инструментов, образующих вместе то, что на упомянутой ранее конференции назвали программной инженерией, или инженерией программного обеспечения. В заключение отметим, что при написании данного пособия был использован материал книги Pankaj Jalote «A Concise Introduction to
Software Engineering» [1], в которой, в противовес многим учебникам, стремящимся «объять необъятное» и потому страдающим поверхностным изложением данной предметной области, основной акцент сделан на основных практических задачах программной инженерии и методах их решения. Трудно не согласится с автором этого, возможно, лучшего на сегодня учебника, что «в конце концов программная инженерия – это о приложении концепций для эффективного получения хороших инженерных решений в области программного обеспечения».
1. Проблемы разработки программного обеспечения 1.1. Природа программного обеспечения Для того чтобы понять специфичность программного обеспече ния (ПО), важно выделить те характеристики ПО, которые отличают его от других вещей, создаваемых человеком. Но сначала дадим определение ПО. 1.1.1. Определение программного обеспечения Многие отождествляют термин программное обеспечение с компьютерными программами. Это весьма ограниченное представление. Программное обеспечение – это не только программы, но и вся сопутствующая документация, а также конфигурационные данные, необходимые для корректной работы программ. Программные системы состоят из совокупности программ, файлов конфигурации, необходимых для установки этих программ, и документации, которая описывает структуру системы, а также содержит инструкции для пользователей, объясняющие работу с системой, и часто адрес Webузла, где пользователь может найти самую последнюю информацию о данном программном продукте. Специалисты по программному обеспечению разрабатывают программные продукты, т.е. такое ПО, которое можно продать потребителю. Программные продукты делятся на два типа. 1. Общие программные продукты. Это автономные программ ные системы, которые созданы компанией по производству ПО и продаются на открытом рынке программных продуктов любому потребителю, способному их купить. Иногда их называют «коробоч
ным ПО». Примерами этого типа программных продуктов могут служить системы управления базами данных, текстовые процессоры, графические пакеты и средства управления проектами. 2. Программные продукты, созданные на заказ. Это программ ные системы, которые создаются по заказу определенного потребителя. Такое ПО разрабатывается специально для данного потребителя согласно заключенному контракту. Программные продукты этого типа включают системы управления для электронных устройств, системы поддержки определенных производственных или бизнеспроцессов, системы управления воздушным транспортом и т.п. Важное отличие между этими типами программных продуктов заключается в том, что при создании общих программных продуктов спецификация требований на них разрабатывается компаниейпроизводителем. Для заказных программных продуктов спецификация требований обычно разрабатывается организацией, покупающей данный продукт. Спецификация необходима разработчикам ПО для создания любого программного продукта. Определение программного обеспечения. Под программным обеспечением будем понимать множество развивающихся во времени логических предписаний, с помощью которых некоторый коллектив людей управляет и использует многопроцессорную и распределенную систему вычислительных устройств (Харальд Милс, IBM). Логические предписания – это не только сами программы, но и различная документация (например, по эксплуатации программ) и шире – определенная система отношений между людьми, использующими эти программы в рамках некоторого процесса деятельности. Современное ПО предназначено, как правило, для одновре менной работы со многими пользователями, которые могут быть значительно удалены друг от друга в физическом пространстве. Таким образом, вычислительная среда (персональные компьютеры, сервера и т.д.), в которой ПО функционирует, оказывается распределенной.