Практическая работа № 2.6. Модульное тестирование
Цель работы: изучить возможность создания автоматических тестов, для модульного
тестирования.
13
Сегодня тестирование – это обязательная часть процесса разработки программного
обеспечения (далее – ПО). Это связано с жесткими правилами конкуренции для компаний,
производящих программные продукты (ПП).
Раньше таких компаний на рынке было мало и пользователи программных продуктов
были продвинутыми и заменяли тестеров. Если в программе обнаруживались баги, то
пользователь звонил или отправлял письмо в компанию, где ошибку исправляли и по почте
отправляли дискетку со свежим релизом. Но начиная с 1990 года согласно статистики продажи
персональных компьютеров с каждым годом удваивались. И появилась армия пользователей,
которая не готова была что-то тестировать. Если что-то не устроило было проще обменять на
другой софт, т.к. число компаний производящих ПО тоже увеличивалось с каждых готом. И у
пользователей появился выбор что покупать и чем пользоваться.
Таким образом, тестирование ушло внутрь компаний, и появилась профессия
тестировщика.
Рассмотрим определение, которое записано в SWEBOK.
Тестирование ПО – это проверка соответствия между реальным поведением программы
и ее ожидаемым поведением на конечном наборе тестов, выбранном определенным образом.
[IEEE Guide to Software Engineering Body of Knowledge, SWEBOK, 2004].
Все виды тестирования можно условно разделить на две большие группы:
Статическое тестирование (static testing).
Динамическое тестирование (dynamic testing).
Статическое тестирование – это процесс анализа самой разработки программного
обеспечения, т. е. тестирование без запуска программы.
К данной группе можно отнести анализ кода. Данный вид тестирования осуществляется
в основном программистами. Проводят тестирование артефактов разработки программного
обеспечения, таких как требования, дизайн или программный код, проводимое без исполнения
этих артефактов. Например, с помощью рецензирования или статического анализа.
Статический анализ кода (static code analysis) – это анализ исходного кода,
производимый без его исполнения.
Динамическое тестирование – это тестовая деятельность, предусматривающая
эксплуатацию (запуск) программного продукта.
Динамическое тестирование предполагает запуск программы, выполнение всех еe
функциональных модулей и сравнение фактического ее поведения с ожидаемым.
Статическое тестирование позволяет обнаружить дефекты, которые являются
результатом ошибки и привести к сбоям в программном обеспечении. Динамическое
тестирование позволяет продемонстрировать непосредственно сбои в программном
обеспечении.
Существует несколько признаков, по которым принято производить классификацию
видов тестирования.
По знанию системы выделяют:
тестирование «черного ящика» (black box testing);
тестирование «белого ящика» (white box testing);
тестирование «серого ящика» (grey box testing).
Модульное тестирование, или юнит-тестирование (англ. unit testing) — процесс в
программировании, позволяющий проверить на корректность отдельные модули исходного
кода программы.
Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода.
Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к
регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также
облегчает обнаружение и устранение таких ошибок.
Цель модульного тестирования — изолировать отдельные части программы и показать,
что по отдельности эти части работоспособны.
Задание 1. Создание проекта программы, модули которого будут тестироваться.
14
Разработаем проект содержащий класс, который вычисляет площадь прямоугольника по
длине двух его сторон.
Создадим в Visual Studio новый проект Visual C# -> Библиотека классов. Назовём
его MathTaskClassLibrary.
Class1 переименуем в Geometry.
В классе реализуем метод, вычисляющий площадь прямоугольника. Для демонстрации
остановимся на работе с целыми числами. Код программы приведён ниже.
Рисунок 2
Создание проекта для модульного тестирования в Visual Studio.
Чтобы выполнить unit-тестирование, необходимо в рамках того же самого решения
создать ещё один проект соответствующего типа.
Правой кнопкой щёлкните по решению, выберите “Добавить” и затем “Создать
проект…”.
Рисунок 3
В открывшемся окне в группе Visual C# щёлкните “Тест”, а затем выберите “Проект
модульного теста”. Введите имя проекта MathTaskClassLibraryTests и нажмите “ОК”. Таким
образом проект будет создан.
Рисунок 4
15
Перед Вами появится следующий код:
Рисунок 5
Директива [TestMethod] обозначает, что далее идёт метод, содержащий модульный (unit)
тест. А [TestClass] в свою очередь говорит о том, что далее идёт класс, содержащий методы, в
которых присутствуют unit-тесты.
В соответствии с принятыми соглашениями переименуем класс UnitTest1
в GeometryTests.
Затем в References проекта необходимо добавить ссылку на проект, код которого будем
тестировать. Правой кнопкой щёлкаем на References, а затем выбираем “Добавить ссылку…”.
В появившемся окне раскрываем группу “Решение”, выбираем “Проекты” и ставим
галочку напротив проекта MathTaskClassLibrary. Затем жмём “ОК”.
Рисунок 6
Также в коде необходимо подключить с помощью директивы using следующее
пространство имён: using MathTaskClassLibrary;
Займёмся написание теста. Проверим правильно ли вычисляет программа площадь
прямоугольника со сторонами 3 и 5. Ожидаемый результат (правильное решение) в данном
случае это число 15.
Переименуем метод TestMethod1() в RectangleArea_3and5_15returned(). Новое название
метода поясняет, что будет проверяться (RectangleArea – площадь прямоугольника) для каких
значений (3 и 5) и что ожидается в качестве правильного результата (15 returned).
Тестирующий метод обычно содержит три необходимых компонента:
1.
исходные данные: входные значения и ожидаемый результат;
2.
код, вычисляющий значение с помощью тестируемого метода;
3.
код, сравнивающий ожидаемый результат с полученным.
Соответственно тестирующий код будет таким:
16
Рисунок 7
Для
сравнения
ожидаемого
результата
с
полученным
используется
метод AreEqual класса Assert. Данный класс всегда используется при написании unit тестов в
Visual Studio.
Теперь, чтобы просмотреть все тесты, доступные для выполнения, необходимо открыть
окно “Обозреватель тестов”. Для этого в меню Visual Studio щёлкните на кнопку “ТЕСТ”,
выберите “Окна”, а затем нажмите на пункт “Обозреватель тестов”.
Рисунок 8
В студии появится следующее окно:
Рисунок 9
В данный момент список тестов пуст, поскольку решение ещё ни разу не было собрано.
Выполним сборку нажатием клавиш Ctrl + Shift + B. После её завершения в “Обозревателе
тестов” появится наш тест.
17
Рисунок 10
Синяя табличка с восклицательным знаком означает, что указанный тест никогда не
выполнялся. Выполним его.
Для этого нажмём правой кнопкой мыши на его имени и выберем “Выполнить
выбранные тесты”.
Рисунок 11
Зелёный кружок с галочкой означает, что модульный тест успешно пройден: ожидаемый
и полученный результаты равны.
Изменим код метода RectangleArea, вычисляющего площадь прямоугольника, чтобы
сымитировать провал теста и посмотреть, как поведёт себя Visual Studio. Прибавим к
возвращаемому значению 10.
Запустим unit-тест.
18
Рисунок 12
Как Вы видите, красный круг с крестиком показывает провал модульного теста, а ниже
указано, что при проверке ожидалось значение 15, а по факту оно равно 25.
Задание 2. Разработать программу для подсчета объема цилиндра и создать модульный
тест.
Достарыңызбен бөлісу: |