- •Введение
- •От издательства
- •ГЛАВА 1. Организация процесса конструирования
- •Определение технологии конструирования программного обеспечения
- •Классический жизненный цикл
- •Макетирование
- •Стратегии конструирования ПО
- •Инкрементная модель
- •Быстрая разработка приложений
- •Спиральная модель
- •Компонентно-ориентированная модель
- •Тяжеловесные и облегченные процессы
- •ХР-процесс
- •Модели качества процессов конструирования
- •Контрольные вопросы
- •ГЛАВА 2. Руководство программным проектом
- •Процесс руководства проектом
- •Начало проекта
- •Измерения, меры и метрики
- •Процесс оценки
- •Анализ риска
- •Планирование
- •Трассировка и контроль
- •Планирование проектных задач
- •Размерно-ориентированные метрики
- •Функционально-ориентированные метрики
- •Выполнение оценки в ходе руководства проектом
- •Выполнение оценки проекта на основе LOC- и FP-метрик
- •Конструктивная модель стоимости
- •Модель композиции приложения
- •Модель раннего этапа проектирования
- •Модель этапа постархитектуры
- •Предварительная оценка программного проекта
- •Анализ чувствительности программного проекта
- •Сценарий понижения зарплаты
- •Сценарий наращивания памяти
- •Сценарий использования нового микропроцессора
- •Сценарий уменьшения средств на завершение проекта
- •Контрольные вопросы
- •Ошибки
- •Стоимость
- •Выполнение операции не изменяет состояния объекта
- •Проблема
- •Читать карту клиента
- •ГЛАВА 3. Классические методы анализа
- •Структурный анализ
- •Диаграммы потоков данных
- •Описание потоков данных и процессов
- •Расширения для систем реального времени
- •Расширение возможностей управления
- •Модель системы регулирования давления космического корабля
- •Методы анализа, ориентированные на структуры данных
- •Метод анализа Джексона
- •Методика Джексона
- •Шаг объект-действие
- •Шаг объект-структура
- •Шаг начального моделирования
- •Контрольные вопросы
- •ГЛАВА 4. Основы проектирования программных систем
- •Особенности процесса синтеза программных систем
- •Особенности этапа проектирования
- •Структурирование системы
- •Моделирование управления
- •Декомпозиция подсистем на модули
- •Модульность
- •Информационная закрытость
- •Связность модуля
- •Функциональная связность
- •Информационная связность
- •Коммуникативная связность
- •Процедурная связность
- •Временная связность
- •Логическая связность
- •Связность по совпадению
- •Определение связности модуля
- •Сцепление модулей
- •Сложность программной системы
- •Характеристики иерархической структуры программной системы
- •Контрольные вопросы
- •ГЛАВА 5. Классические методы проектирования
- •Метод структурного проектирования
- •Типы информационных потоков
- •Проектирование для потока данных типа «преобразование»
- •Проектирование для потока данных типа «запрос»
- •Диаграмма потоков данных
- •Метод проектирования Джексона
- •Доопределение функций
- •Учет системного времени
- •Контрольные вопросы
- •ГЛАВА 6. Структурное тестирование программного обеспечения
- •Основные понятия и принципы тестирования ПО
- •Тестирование «черного ящика»
- •Тестирование «белого ящика»
- •Особенности тестирования «белого ящика»
- •Способ тестирования базового пути
- •Потоковый граф
- •Цикломатическая сложность
- •Шаги способа тестирования базового пути
- •Способы тестирования условий
- •Тестирование ветвей и операторов отношений
- •Способ тестирования потоков данных
- •Тестирование циклов
- •Простые циклы
- •Вложенные циклы
- •Объединенные циклы
- •Неструктурированные циклы
- •Контрольные вопросы
- •ГЛАВА 7. Функциональное тестирование программного обеспечения
- •Особенности тестирования «черного ящика»
- •Способ разбиения по эквивалентности
- •Способ анализа граничных значений
- •Способ диаграмм причин-следствий
- •Контрольные вопросы
- •ГЛАВА 8. Организация процесса тестирования программного обеспечения
- •Методика тестирования программных систем
- •Тестирование элементов
- •Тестирование интеграции
- •Нисходящее тестирование интеграции
- •Восходящее тестирование интеграции
- •Сравнение нисходящего и восходящего тестирования интеграции
- •Тестирование правильности
- •Системное тестирование
- •Тестирование восстановления
- •Тестирование безопасности
- •Стрессовое тестирование
- •Тестирование производительности
- •Искусство отладки
- •Контрольные вопросы
- •ГЛАВА 9. Основы объектно-ориентированного представления программных систем
- •Принципы объектно-ориентированного представления программных систем
- •Абстрагирование
- •Инкапсуляция
- •Модульность
- •Иерархическая организация
- •Объекты
- •Общая характеристика объектов
- •Виды отношений между объектами
- •Связи
- •Видимость объектов
- •Агрегация
- •Классы
- •Общая характеристика классов
- •ПРИМЕЧАНИЕ
- •Виды отношений между классами
- •Ассоциации классов
- •Наследование
- •Полиморфизм
- •Агрегация
- •Зависимость
- •Конкретизация
- •Контрольные вопросы
- •ГЛАВА 10. Базис языка визуального моделирования
- •Унифицированный язык моделирования
- •Предметы в UML
- •Отношения в UML
- •Диаграммы в UML
- •Механизмы расширения в UML
- •Контрольные вопросы
- •ГЛАВА 11. Статические модели объектно-ориентированных программных систем
- •Вершины в диаграммах классов
- •Свойства
- •ПРИМЕЧАНИЕ
- •Операции
- •Организация свойств и операций
- •Множественность
- •Отношения в диаграммах классов
- •Деревья наследования
- •Примеры диаграмм классов
- •Контрольные вопросы
- •Моделирование поведения программной системы
- •Диаграммы схем состояний
- •Действия в состояниях
- •Условные переходы
- •Вложенные состояния
- •Диаграммы деятельности
- •Диаграммы взаимодействия
- •Диаграммы сотрудничества
- •Диаграммы последовательности
- •Диаграммы Use Case
- •Актеры и элементы Use Case
- •Отношения в диаграммах Use Case
- •Работа с элементами Use Case
- •Спецификация элементов Use Case
- •Главный поток
- •Подпотоки
- •Альтернативные потоки
- •Пример диаграммы Use Case
- •Построение модели требований
- •Расширение функциональных возможностей
- •Кооперации и паттерны
- •Паттерн Наблюдатель
- •Паттерн Компоновщик
- •Паттерн Команда
- •Бизнес-модели
- •Контрольные вопросы
- •ГЛАВА 13. Модели реализации объектно-ориентированных программных систем
- •Компонентные диаграммы
- •Компоненты
- •Интерфейсы
- •Компоновка системы
- •Разновидности компонентов
- •Использование компонентных диаграмм
- •Моделирование программного текста системы
- •Моделирование реализации системы
- •Основы компонентной объектной модели
- •Организация интерфейса СОМ
- •Unknown — базовый интерфейс COM
- •Серверы СОМ-объектов
- •Преимущества COM
- •Работа с СОМ-объектами
- •Создание СОМ-объектов
- •Повторное использование СОМ-объектов
- •Маршалинг
- •IDL-описаниеи библиотека типа
- •Диаграммы размещения
- •Узлы
- •Использование диаграмм размещения
- •Контрольные вопросы
- •ГЛАВА 14. Метрики объектно-ориентированных программных систем
- •Метрические особенности объектно-ориентированных программных систем
- •Локализация
- •Инкапсуляция
- •Информационная закрытость
- •Наследование
- •Абстракция
- •Эволюция мер связи для объектно-ориентированных программных систем
- •Связность объектов
- •TCC(Stack)=7/10=0,7
- •Сцепление объектов
- •Набор метрик Чидамбера и Кемерера
- •Использование метрик Чидамбера-Кемерера
- •Метрики Лоренца и Кидда
- •Метрики, ориентированные на классы
- •Операционно-ориентированные метрики
- •Метрики для ОО-проектов
- •Набор метрик Фернандо Абреу
- •Метрики для объектно-ориентированного тестирования
- •Метрики инкапсуляции
- •Метрики наследования
- •Метрики полиморфизма
- •Контрольные вопросы
- •Эволюционно-инкрементная организация жизненного цикла разработки
- •Этапы и итерации
- •Рабочие потоки процесса
- •Модели
- •Технические артефакты
- •Управление риском
- •Первые три действия относят к этапу оценивания риска, последние три действия — к этапу контроля риска [20].
- •Идентификация риска
- •Анализ риска
- •Ранжирование риска
- •Планирование управления риском
- •Разрешение и наблюдение риска
- •Этапы унифицированного процесса разработки
- •Этап НАЧАЛО (Inception)
- •Этап РАЗВИТИЕ (Elaboration)
- •Этап КОНСТРУИРОВАНИЕ (Construction)
- •Этап ПЕРЕХОД (Transition)
- •Оценка качества проектирования
- •Пример объектно-ориентированной разработки
- •Этап НАЧАЛО
- •Этап РАЗВИТИЕ
- •Этап КОНСТРУИРОВАНИЕ
- •Разработка в стиле экстремального программирования
- •ХР-реализация
- •ХР-итерация
- •Элемент ХР-разработки
- •Коллективное владение кодом
- •Взаимодействие с заказчиком
- •Стоимость изменения и проектирование
- •Контрольные вопросы
- •ГЛАВА 16. Объектно-ориентированное тестирование
- •Расширение области применения объектно-ориентированного тестирования
- •Изменение методики при объектно-ориентированном тестировании
- •Особенности тестирования объектно-ориентированных «модулей»
- •Тестирование объектно-ориентированной интеграции
- •Объектно-ориентированное тестирование правильности
- •Проектирование объектно-ориентированных тестовых вариантов
- •Инкапсуляция
- •Полиморфизм
- •Тестирование, основанное на ошибках
- •Тестирование, основанное на сценариях
- •Тестирование поверхностной и глубинной структуры
- •Способы тестирования содержания класса
- •Стохастическое тестирование класса
- •Тестирование разбиений на уровне классов
- •Способы тестирования взаимодействия классов
- •Стохастическое тестирование
- •Тестирование разбиений
- •Тестирование на основе состояний
- •Предваряющее тестирование при экстремальной разработке
- •Контрольные вопросы
- •ГЛАВА 17. Автоматизация конструирования визуальной модели программной системы
- •Общая характеристика CASE-системы Rational Rose
- •Создание диаграммы Use Case
- •Создание диаграммы последовательности
- •Создание диаграммы классов
- •ПРИМЕЧАНИЕ
- •ПРИМЕЧАНИЕ
- •Создание компонентной диаграммы
- •Генерация программного кода
- •Заключение
- •Приложение А.
- •Факторы затрат постархитектурной модели СОСОМО II
- •Факторы персонала
- •Низкий
- •Ada.Text_IO
- •Любой целый тип со знаком
- •Приложение Б.Терминология языка UML и унифицированного процесса
- •Приложение В. Основные средства языка программирования Ada 95
- •Список литературы
Шаг 6. Детализация структуры ПС. Производится отображение в структуру каждого потока действия. Каждый поток действия имеет свой тип. Могут встретиться поток-«преобразование» (отображается по предыдущей методике) и поток запросов. На рис. 5.6 приведен пример отображения потока действия 1. Подразумевается, что он является потоком преобразования.
Шаг 7. Уточнение иерархической структуры ПС. Уточнение выполняется для повышения качества системы. Как и при предыдущей методике, критериями уточнения служат: независимость модулей, эффективность реализации и тестирования, улучшение сопровождаемости.
Метод проектирования Джексона
Для иллюстрации проектирования по этому методу продолжим пример с системой обслуживания перевозок.
Метод Джексона включает шесть шагов [39]. Три первых шага относятся к этапу анализа. Это шаги:
объект — действие, объект — структура, начальное моделирование. Их мы уже рассмотрели.
Доопределение функций
Следующий шаг — доопределение функций. Этот шаг развивает диаграмму системной спецификации этапа анализа. Уточняются процессы-модели. В них вводятся дополнительные функции. Джексон выделяет 3 типа сервисных функций:
1.Встроенные функции (задаются командами, вставляемыми в структурный текст процесса-модели).
2.Функции впечатления (наблюдают вектор состояния процесса-модели и вырабатывают выходные результаты).
3.Функции диалога.
Они решают следующие задачи:
наблюдают вектор состояния процесса-модели;
формируют и выводят поток данных, влияющий на действия в процессе-модели;
выполняют операции для выработки некоторых результатов.
Встроенную функцию введем в модель ТРАНСПОРТ-1. Предположим, что в модели есть панель с лампочкой, сигнализирующей о прибытии. Лампочка включается командой LON(i), а выключается командой LOFF(i). По мере перемещения транспорта между остановками формируется поток LAMPкоманд. Модифицированный структурный текст модели ТРАНСПОРТ-1 принимает вид
ТРАНСПОРТ-1 LON(l);
опрос SV;
ЖДАТЬ цикл ПОКА ПРИБЫЛ(1) опрос SV;
конец ЖДАТЬ;
LOFF(l);
покинуть(1); ТРАНЗИТ цикл ПОКА УБЫЛ(1)
опрос SV; конец ТРАНЗИТ; ТРАНСПОРТ цикл
ОСТАНОВКА; прибыть(i); LON(i);
ЖДАТЬ цикл ПОКА ПРИБЫЛ(i) опрос SV;
конец ЖДАТЬ;
LOFF(i);
покинуть(i);
ТРАНЗИТ цикл ПОКА УБЫЛ(i) опрос SV;
конец ТРАНЗИТ; конец ОСТАНОВКА;
71
конец ТРАНСПОРТ; прибыть(1);
конец ТРАНСПОРТ-1;
Теперь введем функцию впечатления. В нашем примере она может формировать команды для мотора транспорта: START, STOP.
Условия выработки этих команд.
Команда STOP формируется, когда датчики регистрируют прибытие транспорта на остановку.
Команда START формируется, когда нажата кнопка для запроса транспорта и транспорт ждет на одной из остановок.
Видим, что для выработки команды STOP необходима информация только от модели транспорта. В свою очередь, для выработки команды START нужна информация как от модели КНОПКА-1, так и от модели ТРАНСПОРТ-1. В силу этого для реализации функции впечатления введем функциональный процесс М-УПРАВЛЕНИЕ. Он будет обрабатывать внешние данные и формировать команды START и STOP.
Ясно, что процесс М-УПРАВЛЕНИЕ должен иметь внешние связи с моделями ТРАНСПОРТ-1 и КНОПКА. Соединение с моделью КНОПКА организуем через вектор состояния BV. Соединение с моделью ТРАНСПОРТ-1 организуем через поток данных S1D.
Для обеспечения М-УПРАВЛЕНИЯ необходимой информацией опять надо изменить структурный текст модели ТРАНСПОРТ-1. В нем предусмотрим занесение сообщения Прибыл в буфер S1D:
ТРАНСПОРТ-1 LON(l);
опрос SV;
ЖДАТЬ цикл ПОКА ПРИБЫЛ(1) опрос SV;
конец ЖДАТЬ;
LOFF(l);
Покинуть(1); ТРАНЗИТ цикл ПОКА УБЫЛ(1)
опрос SV; конец ТРАНЗИТ; ТРАНСПОРТ цикл ОСТАНОВКА;
прибыть(i):
записать Прибыл в S1D; LON(i);
ЖДАТЬ цикл ПОКА ПРИБЫЛ(i) опрос SV;
конец ЖДАТЬ;
LOFF(i);
покинуть(i);
ТРАНЗИТ цикл ПОКА УБЫЛ(i) опрос SV;
конец ТРАНЗИТ; конец ОСТАНОВКА;
конец ТРАНСПОРТ; прибыть(1);
записать Прибыл в S1D; конец ТРАНСПОРТ-1;
Очевидно, что при такой связи процессов необходимо гарантировать, что процесс ТРАНСПОРТ-1 выполняет операции опрос SV, а процесс М-УПРАВЛЕНИЕ читает сообщения Прибытия в S1D с частотой, достаточной для своевременной остановки транспорта. Временные ограничения, планирование и реализация должны рассматриваться в последующих шагах проектирования.
В заключение введем функцию диалога. Свяжем эту функцию с необходимостью развития модели КНОПКА-1. Следует различать первое нажатие на кнопку (оно формирует запрос на поездку) и последующие нажатия на кнопку (до того, как поездка действительно началась).
Диаграмма дополнительного процесса КНОПКА-2, в котором учтено это уточнение, показана на рис.
5.7.
72
Рис. 5.7. Диаграмма дополнительного процесса КНОПКА-2
Внешние связи модели КНОПКА-2 должны включать:
одно соединеннее моделью КНОПКА-1 — организуется через поток данных BID (для приема сообщения о нажатии кнопки);
два соединения с процессом М-УПРАВЛЕНИЕ — одно организуется через поток данных MBD (для приема сообщения о прибытии транспорта), другое организуется через вектор состояния BV
(для передачи состояния переключателя Запрос).
Таким образом, КНОПКА-2 читает два буфера данных, заполняемых процессами КНОПКА-1 и М- УПРАВЛЕНИЕ, и формирует состояние внутреннего электронного переключателя Запрос. Она реализует функцию диалога.
Структурный текст модели КНОПКА-2 может иметь следующий вид:
КНОПКА-2 Запрос := НЕТ; читать B1D; ГрНАЖ цикл
ЖдатьНАЖ цикл ПОКА Не НАЖАТА читать B1D;
конец ЖдатьНАЖ; Запрос := ДА; читать MBD;
ЖдатьОБСЛУЖ цикл ПОКА Не ПРИБЫЛ читать MBD;
конец ЖдатьОБСЛУЖ; Запрос := НЕТ; читать B1D;
конец ГрНАЖ; конец КНОПКА-2;
Диаграмма системной спецификации, отражающая все изменения, представлена на рис. 5.8.
Рис. 5.8. Полная диаграмма системной спецификации
Встроенная в ТРАНСПОРТ-1 функция вырабатывает LAMP-команды, функция впечатления модели М-УПРАВЛЕНИЕ генерирует команды управления мотором, а модель КНОПКА-2 реализует функцию диалога (совместно с процессом М-УПРАВЛЕНИЕ).
Учет системного времени
На шаге учета системного времени проектировщик определяет временные ограничения, накладываемые на систему, фиксирует дисциплину планирования. Дело в том, что на предыдущих шагах проектирования была получена система, составленная из последовательных процессов. Эти
73