• Главная
  • Карта сайта
Не найдено

Главная Новости

ЛР №2 Три фазы тестирования

Опубликовано: 05.09.2018

Реализация тестирования разделяется на три этапа:

Создание тестового набора (test suite) путем ручной разработки или автоматической генерации для конкретной среды тестирования (testing environment). Прогон программы на тестах, управляемый тестовым монитором (test monitor, test driver [IEEE Std 829-1983]) с получением протокола результатов тестирования (test log). Оценка результатов выполнения программы на наборе тестов с целью принятия решения о продолжении или остановке тестирования.

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


Как проверить батарейку

Рассмотрим вопросы тестирования на примере простой программы (листинг 2.6.1) на языке С#. Текст этой программы и некоторых других несколько видоизменен с целью сделать иллюстрацию описываемых фактов более прозрачной.

Листинг 2.6.1. Пример простой программы на языке С

/* Функция вычисляет неотрицательную степень n числа x */ double Power(double x, int n){ double z=1; int i; for (i=1; n>=i; i++) {z = z * x;} return z; }

Рис. 2.2. Управляющий граф программы 2.6.1

Управляющий граф программы (УГП) на Рис. 2.2 отображает поток управления программы из листинга 2.6.1

Управляющий граф программы (УГП)– граф G(V,A), где V(V1,… Vm) – множество вершин (операторов), A(A1,… An) – множество дуг (управлений), соединяющих операторы-вершины.

Путь– последовательность вершин и дуг УГП, в которой любая дуга выходит из вершины Vi и приходит в вершину Vj , например: (3,4,7), (3,4,5,6,4,5,6), (3,4), (3,4,5,6)

Ветвь– путь(V1, V2, … Vk), где V1 — либо первый, либо условный оператор программы, Vk — либо условный оператор, либо оператор выхода из программы, а все остальные операторы – безусловные, например: (3,4) (4,5,6,4) (4,7). Пути, различающиеся хотя бы числом прохождений цикла – разные пути, поэтому число путей в программе может быть не ограничено. Ветви — линейные участки программы, их конечноe число.

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

Листинг 2.7.1. Пример описания функции с реализуемыми и нереализуемыми путями

float H(float x,float y) { float H; 1 if (x*x+y*y+2<=0) 2 H = 17; 3 else H = 64; 4 return H*H+x*x; }

Например, для функции Пример 2.7 путь(1,3,4) реализуем, путь(1,2,4) нереализуем в условиях нормальной работы. Но при сбоях даже нереализуемый путь может реализоваться.

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

Это означает, что компьютеру, работающему на частоте 1Ггц, для прогона этого набора тестов (при условии, что один тест выполняется за 100 команд) потребуется ~ 3K лет.

Этот тривиальный пример требует прогона бесконечного множества последовательностей входных значений с разными интервалами срабатывания схвата (Пример 2.8).

// Прочитать значения датчика static public bool ReadSensor(bool Sensor) { //...чтение значения датчика Console.WriteLine("...reading sensor value"); return Sensor; } // Открыть схват static public void OpenHand() { //...открываем схват Console.WriteLine("...opening hand"); } // Закрыть схват static public void CloseHand() { //...закрываем схват Console.WriteLine("...closing hand"); } [STAThread] static void Main(string[] args) { while (true) { Console.WriteLine("Enter Sensor value (true/false)"); if (ReadSensor(Convert.ToBoolean(Console.ReadLine()))) { OpenHand(); CloseHand(); } } }

Пример 2.8. Фрагмент программы срабатывания схвата

#include <stdio.h> /* Прочитать значения датчика */ int ReadSensor(int Sensor) { /* ...чтение значения датчика */ printf("...reading sensor value\n"); return Sensor; } /* Открыть схват */ void OpenHand() { /* ...открываем схват */ printf("...opening hand\n"); } /* Закрыть схват */ void CloseHand() { /* ...закрываем схват */ printf("...closing hand\n"); } void main(void) { int s; while (1) { printf("Enter Sensor value (0/1)"); scanf("%d",&s); if (ReadSensor(s)) { OpenHand(); CloseHand(); } } }

Пример 2.8.1. Фрагмент программы срабатывания схвата

Рис. 2.3. Тестовая последовательность сигналов датчика схвата

Отсюда вывод:

Тестирование программы на всех входных значениях невозможно. Невозможно тестирование и на всех путях.

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

Требование к тестам — программа на любом из них должна останавливаться, т.е. не зацикливаться. Можно ли заранее гарантировать останов на любом тесте?

В теории алгоритмов доказано, что не существует общего метода для решения этого вопроса, а также вопроса, достигнет ли программа на данном тесте заранее фиксированного оператора.

Задача о выборе конечного набора тестов(X,Y) для проверки программы в общем случае неразрешима.

Поэтому для решения практических задач остается искать частные случаи решения этой задачи.

Постоянный адрес этой страницы:

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью

rss