<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>XP Injection &#187; refactoring</title>
	<atom:link href="http://xpinjection.com/tag/refactoring/feed/" rel="self" type="application/rss+xml" />
	<link>http://xpinjection.com</link>
	<description>Inject Agile practices for project health</description>
	<lastBuildDate>Fri, 03 Feb 2012 11:26:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>TDD &#8211; самая важная инженерная практика!</title>
		<link>http://xpinjection.com/2011/11/24/tdd-is-the-most-important-engineering-practice/</link>
		<comments>http://xpinjection.com/2011/11/24/tdd-is-the-most-important-engineering-practice/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 13:22:37 +0000</pubDate>
		<dc:creator>Николай Алименков</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[unit testing]]></category>
		<category><![CDATA[инженерные практики]]></category>

		<guid isPermaLink="false">http://xpinjection.com/?p=1410</guid>
		<description><![CDATA[Я часто задумываюсь о том, какая инженерная практика для меня самая важная и приносит больше всего пользы. В разное время я думал по-разному. Сейчас однозначно считаю, что это TDD (Test Driven Development). Этот подход к дизайну и разработке приложения дает возможность разрабатывать готовую функциональность гораздо быстрее. Меньше времени уходит на запуск самого приложения, отладку, поиск <a href="http://xpinjection.com/2011/11/24/tdd-is-the-most-important-engineering-practice/" class="more-link">More &#62;</a>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Я часто задумываюсь о том, какая инженерная практика для меня самая важная и приносит больше всего пользы. В разное время я думал по-разному. Сейчас однозначно считаю, что это <strong>TDD</strong> (Test Driven Development). Этот подход к дизайну и разработке приложения дает возможность разрабатывать готовую функциональность <strong>гораздо быстрее</strong>. Меньше времени уходит на запуск самого приложения, отладку, поиск проблем, написание ненужного кода, построение решений на будущее и т.д.</p>
<p>Но еще важнее то, что TDD <strong>способствует внедрению</strong> других инженерных практик. Даже не способствует, а требует. Модульное тестирование применяется по умолчанию. Так как вы пишете много тестов, то вам нужно их регулярно запускать. И вы просто обязаны установить инструмент для <strong>CI</strong> (Continuous Integration) и начать им пользоваться. Небольшие законченные кусочки кода дают вам уверенность в коммите и вы начинаете следовать практике CI, интегрируя свой код как можно чаще. Вы натыкаетесь на участки кода, которые тяжело тестировать. И, чтобы написать тест, вам приходится рефакторить эти участки кода. <strong>Рефакторинг</strong> также является неотъемлемой частью самой практики TDD. Не все умеют хорошо работать по TDD. Поэтому вы обращаетесь к помощи коллег. Они помогают вам написать тесты и код (<strong>парное программирование</strong>), а потом просто просматривают ваш код (<strong>Code Review</strong>), чтобы убедиться в правильности применения TDD. Долго поработав по TDD, вы начинаете чувствовать себя некомфортно без тестов. Это толкает вас к переносу TDD на уровень выше и вы приходите к <strong>ATDD</strong> (Acceptance Test Driven Development) или <strong>BDD</strong> (Behavior Driven Development). </p>
<p>Вот и получается, что, следуя TDD, вы автоматически начинаете внедрять все остальные практики. Это своего рода ядро, которое со временем обрастает и превращается в целую инфраструктуру инженерных практик. Поэтому при подготовке программы <a href="http://xpdays.com.ua/trainings/">тренингов</a> для конференции <a href="http://xpdays.com.ua">XP Days Ukraine</a> мы уделили большое внимание именно TDD. Мы пригласили опытных тренеров по нескольким наиболее популярным языкам программирования (<a href="http://xpdays.com.ua/trainings/#tdd-in-java">Java</a>, <a href="http://xpdays.com.ua/trainings/#tdd-in-net">.NET</a>, <a href="http://xpdays.com.ua/trainings/#tdd-in-php">PHP</a>), чтобы провести тренинги, затрагивая специфику языка и применяемых в нем инструментов. Это даст возможность участникам получить практический опыт применения TDD и начать внедрение этой полезной практики в своем проекте. Выбирайте наиболее подходящий тренинг, <a href="http://xpdays.com.ua/registration/">регистрируйтесь</a> и повышайте свой уровень!</p>
<div class="shr-publisher-1410"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F11%2F24%2Ftdd-is-the-most-important-engineering-practice%2F' data-shr_title='TDD+-+%D1%81%D0%B0%D0%BC%D0%B0%D1%8F+%D0%B2%D0%B0%D0%B6%D0%BD%D0%B0%D1%8F+%D0%B8%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%BD%D0%B0%D1%8F+%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0%21'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F11%2F24%2Ftdd-is-the-most-important-engineering-practice%2F' data-shr_title='TDD+-+%D1%81%D0%B0%D0%BC%D0%B0%D1%8F+%D0%B2%D0%B0%D0%B6%D0%BD%D0%B0%D1%8F+%D0%B8%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%BD%D0%B0%D1%8F+%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0%21'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F11%2F24%2Ftdd-is-the-most-important-engineering-practice%2F' data-shr_title='TDD+-+%D1%81%D0%B0%D0%BC%D0%B0%D1%8F+%D0%B2%D0%B0%D0%B6%D0%BD%D0%B0%D1%8F+%D0%B8%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%BD%D0%B0%D1%8F+%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0%21'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F11%2F24%2Ftdd-is-the-most-important-engineering-practice%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --> <img src="http://xpinjection.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1410" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://xpinjection.com/2011/11/24/tdd-is-the-most-important-engineering-practice/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Приглашаем всех в декабре в Киев на XP Days Ukraine</title>
		<link>http://xpinjection.com/2011/08/29/xp-days-ukraine-announcement/</link>
		<comments>http://xpinjection.com/2011/08/29/xp-days-ukraine-announcement/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 08:23:52 +0000</pubDate>
		<dc:creator>Николай Алименков</dc:creator>
				<category><![CDATA[Общие]]></category>
		<category><![CDATA[build automation]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[XP Days Ukraine]]></category>
		<category><![CDATA[инженерные практики]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://xpinjection.com/?p=1018</guid>
		<description><![CDATA[Мы долго вынашивали идею этого мероприятия и рады сообщить, что официально начали подготовку конференции XP Days Ukraine. Конференция XP Days Ukraine будет целиком посвящена Agile инженерным практикам. Это больше чем просто конференция. Планируется масштабное мероприятие длительностью в несколько дней, которое будет насыщено разнообразными тренингами, мастер-классами, встречами и докладами. Дата конференции еще точно не определена, но <a href="http://xpinjection.com/2011/08/29/xp-days-ukraine-announcement/" class="more-link">More &#62;</a>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Мы долго вынашивали идею этого мероприятия и рады сообщить, что официально начали подготовку конференции <a href="http://xpdays.com.ua">XP Days Ukraine</a>. Конференция <strong>XP Days Ukraine</strong> будет целиком посвящена Agile инженерным практикам. Это больше чем просто конференция. Планируется масштабное мероприятие длительностью в несколько дней, которое будет насыщено разнообразными <strong>тренингами</strong>, <strong>мастер-классами</strong>, <strong>встречами</strong> и <strong>докладами</strong>. Дата конференции еще точно не определена, но это будет точно первая половина декабря. Состоится мероприятие в Киеве.</p>
<p>В последнее время многие жалуются на Agile конференции за наличие докладов только по командным и управленческим практикам, лидерству, Scrum и отсутствию серьезных докладов, непосредственно касающихся разработки. Мы решили исправить эту несправедливость и сделать конференцию практической направленности. Тематика <strong>инженерных практик</strong> и подходов выбрана не случайно, ведь большую часть процесса разработки составляет именно написание кода. Методология <strong>XP (eXtreme Programming)</strong> предлагает набор инженерных практик, которые помогают делать качественные продукты быстро и с меньшими рисками.</p>
<p>Мы приложим максимум усилий для того, чтобы привезти на конференцию известных докладчиков и тренеров, которые стояли у истоков современных инженерных подходов. Это даст участникам возможность получить информацию из первых уст. Будут освещены основные инженерные практики: <strong>Unit Testing</strong>, <strong>TDD</strong>, <strong>Continuous Integration</strong>, <strong>BDD</strong>, <strong>Code Review</strong>, <strong>Refactoring</strong>, <strong>Acceptance Testing</strong> и другие. Также будут обсуждаться вопросы архитектуры в Agile проектах, борьбы с технической задолженностью (<strong>Technical Debt</strong>), взаимоотношений разработчиков и тестировщиков, а также многие другие проблемы современной разработки. </p>
<p><a href="http://xpdays.com.ua/registration">Регистрация</a> еще не открыта, так как конференция находится на этапе подготовки. В ближайшее время откроется этап ранней регистрации. Количество участников конференции будет ограничено. Мы планируем собрать не более <strong>500 человек</strong>. Это будут разработчики, тестировщики, лидеры команд, менеджеры и все остальные непосредственные участники процесса разработки. Каждый найдет для себя что-то интересное. Присоединяйтесь к нашей группе в <a href="http://www.linkedin.com/groups?mostPopular=&#038;gid=4055193">LinkedIn</a>, <a href="http://www.facebook.com/groups/113544835411832/">Facebook</a> или <a href="http://groups.google.com/group/xp-days-ua">Google Groups</a>, где вы сможете получать последнюю информацию о конференции и принимать участие в обсуждениях по ее подготовке. Чтобы получать последние новости о конференции вы можете подписаться на <a href="http://xpdays.com.ua/?feed=rss2">RSS</a>, <a href="http://xpdays.com.ua/">email рассылку</a> или следить за нами в <a href="http://twitter.com/xpdays_ua">Twitter</a>.</p>
<p>Мы приглашаем <a href="http://xpdays.com.ua/speakers">докладчиков</a>, имеющих большой <strong>практический опыт</strong> в применении Agile инженерных практик, принять участие в конференции. Если вы чувствуете в себе силы и желание поделиться опытом с другими, то присылайте нам свое предложение о выступлении. Предложения принимаются до <strong>1 ноября</strong>. Мы также будем рады любым рекомендациям с вашей стороны по поводу докладчиков, которых вы бы хотели увидеть на конференции.</p>
<p>Мы приглашаем <a href="http://xpdays.com.ua/sponsors">спонсоров</a> помочь провести конференцию на высоком качественном уровне и сделать участие в конференции доступным для широкой аудитории. Также спонсорская помощь поможет пригласить известных докладчиков и сделать программу конференции более насыщенной. Если у вас есть желание стать <a href="http://xpdays.com.ua/sponsors">спонсором конференции</a>, то мы с радостью рассмотрим ваше предложение. Предусмотрены различные спонсорские пакеты. </p>
<div class="shr-publisher-1018"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F08%2F29%2Fxp-days-ukraine-announcement%2F' data-shr_title='%D0%9F%D1%80%D0%B8%D0%B3%D0%BB%D0%B0%D1%88%D0%B0%D0%B5%D0%BC+%D0%B2%D1%81%D0%B5%D1%85+%D0%B2+%D0%B4%D0%B5%D0%BA%D0%B0%D0%B1%D1%80%D0%B5+%D0%B2+%D0%9A%D0%B8%D0%B5%D0%B2+%D0%BD%D0%B0+XP+Days+Ukraine'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F08%2F29%2Fxp-days-ukraine-announcement%2F' data-shr_title='%D0%9F%D1%80%D0%B8%D0%B3%D0%BB%D0%B0%D1%88%D0%B0%D0%B5%D0%BC+%D0%B2%D1%81%D0%B5%D1%85+%D0%B2+%D0%B4%D0%B5%D0%BA%D0%B0%D0%B1%D1%80%D0%B5+%D0%B2+%D0%9A%D0%B8%D0%B5%D0%B2+%D0%BD%D0%B0+XP+Days+Ukraine'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F08%2F29%2Fxp-days-ukraine-announcement%2F' data-shr_title='%D0%9F%D1%80%D0%B8%D0%B3%D0%BB%D0%B0%D1%88%D0%B0%D0%B5%D0%BC+%D0%B2%D1%81%D0%B5%D1%85+%D0%B2+%D0%B4%D0%B5%D0%BA%D0%B0%D0%B1%D1%80%D0%B5+%D0%B2+%D0%9A%D0%B8%D0%B5%D0%B2+%D0%BD%D0%B0+XP+Days+Ukraine'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F08%2F29%2Fxp-days-ukraine-announcement%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --> <img src="http://xpinjection.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1018" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://xpinjection.com/2011/08/29/xp-days-ukraine-announcement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Новый тренинг &#171;TDD в PHP&#187; пройдет 18-19 марта в Киеве</title>
		<link>http://xpinjection.com/2011/02/11/tdd-in-php-announcement/</link>
		<comments>http://xpinjection.com/2011/02/11/tdd-in-php-announcement/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 12:00:16 +0000</pubDate>
		<dc:creator>Николай Алименков</dc:creator>
				<category><![CDATA[Тренинги]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[инженерные практики]]></category>
		<category><![CDATA[команда]]></category>

		<guid isPermaLink="false">http://xpinjection.com/?p=749</guid>
		<description><![CDATA[Благодаря совместным усилиям Алименкова Николая и нашего нового тренера Ивана Мосева, мы рады представить вашему вниманию новый тренинг &#171;TDD в PHP&#187;. Test Driven Development (TDD) без сомнения является одной из наиболее полезных, но в то же время трудных для внедрения, инженерных практик. TDD предлагает писать тесты до того как реальный код появится в приложении, благодаря <a href="http://xpinjection.com/2011/02/11/tdd-in-php-announcement/" class="more-link">More &#62;</a>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Благодаря совместным усилиям <a href="/coaches#alimenkou">Алименкова Николая</a> и нашего нового тренера <a href="/coaches#mosev">Ивана Мосева</a>, мы рады представить вашему вниманию новый тренинг <a href="/trainings/tdd-in-php">&laquo;TDD в PHP&raquo;</a>. </p>
<p>Test Driven Development (TDD) без сомнения является одной из наиболее полезных, но в то же время трудных для внедрения, инженерных практик. TDD предлагает писать тесты до того как реальный код появится в приложении, благодаря чему вы получаете лучший дизайн, больше фокусируетесь на функционале, имеете возможность проверить состояние своей работы и понять когда вы закончили. Но написание тестов перед кодом требует от разработчика изменения мышления и наличия большого опыта в тестировании.</p>
<p>Данный тренинг предназначен для PHP команд или индивидуальных PHP разработчиков. Он поможет вам понять преимущества внедрения TDD на вашем проекте, сложности и пути их преодоления. Тренинг посвящён использованию модульного тестирования для улучшения процесса проектирования и разработки приложений на PHP. Будут расcмотрены инструменты, которые применяются для тестирования в PHP, и весь технологический процесс разработки, непрерывной интеграции и поставки web-приложения на PHP на примере практического задания, которое будет разрабатываться в процессе тренинга. Также будут рассмотрены полезные практики и инструменты для облегчения работы по TDD.</p>
<p>Первый тренинг пройдет в <strong>Новосибирске</strong> <strong>19 февраля</strong>, а следующий &#8211; в <strong>Киеве</strong> <strong>18-19 марта</strong>. <a href="https://spreadsheets4.google.com/viewform?formkey=dGJic3lHdHZBQVR0TWdGSDlFNTdNU1E6MA">Регистрация</a> уже открыта и продлится до <strong>14 марта</strong>. Продолжительность тренинга <strong>2 дня</strong>, стоимость участия &#8211; <strong>1600 гривен</strong> (обеды включены). Торопитесь, максимальный размер группы &#8211; <strong>10 участников</strong>! </p>
<div class="shr-publisher-749"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F02%2F11%2Ftdd-in-php-announcement%2F' data-shr_title='%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9+%D1%82%D1%80%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3+%22TDD+%D0%B2+PHP%22+%D0%BF%D1%80%D0%BE%D0%B9%D0%B4%D0%B5%D1%82+18-19+%D0%BC%D0%B0%D1%80%D1%82%D0%B0+%D0%B2+%D0%9A%D0%B8%D0%B5%D0%B2%D0%B5'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F02%2F11%2Ftdd-in-php-announcement%2F' data-shr_title='%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9+%D1%82%D1%80%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3+%22TDD+%D0%B2+PHP%22+%D0%BF%D1%80%D0%BE%D0%B9%D0%B4%D0%B5%D1%82+18-19+%D0%BC%D0%B0%D1%80%D1%82%D0%B0+%D0%B2+%D0%9A%D0%B8%D0%B5%D0%B2%D0%B5'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F02%2F11%2Ftdd-in-php-announcement%2F' data-shr_title='%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9+%D1%82%D1%80%D0%B5%D0%BD%D0%B8%D0%BD%D0%B3+%22TDD+%D0%B2+PHP%22+%D0%BF%D1%80%D0%BE%D0%B9%D0%B4%D0%B5%D1%82+18-19+%D0%BC%D0%B0%D1%80%D1%82%D0%B0+%D0%B2+%D0%9A%D0%B8%D0%B5%D0%B2%D0%B5'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2011%2F02%2F11%2Ftdd-in-php-announcement%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --> <img src="http://xpinjection.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=749" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://xpinjection.com/2011/02/11/tdd-in-php-announcement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#171;Задолженность по дефектам&#187; и способы борьбы с ней</title>
		<link>http://xpinjection.com/2010/10/22/bug-dept-and-ways-to-avoid-it/</link>
		<comments>http://xpinjection.com/2010/10/22/bug-dept-and-ways-to-avoid-it/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 10:10:36 +0000</pubDate>
		<dc:creator>Николай Алименков</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[build automation]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[автоматизация тестирования]]></category>
		<category><![CDATA[инженерные практики]]></category>
		<category><![CDATA[тестирование]]></category>

		<guid isPermaLink="false">http://xpinjection.com/?p=541</guid>
		<description><![CDATA[Сегодня я хотел бы затронуть очень интересное и новое понятие &#8211; &#171;задолженность по дефектам&#187; (bug debt). Много разговоров ведется про другой вид задолженности &#8211; &#171;техническую задолженность&#187; (technical debt). Но они обе очень важны. Понимание этих терминов увеличивает шансы проекта на успех. Дефекты в коде появляются по разным причинам: недопонимание требований, несовершенство технических инструментов, невнимательность или <a href="http://xpinjection.com/2010/10/22/bug-dept-and-ways-to-avoid-it/" class="more-link">More &#62;</a>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Сегодня я хотел бы затронуть очень интересное и новое понятие &#8211; &laquo;задолженность по дефектам&raquo; (bug debt). Много разговоров ведется про другой вид задолженности &#8211; &laquo;техническую задолженность&raquo; (technical debt). Но они обе очень важны. Понимание этих терминов увеличивает шансы проекта на успех. </p>
<p>Дефекты в коде появляются по разным причинам: недопонимание требований, несовершенство технических инструментов, невнимательность или спешка, недостаток опыта или технических навыков, и так далее. Дефекты пагубно влияют на работу всей команды. Прежде всего, они требуют времени тестировщиков на нахождение, анализ и описание. Причем, так как чаще всего тестировщики работают через пользовательский интерфейс, а не напрямую с источником проблем (программным кодом), то затраченное время увеличивается в разы. Также, по мере нахождения, дефекты нужно исправлять. Этот процесс требует вовлечения разработчиков, которые тратят время на анализ, исправление и дополнительные активности по проверке и предотвращению дефекта в будущем. На этом все не заканчивается &#8211; тестировщикам необходимо проверить исправленный дефект и внести изменения в различные системы (система управления дефектами, система хранения тестовых сценариев и другие). Таким образом, каждый дефект стоит команде очень дорого. И чем позже он будет найден и исправлен, тем выше стоимость.</p>
<p>У дефектов есть еще одно интересное свойство. Если система не покрыта &laquo;сетью безопасности&raquo; в виде автоматизированных тестов, то исправление одних дефектов часто приводит к порождению других. И образуется замкнутый круг. Все больше и больше дефектов скапливается в системе, на их исправление не отводится времени, потому что нужно разрабатывать новую функциональность. Некоторые дефекты живут в системе очень давно и превращаются в ограничения. Благодаря таким ограничениям, разработчикам приходится идти на хитрости и во многих случаях вставлять костыли. Труднее всего тестировщикам, потому что им приходится анализировать зависимости между дефектами, расставлять приоритеты и мириться с их существованием. Мотивация всей команды падает и многие начинают поговаривать о полном переписывании системы.</p>
<p>В то же время, наличие открытых дефектов запускает в действие принцип &laquo;разбитых окон&raquo;. Никто не задумывается при добавлении в систему очередного сомнительного кода &#8211; ведь и так уже куча дефектов. Этот же принцип распространяется и на архитектурные решения. И системе становится все хуже и хуже&#8230; А мы еще не коснулись таких проблем как наличие стабильной сборки системы, блокирующих дефектов, недовольство заказчика и конечных пользователей, а также многих других. </p>
<p>Agile принципы говорят нам о том, что продукт должен быть рабочим и именно это есть главная метрика прогресса. Одно из основных преимуществ Agile подходов &#8211; это предсказуемость. Но наличие дефектов сводит предсказуемость на нет, потому что найденные дефекты нужно исправлять, что сильно влияет на продуктивность команды, а значит и на результаты для заказчика. Как следствие, теряется доверие и начинает разваливаться процесс разработки.</p>
<p>Что же делать чтобы не допустить всего описанного? Главная задача &#8211; сфокусироваться на качестве кода, на предотвращении дефектов. Для этого, конечно же, тоже понадобится время. Начать можно с автоматизации сборки системы, потому что без этого шага тяжело будет выполнить другие. На рынке существует огромное количество инструментов для решения этой задачи (<a href="http://ant.apache.org/">Ant</a>, <a href="http://maven.apache.org/">Maven</a>, <a href="http://nant.sourceforge.net/">NAnt</a>, <a href="http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx">MSBuild</a>, <a href="http://www.gradle.org/">Gradle</a> и другие), выберите подходящий и вперед. </p>
<p>Вторым шагом является подключение и настройка статических анализаторов кода. Они помогут вам избежать многих ошибок, а также предоставят детальную статистику по состоянию вашего кода. Большая часть из таких анализаторов (<a href="http://msdn.microsoft.com/en-us/library/bb429476.aspx">FxCop</a>, <a href="http://findbugs.sourceforge.net/">FindBugs</a>, <a href="http://pmd.sourceforge.net/">PMD</a>, <a href="http://www.sonarsource.com/">Sonar</a>, <a href="http://www.jslint.com/lint.html">JSLint</a> и другие) очень просто установить и начать использовать. Я рекомендую изначально включать все возможные проверки, а по мере использования отключать или настраивать те, которые вам не подошли. Делать это нужно осознанно и централизованно, а не просто скрывать имеющиеся проблемы. Важным шагом является настройка работы с результатами анализа в IDE, так как это упрощает работу разработчиков. </p>
<p>Дальше необходимо позаботиться о том, чтобы сборки и анализ кода проходили регулярно и как можно чаще. Для этого вам понадобится Continuous Integration сервер. На данный момент существует множество бесплатных и платных решений (<a href="http://www.jetbrains.com/teamcity/">TeamCity</a>, <a href="http://www.atlassian.com/software/bamboo/">Bamboo</a>, <a href="http://hudson-ci.org/">Hudson</a>, <a href="http://cruisecontrol.sourceforge.net/">CruiseControl</a> и другие), есть из чего выбирать. На установку и начальную настройку у вас не уйдет много времени. По ходу использования вы расширите настройки, подключите необходимые модули и установите дополнительные приложения. </p>
<p>Теперь можно переходить к следующему шагу &#8211; созданию &laquo;сети безопасности&raquo;. Начните писать модульные и интеграционные тесты. Лучший способ начать &#8211; это обязательно писать их для нового кода, а также для кода, в котором найден дефект или проводится изменение. Не стоит торопиться, добиться полного покрытия всего кода быстро вам не удастся. Так что нужно запастись терпением. Помните главное правило бойскаутов: &laquo;Когда вы покидаете место привала, вы должны постараться хоть как-то улучшить его&raquo;. Точно также поступайте со своим кодом &#8211; старайтесь при каждом изменении хотя бы немного его улучшить. Тогда вы будете медленно и уверенно двигаться в сторону улучшения всего кода системы. </p>
<p>Следующий шаг направлен на контроль выполнения предыдущих шагов и поиск новых улучшений. Этот шаг предполагает внедрение практики Code Review. Эта практика помогает убедиться в том, что все необходимые действия над кодом выполнены успешно и он соответствует стандартам, принятым на проекте. Для того, чтобы внедрить эту практику, вам необходимо обсудить и принять список требований к коду (критерии готовности). Такой список должен составляться с участием всех членов команды. Пункты списка подлежат обязательному контролю, постарайтесь изменить процесс управления задачами так, чтобы было невозможно миновать стадию Code Review.</p>
<p>Теперь, когда вы приложили массу усилий для того, чтобы избежать дефектов, осталось совсем немного. Необходимо уменьшить цикл обработки дефекта. Для этого требуется уменьшить все циклы обратной связи. Тестировщики могут давать обратную связь на завершенные части работы разработчиков, как только они готовы. Размер итерации стоит сделать как можно меньше, чтобы заказчик мог давать обратную связь по законченной функциональности. Должно измениться отношение к дефектам. Дефект на свежую функциональность, найденный в итерации, должен быть исправлен как можно быстрее. Для этого можно использовать визуальные инструменты, чтобы избежать траты времени на &laquo;официальное&raquo; проведение дефекта через все системы контроля. Это не означает, что системы контроля не нужны. В конце итерации открытые дефекты обязательно заносятся в них, чтобы ими можно было управлять наряду с другими задачами. Для еще большей экономии времени стоит поменять коммуникационный протокол, используемый для дефектов. При нахождении нового дефекта тестировщик может записывать автоматизированный сценарий с помощью инструментов тестирования (<a href="http://www.automatedqa.com/products/testcomplete">TestComplete</a>, <a href="https://h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto&#038;cp=1-11-127-24^1352_4000_100__">QTP</a>, <a href="http://seleniumhq.org/">Selenium</a>, <a href="http://watir.com/">Watir</a> и другие). Этот тест заменит разработчику многострочное описание дефекта и ускорит его работу. Описание же добавится по необходимости, если дефект не удастся быстро исправить.</p>
<p>Вот и все. Было не так уж трудно? Теперь ваши тестировщики начинают меньше времени тратить на дефекты,  у них появляется время на тестирование методом свободного поиска, нахождение потенциальных улучшений для продукта, другие виды тестирования. Разработчики не занимаются бесконечными сессиями по исправлению дефектов, они занимаются реализацией новой функциональности. Ваш процесс разработки предсказуем и заказчики знают когда и что могут ожидать от вашей команды. Вы все довольны своими успехами и пользователи благодарны вам за продукт, в котором практически нет дефектов. Это миф? Нереально? А вы попробуйте&#8230; </p>
<div class="shr-publisher-541"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2010%2F10%2F22%2Fbug-dept-and-ways-to-avoid-it%2F' data-shr_title='%22%D0%97%D0%B0%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C+%D0%BF%D0%BE+%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%B0%D0%BC%22+%D0%B8+%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B+%D0%B1%D0%BE%D1%80%D1%8C%D0%B1%D1%8B+%D1%81+%D0%BD%D0%B5%D0%B9'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2010%2F10%2F22%2Fbug-dept-and-ways-to-avoid-it%2F' data-shr_title='%22%D0%97%D0%B0%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C+%D0%BF%D0%BE+%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%B0%D0%BC%22+%D0%B8+%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B+%D0%B1%D0%BE%D1%80%D1%8C%D0%B1%D1%8B+%D1%81+%D0%BD%D0%B5%D0%B9'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2010%2F10%2F22%2Fbug-dept-and-ways-to-avoid-it%2F' data-shr_title='%22%D0%97%D0%B0%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C+%D0%BF%D0%BE+%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%B0%D0%BC%22+%D0%B8+%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B+%D0%B1%D0%BE%D1%80%D1%8C%D0%B1%D1%8B+%D1%81+%D0%BD%D0%B5%D0%B9'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2010%2F10%2F22%2Fbug-dept-and-ways-to-avoid-it%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --> <img src="http://xpinjection.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=541" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://xpinjection.com/2010/10/22/bug-dept-and-ways-to-avoid-it/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Презентации с IT Jam уже доступны</title>
		<link>http://xpinjection.com/2009/12/15/presentations-from-it-jam-are-available/</link>
		<comments>http://xpinjection.com/2009/12/15/presentations-from-it-jam-are-available/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 15:04:38 +0000</pubDate>
		<dc:creator>Николай Алименков</dc:creator>
				<category><![CDATA[Общие]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[build automation]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[инженерные практики]]></category>
		<category><![CDATA[команда]]></category>
		<category><![CDATA[конференция]]></category>
		<category><![CDATA[презентация]]></category>

		<guid isPermaLink="false">http://xpinjection.com/?p=53</guid>
		<description><![CDATA[Презентации &#171;Kanban VS Scrum&#187; от Алименкова Николая и &#171;XP Injection&#187; от Алименкова Николая и Алексея Солнцева опубликованы в разделе ресурсов.]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Презентации &laquo;Kanban VS Scrum&raquo; от Алименкова Николая и &laquo;XP Injection&raquo; от Алименкова Николая и Алексея Солнцева опубликованы в разделе <a href="http://xpinjection.com/resources">ресурсов</a>.</p>
<div class="shr-publisher-53"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2009%2F12%2F15%2Fpresentations-from-it-jam-are-available%2F' data-shr_title='%D0%9F%D1%80%D0%B5%D0%B7%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8+%D1%81+IT+Jam+%D1%83%D0%B6%D0%B5+%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D1%8B'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2009%2F12%2F15%2Fpresentations-from-it-jam-are-available%2F' data-shr_title='%D0%9F%D1%80%D0%B5%D0%B7%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8+%D1%81+IT+Jam+%D1%83%D0%B6%D0%B5+%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D1%8B'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2009%2F12%2F15%2Fpresentations-from-it-jam-are-available%2F' data-shr_title='%D0%9F%D1%80%D0%B5%D0%B7%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8+%D1%81+IT+Jam+%D1%83%D0%B6%D0%B5+%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D1%8B'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fxpinjection.com%2F2009%2F12%2F15%2Fpresentations-from-it-jam-are-available%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --> <img src="http://xpinjection.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=53" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://xpinjection.com/2009/12/15/presentations-from-it-jam-are-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

