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

Ручное тестирование

Наиболее распространенным способом разработки тестов является создание тестового кода вручную. Такой способ создания тестов является наиболее гибким, однако производительность тестировщиков при создании тестового кода соизмерима с производительностью разработчиков при создании кода продукта, а объемы тестового кода часто бывают в 1-10 раз больше объема самого продукта.

В этом случае запуск тестов осуществляется вручную. Проверку, прошла ли тестируемая система испытания на заданном тестовом случае, тестировщик также осуществляет вручную, сравнивая фактические результаты журнала теста c ожидаемыми результатами, описанными в спецификации тестового случая.

Функции dll-библиотеки обеспечивают обращение к серверу для получения информации о состоянии элементов комплекса и возвращают серверу информацию о функционировании системы. Значит, для моделирования состояния окружения ( входных данных ) необходимо создать специальный сервер.

Кроме того, необходимо сохранять получаемую от сервера информацию о функционировании системы ( выходные данные ) в журнале (рис. 5.1).

Система и ее окружение (ручное тестирование)

Рис. 5.1. Система и ее окружение (ручное тестирование)

При разработке тестов был использован следующий подход:

  • состояние окружения задается в тесте (входные данные);
  • в тесте создается сервер:
    • сервер по запросу от dll передает информацию о заданном состоянии окружения;
    • сервер получает от dll информацию о функционировании системы;
  • получаемая информация сохраняется в журнале теста.

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

Ознакомление с настоящим пунктом полезно предварить изучением п. 7, содержащего описание ручного тестирования. Здесь рассматривается та часть теста на C#, которую вам придется написать самостоятельно при выполнении заданий. Приведенный пример был разработан в соответствии со спецификацией тестового случая N1. Для простоты будем считать, что события происходят последовательно в строго заданном порядке. Реально наша система представляет собой многопоточное приложение, поэтому мы не можем это гарантировать.

class Test1:Test {
override public void start()
{//Задаем состояние окружения (входные данные)
StoreStat="32"; //Поступил подшипник
RollerPar="0 NewUser Depot1 123456 1 12 1 1";
//статус обмена с терминалом подшипника (0 - есть подшипник)
//и его параметры
AxlePar="1 NewUser Depot1 123456 1 0 12 12";
//статус обмена с терминалом оси (1 - нет оси) и ее параметры
CommandStatus="0"; //команда успешно принята
StoreMessage="1"; //успешно выполнена
//Получаем информацию о функционировании системы
wait("GetStoreStat"); //опрос статуса склада
wait("GetRollerPar");
//Получение информации о подшипнике с терминала подшипника
wait("GetAxlePar");
//Получение информации об оси с терминала оси
wait("SendStoreCom");
//добавление в очередь команд склада на первое место
//команды GetR (получить из приемника в ячейку)
wait("GetStoreMessage");
//Получение сообщения от склада о результатах выполнения команды
//В результате первый подшипник должен быть принят
wait("GetStoreStat"); //опрос статуса склада
wait("GetRollerPar");
//Получение информации о подшипнике с терминала подшипника
wait("GetAxlePar");
//Получение информации об оси с терминала оси
wait("SendStoreCom");
//добавление в очередь команд склада на первое место
//команды GetR (получить из приемника в ячейку)
wait("GetStoreMessage");
//Получение сообщения от склада о результатах выполнения
//команды. В результате второй подшипник должен быть принят
//Задаем новое состояние окружения (входные данные)
RollerPar="1 NewUser Depot1 123456 1 12 1 1";
//статус обмена с терминалом подшипника (1 - нет подшипника)
//и его параметры
AxlePar="0 NewUser Depot1 123456 1 0 12 12";
//статус обмена с терминалом оси (0 - есть ось) и ее параметры
//Получаем информацию о функционировании системы
wait("GetStoreStat"); //опрос статуса склада
wait("GetRollerPar");
//Получение информации о подшипнике с терминала подшипника
wait("GetAxlePar");
//Получение информации об оси с терминала оси
wait("SendStoreCom");//Добавление в очередь команд склада на
последнее место //команды SendR (ячейку на выход)
wait("GetStoreMessage");
//Получение сообщения от склада о результатах выполнения
//команды
//В результате первый подшипник для оси должен быть выдан
wait("SendStoreCom");
//Добавление в очередь команд склада на последнее место
//команды SendR (ячейку на выход)
wait("GetStoreMessage");
//Получение сообщения от склада о результатах выполнения
//команды.
//В результате второй подшипник для оси должен быть выдан
wait("SendStoreCom");
//Добавление в очередь команд склада на последнее место
//команды Term (завершение команд выдачи)
wait("GetStoreMessage");
//Получение сообщения от склада о результатах выполнения
//команды
finish();
}
}
Пример 5.1. Пример фрагмента теста (вариант 1)

При разработке тестов не обязательно дожидаться каждого события, которое должно происходить в соответствии со случаем использования. Достаточно вызвать wait для событий, после наступления которых надо менять состояние окружения. В период ожидания наступления события, заданного в wait, может происходить любое количество других событий. Все эти события будут занесены в журнал. При необходимости ждать не первого, а n-го вызова можно вызывать wait с одним и тем же параметром n раз (например, в цикле). При таком подходе тест будет гораздо короче, например приведенный выше тест будет выглядеть следующим образом:

class Test1:Test
{
override public void start()
{
StoreStat="32";//Пришел подшипник
RollerPar="0 NewUser Depot1 123456 1 12 1 1";//его параметры
AxlePar="1 NewUser Depot1 123456 1 0 12 12";//нет оси
CommandStatus="0";//команда успешно принята
StoreMessage="1";//команда успешно выполнена
wait("SendStoreCom");//первый подшипник принят
wait("SendStoreCom");//второй подшипник принят
RollerPar="1 NewUser Depot1 123456 1 12 1 1";
//больше нет подшипников
AxlePar="0 NewUser Depot1 123456 1 0 12 12";//есть ось
wait("SendStoreCom");//выдача подшипника
wait("SendStoreCom");//выдача подшипника
wait("SendStoreCom");//завершение выдачи
finish();}
}
Пример 5.2. Пример фрагмента теста (вариант 2)
Федор Антонов
Федор Антонов
Оплата и обучение
Сергей Чурбанов
Сергей Чурбанов
Какие подходы используются для обоснования истинности программ?
Марина Дайнеко
Марина Дайнеко
Россия, Moscow, Nope, 2008
Сергей Пантелеев
Сергей Пантелеев
Россия, Москва