|
|
|
![]() |
||
|
|
|
|||||||||||||||
|
Разработка через тестирование Опубликовано: 11 октября 2007 В таких языках программирования, как Java или С++, часть тестирования кода берет на себя компилятор, проверяя, определены ли все переменные, и следя за типами дынных. В языке программирования РНР, который, несомненно можно считать самым популярным средством разработки web-приложений, компилятор к коду относится весьма лояльно. Так, например, любую переменную можно определить где угодно и когда угодно. Нет необходимости явно указывать тип переменной, компилятор все сделает сам. Это нельзя считать ни плюсом, ни минусом, однако из-за этого некоторые разработчики допускают множество ошибок. Для РНР, как и для другого языка программирования, может быть применен метод разработки через тестирование (TDD) – Test Driven Development. Тестирование – неотъемлемая часть написания ПО, которая помогает обнаружить ошибки и уязвимости в самом начале разработки. Ведь программист не всегда в состоянии предусмотреть все варианты типов входных данных и дальнейшей работы с ними. Тестирование кода коренным образом меняет отношение к разработке. Для того чтобы привыкнуть тестировать свои приложения, может уйти от нескольких месяцев до года. Тестирования бывает модульным – в таком случае тестируется исходный код программы, а бывает приемочным – тестируется интерфейс программы или попросту соответствие приложения требованиям заказчика. Хорошо разработанные тесты могут вполне заметить документацию к скриптам, и другим программистам, которые впоследствии могут работать с вашим кодом, это намного облегчит понимание и доработку программы. Конечно, для этого тесты должны быть небольшими и понятными. В качестве средства модульного тестирования приложений, написанных на РНР, мы используем средство автоматического тестирования Simple Test (существуют и другие, но Simple Test весьма прост в освоении и распространяется как Open Source). Скачать последнюю версию Simple Test, а также ознакомиться с тем, как установить этот пакет тестов, можно на сайте: http://simpletest.sf.net . В работе мы используем даже два средства - Simple Test и WACT. Важным моментом в процессе внедрения тестирования является рефакторинг – улучшение существующего когда без изменения его функциональности. Впервые применять тестирование мы начали при доработке сайта «Финансы ТУТ» - раздела портала TUT.BY, на котором предоставлена актуальная информация о курсах валют, кредитах, вкладах и банках. Поэтому правильная работа с информацией и точные числовые расчеты здесь очень важны. Конечно, начинать работу с тестами лучше всего с нового проекта, но этот ресурс подвергся серьезному рефакторингу, и применение метода разработки через тестирование оказалось кстати. При его первоначальной разработке в 2004 году не учитывалась возможность функционального или даже визуального изменения ресурса, поэтому коды некоторых скриптов напоминали «спагетти с соусом», где код на РНР был вперемежку с HTML-кодом, и выглядело это примерно так: <form action=banks.html method=get> </tr> <? echo("<option value='" . $c . "'>" .$c. "</option>\n"); $sql = "SELECT DISTINCT `c_city` FROM `codes` ORDER BY `c_city`;"; echo("<option value='" . $c . "'>" .$c. "</option>\n"); } Согласитесь, не очень удобно. Это страница поиска банков, над ней мы и будем работать. Естественно, не все страницы ресурса выполняли выборку данных из БД в формате MySQL, поэтому данные и сама инициализация подключения к БД были также прописаны в каждом файле. Итак, для начала нам пришлось отказаться от процедурного программирования и перейти на объектное: ведь ООП и тестирование друг без друга невозможны. Далее описаны несколько простых тестов, которые помогут нам проверить работоспособность скрипта. Шаг 1. Подготовка.
На этом шаге в корневой директории у нас будет всего три файла: config.php – скрипт, содержащий конфигурационные данные, runner.php –скрип, который будет прогонять все наши тесты, и скрипт, содержащий сами тесты - all_my_test.php. Config.php
<?
$test = new MyTest(); Сейчас мы напишем тест, который проверит, как работает наш поиск: При запуске runner.php мы убедимся, что все тесты сработали (об этом нам сообщит зеленая полоска), после чего можно приступать к написанию более сложных тестов. Кстати, запустить все наши тесты можно также и из командной строки.
Для дальнейшей работы мы написали класс для реализации поиска. Вот несколько методов, которые мы потом будем тестировать:
<? class TestMyProject extends UnitTestCase { Тут все очень просто: вначале проверяем на наличие нашей переменной codes Точно таким же образом можно проверить и на работоспособность функции, выполняющие SQL запрос: <? class TestMyProject extends UnitTestCase { Кроме проверки на простейшее соответствие текущая версия Simple Test имеет следующие тестовые функции: assertTrue($x) — выдается ошибка, если значение False; Кстати, бывает так, что некоторые разработанные методы используют в своей работе другие методы, которых пока нет. Естественно, в этом случае тесты не срабатывают. На помощь в таком случае приходят Мок-объекты. Мок-объекты – это заглушки в коде, которые могут имитировать работу необходимых методов и даже целых классов. <? Mock::generate('DatabaseConnection'); class MyTestCase extends UnitTestCase { Приведенные выше тесты весьма и весьма просты, однако помогают на начальном этапе проверить работоспособность скрипта и избежать неприятностей в дальнейшем. Конечно, в своей работе мы используем тесты намного сложнее и длиннее описанных в этой статье, а их количество в процессе разработки достигает нескольких сотен. В этой статье основное внимание было уделено модульному тестированию, или проверке кода программы на «живучесть». Но это лишь одна часть тестирования. Как я уже отмечал, есть еще и приемочное тестирование. Одним из наиболее распространенных пакетов для эмуляции браузера и проверки работоспособности сайта является Selenuim http://www.openqa.org/selenium. К сожалению, тестирование еще не так распространено среди РНР-разработчиков настолько, насколько хотелось бы. Причин много: плохое понимание ООП, нежелание работать быстрее и качественнее или просто незнание о существовании пакетов тестирования. Для тех, кто всерьез задумывается о переходе на такой метод разработки своего ПО, я бы хотел дать несколько советов: • Делайте компактные тесты. • Улучшайте Ваши тесты. Таким образом, при применении данных методик качество и скорость разработки увеличивается, а количество ошибок в коде уменьшается. Не это ли, в конце концов, требуется от хорошего программиста? Сведения об авторе
Виктор Комягин Все публикации | Октябрь 2007 | Июль 2006 | Апрель 2006 | Март 2006 | Июнь 2005 | Май 2005 |
||||||||||||||||
|
|
||||||||||||||||
|
||
|
Итак, вы решили создать свой сайт. Уже выбрана тема, есть идеи, определены материалы, которые необходимо выкладывать на сайт. Но прежде чем перейти непосредственно к проектированию содержания и оформления сайта, следует посмотреть на еще кое-что.
|
|
| © УП «Надежные программы», ООО «Астроним Системс», 2000-2008 Карта сайта |
Центр электронного бизнеса TUT.BY 220030, г. Минск, пр. Независимости, 11 корпус 2, офис 216 Тел.: Электронная почта: welcome@tutby.com |
Astronim* 220030, г. Минск, ул. Карла Маркса, 25-8 (мансарда) Тел.: Электронная почта: info@astronim.com |
|
|
|