Как стать автором
Обновить

Тестирование программ Perl для начинающих. Введение

Время на прочтение4 мин
Количество просмотров6.7K
Почему «для начинающих»? Потому что, данное руководство было составлено мною и для меня, в процессе изучения особенностей тестирования в целом и тестирования программ Perl — в частности. Не претендую на абсолютную полноту изложения темы, но, возможно, многим начинающим программистам эта статья будет полезна и укажет направление для дальнейшего самостоятельного изучения процессов тестирования.

Это только первая часть руководства. Введение :). Если сообществу будет интересно, опубликую и продолжение.

Что такое — тестирование


Тестирование — это деятельность, которая позволяет выявить, насколько поведение программного продукта соответствует ожидаемому при различных условиях, входных данных и окружении.

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

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

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

Преимущества автоматических тестов:
  • Возможность многократного запуска тестирования на любой стадии разработки ПО.
  • Отсутствие «человеческого фактора» (усталость, забывчивость, невнимательность тестировщика...). Написанный единожды тест, можно запускать многократно без потери в качестве тестирования.
  • Возможность использования тестов пользователями, после ввода продукта в эксплуатацию — make test.
  • Тест может быть создан раньше программного продукта, и таким образом, будет являться своеобразной спецификацией разрабатываемого ПО, строго определяя и контролируя его поведение (Test-Driven Development — TDD).
  • Тест может проверять отдельные модули и компоненты ПО, взаимодействуя с ними напрямую, без использования специальных клиентских интерфейсов.
  • Возможность изменять внутреннюю архитектуру ПО, оставаясь уверенными, что API приложения не нарушен.
  • Набор качественных тестов очень полезен при создании документации к новому ПО.


Все вышесказанное не означает, что следует забросить «ручное» тестирование и полностью перейти на автоматическое. Необходимо разумное сочетание обоих вариантов.

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

Тестирование в Perl


Для создания тестовых программ в Perl наиболее часто используются модули Test::Simple, Test::More и Test::Harness. Эти модули работают в соответствии с протоколом TAP.

Test::More и Test::Simple позволяют программисту создавать скрипты, которые тестируют поведение заданных модулей, компонентов программ и пр. Вывод информации об итогах тестирования осуществляется в очень компактном виде, в формате TAP.

Test::Harness в свою очередь, предоставляет возможность упорядочить управление созданными тестовыми скриптами (очень важно, если скриптов больше 50, 100, 1000...). Позволяет написать программу, которая будет запускать группы тестовых скриптов на выполнение, принимать от них, суммировать и анализировать полученные результаты. А также, выводить их пользователю в удобном формате.

Начиная с версии 5.8, модули Test::More и Test::Harness являются частью ядра Perl. Для более ранних версий Perl, эти модули доступны в CPAN.

Ваш первый тест


Для примера, напишем функцию, которая возвращает незабвенное: «Hello, World!» и протестируем ее работу.

Функция, файл hello.pl:
#!/usr/bin/perl

sub hello {
return «Hello, world!»;
}

1;

Тестируем функцию hello(), скрипт назовем по имени тестируемой функции — hello.t
#!/usr/bin/perl

use Test::More tests => 2;

require_ok('hello.pl');

ok(hello() eq «Hello, world!», «Function hello() return 'Hello, world!'»);

Благодаря require_ok мы протестируем возможность подключения нашего скрипта через require. Если данный тест будет успешно пройден, require_ok автоматически сделает hello.pl доступным для использования, выполнив команду require для указанного скрипта.

Первый аргумент ok() — условное выражение. ok() получает результат выполнения функции hello() и сравнивает с эталоном. Если полученные данные и эталонные — идентичны, тест будет помечен в отчете, как пройденный. Второй аргумент, переданный ok() — это произвольный, текстовый комментарий к тесту (например, что тестируем, зачем, что должны получить в результате). Значительно облегчает чтение отчетов о проведенном тестировании.

Запускаем тест, смотрим результаты тестирования:
%perl hello.t
1..2
ok 1 — require 'hello.pl';
ok 2 — Function hello() return 'Hello, world!'

Поздравляю, вы написали свой первый тест и успешно провели тестирование!

Полезные ссылки


RUS

Десять наиболее важных практик разработки на Perl.
Написание автоматических тестов и среда phpUnit.
Тестирование с помощью Libtap. Stig Brautaset, перевод Владимир Куксенок
«Организация и именование автоматизированных тестов», Кирилл Максимов
Perl: изучаем глубже. Рэндал Шварц. — O'Reilly

ENG

Building Testing Libraries
Perl Testing: A Developer's Notebook. By chromatic, Ian Langworth. — O'Reilly
http://petdance.com/perl/automated-testing/ (презентация)
Теги:
Хабы:
Всего голосов 15: ↑12 и ↓3+9
Комментарии20

Публикации

Истории

Ближайшие события