Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Технологии разработки ПО. Лабораторный практикум

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
ция», «проверка почты», «ожидание», «чтение письма», «редак­тирование письма», «выбор файла», «отправка письма».
Авторизация может завершиться успешно (при коррект­ном пароле) либо с ошибкой, в случае ошибки процесс автори­зации повторяется.
Проверка почты включает в себя вложенные состояния (от­правку на сервер запроса о наличии новых писем, их загруз­ку), поэтому отображается составным состоянием.
Результат построения приведен на рис. 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.
Прямые связи между методами (WidthSquare через поля
x1, x2 и Square – Height через поля y1, y2):
NDC = 2.
Косвенные связи между методами (WidthHeight через
метод 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]