Тестування програм Perl для початківців. Введення

Чому «для початківців»? Тому що, дане керівництво було складено мною і для мене, в процесі вивчення особливостей тестування в цілому і тестування програм 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/( презентація)