Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Технологии разработки ПО. Лабораторный практикум
.pdf
ция», «проверка почты», «ожидание», «чтение письма», «редактирование письма», «выбор файла», «отправка письма».
Авторизация может завершиться успешно (при корректном пароле) либо с ошибкой, в случае ошибки процесс авторизации повторяется.
Проверка почты включает в себя вложенные состояния (отправку на сервер запроса о наличии новых писем, их загрузку), поэтому отображается составным состоянием.
Результат построения приведен на рис. 3.5.
Рис. 3.5. Диаграмма переходов состояний для почтовой про-
граммы
3.4.3. Построение диаграммы потоков
данных
Анализируя функциональные возможности и поведение
программы по диаграммам вариантов использования и переходов состояний, выделим:
1) внешние сущности: «пользователь», «почтовый сервер»;
2) виды данных: «логины», «письма», «адреса», «файлы»;
3) хранилища: «входящие письма», «исходящие письма»,
«адресная книга», «файлы».
31

Декомпозируем виды данных на отдельные элементы:
1) логин: «имя пользователя», «пароль»;
2) письмо: «id письма», «тема письма», «текст письма»,
«адрес отправителя», «адреса получателей», «вложения»;
3) адрес: «подразделение», «адресат», «e-mail»;
4) файл: «имя файла», «содержимое файла».
Построим диаграмму потоков данных на контекстном уровне (рис. 3.6).
Рис. 3.6. Потоки данных почтовой программы (контекстный
уровень)
На первом уровне диаграммы выделим основные процедуры (рис. 3.7).
На втором уровне диаграммы опишем содержание процедуры «Отправка письма» (рис. 3.8).
32

33
Рис. 3.7. Потоки данных почтовой программы (первый уровень)

Рис. 3.8. Потоки данных в процедуре «Отправка письма»
(второй уровень)
3.5. Вопросы для самоконтроля
1. Может ли программа быть действующим лицом на диа-
грамме вариантов использования?
2. В чем принципиальное различие между связями «расши-
рение» и «включение» диаграммы вариантов использования?
3. Как будет выглядеть диаграмма переходов состояний
уличного светофора?
4. На диаграмме потоков данных для процедуры 1.2 показа-
ны три вложенные процедуры. Какие номера они будут иметь?
5. Показывает ли диаграмма потоков данных очередность
выполнения процедур?
34

Лабораторная работа № 4
«ОПРЕДЕЛЕНИЕ СВЯЗНОСТИ
КЛАССА»
4.1. Цель работы
Получение практических навыков в оценке связности класса по данным.
4.2 Теоретический минимум
Связность класса (class cohesion) – это взаимозависимость
компонентов класса. Под компонентами класса подразумеваются поля и методы, определенные в классе, а также унаследованные от классов-предков.
Метод класса связан с полем класса, если он обращается
к этому полю напрямую или через вызовы других методов.
Два метода класса прямо связаны между собой, если оба
метода связаны с одним и тем же полем класса.
Два метода класса косвенно связаны между собой, если они
не связаны прямо, но между ними можно построить маршрут
из прямо связанных методов.
Обычно конструкторам доступны все поля класса, то есть
они создают косвенные соединения между никак не связанными методами, поэтому ни конструкторы, ни деструкторы в расчетах связности не учитываются. Непубличные методы также
не учитываются.
На диаграмме отношений компонентов класса (рис. 4.1)
публичные методы обозначены прямоугольниками, поля – эллипсами, связи «метод – поле» – сплошными линиями, а «конструктор / деструктор – поле» – пунктиром.
2
Методы m1 и m
Методы m
Методы m1 и m
Построив связи между методами, определяют три характеристики связности:
NP – максимально возможное количество связей между N
методами:
2
прямо связаны через поле a.
и m3 прямо связаны через поле b.
3
косвенно связаны через метод m2.
35

