Библиографическое описание:

Селуков Д. А., Полевщиков И. С. Автоматизация процесса тестирования программного обеспечения при использовании тестирования условий // Молодой ученый. — 2015. — №23. — С. 63-67.

 

Тестирование программного обеспечения (ПО) представляет собой как один из этапов жизненного цикла разработки ПО, так и важнейшую составляющую обеспечения качества ПО [1, 2]. Актуальной задачей является поиск подходов к автоматизации процесса тестирования ПО с целью повышения производительности труда за счет снижения временных затрат на выполнение рутинных операций.

Целью семейства способов тестирования условий [1, 3] как одного из подходов к тестированию ПО, основанных на принципах «белого ящика», является построение тестовых вариантов для проверки логических условий программы.

Рассмотрим пример программы, написанной на языке C#. Протестируем эту программу с использованием способа тестирования ветвей и операций отношений (как разновидности тестирования условий) и приведем подход к автоматизации процесса тестирования. Листингпрограммы:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Program3

{

publicclassClass1

    {

publicint a;

publicint b;

publicint c;

public Class1(int a, int b)

        {

if ((a > -55) && (b <= 62)) // УсловиеС1

               { c = a + b; }

else

if (a > -55) // УсловиеС2

                  { c = a - b; }

else

                  { c = a * b; }

        }

    }

}

Строим ограничение длякаждого условия. Для составного условия : . Для простого условия : .

Выявляем ограничения результата по каждому простому условию. Ограничения на результат простых условий: ; ; .

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

.

Следовательно:

.

.

Для каждого элемента разрабатывается тестовый вариант. Для создания тестовых вариантов последовательно просматриваем созданные множества.

Тестовые варианты для элементов множества :

Тестовый вариант ТВ1:

ИД (исходные данные): Пользователь ввел значения и . Например, и .

ОЖ.РЕЗ. (ожидаемые результаты): вычисляется как произведение и . В рассматриваемом примере .

Тестовый вариант ТВ2:

ИД: Пользователь ввел значения и . Например, .

ОЖ.РЕЗ.: вычисляется как произведение и . В рассматриваемом примере .

Тестовый вариант ТВ3:

ИД: Пользователь ввел значения и . Например, .

ОЖ.РЕЗ.: вычисляется как произведение и . В рассматриваемом примере .

Тестовый вариант ТВ4:

ИД: Пользователь ввел значения и .

ОЖ.РЕЗ.: вычисляется как произведение и . Т.е., .

Тестовый вариант ТВ5:

ИД: Пользователь ввел значения и . Например, и .

ОЖ.РЕЗ.: вычисляется как разность и . В рассматриваемом примере .

Тестовый вариант ТВ6:

ИД: Пользователь ввел значения и . Например, и .

ОЖ.РЕЗ.: вычисляется как сумма и . В рассматриваемом примере .

Тестовый вариант ТВ7:

ИД: Пользователь ввел значения и . Например, .

ОЖ.РЕЗ.: вычисляется как сумма и . В рассматриваемом примере .

Тестовые варианты для элементов множества :

Тестовый вариант ТВ8:

ИД: Пользователь ввел значение .

ОЖ.РЕЗ.: вычисляется как произведение и .

Примечание: Данный тестовый вариант поглощается ТВ3 при и ТВ4 при . Самостоятельное значение имеет при . Например, при будет получено значение .

Тестовый вариант ТВ9:

ИД: Пользователь ввел значение .

ОЖ.РЕЗ.: вычисляется как произведение и .

Примечание: Данный тестовый вариант поглощается ТВ1 при и ТВ2 при . Самостоятельное значение имеет при . Например, при и будет получено значение .

Тестовый вариант ТВ10:

ИД: Пользователь ввел значение .

ОЖ.РЕЗ.: вычисляется либо как сумма и (при ), либо как разность и (при ).

