Автор работы: Пользователь скрыл имя, 02 Ноября 2013 в 18:42, курс лекций
Инженерия программного обеспечения — это область компьютерной науки, которая занимается построением программных систем, настолько больших или сложных, что для этого требуется участие команды разработчиков, порой даже нескольких команд. Обычно такие системы существуют долгие годы, развиваясь от версии к версии, претерпевая на своем жизненном пути множество изменений, таких как устранение ошибок, улучшение существующих, добавление новых или удаление устаревших возможностей, адаптация для работы в новой среде.
1.Инженерия программного обеспечения: введение
1.1. Роль инженерии программного обеспечения в проектировании систем
1.2. История инженерии программного обеспечения: краткий курс
1.3. Роль программного инженера
1.4. Жизненный цикл программного обеспечения
2. Процесс производства программного обеспечения
2.1. Понятие модели процесса создания ПО
2.2. Важность моделей процесса создания ПО
2.3 Основные этапы создании программного обеспечения
2.3.1. Анализ осуществимости
2.3.2. Выявление, понимание и спецификация требований
2.3.3. Определение архитектуры программного обеспечения и рабочий проект
2.3.4. Кодирование и тестирование модулей
2.3.5. Сборка и системное тестирование
2.3.6. Поставка, развертывание и сопровождение ПО
2.3.7. Прочие виды деятельности
2.4 Обзор моделей процесса производства программного обеспечения
2.4.1. Каскадные модели
2.4.1.1Критическая оценка каскадной модели
2.4.2. Эволюционные модели
2.4.3. Модель, основанная на преобразовании
2.4.4. Спиральная модель
2.4.5. Оценка моделей процесса
3. Унифицированный язык моделирования.
3.1Способы применения UML
3.2 Архитектура, управляемая моделью, и исполняемый UML
3.3 История UML.
3.4 Диаграммы UML.
3.5 Процесс разработки с использованием UML.
3.5.1 Анализ требований
3.5.2 Проектирование
3.5.3 Документирование
3.5.4 Понимание унаследованного кода
Доказательство Брукса вскрывает ложные предположения, связанные с термином "программный кризис", введенным из-за того, что программные проекты все время выходили за рамки бюджета и нарушали сроки. Эта проблема казалась временной, а ее решение виделось в применении лучших средств разработки или методов управления. На самом деле, проекты нарушали сроки из-за того, что разрабатываемая задача была сложной и плохо изученной как заказчиками, так и разработчиками, и ни у кого не было ни малейшего представления о том, как оценить сложность задачи и рассчитать сроки ее решения. Термин "программный кризис" и теперь еще иногда используется, однако существует общее мнение о том, что характерные трудности разработки программного обеспечения не имеют быстрых краткосрочных решений. Это относится и к новым сложным областям программных приложений, обладающих трудностями первого рода.
Приведенный экскурс в историю подчеркивает развитие программной инженерии, произрастающей из программирования, но были и другие технологические веяния, сыгравшие заметную роль в становлении отрасли. Наиболее сильным оказалось влияние изменений ценового баланса между оборудованием и программным обеспечением. Если раньше стоимость компьютеризованной системы обычно определялось стоимостью оборудования, а затраты на программы считались маловажными, то теперь, наоборот, цена программной составляющей является более чем доминирующим фактором в цене системы. Снижение цен на оборудование и рост стоимости программ сместили ценовой баланс в сторону программного обеспечения, придавая все большее экономическое значение важности программной инженерии.
Другая тенденция развития зародилась внутри самой отрасли и была основана на усилении взгляда на разработку программ, как на более чем простое "кодирование". Вместо этого программное обеспечение рассматривается как имеющее полный жизненный цикл, начинающийся с появления концепции и проходящий стадии проектирования, разработки, ввода в действие, сопровождения и развития. Смещение фокуса внимания с кодирования породил разработку методологий и развитого инструментария, вооруживших команды инженеров, занятых на всех этапах жизненного цикла программного обеспечения.
Мы можем ожидать продолжения роста значения программной инженерии по целому ряду причин. Во-первых, мировые расходы на программное обеспечение выросли со 140 млрд долларов в 1985 г. до 800 млрд в 2000-м. Уже один этот факт гарантирует, что программная инженерия будет расти как отдельная отрасль компьютерных знаний. Во-вторых, программное обеспечение проникает в наше общество: все больше программ используется для управления важнейшими функциями самых разных машин, таких как самолеты и медицинские приборы, а также для поддержки глобальных процессов, подобных электронной коммерции. Этот факт гарантирует возрастающий интерес общества к надежному программному обеспечению, к расширению законодательной основы для соответствующих стандартов, требований и процедур сертификации. Нет сомнения, что останется важным и обучение тому, как наилучшим образом делать еще более совершенное программное обеспечение.
1.3. Роль программного инженера
Развитие отрасли определило роль программного инженера, а также требования к его опыту и образованию. Он, конечно же, должен быть хорошим программистом, уверенно разбираться в структурах данных и алгоритмах и свободно владеть одним или более языком программирования. Это его, так сказать, "программа-минимум", грубо определяемая как умение написать программу целиком и в одиночку. Но есть и "программа-максимум", требующая от программного инженера еще большего.
Программный инженер должен быть знаком с несколькими способами проектирования, знать, как перевести расплывчатые требования и пожелания заказчика в четкое техническое задание и уметь разговаривать с пользователем системы на языке предметной области, а не на хакерском сленге. Такие способности требуют, в свою очередь, гибкости и открытости, чтобы ухватить сущность предметной области различных приложений и стать в ней специалистом. Программный инженер должен обладать возможностью переходить от одного уровня абстракции к другому на разных стадиях проекта: от особых процедур и требований приложения к абстракциям программной системы, к специфике дизайна системы и, наконец, к уровню детального кодирования.
Как и в любой инженерной отрасли, программный инженер должен развивать умения, позволяющие построить целый набор моделей и оценить эти модели, управляя выбором компромиссов, перед которым встает процесс разработки программного обеспечения. Различные модели используются на этапе определения требований к проектируемой системе, в разработке архитектуры программного обеспечения и на стадии реализации проекта. На некоторых стадиях модель может быть использована для ответа на вопрос о поведении системы и ее производительности.
Программный инженер — это член команды, поэтому должен обладать навыками общения и межличностных отношений, а также уметь планировать не только свою работу, но и работу других.
Как уже упоминалось, программный инженер отвечает за многое. Часто в организациях обязанности распределяют между несколькими специалистами, имеющими разные должности. Например, просто аналитик отвечает за формулировку требований, взаимодействие с заказчиком и изучение предметной области приложения, а аналитик по эффективности — за анализ производительности системы. Иногда один и тот же инженер играет разные роли на разных этапах проекта или в разных проектах.
1.4. Жизненный цикл программного обеспечения
Программная система постепенно разрабатывается и развивается, начиная от зарождения самой идеи до ее реализации и сдачи пользователю, и даже после этого. Говорят, что программное обеспечение имеет жизненный цикл, состоящий из нескольких стадий. Каждый этап завершается разработкой части системы или чего-либо с ней связанного, будь то план тестирования или руководство пользователя. Теоретически в традиционной, так называемой "каскадной" модели жизненного цикла для каждого этапа ясно определены начальные и конечные точки, а также четко известно, что именно он должен передать следующему этапу. На практике, однако, редко все бывает так просто.
Примерная каскадная модель жизненного цикла включает следующие стадии.
Отделение этапа анализа требований от этапа проектирования — это пример фундаментальной дихотомии "что-как", которая довольно часто встречается в компьютерной науке. Основной принцип подразумевает выработку четкого различения между тем, что представляет собой проблема, и тем, как эту проблему решать. В данном случае стадия требований пытается точно определить, что представляет собой проблема. Поэтому мы и сказали, что требования должны быть сформулированы в терминах, выражающих потребности пользователя. Обычно можно удовлетворить эти потребности многими способами, включая неавтоматизированные, вообще не подразумевающие использование компьютеров. Назначение этапа проектирования состоит в специфицировании конкретной программной системы, которая будет отвечать установленным требованиям. И снова существует множество способов для построения заданной системы. На этапе кодирования, который непосредственно следует за проектированием, программируется конкретная система, удовлетворяющая спецификации.
На рис. 1. жизненный цикл разработки программного обеспечения изображен графически, наглядно представляя объяснение термина "каскад". Каждый этап производит результаты, которые "падают" на следующий этап, а весь процесс идеально протекает в упорядоченной и линейной форме.
Рис 1. Каскадная модель жизненного цикла программного обеспечения
Как показано на рис. 1., этапы образуют частичное, упрощенное представление традиционного каскадного жизненного цикла программного обеспечения. Этот процесс может быть разбит на набор различных стадий с разными названиями, целями и разной степенью детализации. Можно предложить и совершенно другие схемы жизненного цикла, не основанные на строгом разделении по этапам каскадной разработки. Например, понятно, что если тестирование выявит дефекты в системе, то для их исправления необходимо будет вернуться назад как минимум на фазу кодирования, а то и на этап проектирования. Вообще любой этап может вскрыть недоработки более ранних стадий, и когда это случается, требуется возврат на предыдущие стадии и исправление проделанной работы. Например, если стадия проектирования системы выявит противоречивость или неоднозначность системных требований, то следует повторить стадию анализа требований для их уточнения.
Еще одним упрощением приведенного здесь каскадного представления является предположение о том, что предыдущий этап заканчивается раньше, чем начинается следующий. На практике часто бывает целесообразным начать следующий этап до окончания предшествующего. Это может, например, произойти, если данные, необходимые для завершения стадии анализа требований, недоступны в течение некоторого времени. Такая необходимость может возникнуть из-за того, что люди, готовые начать следующий этап, свободны, и им просто нечего делать. Или допускается принятие решения о выполнении следующего этапа, чтобы сократить путь продукта на рынок. Термин параллельное проектирование обычно используется для обозначения такой современной организации процесса, которая пытается достичь сокращения сроков сдачи продукта путем распараллеливания ранее последовательных этапов процесса разработки.
Вопросы для самоконтроля к главе 1:
2. Процесс производства программного обеспечения
2.1. Понятие модели процесса создания ПО
Как уже упоминалось, на заре развития компьютерной техники разработкой программного обеспечения занимался, как правило, один человек. Возникающие проблемы — как правило, математического толка, — были понятны, и между программистом, создающим продукт, и конечным пользователем различий практически не наблюдалось. Конечный пользователь — ученый или инженер — разрабатывал некое программное приложение в помощь своей основной деятельности. Приложение это по сегодняшним меркам было довольно примитивным. Таким образом, разработка программного продукта заключалась в кодировании приложения на каком-либо языке низкого уровня.
Применявшуюся в то время модель можно назвать моделью кодирования и исправления (code-and-fix). В принципе, данный термин означает процесс разработки, не имеющий ни точной формулировки, ни сколько-нибудь продуманного управления со стороны разработчика, а, скорее, состоящий из повторения двух шагов:
Модель кодирования и исправления была источником многих проблем и дефектов. В частности, после нескольких изменений структура кода становится настолько запутанной, что применять последующие исправления становится все труднее и труднее, а результаты теряют свою достоверность. Впрочем, последствия этих ситуаций смягчались тем, что программные приложения были очень простыми, поэтому для разработчика не составляло особого труда тщательно в них разобраться.
По мере развития аппаратных средств желание использовать компьютеры во все большем количестве предметных областей, таких как управление компаниями и производственными процессами, привело к тому, что программное обеспечение стало применяться во все менее и менее понятных обычному человеку средах. Между разработчиками и конечными пользователями произошло глубокое разделение. От пользователей, обладающих минимальными техническими и математическими знаниями либо не обладающих ими вообще (торговые агенты, специалисты по кадрам), трудно было ждать разработки своих собственных программных приложений, как по причине высокой сложности процесса проектирования и реализации, так и явного недостатка технических знаний, необходимых для понимания и освоения сложных компьютерных систем.
Информация о работе Технология разработки программного обеспечения