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

Методы тестирования и отладки программного обеспечения. Учебник

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
В качестве базиса для тестирования глубинной структуры ис­пользуются модели анализа и проектирования. Например, раз­работчик исследует диаграмму взаимодействия (невидимую извне) и спрашивает: «Проверяет ли тест сотрудничество, отме­ченное на диаграмме?».
Диаграммы классов обеспечивают понимание структу­ры наследования, которая используется в тестах, основанных на ошибках. Рассмотрим операцию Обработать (Ссылка_на_Ро­дительскийКласс). Что произойдет, если в вызове этой операции указать ссылку на дочерний класс? Есть ли различия в поведе­нии, которые должны отражаться в операции Обработать? Эти вопросы инициируют создание конкретных тестов.
5.6. Тестирование содержимого класса
5.6.1. Стохастическое тестирование класса
При стохастическом тестировании ИД для тестовых вариан­тов генерируются случайным образом. Обсудим методику, пред­ложенную С. Кирани и В. Тсай.
Рассмотрим класс Счет, который имеет следующие операции:
Открыть, Установить, Положить, Снять, Остаток, Итог, Огра­ничитьКредит, Закрыть.
Каждая из этих операций применяется при определенных ограничениях:
– счет должен быть открыт перед применением других опе-
раций;
– счет должен быть закрыт после завершения всех операций.
Даже с этими ограничениями существует множество допусти­мых перестановок операций. Минимальная работа экземпляра
Счет включает следующую последовательность операций:
Открыть►Установить►Положить►Снять►Закрыть.
Стрелка обозначает операцию следования. Иначе говоря, здесь записано, что экземпляр класса Счет сначала выполняет операцию открытия, затем установки и т.д. Эта последователь­ность является минимальным тестовым вариантом для экзем­пляра класса Счет.
Впрочем, в эту последовательность можно
81
встроить группировку, обеспечивающую создание других вари­антов поведения:
Открыть►Установить►Положить►[Остаток●Снять●Итог●
n
ОграничитьКредит●Положить]
►Снять►Закрыть.
Здесь приняты дополнительные обозначения: точка означает
операцию И/ИЛИ, пара квадратных скобок – группировку, а по­казатель степени – число повторений группировки.
Набор различных последовательностей может генерироваться
случайным образом:
Тестовый вариант N:
Открыть►Установить► Положить►Остаток►Снять► Итог►
Снять►Закрыть.
Тестовый вариант М:
Открыть►Установить►Положить►Итог►ОграничитьКредит►
Снять►Остаток►Снять►Закрыть.
Эти и другие тесты случайных последовательностей прово-
дятся для проверки различных вариантов жизни объектов.
5.6.2. Тестирование разбиений на уровне классов
Тестирование разбиений уменьшает число тестовых вариан­тов, требуемых для проверки классов (тем же способом, что и разбиение по эквивалентности для стандартного ПО). Области ввода и вывода разбивают на категории, а тестовые варианты разрабатываются для проверки каждой категории.
Обычно используют одну из трех категорий разбиения. Кате­гории образуются операциями класса.
Первый способ – разбиение на категории по состояни- ям – основывается на способности операций изменять состоя­ние класса. Обратимся к классу Счет. Операции Снять, Поло- жить изменяют его состояние и образуют первую категорию. Операции Остаток, Итог, ОграничитьКредит не меняют состоя­ние класса Счет и образуют вторую категорию. Проектируемые тесты отдельно проверяют операции, которые изменяют состо­яние, а также те операции, которые не изменяют его. Таким об­разом, для примера:
82
Тестовый вариант 1:
Открыть►Установить►Положить►Положить►Снять► Снять►
Закрыть.
Тестовый вариант 2:
Открыть►Установить►Положить►Остаток►Итог►Ограничить
Кредит►Снять►Закрыть.
Тестовый вариант 1 изменяет состояние объекта, в то время как тестовый вариант 2 проверяет операции, которые не меня­ют состояние. Правда, в тестовый вариант 2 пришлось включить операции минимальной тестовой последовательности, поэтому для нейтрализации влияния операций Снять и Положить их ар­гументы должны иметь одинаковые значения.
Второй способ – разбиение на категории по свойствам – осно­вывается на свойствах, которые используются операциями. В клас­се Счет для определения разбиений можно использовать свойства Остаток и Ограничение кредита. Например, на основе свойства ограничение кредита операции подразделяются на три категории:
1) операции, которые используют ограничение кредита;
2) операции, которые изменяют ограничение кредита;
3) операции, которые не используют и не изменяют ограниче-
ние кредита.
Для каждой категории создается тестовая последовательность.
Третий способ – разбиение на категории по функционально- сти – основывается на общности функций, которые выполняют операции. Например, операции в классе Счет могут быть разби­ты на категории:
– операции инициализации (Открыть, Установить); – вычислительные операции (Положить, Снять); – запросы (Остаток, Итог, ОграничитьКредит); – операции завершения (Закрыть).
5.7. Методы тестирования взаимодействия классов
Для тестирования сотрудничества классов могут использо-
ваться следующие способы:
83
– стохастическое тестирование; – тестирование разбиений; – тестирование на основе сценариев; – тестирование на основе состояний.
В качестве примера рассмотрим программную модель бан-
ковской системы, в состав которой входят классы Банк, Бан-
комат, ИнтерфейсБанкомата, Счет, Работа с наличными, Под­тверждениеПравильности, имеющие операции, перечисленные
в табл. 5.2.
Таблица 5.2
Взаимодействие классов модели банковской системы
ла анкоат à ла анк
ПроверитьСчет( ); ПроверитьРIN( ); ПроверитьПолис( ); ЗапросСнятия( ); ЗапросДепозита ( ); ИнфоСчета( );
ла аота  налиныи à ла анк
ОткрытьСчет( ); НачальнДепозит( ); РазрешитьКарту( ); СнятьРазрешен( ); ЗакрытьСчет( );
ла анкоат à ла нтерей анкоата
КартаВставлена( ); Пароль( ); Положить( ); Снять( ); СостояниеСчета( ); Завершить( );
ла нтерей анкоат à ла анкоат
ПроверитьСостояние( ); СостояниеПоложить( ); ВыдатьНаличные( ); ПечатьСостСчета( ); ЧитатьИнфоКарты( ); ПолучитьКолвоНалич( );
84
ла ет à ла анк
: Подтверждение правильнос ти
ОграничКредит( ); ТипОчета( ); Остаток( ); Снять( ); Положить( ); Закрыть( );
ла одтвердение правилноти à ла анк
ПодтвРIN( ); ПодтвСчет( );
1 : КартаВс тавлена()
2 : Пароль()
3 : Положить()
4 : Снять()
5 : СостояниеСчета()
Интерфейс банк омата : Банкомат
6 : Завершить()
7 : ПроверитьСос тояние()
8 : СостояниеПоложить()
9 : Выдат ьНаличные()
10 : ПечатьСос тоянияСч ета()
11 : ЧитатьИнфоКарты ()
12 : ПолучитьКолвоНалич()
13 : ПроверитьСч ет()
14 : ПроверитьPIN()
15 : ПроверитьПолис()
16 : ЗапросСнятия()
17 : ЗапросДепоз ита()
18 : ИнфоСчета()
Окончание табл.5.2
: Работа с наличными
19 : ОткрытьСч ет()
20 : НачалнДепозит()
21 : РазрешитьКарт у()
: Счёт
22 : СнятьР азрешен()
23 : Закрыт ьСчет( )
24 : ОграничКред ит()
25 : ТипСчета()
26 : Ост аток()
27 : Снять()
28 : Положить()
29 : Закрыт ь()
30 : ПодтвPIN()
31 : ПодтвСч ет()
: Банк
Рис. 5.1. Диаграмма сотрудничества банковской системы
85
Диаграмма сотрудничества объектов банковской системы представлена на рис. 5.1. На этой диаграмме отображены связи между объектами, стрелки передачи сообщений подписаны име­нами вызываемых операций.
5.7.1. Стохастическое тестирование
Стохастические тестовые варианты генерируются следующей последовательностью шагов.
Для создания тестов используют списки операций каждого класса-клиента. Операции будут посылать сообщения в классы­серверы.
Для каждого созданного сообщения определяется класс­сотрудник и соответствующая операция в классе-сервере.
Для каждой операции в классе-сервере, которая вызывается сообщением из класса-клиента, определяются сообщения, кото­рые она, в свою очередь, посылает.
Для каждого из сообщений определяется следующий уровень вызываемых операций; они вставляются в тестовую последова­тельность.
В качестве примера рассмотрим последовательность операций для класса Банк, вызываемых классом Банкомат:
ПроверитьСчет►ПроверитьРIN►[[ПроверитьПолис►
n
ЗапросСнятия]●ЗапросДепозита●ИнфоСчета]
.
Здесь приняты следующие обозначения: стрелка означает операцию следования, точка – операцию И/ИЛИ, пара квадрат­ных скобок – группировку операций классов, показатель степе­ни – число повторений группировки из операций классов.
Случайный тестовый вариант для класса Банк может иметь вид:
Тестовый вариант N:
ПроверитьСчет►ПроверитьРIN►ЗапросДепозита.
Для выявления сотрудников, включенных в этот тест, рас­сматриваются сообщения, связанные с каждой операцией, за­писанной в тестовом варианте N. Для выполнения заданий Про- веритьСчет и ПроверитьРIN класс Банк должен сотрудничать с классом ПодтверждениеПравильности. Для выполнения зада-
86
ния ЗапросДепозита класс Банк должен сотрудничать с классом Счет. Отсюда создается новый тестовый вариант, который прове­ряет отмеченные сотрудничества:
Тестовый вариант М:
ПроверитьСчет
(ПодтвРШ
ПодтвПрав
►(ПодтвСчет
Банк
ПодтвПрав
)►ЗапросДепозита
Банк
)►ПроверитьРIN
►(Положить
Счет
►
Банк
).
В этой последовательности операции классов-сотрудников
класса Банк помещены в круглые скобки, индексы отображают принадлежность операций к конкретным классам.
5.7.2. Тестирование разбиений
В основу этого метода положен тот же подход, который при­менялся к отдельному классу. Отличие в том, что тестовая по­следовательность расширяется для включения тех операций, ко­торые вызываются с помощью сообщений для сотрудничающих классов.
Другой подход к тестированию разбиений основан на взаи­модействиях с конкретным классом. Как показано на рис. 5.1, класс Банк получает сообщения от классов Банкомат и Работа с наличными. Поэтому операции внутри класса Банк тестируют­ся разбиением их на те, которые обслуживают класс Банкомат, и на те, которые обслуживают класс Работа с наличными. Для дальнейшего уточнения может быть использовано разбиение на категории по состояниям.
5.7.3. Тестирование на основе состояний
В качестве источника исходной информации используют диа­граммы схем состояний, фиксирующие динамику поведения класса. Данный способ позволяет получить набор тестов, прове­ряющих поведение класса и тех классов, которые сотрудничают с ним. В качестве примера на рис. 5.2 показана диаграмма схем состояний класса Счет.
На рис. 5.2 показано, что объект Счет начинает свою жизнь в состоянии Пустой счет
лить счет
. Наибольшее количество событий (и действий) связано
, а заканчивает жизнь в состоянии Уда-
с состоянием Работа счета.
87
Открыть
Неработающий
Счет
Пустой счет
Удалить счет
УстановитьСчет
Остаток
Кредит
Закрыть
Установка счета
Положить (начальное)
Работа счета
Снять
Снять (конечное)
Рис. 5.2. Диаграмма схем состояний класса Счет
ИнфоСчета
Проектируемые тесты должны обеспечить покрытие всех со­стояний. Это значит, что тестовые варианты инициируют пере­ходы через все состояния объекта:
Тестовый вариант 1:
Открыть►УстановитьСчет►Положить (начальное)►Снять (ко­нечное) ►Закрыть.
Отметим, что эта последовательность аналогична минималь­ной тестовой последовательности. Добавим к минимальной по­следовательности дополнительные тестовые варианты:
88
Тестовый вариант 2:
Открыть►УстановитьСчет►Положить(начальное)►Положить
►Остаток►Кредит►Снять (конечное)►Закрыть.
Тестовый вариант 3:
Открыть►Установить►Положить (начальное)►Положить►Сн
ять►ИнфоСчета►Снять (конечное)►Закрыть.
Для гарантии проверки всех вариантов поведения число те­стовых вариантов может быть увеличено. Когда поведение клас­са определяется в сотрудничестве с несколькими классами, для отслеживания «потока поведения» используют набор диаграмм схем состояний, характеризующих смену состояний других классов.
Возможна другая методика исследования состояний – «пре- имущественно в ширину». По этой методике:
– каждый тестовый вариант проверяет один новый переход;
– новый переход можно проверять, если полностью провере- ны все предшествующие переходы, т.е. переходы между преды­дущими состояниями.
Рассмотрим объект Карта клиента (рис. 5.3). Начальное со-
стояние карты Не определена, т.е. не установлен номер карты. После чтения карты (в ходе диалога с банкоматом) объект пере­ходит в состояние Определена. Это означает, что определены банковские идентификаторы Номер Карты и Дата Истечения
Срока. Карта клиента переходит в состояние Предъявляется на рассмотрение, когда проводится ее авторизация, и в состоя-
ние Разрешена, когда авторизация подтверждается. Переход карты клиента из одного состояния в другое проверяется отдель­ным тестовым вариантом.
Подход «преимущественно в ширину» требует: нельзя про-
верять Разрешена перед проверкой Не определена, Определе- на – «Предъявляется на рассмотрение». В противном случае на­рушается условие этого подхода: перед тестированием текущего перехода должны быть протестированы все переходы, ведущие к нему.
89
Не определена
Проверено
Определена
Проверено
Предъявляется на
рассмотрение
Текущий переход
Разрешена
Рис. 5.3. Тестирование «преимущественно в ширину»
Можно проверять
Контрольные вопросы
1. Что такое CRC-карта? Как ее применить для тестирования
визуальных моделей?
2. Поясните особенности тестирования объектно-ориентиро-
ванных модулей.
3. В чем состоит суть методики тестирования интеграции объ-
ектно-ориентированных систем, основанной на потоках?
4. Поясните содержание методики тестирования интегра­ции объектно-ориентированных систем, основанной на исполь­зовании.
5. В чем заключаются особенности объектно-ориентирован­ного тестирования правильности?
6. Как учитывается инкапсуляция, полиморфизм и наследо­вание при проектировании тестовых вариантов?
7. Поясните содержание тестирования, основанного на ошибках.
8. Поясните содержание тестирования, основанного на сце­нариях.
9. Чем отличается тестирование поверхностной структуры от тестирования глубинной структуры системы?
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]