9 июня(суббота) 2012 Москва

Телефон: +7 (495) 502-33-78
E-mail: 2012@devconf.ru

Архив 2012 года - актуальная информация тут

Тестирование унаследованного кода в php

Александр Голубев
Team lead в компании RealWeb

Доклад(30 мин)    Презентация (pdf, 114 Kb)

Что делать, если хочется занятся рефакторингом части проекта, унаследованной от предыдущей команды? Покрыть эту часть тестами и спокойно переделывать все, что не нравится. Но как написать тесты, если о тестируемости кода до вас никто не заботился?

В докладе описывается набор техник, которые помогут покрыть unit-тестами сложные части системы. Написанные тесты будут просты для понимания и легки в поддержке. Описанные техники реализованы в виде open-source библиотеки, доступной всем желающим.

Подробно:
Работая с большим проектом, в котором практически отсутствовали unit-тесты, перед нами встала задача их разработки. В первую очередь, было необходимо создать инструменты для удобного и быстрого написания тестов. Одна из основных проблем, возникающих в unit-тестировании - это разбиение зависимостей. В унаследованном коде эта проблема проявляется наиболее остро.

Для упрощения разбиения зависимостей мы начали использовать runkit - расширение, позволяющее динамически изменять код функций и классов во время исполнения. Для многих разработчиков знакомство с этим расширением заканчивается переопределением стандартных функций php. Данная возможнось позволяет покрыть код тестами в большем объеме, чем обычно. Однако, использование runkit из-за его слабло формализованного API легко может привести к нечитаемым тестам, от которых больше вреда, чем пользы.

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

Литература:
- М. Фаулер "Рефакторинг. Улучшение существующего кода."
- М. Физерс "Эффективная работа с унаследованным кодом."
- R. Osherove "The Art of Unit Testing with Examples in .NET"


Программа конференции