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

Разновидности тестирования: системное и регрессионное тестирование

< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Аннотация: Рассматриваются задачи и категории тестов, применяемые в системном тестировании. Приводится пример системного тестирования. Обсуждается регрессионное тестирование и комбинирование различных уровней тестирования.

Системное тестирование

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

Системное тестирование производится над проектом в целом с помощью метода "черного ящика". Структура программы не имеет никакого значения, для проверки доступны только входы и выходы, видимые пользователю. Тестированию подлежат коды и пользовательская документация.

Категории тестов системного тестирования:

  1. Полнота решения функциональных задач.
  2. Стрессовое тестирование - на предельных объемах нагрузки входного потока.
  3. Корректность использования ресурсов (утечка памяти, возврат ресурсов).
  4. Оценка производительности.
  5. Эффективность защиты от искажения данных и некорректных действий.
  6. Проверка инсталляции и конфигурации на разных платформах.
  7. Корректность документации

Поскольку системное тестирование проводится на пользовательских интерфейсах, создается иллюзия того, что построение специальной системы автоматизации тестирования не всегда необходимо. Однако объемы данных на этом уровне таковы, что обычно более эффективным подходом является полная или частичная автоматизация тестирования, что приводит к созданию тестовой системы гораздо более сложной, чем система тестирования, применяемая на уровне тестирования модулей или их комбинаций.

Пример системного тестирования приложения "Поступление подшипника на склад"

В спецификации тестового случая задано состояние окружения (входные данные) и ожидаемая последовательность событий в системе (ожидаемый результат). После прогона тестового случая мы получаем реальную последовательность событий в системе ( пример 7.1, пример 7.3) при заданном состоянии окружения. Сравнивая фактический результат с ожидаемым, можно сделать вывод о том, прошла или не прошла тестируемая система испытание на заданном тестовом случае. В качестве ожидаемого результата будем использовать спецификацию тестового случая, поскольку она определяет, как, для заданного состояния окружения, система должна функционировать.

Краткое описание тестируемой системы 'Поступление подшипника на склад'

Рис. 4-15. Краткое описание тестируемой системы 'Поступление подшипника на склад'

Спецификация тестового случая №1:

Состояние окружения (входные данные - X ):

Статус склада - 32. Пришел подшипник.

Статус обмена с терминалом подшипника (0 - есть подшипник) и его параметры - "Статус=0 Диаметр=12".

Статус обмена с терминалом оси (1 - нет оси) и ее параметры - "Статус=1 Диаметр=12".

"Статус=1 Диаметр=12".

Статус команды - 0. Команда успешно принята.

Сообщение от склада - 1. Команда успешно выполнена.

Ожидаемая последовательность событий (выходные данные – Y):

Система запрашивает статус склада (вызов функции GetStoreStat ) и получает 32

Система запрашивает параметры подшипника (вызов функции GetRollerPar ) и получает Статус = 0 Диаметр=12

Система запрашивает параметры оси (вызов функции GetAxlePar ) и получает Статус = 1 Диаметр=0

Система добавляет в очередь команд склада на последнее место команду SendR (получить из приемника в ячейку) (вызов функции SendStoreCom ) и получает сообщение о том, что команда успешно принята – статус = 0

Система запрашивает склад о результатах выполнения команды (вызов функции GetStoreMessage ) и получает сообщение о том, что команда успешно выполнена - статус = 1

Выходные данные (результаты выполнения Yв) – зафиксированы в журнале теста ( пример 7.1)

ВЫЗОВ: GetStoreStat                          
РЕЗУЛЬТАТ: 32
ВЫЗОВ: GetRollerPar
РЕЗУЛЬТАТ: Статус = 0 Диаметр = 12
ВЫЗОВ: GetAxlePar
РЕЗУЛЬТАТ: Статус = 1 Диаметр = 0
ВЫЗОВ: SendStoreCom 
РЕЗУЛЬТАТ: 0
ВЫЗОВ: GetStoreMessage
РЕЗУЛЬТАТ: 1
7.1. Журнал теста

Приведенный на примере 7.2 тест был разработан в соответствии со спецификацией тестового случая №1. Детальная спецификация приведена в FS (Практикум, Приложение 1), результаты прогона показаны на примере 7.3.

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");
  // Получение сообщения от склада о 
  // результатах выполнения команды
  // В результате первый подшипник 
  // должен быть принят
}
      }
7.2. Тест для системного тестирования
class Test1 : public Test {
public:
  void start() {  
    // Задаем состояние окружения 
	// (входные данные)
    // Поступил подшипник
    strcpy(StoreStat,"32");
    // статус обмена с терминалом подшипника
	// (0 - есть подшипник) и его параметры
    strcpy(RollerPar, "0 NewUser Depot1 123456 1 12 1 1");
    // статус обмена с терминалом оси 
	// (1 - нет оси) и ее параметры 
    strcpy(AxlePar, "1 NewUser Depot1 123456 1 0 12 12");
    strcpy(CommandStatus,"0"); 
	//команда успешно принята
    strcpy(StoreMessage,"1"); 
	//успешно выполнена

    // Получаем информацию о 
	// функционировании системы
    wait("GetStoreStat"); 
	//опрос статуса склада
    wait("GetRollerPar");
    // Получение информации о подшипнике
	// с терминала подшипника
    wait("GetAxlePar");
    // Получение информации об оси 
	// с терминала оси
    wait("SendStoreCom"); 
	// добавление в очередь команд склада
	// на первое место команды GetR 
	// (получить из приемника в ячейку)
    wait("GetStoreMessage");
    // Получение сообщения от склада о 
	// результатах выполнения команды
    // В результате первый подшипник 
	// должен быть принят
  }
}
7.2.1. Тест для системного тестирования (C++)

После завершения теста следует просмотреть текстовый журнал теста, чтобы выяснить, какая последовательность событий в системе была реально зафиксирована (выходные данные) и сравнить их с ожидаемыми результатами, заданными в спецификации тестового случая1. Пример журнала теста ( пример 7.1):

Test started
CALL:GetStoreStat 0
RETURN:32
CALL:GetRollerPar
RETURN:0 NewUser Depot1 123456 1 12 1 1
CALL:GetAxlePar
RETURN:1 NewUser Depot1 123456 1 0 12 12
CALL:SendStoreCom 1 0 0 1 0 0 0
RETURN:0
CALL:GetStoreMessage
RETURN:1
7.3. Тестовый журнал для случая прогона системного теста
< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Федор Антонов
Федор Антонов

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

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

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

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

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