Unit-тестирование
Модульное тестирование или юнит-тестирование (англ. unit testing) — процесс, позволяющий проверить корректность отдельных модулей исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже написанных и оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
Хорошие юнит тесты:
● Автоматизированы
● Выполняются быстро: выполнение сотни или даже тысячи юнит-тестов должно занимать считанные секунды
● Написаны в рамках эффективного фреймворка
● Независимыми друг от друга
● Результат работы теста воспроизводим и повторяем
● Легко поддаются отладке
● Написаны автором кода
● Оставляют конфигурацию / окружение в неизменном состоянии
● Имеют высокое покрытие кода
● Поддаются хранению и сопровождению
● Тестируют как функциональность, так и аварийные ситуации
● Покрывают граничные значения входных параметров.
Эти тесты имеют и некоторые ограничения:
● Юнит-тестирование не находит все ошибки в коде: оно показывает только наличие ошибок, а не их отсутствие
● У юнит-тестирования ограниченные рамки: это тестирование «белого ящика»
● Юнит-тестирование не покрывает сценарии и интеграцию между компонентами
Одной из наиболее важных техник, которые позволяют создать хорошие юнит-тесты, является техника использование mock- объектов (mock objects). Mock-объект - это симуляция реального объекта там, где использование самого объекта невозможно или нарушает принципы юнит- тестирования, например когда реальный объект:
● предоставляет недетерминированные результаты (например текущее время или температуру)
● имеет трудно воспроизводимые состояния (например ошибка сети)
● медленный (например полная база данных или файл на диске)
● ещё не существует или может изменить поведение
● должен содержать информацию или методы, необходимые только для тестирования
Для большинства популярных языков программирования высокого уровня существуют инструменты и библиотеки модульного тестирования. Некоторые из них:
Для Java
● JUnit JUnit.org
● TestNG testNG.org
● JavaTESK UniTESK.ru
NUnit [1] — для языков платформы.NET: C#, Visual Basic.NET и др.
Для C
● CUnit cunit
● CTESK UniTESK.ru
● cfix cfix
● API Sanity Autotest — для динамических C/C++ библиотек в Unix-подобных ОС.
● Для Objective-C
● OCUnit [2]
Для C++
● CPPUnit [3]
● Boost Test [4]
● Google C++ Testing Framework [5]
● Symbian[6] — фреймворк для Symbian OS всех версий.
● API Sanity Autotest — для динамических C/C++ библиотек в Unix-подобных ОС.
Для PHP
● SimpleTest [12]
● PHPUnit [13]
Разработка тестов и тестирование выполняется по схеме рис. 41.
![]() |
Рис. 41
![]() |
Схема алгоритма тестирования приведена на рисунке 42.
Рис. 42
Тестирование интеграции
Это тестирование всей системы, при котором, в основном, выявляются ошибки интерфейса. Основные категории ошибок интерфейса:
● Потеря данных при прохождении через интерфейс;
● Отсутствие в модуле необходимой ссылки;
● Негативное влияние одного модуля на другой;
● Подфункции при объединении не выполняют требуемую функцию;
● Неточности интерграции выходят за допустимый уровень;
● Проблемы при работе с глобальными структурами данных.
Виды тестирования:
1) Нисходящее;
2) Восходящее.
Структура первого приведена на рис. 43. А второго – на рис. 44.
![]() |
Рис. 43
Типы заглушек
A – трассирует сообщение;
B – выводит входные параметры;
C – возвращает значения из таблицы, заданного набора;
D – возвращает результат из таблицы для конкретного входного значения.
![]() |
Рис. 44
Типы драйверов
A – вызывает подчиненный модуль;
B – посылает элемент данных (параметр) из внутренней таблицы;
C – отображает параметр из подчиненного модуля;
D – является комбинацией драйверов B и C.
Синтетические тесты на производительность СУБД
Они играют важную роль. Такие тесты называют TPC. Их целью является предоставление объективных данных о производительности системы. Для того, чтобы достичь этой цели, спецификации TPC регламентируют, чтобы тестировалась производительность систем, продуктов, технологий, отвечающих следующим требованиям:
● продукт должен быть доступен пользователям;
● продукт должен относиться к соответствующему сегменту рынка (обработка транзакций);
● при тестировании продукта должны быть обязательно воспроизведены действия некоторого числа пользователей этой системы.
Пример представления результатов тестирования приведен на рис. 45.
![]() |
Рис. 45
Существует целый ряд систем тестирования, которые можно применять в учебных целях. К ним относятся
1) Selenium —инструмент для тестирования Web- приложений. Selenium - это Java-приложение, которое может анализировать файлы определенной структуры для того, чтобы находить в них команды для манипуляции браузером и команды для выполнения определенных действий и проверок. Selenium поддерживается Microsoft Internet Explorer, Google Chrome, Mozilla Suite и Mozilla Firefox для Microsoft Windows, Linux и Apple Macintosh.
2) IBM Rational TestManager и др.
Работа над ошибками происходит в соответствии со схемой рис. 46.
Система отслеживания ошибок (англ. bug tracking system) — прикладная программа, разработанная с целью помочь разработчикам программного обеспечения (программистам, тестировщикам и др.) учитывать и контролировать ошибки и неполадки, найденные в программах, пожелания пользователей, а также следить за процессом устранения этих ошибок и выполнения или невыполнения пожеланий.
Рис. 46
Средства Bug tracking
● Bugzilla
● Mantis
● Trac
● JIRA
● YouTrack
● StarTeam
● TUTOS