NP = N ⋅ (N – 1) / 2;
NDC – количество прямых связей между методами;
NIC – количество прямых и косвенных связей между мето-
дами.
Рис. 4.1. Диаграмма отношений компонентов класса
Далее рассчитываются метрики связности:
– сильная связность класса (tight class cohesion, TCC):
TCC = NDC / NP;
– слабая связность класса (loose class cohesion, LCC):
LCC = NIC / NP.
4.3. Порядок выполнения работы
1. Получить у преподавателя свой вариант задания.
2. Реализовать класс, решающий поставленные задачи.
3. Построить диаграмму отношений компонентов класса.
4. Определить количество прямых и косвенных связей меж-
ду методами.
5. Рассчитать метрики связности.
6. Оформить отчет о выполненной работе.
4.4. Пример выполнения расчетов
На листинге представлен код класса Rectangle:
36

1: class Rectangle
2: {
2
3: private int x1, x
4: public Rectangle (int _x1, int _x
, y1, y2, color;
2
_color)
5: {
2
6: x1 = _x1; y1 = _y1; x
= _x2; y2 = _y2; color = _color;
7: }
8: public int Width ()
9: {
2
10: return x
– x1;
11: }
12: public int Height ()
13: {
2
14: return y
– y1;
15: }
16: public int Square ()
17: {
18: return Width () * Height ();
19: }
20: public int GetColor ()
21: {
22: return color;
23: }
24: }
, int _y1, int _y2, int
Класс имеет пять полей и пять открытых методов (не учи-
тывая конструктор).
Построим диаграмму отношений компонентов класса Rect-
angle (рис. 4.2).
Метод Width связан с полями x1 и x2 через обращение к
ним.
Метод Height связан с полями y1 и y2 через обращение к
ним.
Метод Square связан с полями x1 и x2 через вызов метода
Width, а с полями y1 и y2 – через вызов метода Height.
Метод GetColor связан с полем color через обращение к
нему.
37

Рис. 4.2. Диаграмма отношений компонентов класса
Rectangle
Определим характеристики связности.
Количество открытых методов (за исключением конструк-
тора):
N = 4.
Максимально возможное количество связей:
NP = 4 ⋅ (4 – 1) / 2 = 6.
Прямые связи между методами (Width – Square через поля
x1, x2 и Square – Height через поля y1, y2):
NDC = 2.
Косвенные связи между методами (Width – Height через
метод Square):
NIC = 1.
Рассчитаем метрики связности:
TCC = NDC / NP = 2 / 6 = 0,33;
LCC = NIC / NP = 1 / 6 = 0,17.
38

4.5. Вопросы для самоконтроля
1. Может ли связность класса-потомка быть выше связно-
сти класса-предка?
2. В каких диапазонах находятся значения метрик TCC и
LCC?
3. Почему конструкторы класса не учитываются в расчете
характеристики NP?
4. Какую структуру имеет класс с сильной связностью 0,5?
5. В каком случае слабая связность класса равна 0?
39

Лабораторная работа № 5
«СТРУКТУРНОЕ ТЕСТИРОВАНИЕ»
5.1. Цель работы
Освоение методики тестирования базового пути.
5.2. Теоретический минимум
Тестирование – процесс выполнения программы с целью
обнаружения ошибок.
Тест – совокупность исходных данных, условия запуска
программы и ожидаемый результат.
Исчерпывающим называется тестирование, обеспечивающее проверку безошибочной работы программы для всех вариантов входных данных и всех ветвей вычислений. Проведение
исчерпывающего тестирования в реальных условиях, как правило, невозможно из-за огромного количества комбинаций
входных данных, поэтому перед проектировщиком тестов стоит задача выбора ограниченного набора тестов, с максимальной вероятностью приводящих к обнаружению ошибки.
Успешным называется тест, обнаруживший ранее не раскрытую ошибку.
Рассматривают два основных подхода к тестированию.
Функциональное тестирование (тестирование с управлением по вводу / выводу) – программа рассматривается как
«черный ящик», тестовые наборы строятся только на основании функциональных требований, без учета знаний о внутренней структуре.
Структурное тестирование (тестирование, управляемое
логикой программы, или тестирование «белого ящика») – под-
разумевает анализ внутренних элементов программы и логики
их взаимодействия.
В данной Методы m1 и m2 прямо связаны через поле a.
Методы m2 и m3 прямо связаны через поле b.
Методы m1 и m3 косвенно связаны через метод m2.
Построив связи между методами, определяют три характеристики связности:
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
