ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2020
Просмотров: 6686
Скачиваний: 15
СОДЕРЖАНИЕ
1.Введение в технологии разработки программного обеспечения
1.1.Основные этапы развития технологии разработки
1.1.1.Первый этап – «стихийное» программирование.
1.1.2.Второй этап – структурный подход к программированию (60-70-е годы XX в)
1.1.3.Третий этап – объектный подход к программированию (с середины 80-х годов до нашего времени)
1.2.Эволюция моделей жизненного цикла программного обеспечения
1.2.4.Быстрая разработка приложений
1.2.5.Компонентно-ориентированная модель
1.3.Стандарты, регламентирующие процесс разработки программного обеспечения
1.3.1.ГОСТ Р ИСО 9000-2001. Системы менеджмента качества. Основные положения и словарь
1.3.1.4.Основные положения систем менеджмента качества
1.3.2.3.Состав ИСО/МЭК ТО 15504
1.3.2.4.Связь с другими международными стандартами
1.3.3.3.Прикладное применение настоящего стандарта
2.Анализ проблемы и постановка задачи
2.1.Введение в системный анализ
2.3.Анализ проблемы и моделирование предметной области с использованием системного подхода
2.3.2.Этап 1. Достижение соглашения об определении проблемы
2.3.3.Этап 2. Выделение основных причин – проблем, стоящих за проблемой
2.3.3.1.Устранение корневых причин
2.3.4.Этап 3. Выявление заинтересованных лиц и пользователей
2.3.5.Этап 4. Определение границ системы-решения
2.3.6.Этап 5. Выявление ограничений, налагаемых на решение
2.4.2.Диаграмма цепочки добавленного качества
2.5.1.Методология описания бизнес процессов IDEF3
2.5.1.1.Синтаксис и семантика моделей IDEF3
2.5.1.2.Требования IDEF3 к описанию бизнес-процессов
2.5.2.Методология функционального моделирования IDEF0
2.5.2.1.Синтаксис и семантика моделейIDEF0
2.5.2.2.Построение моделей IDEF0
3.Анализ требований и их формализация
3.1.Методы определения требований
3.1.1.1.Этапы проведения интервью
3.1.2.Мозговой штурм и отбор идей
3.1.3.Совместная разработка приложений (JAD – Joint application design)
3.1.3.3.Результаты проведения сеанса JAD
3.1.5.1.Суть метода обыгрывания ролей
3.1.6.CRC-карточки (Class-Responsibility-Collaboration, класс-обязанность-взаимодействие)
3.1.7.Быстрое прототипирование
3.2.1.Метод вариантов использования и его применение
3.2.1.1.Построение модели вариантов использования
3.2.1.2.Спецификация вариантов использования
3.2.4.Графические деревья решений
3.3.Техническое задание (ГОСТ 34.602-89)
3.3.2.Назначение и цели создания (развития) системы
3.3.3.Характеристики объекта автоматизации
3.3.4.1.Требования к системе в целом
3.3.4.2.Требования к функциям (задачам)
3.3.4.3.Требования к видам обеспечения
3.3.5.Состав и содержание работ по созданию системы
3.3.6.Порядок контроля и приемки системы
3.3.8.Требования к документированию
4.Архитектуры программных систем
4.1.1.Архитектурно-экономический цикл
4.1.2.Программный процесс и архитектурно-экономический цикл
4.1.2.1.Этапы разработки архитектуры
4.1.3.Суть программной архитектуры
4.1.3.1.Архитектурные образцы, эталонные модели и эталонные варианты архитектуры
4.1.3.2.Архитектурные структуры и представления
4.2.Проектирование архитектуры
4.2.1.Атрибутный метод проектирования
4.3.Документирование программной архитектуры
4.3.1.Варианты применения архитектурной документации
4.3.2.1.Выбор значимых представлений
4.3.3.Документирование представления
4.3.3.1.Документирование поведения
4.3.3.2.Документирование интерфейсов
4.4.Методы анализа архитектуры
4.4.1.Метод анализа компромиссных архитектурных решений – комплексный подход к оценке архитектуры
4.4.2.1.Контекст принятия решений
5.1.Использование архитектуры, управляемой моделью
5.1.1.Концепция архитектуры, управляемой моделью
5.1.2.Модельные точки зрения и модели MDA
5.2.Язык объектных ограничений OCL
5.2.1.Типы данных и операции OCL
5.2.2.Инфиксная форма записи выражений OCL
5.2.3.Последовательности доступа к объектам в языке OCL
5.2.4.Операции над коллекциями
5.2.4.4.Выделение элементов коллекции
5.2.4.7.Операции для работы со строками
5.3.Возможности технологии ECO
5.3.1.Введение в технологию ЕСО
5.4.Разработка приложений на основе ECO
5.4.1.Этапы создания приложения по технологии ECO
5.4.2.Создание простого MDA-приложения
5.4.2.3.Связывание интерфейса с моделью
5.4.2.4.Создание логики на OCL
6.Документирование программных систем в соответствии с ГОСТ
6.1.Управление документированием программного обеспечения
6.1.4.Функции программной документации
6.1.4.1.Информация для управления
6.1.4.5.Сопровождение программного обеспечения
6.1.5.Установление стратегии документирования
6.1.6.Определение стандартов и руководств по документированию
6.1.6.1.Выбор модели жизненного цикла программного обеспечения
6.1.6.2.Определение типов и содержания документов
6.1.6.3.Определение качества документов
6.1.6.4.Определение форматов документов
6.1.6.5.Определение системы обозначения документов
6.1.7.Установление процедуры документирования
6.1.8.Распределение ресурсов для документирования
6.1.9.Планирование документирования
6.2.Требования к содержанию документов на автоматизированные системы
6.2.2.Требования к содержанию документов по общесистемным решениям
6.2.2.1.Ведомость эскизного (технического) проекта
6.2.2.2.Пояснительные записки к эскизному, техническому проектам
6.2.2.3.Схема функциональной структуры
6.2.2.4.Описание автоматизируемых функций
6.2.2.5.Описание постановки задачи (комплекса задач)
6.2.2.6.Локальная смета и локальный сметный расчет
6.2.2.9.Проектная оценка надежности системы
6.2.2.10.Общее описание системы
6.2.3.Требования к содержанию документов с решениями по организационному обеспечению
6.2.3.1.Описание организационной структуры
6.2.3.2.Методика (технология) автоматизированного проектирования
6.2.3.3.Технологическая инструкция
6.2.3.4.Руководство пользователя
6.2.3.5.Описание технологического процесса обработки данных
6.2.4.Требования к содержанию документов с решениями по программному обеспечению
6.2.4.1.Описание программного обеспечения
6.3.Принципы разработки руководства программиста
6.4.Разработка руководства пользователя
6.4.2.Содержание разделов руководства
Распределение
Среди структур распределения выделяются следующие.
Размещение. Структура размещения отражает распределение программного обеспечения между элементами аппаратной обработки и передачи данных. В качестве распределяемых элементов могут выступать программные продукты (как правило, процессы из представления «компонент и соединитель»), аппаратные объекты (процессоры) и каналы передачи данных. Отношения устанавливаются по распределению и демонстрируют физические устройства, на которых размещаются программные элементы; возможны также отношения миграции, однако они устанавливаются только в случае динамического распределения. Настоящее представление позволяет инженерам анализировать производительность, целостность данных, готовность и безопасность. Все эти характеристики чрезвычайно важны в условиях распределенных и параллельных систем.
Реализация. Данная структура демонстрирует отображение программных элементов (обычно — модулей) на файловую структуру (структуры) в условиях разработки системы, интеграции и управления конфигурациями. Это крайне важно в контексте организации разработки и процессов конструирования.
Распределение функций. Данная структура обеспечивает разделение обязанностей по реализации и интеграции модулей между соответствующими группами разработчиков. Наличие в составе архитектуры структуры распределения функций делает очевидным, что при принятии соответствующих решений учитывались как архитектурные, так и организационные факторы. Архитектору должно быть известно, какие навыки требуются от разных групп разработчиков. Кроме того, если речь идет о масштабных распределенных проектах с несколькими источниками, на основе структуры распределения функций можно выявлять функциональные сходства и назначать их одной группе разработчиков, отказываясь, таким образом, от их стихийной многократной реализации.
Общая схема программных структур приводится в табл. 5.1. В ней рассматривается значения элементов, отношения, характерные для каждой из структур, и варианты их практического применения.
Таблица 4.20
Архитектурные структуры системы
Программная структура |
Отношения |
Варианты практического применения |
Декомпозиция |
«Является подмодулем...»; «пользуется скрытой информацией совместно с...» |
Распределение ресурсов, структурирование и планирование проекта; информационная закрытость, инкапсуляция; управление конфигурациями |
Варианты использования
|
«Требует наличия...»
|
Конструирование подмножеств; инженерные расширения |
Многоуровневая
|
«Требует наличия...», «обращается к услугам...», «обобщает...» |
Инкрементная разработка; реализация систем на основе переносимости «виртуальных машин» |
Классы
|
«Является экземпляром...», «использует метод доступа из...» |
В объектно-ориентированных системах проектирования, производящих на основе универсального шаблона быстрые, почти идентичные реализации |
Клиент-сервер
|
«Обменивается данными с...», «зависит от...» |
Распределенное функционирование; разделение задач; анализ производительности; выравнивание нагрузки |
Процесс
|
«Исполняется параллельно с...», «может исполняться параллельно с...», «исключает», «предшествует» и т. д. |
Анализ сроков; анализ производительности |
Параллелизм |
«Исполняется в одном логическом потоке» |
Выявление местоположений в которых потоки могут разветвляться, объединяться, создаваться и уничтожаться |
Совместно используемые данные |
■ «Производит данные», «потребляет данные» |
Производительность; целостность данных, модифицируемость |
Размещение |
Распределение, миграция |
Анализ производительности, готовности и защиты |
Реализация |
«Хранится в...» |
Управление конфигурациями, интеграция, тестирование |
Распределение функций |
«Назначается...» |
Управление проектом, оптимальное использование интеллектуальных ресурсов, управление общностью |
Как правило, структура системы анализируется с точки зрения ее функциональности; при этом мы забываем о других ее свойствах: физическом распределении, взаимодействии процессов и синхронизации; все эти свойства обязательно учитываются на уровне архитектуры. Каждая структура содержит метод анализ; тех или иных значимых атрибутов качества. К примеру, для того чтобы создать легко расширяемую или сокращаемую систему, необходимо сконструировать (именно сконструировать, а не просто зафиксировать) структуру использования. Структура процессов конструируется с целью исключения взаимоблокировка и расширения узких мест. Структура декомпозиции модулей конструируется в расчете на производство модифицируемых систем и т. д. Каждая подобная структура снабжает архитектора оригинальным представлением системы и дополнительной базовой точкой проектирования.
4.2.Проектирование архитектуры
4.2.1.Атрибутный метод проектирования
Атрибутный метод проектирования (Attribute-Driven Design, ADD) — это методика определения программной архитектуры, в которой процесс декомпозиции основывается на предполагаемых атрибута качества продукта. Это рекурсивный процесс декомпозиции, на каждом из этапов которого происходит отбор тактик и архитектурных образцов, удовлетворяющих тем или иным сценариям качества, а также распределение функциональности, направленное на конкретизацию типов модулей данного образца. В контексте жизненного цикла ADD располагается сразу после анализа требований, а начинается он, как мы уже говорили, в тот момент, когда об архитектурных мотивах можно говорить с достаточной степенью уверенности.
Результатом применения ADD являются первые несколько уровней представления декомпозиции модулей архитектуры, а также все другие связанные с ними представления. Не стоит, впрочем, думать, что после ADD становятся известны все детали представлений, — система описывается как набор контейнеров функциональности и существующих между ними взаимосвязей. Во всем процессе проектирования это первый случай сочленения архитектуры, результаты которого, естественно, весьма приблизительны. Тем не менее, в контексте реализации предполагаемых атрибутов качества это очень важный момент, поскольку именно здесь закладываются основы достижения функциональности. Различие между архитектурой, являющейся результатом выполнения ADD, и архитектурой, готовой к реализации, лежит в плоскости принятия подробных проектных решений. В частности, это может быть выбор между конкретными объектно-ориентированными образцами проектирования, с одной стороны, и промежуточным программным обеспечением, применение которого сопряжено с многочисленными архитектурными ограничениями, — с другой. Архитектура, спроектированная средствами ADD, предусматривает отсрочку принятия этого решения, благодаря чему достигается большая гибкость.
С участием общих сценариев, а также тактик и образцов можно создать ряд различных процессов проектирования. Отличаются они принятыми принципами деления проектных работ и содержанием процесса проектирования.
4.2.1.1.Этапы ADD
1. Выбор модуля для декомпозиции. Как правило, в качестве исходного модуля берется система в целом. Все необходимые входные данные (ограничения, функциональные требования и требования к качеству) для него должны быть известны.
2. Уточнение модуля в несколько этапов:
а) выбор архитектурных мотивов из набора конкретных сценариев реализации качества и функциональных требований. На этом этапе определяются наиболее важные в контексте проведения декомпозиции моменты;
б) выбор архитектурного образца, соответствующего архитектурным мотивам. Создание (или выбор) образца, тактики которого позволяют реализовать эти мотивы. Выявление дочерних модулей, необходимых для реализации этих тактик;
в) конкретизация модулей, распределение функциональности из элементов Use Case, составление нескольких представлений;
г) определение интерфейсов дочерних модулей. Декомпозиция имеет своим результатом новые модули, а также ограничения на типы взаимодействия между ними. Для каждого из модулей эти сведения следует зафиксировать в документации по интерфейсу;
д) проверка и уточнение элементов Use Case в сценариях качества и наложение, исходя из них, ограничений на дочерние узлы. На этом этапе мы проверяем, все ли факторы учли, а также, в расчете на последующую декомпозицию или реализацию, подготавливаем дочерние модули.
3. Вышеперечисленные этапы следует выполнить в отношении всех нуждающихся в дальнейшей декомпозиции модулей.
4.2.2.Создание макета системы
После проектирования архитектуры и формирования рабочих групп можно приступать к конструированию макета системы. Цель этого этапа в том, чтобы обеспечить основополагающую возможность реализации функциональности системы в предпочтительном (с точки зрения задач проекта) порядке.
Согласно классической методике программной инженерии, следует «заглушать» секции кода — так, чтобы различные части системы можно было вводить в действие и тестировать по отдельности. О каких именно частях идет речь? Последовательность реализации всегда можно установить по характеристикам архитектуры.
В первую очередь следует реализовать те программы, которые связаны с исполнением и взаимодействием между архитектурными компонентами. В системе реального времени это может быть планировщик, в системе на основе правил — процессор правил (с прототипом набора правил), управляющий их активизацией, в многопроцессной системе — механизмы синхронизации процессов, а в клиент-серверной системе — механизм координации действий клиента и сервера. Базовый механизм взаимодействия во многих случаях выражается в виде промежуточных программ стороннего производства; если это так, реализация заменяется установкой. Помимо базовой инфраструктуры передачи данных или взаимодействия имеет смысл ввести в действие ряд простейших функций, инициирующих механическое поведение. На этом этапе в вашем распоряжении уже появляется исполняемая система. Это та основа, на которую можно начинать насаживать дополнительную функциональность.
Теперь выбирайте — какие функциональные элементы следует ввести в эту систему. Решение в данном случае принимается под влиянием нескольких факторов: во-первых, из побуждения снизить риск, обратившись к наиболее трудным областям в первую очередь, во-вторых, исходя из возможностей и специализации имеющегося персонала, и, в-третьих, из соображений выбросить продукт на рынок как можно быстрее.
Приняв решение относительно введения и систему очередной порции функциональности, обратитесь к структуре использования — она сообщит о том, какие еще программные средства системы должны корректно исполняться (другими словами, развиться из состояния банальной заглушки в полноценные элементы), для того чтобы реализация выбранных функций стала возможной.
Таким вот образом в систему можно вводить все новые и новые элементы, пока они не закончатся. На любом из таких этапов действия по интеграции и тестированию не представляют большой сложности; равным образом легко обнаружить источник недавно появившихся неисправностей. Чем меньше приращение, тем более предсказуемы бюджет и график и тем больше диапазон решений по поставке у управленцев и специалистов по маркетингу.
Заглушённые элементы, несмотря ни на что, приближают момент завершения работы над системой. Поскольку заглушки относятся к тем же интерфейсам, которые будут присутствовать в окончательной версии системы, даже в отсутствие полноценной функциональности они помогают уяснить и протестировать взаимодействие между компонентами. Проверить это взаимодействие с помощью компонентов-заглушек можно двумя способами: путем генерирования жестко закодированных искусственных выходных данных или считывания таких данных из файла. Кроме того, они способны генерировать искусственную нагрузку, по результатам которой можно приблизительно определить, сколько времени уйдет на фактическую обработку данных в законченной рабочей версии системы. Это помогает на ранней стадии проектирования выявить требования по производительности системы, включая рабочие взаимодействия и узкие места.
Согласно Кусумано (Cusumano) и Селби (Selby), компания Microsoft выстраивает свою стратегию на основе эволюционного жизненного цикла поставки (Evolutionary Delivery Life Cycle). По той версии методики, которой пользуется Microsoft, «завершенный» макет системы создается на раннем этапе жизненного цикла продукта, а впоследствии с некоторой регулярностью (во многих случаях ежедневно), строятся «рабочие» версии с сокращенной функциональностью. В результате получается рабочая система, о достаточности характеристик которой можно принять решение в любой момент и которую в любой же момент можно развернуть. Есть, впрочем, одна проблема, которую следует предусмотреть, — дело в том, что та рабочая группа, которая заканчивает свою часть системы первой, задает интерфейс, которому должны соответствовать все последующие системы. Это обстоятельство ставит в невыгодное положение наиболее сложные части системы — их разработка сопряжена со значительно большими объемами аналитических действий, вследствие чего вероятность первоочередного определения их интерфейсов сильно снижается. Таким образом, и без этого сложные подсистемы становятся еще более сложными. По нашему убеждению, все согласования по поводу интерфейсов следует проводить на этапе создания макета системы — при таком условии на последующих стадиях разработки можно будет обратить большее внимание на достижение эффективности.
4.3.Документирование программной архитектуры
4.3.1.Варианты применения архитектурной документации
Характер архитектуры любой системы обусловливается предъявляемыми к ней требованиями; это утверждение справедливо и по отношению к документации архитектуры — другими словами, содержание документации зависит от предполагаемых вариантов ее применения. Документация ни при каких обстоятельствах не может быть универсальной. С одной стороны, она должна быть абстрактной и, следовательно, доступной для понимания новыми сотрудниками, но с другой — весьма детальной — настолько, чтобы ее можно быть использовать как план проведения анализа. Между архитектурной документацией, предназначенной, скажем, для проведения анализа безопасности, и архитектурной документацией для изучения конструкторами должны существовать серьезные различия. С другой стороны, у этих вариантов будет мало общего с содержанием руководства для ознакомления, предназначенного новому сотруднику.
Архитектурная документация одновременно инструктивна и описательна. Ограничивая диапазон возможных решений, с одной стороны, и перечисляя принятые ранее проектные решения по системе — с другой, она обязывает соблюдать определенные принципы.
Из всего этого следует, что заинтересованные в составлении документации лица преследуют разные цели — от представленной в ней информации они требуют разной направленности, разных уровней детализации и разных трактовок. Предполагать, что один и тот же архитектурный документ будет одинаково воспринят всеми без исключения заказчиками, наивно. Стремиться следует к тому, чтобы любое заинтересованное лицо смогло быстро найти необходимую информацию, как можно меньше в процессе ее поиска натыкаясь на незначительные (с его точки зрения) сведения.
В некоторых случаях простейшим решением представляется создание нескольких документов, предназначенных для разных заинтересованных лиц. Впрочем, как правило, задача ограничивается созданием единого комплекта документации с дополнительными облегчающими поиск сведений инструкциями.
Согласно одному из фундаментальных правил технической документации в общем и документации программной архитектуры в частности, составитель должен принимать позицию читателя. Без труда составленная, но трудная для восприятия (с точки зрения читателя — в данном случае заинтересованного лица) документация не найдет себе применения.
4.3.2.Представления
Одним из наиболее важных понятий документирования программной архитектуры является «представление» (view). С понятием представления, которое можно вкратце определить как способ фиксации структуры, связан основной принцип документирования программной архитектуры:
Документирование архитектуры подразумевает документирование всех значимых представлений с последующей фиксацией сведений, относящихся одновременно к нескольким представлениям.