Примечание: Данный тестовый вариант поглощается ТВ5 при , ТВ6 при и ТВ7 при . Следовательно, для данного тестового варианта не требуется сравнивать реальные и ожидаемые результаты.

Дальнейший шаг процесса тестирования, а именно сравнение реальных и ожидаемых результатов работы программы можно автоматизировать. Для этого были использованы возможности для написания тестовых вариантов на языке C#, предоставляемые средой программирования MS Visual Studio [4, 5].

Фрагмент кода тестовых вариантов для рассматриваемой задачи с комментариями (пропущенные части кода отмечены многоточием):

using System; // Подключается автоматически при создании тестового проекта

using Microsoft.VisualStudio.TestTools.UnitTesting; // Подключается автоматически при создании тестового проекта

using Program3; // Подключаем сами, для связки с программой, которую будем тестировать

namespace Testforpr3 // Пространство имен проекта

{

[TestClass] // Главныйтестовыйкласс

publicclassUnitTest1

{

        [TestMethod] // Начало описания тестового метода

publicvoid TestMethod1()// Метод, соответствующий ТВ1

        {

Class1 cl = newClass1(-60, 40); // Создаем переменную типа Class1, который находится в тестируемой программе, и подаем на вход 2 числа

            cl.c = cl.a * cl.b; // При данных числах на входе программа должна вычислить произведение этих чисел. Прописываем это действие, используя глобальные переменные, объявленные в классе основной программы

Assert.AreEqual(cl.c, cl.c); // Сравниваем со значением переменной с, которое выдала программа (первый параметр - это то число, которое должно получиться, а второй - это то, что записала программа в данную переменную). Если значения совпадают, то возвращается true

        }

        [TestMethod] // Объявляем о создании следующего тестового метода

publicvoidTestMethod2()// Метод, соответствующий ТВ2

{

Class1 cl = newClass1(-70, 62);

            cl.c = cl.a * cl.b;

Assert.AreEqual(cl.c, cl.c);

}

        …  // Методы, соответствующие ТВ3 и ТВ4

        [TestMethod]

publicvoidTestMethod5()// Метод, соответствующий ТВ5

{

Class1 cl = newClass1(-50, 70);

            cl.c = cl.a - cl.b;

Assert.AreEqual(cl.c, cl.c);

        }

        [TestMethod]

publicvoid TestMethod6()// Метод, соответствующийТВ6

        {

Class1 cl = newClass1(10, 20);

            cl.c = cl.a + cl.b;

Assert.AreEqual(cl.c, cl.c);

}

        …  // Методы, соответствующие ТВ7, ТВ8 и ТВ9

    }

}

Результатами данных тестов будет служить сообщение об успешном либо неуспешном выполнении теста. Для рассматриваемой задачи вывод результатов тестирования программы представлен на рис. 1.

Рис. 1. Результаты тестирования программы

 

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

 

Литература:

 

  1.      Орлов С.А., Цилькер Б.Я. Технологии разработки программного обеспечения: Учебник для вузов. 4-е изд. Стандарт третьего поколения. СПб.: Питер, 2012. 608 с.
  2.      Темичев А.А., Файзрахманов Р.А.. Подбор параметров нагрузочного тестирования систем мониторинга с использованием нечеткой логики // Инженерный вестник Дона. 2015. №3. URL: ivdon.ru/ru/magazine/archive/n3y2015/3153.
  3.      Полевщиков И.С. Особенности изучения способа тестирования ветвей и операций отношений студентами бакалавриата в рамках дисциплины «Тестирование программного обеспечения» // Молодой ученый. 2015. №18(98). С. 15-18. 
  4.      Unit тесты на практике. URL: habrahabr.ru/post/191986/ (Дата обращения: 24.11.2015).
  5.      Юнит тестирование в C# на примере Visual Studio 2008. testerway.blogspot.ru/2009/07/c-visual-studio-2008-unit-test-in-c.html (Дата обращения: 24.11.2015).

Обсуждение

Социальные комментарии Cackle