Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: TDD долгий путь к инфицированию

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Мой опыт.
RomAndry Администратор
Отправлено: 21 Марта, 2011 - 11:46:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




Инфицированием назвать трудно — скорее легкое недомогание.

Собственно - это легкое недомогание открыло глаза на необходимость юнит-тестов при разработке проектов.
Как и многие, я никогда не понимал TDD, читал, пробовал, удалял.
Делал множество подходов но так и не понимал, зачем тратить время на разработку тестов.
Конечно, я понимал что нужно и глубоко в душе знал о пользе тестов в проекте, но реальность не давала начать (время, проект уже был в работе — а TDD необходимо внедрять на уровне проектирования).

Хочу поведать свою историю, которая, надеюсь, поможет многим осознать полезность и начать инфицироваться уже сейчас притом на готовом уже проекте.
Да-да, на готовом и работающем движке. Многие скажут это глупость и это не правильно, я не спорю, я только начал глубокое изучение и моя карма приняла в душу TDD.

Итак, работая над новым проектом, я решил пересмотреть свой движок, добавив функциональности, исправив многие погрешности до которых не доходили руки, а были отмечены в TODO.
И вот в один из вечеров я, вспомнив, что не плохо опять попробовать TDD — а вдруг проникнусь.
Моя CMS содержит ядро, которое содержит основные классы, абстракции (база, формы) и модули, в которых логика и шаблоны.

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

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

И вот взяв первые методы основного класса я вскрикнул «Эврика» — вызовы в тесте методов и сравнение результатов, навели на мысль, что теперь НЕ страшно трогать ядро, что «обложив» тестами метод, я спокойно могу вносить правки в ядро!
Сделав несколько десятков тестов для нескольких методов я начал править ядро и вот она прелесть — изменив логику я спокойно нажимаю Run Test и наслаждаюсь ошибками и удачными прохождением тестов!

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

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

Я очень рад, что смог понять для себя что TDD это реально хорошо, я вычистил ядро своей CMS и теперь не боюсь правок.

Согласен, что это только первый маленький шаг (нет еще понимания Mock объектов и прочее), но шаг сделан. Своим примером хочу показать, что это не страшно, что это полезно и что не обязательно нужно начинать с чистого листа. С последним пунктом спорно — но зная как работает метод я писал тесты, несколько что бы инициировать разные варианты поведения.

Итог:
1. Осознал для себя TDD
2. «Обложил» тестами ядро CMS
3. Тесты — теперь хорошая документация по использованию методов и абстракций.

Надеюсь, что моя статья поможет Вам по началу «простыть» а затем стать TDD infected.
 
My status
 Top
DlTA
Отправлено: 27 Апреля, 2011 - 00:53:20
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




извиняюсь за offTop
RomAndry, если есть возможность, описать, общими фразами с маленькими примерами о
RomAndry пишет:
CMS содержит ядро, которое содержит основные классы, абстракции (база, формы) и модули, в которых логика и шаблоны.

интересно с точки зрения проектирования, какой функционал ложится на основные классы, как они друг с другом взаимодействуют, абстракции - что и как, тоже с логикой и шаблонами. + интересует ядро как таковое выделено или как.

в общем такой себе репортаж))
 
 Top
RomAndry Администратор
Отправлено: 27 Апреля, 2011 - 08:53:20
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




ну в 2-х словах так и не расскажешь, а на большее пока времени нету =(
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Тестирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB