Опубликован: 05.03.2005 | Уровень: специалист | Доступ: платный
Практическая работа 3:

Интеграционное тестирование

Выбор тестовых случаев

Исчерпывающее тестирование, другими словами, прогон каждого возможного тестового случая, покрывающего каждое сочетание значений - это, вне всяких сомнений, надежный подход к тестированию. Однако во многих ситуациях количество тестовых случаев достигает таких больших значений, что обычными методами с ними справиться попросту невозможно. Если имеется принципиальная возможность построения такого большого количества тестовых случаев, на построение и выполнение которых не хватит никакого времени, должен быть разработан систематический метод определения, какими из тестовых случаев следует воспользоваться. Если есть выбор, то мы отдаем предпочтение таким тестовым случаям, которые позволяют найти ошибки, в обнаружении которых мы заинтересованы больше всего.

Существуют различные способы определения, какое подмножество из множества всех возможных тестовых случаев следует выбирать. При любом подходе мы заинтересованы в том, чтобы систематически повышать уровень покрытия.

Подробное описание тестового случая

Продемонстрируем тестирование взаимодействий на примере класса TCommandQueue. Из табл. 3.2, которая была составлена на основе спецификаций классов, описанных в приложении 2, видно, что класс очереди команд взаимодействует со следующими классами:

TBearingParam,
TAxleParam,
TCommand,
TStore,
TterminalBearing.

С объектом TCommand осуществляется взаимодействие третьего типа, т. е. TCommandQueue создает объекты класса TCommand как часть своей внутренней реализации. С остальными классами осуществляется взаимодействие первого типа: ссылки на объекты классов TStore и TTerminalBearing передаются как параметры в конструктор TCommandQueue, а ссылки на объекты классов TBearingParam и TAxleParam передаются в метод TCommandQueue.AddCommand.

Одновременно с изучением этого раздела можно открыть проект IntegrationTesting\IntegrationTests.sln.

Для тестирования взаимодействия класса TCommandQueue и класса TСommand, так же, как и при модульном теcтировании, разработаем спецификацию тестового случая:

Таблица 3.3. Спецификация тестового случая
Названия взаимодействующих классов: TСommandQueue, TCommand Название теста: TCommandQueueTest1

Описание теста: тест проверяет возможность создания объекта типа TCommand и добавления его в очередь при вызове метода AddCommand

Начальные условия: очередь команд пуста

Ожидаемый результат: в очередь будет добавлена одна команда

На основе этой спецификации был разработан тестовый драйвер - класс TCommandQueueTester, который наследуется от класса Tester. Этот класс содержит:

  • Метод Init, в котором создаются объекты классов TStore, TterminalBearing и объект типа TcommandQueue. Этот метод необходимо вызывать в начале каждого теста, чтобы тестируемые объекты создавались вновь:
    private void Init()
    {
    TB = new TTerminalBearing();
    S = new TStore();
    CommandQueue=new TCommandQueue(S,TB);
    S.CommandQueue=CommandQueue;
    }
    Пример 3.1. Метод Init
  • Методы, реализующие тесты. Каждый тест реализован в отдельном методе.
  • Метод Run, в котором вызываются методы тестов.
  • Метод dump, который сохраняет в log-файле теста информацию обо всех командах, находящихся в очереди в формате - номер позиции в очереди: полное название команды.
  • Точку входа в программу - метод Main, в котором происходит создание экземпляра класса TCommandQueueTester и запуск метода Run.

Сначала создадим тест, который проверяет, создается ли объект типа TСommand, и добавляется ли команда в конец очереди.

private void TCommandQueueTest1()
{
Init();
LogMessage("///////// TCommandQueue Test1 /////////////");
LogMessage("Проверяем, создается ли объект типа TCommand");
// В очереди нет команд
dump();
// Добавляем команду
// параметр = -1 означает, что команда должна быть добавлена
//в конец очереди
CommandQueue.AddCommand(TCommand.GetR,0,0,0,new
TBearingParam(),new TAxleParam(),-1);
LogMessage("Command added");
// В очереди одна команда
dump();
}
Пример 3.2. Тест, проверяющий создание объекта типа TСommand

В этот класс включены еще два разработанных теста.

Описание тестовых процедур

Как запустить тест?

Для выполнения этого теста в методе Run необходимо вызвать метод TCommandQuеueTest1() и запустить программу на выполнение:

private void Run()
{
  TCommandQueueTest1();
}
Пример 3.3. Метод Run

Проверка результатов выполнения тестов (сравнение с ожидаемым результатом)

После завершения теста следует просмотреть текстовый журнал теста ( ..\IntegrationTesting\bin\Debug\test.log ), чтобы сравнить полученные результаты с ожидаемыми результатами, заданными в спецификации тестового случая TCommandQueueTest1.

//////////////////// TCommandQueue Test1 //////////////////
Проверяем, создается ли объект типа TCommand
0 commands in command queue
Command added
1 commands in command queue
0 : ПОЛУЧИТЬ ИЗ ВХОДНОЙ ЯЧЕЙКИ
Пример 3.4. Журнал теста

Задание 2

Для тестирования взаимодействия остальных непримитивных классов (табл. 2.1) по аналогии с приведенным примером требуется самостоятельно разработать спецификации тестовых случаев, соответствующие тесты, провести тестирование и составить тестовые отчеты (табл. 2.2).

Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Сергей Чурбанов
Сергей Чурбанов
Валерий Слиж
Валерий Слиж
Беларусь
Андрей Морозов
Андрей Морозов
Россия, Минск