Программная инженерия. Теория и практика
Покупка
Основная коллекция
Тематика:
Прикладная информатика
Издательство:
Сибирский федеральный университет
Год издания: 2012
Кол-во страниц: 247
Дополнительно
Вид издания:
Учебник
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7638-2511-4
Артикул: 620798.01.99
В учебнике освещены современные методы и средства программной ин- женерии, детально рассмотрен процесс разработки программного обеспечения (ПО), приведена теория управления разработкой ПО. В качестве средства раз- работки ПО представлен продукт Visual Studio Team System. Для закрепления студентами полученных теоретических знаний во второй половине учебника дан практикум. Предназначен для студентов, обучающихся по направлению подготовки 080801 «Прикладная информатика», а также может быть рекомендован студен- там других специальностей, интересующимся как вопросами управления раз- работкой программного обеспечения, так и тематикой программной инженерии в целом.
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Введение 1 Министерство образования и науки Российской Федерации Сибирский федеральный университет О. А. Антамошкин ПРОГРАММНАЯ ИНЖЕНЕРИЯ. ТЕОРИЯ И ПРАКТИКА Рекомендовано Учебно-методическим объединением по образованию в области прикладной информатики в качестве учебника для студентов высших учебных заведений, обучающихся по специальности 080801 «Прикладная информатика (по областям)» и другим экономическим специальностям, 15.02.2011 Красноярск СФУ 2012
Введение 2 УДК 004.42(07) ББК 32.973.2-018я73 А721 Рецензенты: И. В. Ковалев, доктор технических наук, профессор заведующий кафедрой «Информационные системы и технологии в экономике» КрасГАУ; С. И. Сенашов, доктор физико-математических наук, профессор заведующий кафедрой «Информационные экономические системы» СибГАУ Антамошкин, О. А. А721 Программная инженерия. Теория и практика : учебник / О. А. Антамошкин. – Красноярск : Сиб. федер. ун-т, 2012. – 247 с. ISBN 978-5-7638-2511-4 В учебнике освещены современные методы и средства программной инженерии, детально рассмотрен процесс разработки программного обеспечения (ПО), приведена теория управления разработкой ПО. В качестве средства разработки ПО представлен продукт Visual Studio Team System. Для закрепления студентами полученных теоретических знаний во второй половине учебника дан практикум. Предназначен для студентов, обучающихся по направлению подготовки 080801 «Прикладная информатика», а также может быть рекомендован студентам других специальностей, интересующимся как вопросами управления разработкой программного обеспечения, так и тематикой программной инженерии в целом. УДК 004.42(07) ББК 32.973.2- 018я73 ISBN 978-5-7638-2511-4 © Сибирский федеральный университет, 2012
Введение 3 ВВЕДЕНИЕ Иан Соммервилл в своей книге «Инженерия программного обеспечения» определяет программную инженерию как интегрирование принципов математики, информатики и компьютерных наук с инженерными подходами, разработанными для производства осязаемых материальных артефактов. Дисциплина программной инженерии включается в круг вопросов компьютинга (англ. computing) и может рассматриваться как инженерная область, имеющая более тесные связи со своей базовой дисциплиной – компьютерными науками, чем другие инженерные области [1]. Среди других инженерных дисциплин она качественно выделяется нематериальностью программного обеспечения и дискретной природой его функционирования. Основываясь на математике и компьютинге, программная инженерия занимается разработкой систематических моделей и надежных методов производства высококачественного программного обеспечения, и данный подход распространяется на все уровни – от теории и принципов до реальной практики создания программного обеспечения, которая лучше всего заметна сторонним наблюдателям. Термин «инженерия программного обеспечения» появился впервые в 1968 г. на конференции НАТО «Инженерия программного обеспечения» и должен был спровоцировать размышления относительно текущего в то время «кризиса программного обеспечения». С тех пор он стал использоваться для определения как профессии, так и области исследований, посвященных созданию программного обеспечения, которое имеет более высокое качество, более доступно, поддерживаемо и быстрее строится. Так как эта область относительно молода по сравнению со своими сестринскими областями инженерии, все еще продолжаются дебаты вокруг того, что представляет собой «инженерия программного обеспечения» и удовлетворяет ли она понятию инженерии. Этот спор развивается естественным образом, начавшись с попыток рассматривать создание программного обеспечения только как программирование. Разработка программного обеспечения – термин, иногда предпочитаемый практиками в промышленности, которые рассматривают разработку программного обеспечения как несравнимо более мощную и конструкционно-емкую методологию в сравнении с процессом написания кода программистом.
Введение 4 Все же несмотря на юность профессии, будущее области радужно. Так, Money Magazine и Salary.com оценили профессию разработчика программного обеспечения как лучшую работу в Америке в 2006 г. В настоящее время существует как минимум три основополагающих документа в области программной инженерии. Это SWEBOK (Software Engineering Body of Knowledge) – документ, подготавливаемый комитетом Software Engineering Coordinating Committee, в который вовлечено сообщество IEEE Computer Society (IEEE-CS). Назначение SWEBOK – в объединении знаний по инженерии программного обеспечения (разработке программного обеспечения), Второй документ – Software Engineering Code of Ethics and Professional Practice, посвящен этическим и профессиональным стандартам для инженерии ПО, выпущен в 1998 г. Третий документ (SE2004), выпущенный в 2004 г., посвящен составлению учебного плана по программной инженерии. Эти документы созданы совместными усилиями IEEE-CS и Association for Computing Machinery (ACM) и призваны определить следующее: • необходимый набор знаний и рекомендуемые практики; • этические и профессиональные стандарты; • учебную программу для студентов, аспирантов и продолжающих обучение. В рамках изучения дисциплины «Программная инженерия» сложно охватить весь объем накопленных в этой области знаний. Этот учебник представляет собой попытку собрать основные компоненты необходимых наборов знаний, умений и рекомендуемых практик в рассматриваемой дисциплине. В первую очередь он предназначен для студентов, обучающихся по направлению подготовки «Прикладная информатика». Также он будет небезынтересен людям, непосредственно занимающимся разработкой и проектированием различных информационных систем, в аспекте систематизации и актуализации знаний по программной инженерии. Учебник состоит из теоретического курса и практикума. Для успешного освоения теории необходимо использовать так называемые карты памяти. Обратите внимание, что первые карты памяти нужно рисовать «вручную». Впоследствии, особенно при «массовом» процессе использования карт памяти, целесообразно пользоваться инструментами. Мы рекомендуем продукт Comapping (www.comapping.com).
Введение 5 Часть заданий и вопросов на отдельную тему часто необходимо выполнять после освоения всего курса вообще, так как они содержат ссылки на другие темы – как назад, так и вперед. Относительно всего теоретического материала правомочно одно стандартное задание – нарисовать все содержание в виде одной карты памяти на листе формата А4 (можно А3, но не больше). Такие задания целесообразно выполнять сразу после изучения. Полезность такого подхода связана с тем, что такие карты памяти легко рисуются (при наличии навыка) и очень легко проверяются. Часто задания с помощью карт памяти оказываются не совсем картами памяти. Исчезает центральный объект, вместо него появляется произвольный «плоский» граф. Также полезно оказывается рисовать имена связям. Мы все равно называем такие графы картами памяти, чтобы терминологически не усложнять ситуацию.
Теоретический курс 6 ТЕОРЕТИЧЕСКИЙ КУРС 1. МЕТОДЫ И СРЕДСТВА ПРОГРАММНОЙ ИНЖЕНЕРИИ Понятие программной инженерии. Основные определения: информатика, системотехника, бизнес-реинжиниринг. Программное обеспечение: определение, свойства. 1.1. Введение в программную инженерию Чем программирование отличается от программной инженерии [2]? Тем, что первое является некоторой абстрактной деятельностью и может происходить во многих контекстах. Можно программировать для удовольствия, для того, чтобы научиться (например, на уроках, на семинарах в университете), можно программировать в рамках научных разработок, а можно заниматься промышленным программированием. Как правило, это происходит в команде. При этом необходимо точно понимать, что нужно заказчику, выполнить работу в определенные сроки и результат должен быть нужного качества – того, которое удовлетворит заказчика и за которое он заплатит. Чтобы удовлетворить этим требованиям, программирование «обрастает» различными дополнительными видами деятельности: разработкой требований, планированием, тестированием, конфигурационным управлением, проектным менеджментом, созданием различной документации (проектной, пользовательской и пр.). Разработка программного кода предваряется анализом и проектированием (первое означает создание функциональной модели будущей системы без учета реализации для осознания программистами требований и ожиданий заказчика; второе – предварительный макет, эскиз, план системы на бумаге). Трудозатраты на анализ и проектирование, а также форма представления их результатов сильно варьируются в зависимости от видов проектов и предпочтений разработчиков и заказчиков. Требуются также специальные усилия по организации процесса разработки. В общем виде это итеративно-инкрементальная модель,
1. Методы и средства программной инженерии 7 когда требуемая функциональность создается порциями, которые менеджеры и заказчик могут оценить, и тем самым есть возможность управления ходом разработки. Однако эта общая модель имеет множество модификаций и вариантов. Разработку системы также необходимо выполнять с учетом удобств ее дальнейшего сопровождения, повторного использования и интеграции с другими системами. Это значит, что система разбивается на компоненты, удобные в разработке, годные для повторного использования и интеграции, а также имеющие необходимые характеристики по быстродействию. Для этих компонент тщательно прорабатываются интерфейсы. Сама же система документируется на многих уровнях, создаются правила оформления программного кода, оставляются многочисленные семантические следы, помогающие создать и сохранить, поддерживать единую, стройную архитектуру, единообразный стиль, порядок. Все эти и другие дополнительные виды деятельности, выполняемые в процессе промышленного программирования и необходимые для успешного выполнения заказов, и будем называть программной инженерией (software engineering). Хотя еще в 70-х гг. прошлого столетия академиком А.П. Ершовым термин software engineering переводился на русский язык как «технология программирования», программная инженерия – более современный, но менее традиционный перевод этого же термина, предложенный в конце 90-х И.В. Поттосиным. Получается, что так мы обозначаем, вопервых, некоторую практическую деятельность, а во-вторых, специальную область знания, или, другими словами, научную дисциплину. Ведь для облегчения выполнения каждого отдельного проекта, для возможности использовать разнообразный положительный опыт, достигнутый другими командами и разработчиками, этот самый опыт подвергается осмыслению, обобщению и надлежащему оформлению. Так появляются различные методы и практики (best practices) – тестирования, проектирования, работы над требованиями, архитектурных шаблонов, а также стандарты и методологии, касающиеся всего процесса в целом (например, MSF, RUP, CMMI, Scrum). Вот эти-то обобщения и входят в программную инженерию как в область знания. Необходимость в программной инженерии как в специальной области знаний была осознана мировым сообществом в конце 60-х гг. прошлого века, более чем на 20 лет позже рождения самого програм
Теоретический курс 8 мирования, если считать таковым знаменитый отчет фон Неймана «First Draft of a Report on the EDVAC», обнародованный им в 1945 г. Рождением программной инженерии является 1968 г. – конференция НАТО «Software Engineering», г. Гармиш (ФРГ), которая целиком была посвящена рассмотрению этих вопросов. В сферу программной инженерии попадают все вопросы и темы, связанные с организацией и улучшением процесса разработки ПО, управлением коллективом разработчиков, созданием и внедрением программных средств поддержки жизненного цикла ПО. Программная инженерия использует достижения информатики, тесно связана с системотехникой, часто предваряется бизнес-реинжинирингом (рис. 1). Немного подробнее об этом контексте программной инженерии. Информатика (computer science) – это свод теоретических наук, основанных на математике и посвященных формальным основам вычислимости. Сюда относят математическую логику, теорию грамматик, методы построения компиляторов, математические формальные методы, используемые в верификации и модельном тестировании и т.д. Трудно строго отделить программную инженерию от информатики, но в целом направленность этих дисциплин различна. Программная инженерия нацелена на решение проблем производства, информатика – на разработку формальных, математизированных подходов к программированию. Системотехника (system engineering) объединяет различные инженерные дисциплины по разработке всевозможных искусственных систем – энергоустановок, телекоммуникационных систем, встроенных систем реального времени и т.д. Очень часто ПО оказывается частью таких систем, выполняя задачу управления соответствующим оборудованием. Такие системы называются программно-аппаратными, и участвуя в их создании, программисты вынуждены глубоко разбираться в особенностях соответствующей аппаратуры. Бизнес-реинжиниринг (business reengineering) в широком смысле обозначает модернизацию бизнеса в определенной компании, внедрение новых практик, поддерживаемых соответствующими новыми информационными системами. При этом акцент может быть как на внутреннем переустройстве компании, так и на разработке нового клиентского сервиса (как правило, эти вопросы взаимосвязаны). Бизнес-реинжиниринг часто предваряет разработку и внедрение информационных систем на предприятии, так как требуется сначала навести
1. Методы и средства программной инженерии 9 определенный порядок в делопроизводстве, а лишь потом закрепить его информационной системой. Бизнесреинжиниринг Программная инженерия Системотехника Информатика Часто предва ряется Тесно связан Использует Рис. 1. Связь программной инженерии с другими областями Программное обеспечение – это множество развивающихся во времени логических предписаний, с помощью которых коллектив людей управляет и использует многопроцессорную и распределенную систему вычислительных устройств. Это определение, данное Харальдом Милсом, известным специалистом в области программной инженерии из компании IBM, заключает в себе следующее. Логические предписания – это не только сами программы, но и различная документация (например, по эксплуатации программ) и шире – определенная система отношений между людьми, использующими эти программы в рамках некоторого процесса деятельности. Современное ПО предназначено, как правило, для одновременной работы со многими пользователями, которые могут быть значительно удалены друг от друга в физическом пространстве. Таким образом, вычислительная среда (персональные компьютеры, серверы и т.д.), в которой ПО функционирует, оказывается распределенной. Задачи, решаемые современным ПО, часто требуют разных вычислительных ресурсов в силу различной специализации этих задач, из-за большого объема выполняемой работы, а также из соображений безопасности. Например, появляется сервер базы данных, сервер приложений и пр. Следовательно, вычислительная среда, в которой ПО функционирует, оказывается многопроцессорной. ПО развивается во времени – исправляются ошибки, добавляются новые функции, выпускаются новые версии, меняется его аппаратная база.