<?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>Agile &#8212; Можно Подумать</title>
	<atom:link href="https://testitquickly.com/category/agile/feed/" rel="self" type="application/rss+xml" />
	<link>https://testitquickly.com</link>
	<description>про тестирование ПО и всё такое прочее</description>
	<lastBuildDate>Sat, 23 Nov 2024 07:50:22 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://testitquickly.com/wp-content/uploads/2021/09/favicon_lupan-150x150.jpg</url>
	<title>Agile &#8212; Можно Подумать</title>
	<link>https://testitquickly.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">202834616</site>	<item>
		<title>Асхатология agile</title>
		<link>https://testitquickly.com/2018/07/25/bate-cu-kishioarele/</link>
					<comments>https://testitquickly.com/2018/07/25/bate-cu-kishioarele/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Wed, 25 Jul 2018 09:15:41 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Не смешно]]></category>
		<category><![CDATA[Соображения]]></category>
		<category><![CDATA[Асхат Уразбаев]]></category>
		<guid isPermaLink="false">http://testitquickly.com/?p=3925</guid>

					<description><![CDATA[Оно хоть и называется «процесс разработки», но это не про изменения процесса производства ПО. Agile к программированию/тестированию вообще не относится.]]></description>
										<content:encoded><![CDATA[<p>Я многого не знаю. Например, я не знаю, кто был тот мудак, который раз и навсегда перевёл термин agile как «гибкий». Имя есть?</p>
<p style="padding-left: 30px;">Flexible — гибкий.</p>
<p style="padding-left: 30px;">Agile — проворный, подвижный, верткий, живчик.</p>
<p style="padding-left: 30px;">Тестирования ради, усядьтесь голым попом на горячую сковородку — вы моментально станете agile.</p>
<p>Впрочем, кое-что я знаю — Асхат Уразбаев первым <del>мощно предложил</del> <a href="https://twitter.com/cartmendum/status/487653133833994240">опечатался</a> про слоган внедрения agile в 2014-ом году.</p>
<p style="padding-left: 30px;">Есть мнение о том, что данный способ внедрения уже известен древним пользователям русского языка (<a href="https://bash.im/quote/215317">тыц</a>, <a href="https://bash.im/quote/208514">тырдыц</a>), однако красочности он от этого не теряет.</p>
<p>А ещё я знаю следующее: agile не методология и не процесс. Это надстройка над уже существующей методологией и уже существующими процессами. И если их нет, то внедрять agile не на что.</p>
<p>То есть, у вас может не быть скрама и доски на стене, а agile может быть. У вас процесс производства может не меняться, а agile над ним — работает.</p>
<p>
<span id="more-3925"></span></p>
<p>
Оно хоть и называется «процесс разработки», но это не про изменения процесса производства ПО. Agile к программированию/тестированию вообще не относится. Идея всей этой повышенной проворности произошла из необходимости сделать отличный сервис для покупателя, поэтому в нашем ареале всё это к рядовому кодиле/тестерюге относится так косвенно, что вы этого даже не замечаете.</p>
<p>Логика внедрения следующая: смотрим на то, что есть, и где-то делаем изменение. Не глобальное, не принудительное, не директивное, а небольшое, рекомендательное. Если прижилось — продолжаем экспериментировать с изменениями. Если нет — откатились на исходную позицию и думаем дальше, и изменяем, пока не станет идеально. Вот и весь <a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B9%D0%B4%D0%B7%D0%B5%D0%BD">кайдзен</a>.</p>
<p>Не бывает так, что «вот раньше у нас был ватерфлоу, а сегодня аджайл», одно другое не заменяет. Waterflow навсегда.</p>
<p>Это долго. Это рискованно. Это непонятно чем закончится и непонятно, как выглядит. Это требует взаимодействия. Всегда в итоге упираешься не в программирование/тестирование, а в психиатрию человеков, двуногих да нервных, которым строгий менеджер нужен, а не священник (вы его потому скрам-мастером и называете, что кроме скрама он ничего не знает и знать не желает; у догматиков свои особенности).</p>
<p>Психиатрия человеческая выражается в том, что вы не умеете ни экспериментировать, ни думать. Вы умеете лихо исполнять ограниченный набор действий, за которые «вчера» вас хвалили. Отклонение от этого всего страшит, оно требует взрослости и большого commitment (в русском переводе это звучит очень глупо и травматично, поэтому оставим оригинал без перевода). Поэтому вам нужен однозначный менеджер, который скажет «Делать так и эдак», и дальше он только покусывает пряник, постёгивая плёткой тех, кто отклоняется от предписанного.</p>
<p style="padding-left: 30px;">Пирамиды в Гизе строили по этому принципу, и ничо, нормально построили же.</p>
<p>Каждому молодому скрам-мастеру суждено превратиться в упёртого барана, который уже не советует, а только принуждает к добру, и не каждый впоследствии со всем этим справляется.</p>
<p>Когда твоя вера в силу личности проходит через такие испытания, о которых при <del>инициации</del> сертифицировании не рассказывают, бо не поверишь, даже если расскажут… Ах, коллективный разум, безальтернативная ты сука.</p>
<p>Поэтому agile и приходится в вас внедрять, по заветам Асхата.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2018/07/25/bate-cu-kishioarele/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3925</post-id>	</item>
		<item>
		<title>Требования в виде тест-кейсов — один вин и три фэйла подряд</title>
		<link>https://testitquickly.com/2014/07/14/win-fail-fail-fail/</link>
					<comments>https://testitquickly.com/2014/07/14/win-fail-fail-fail/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Mon, 14 Jul 2014 15:38:58 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Видео]]></category>
		<category><![CDATA[Конференции]]></category>
		<category><![CDATA[Test Labs]]></category>
		<guid isPermaLink="false">http://testitquickly.com/?p=3244</guid>

					<description><![CDATA[Доклад на онлайн-конференции для специалистов по тестированию и управлению качеством серии &#171;TEST Labs&#171;. Читано в субботу, 28 июня 2014. &#171;Это история о попытках наладить менеджмент тестирования в динамично ухудшающемся окружении. В воспаленном agile-сознании тестировщика возникла передовая идея: придумывать и передавать тест-кейсы программисту еще до начала разработки. Поскольку кейсы покрывают больше ситуаций, нежели требования, программисту было… <span class="read-more"><a href="https://testitquickly.com/2014/07/14/win-fail-fail-fail/">Читать далее: Требования в виде тест-кейсов — один вин и три фэйла… &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p><iframe title="Требования в виде тест-кейсов — один вин и три фэйла подряд" width="665" height="374" src="https://www.youtube.com/embed/KDYbomPXXl8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p>Доклад на онлайн-конференции для специалистов по тестированию и управлению качеством серии &#171;<strong>TEST Labs</strong>&#171;. Читано в субботу, 28 июня 2014.</p>
<p style="padding-left: 40px;"><span class="userContent"><span class="userContent">&#171;<em>Эт</em><span class="text_exposed_show"><em>о история о попытках наладить менеджмент тестирования в динамично ухудшающемся окружении. В воспаленном agile-сознании тестировщика возникла передовая идея: придумывать и передавать тест-кейсы программисту еще до начала разработки. Поскольку кейсы покрывают больше ситуаций, нежели требования, программисту было удобно по ним ориентироваться. Это был вин! Но потом эксперимент пошел вкривь и вкось&#8230;</em>&#171;</span></span></span></p>
<p>Сам доклад &#8212; 40 минут.С вопросами &#8212; час.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2014/07/14/win-fail-fail-fail/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3244</post-id>	</item>
		<item>
		<title>Без тест-кейсов, как дурак на льду</title>
		<link>https://testitquickly.com/2013/11/27/tine-nasul-cumsecade/</link>
					<comments>https://testitquickly.com/2013/11/27/tine-nasul-cumsecade/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Wed, 27 Nov 2013 16:56:15 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Видео]]></category>
		<category><![CDATA[Откровения]]></category>
		<category><![CDATA[Презентации]]></category>
		<category><![CDATA[Соображения]]></category>
		<category><![CDATA[Учеба в бою]]></category>
		<category><![CDATA[Grammarly Test Club]]></category>
		<guid isPermaLink="false">http://testitquickly.com/?p=3178</guid>

					<description><![CDATA[Давном давным (прошедшим жарким июлем) я вдоволь навыступался в тест-клубе Grammarly на тему того, как РЕЗКО и БЫСТРО и В ОДИНОЧКУ и БЕЗ ПОТЕРЬ можно/нужно обустроить тестирование, например, в стартапе. Поскольку было лето и жарко и лениво, то и подготовка, и само мероприятие заняло достаточно много времени (зато на берегу Адриатического морька), да и обработка видео,… <span class="read-more"><a href="https://testitquickly.com/2013/11/27/tine-nasul-cumsecade/">Читать далее: Без тест-кейсов, как дурак на льду &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;">Давном давным (прошедшим жарким июлем) я вдоволь навыступался в тест-клубе <a title="&quot;Сообщество для всех, кто интересуется тестированием, и приходит к нам в гости&quot; ©" href="https://www.facebook.com/GTestClub">Grammarly</a> на тему того, как РЕЗКО и БЫСТРО и В ОДИНОЧКУ и БЕЗ ПОТЕРЬ можно/нужно обустроить тестирование, например, в стартапе.</p>
<p style="text-align: left;">Поскольку было лето и жарко и лениво, то и подготовка, и само мероприятие заняло достаточно много времени (зато на берегу Адриатического морька), да и обработка видео, как видим, тоже шла в мееееедленном режиме.</p>
<p style="text-align: left;">Ожидается, что слушатель хоть немного разбирается в условиях работы в agile, и вообще понимает, что такое agile, и что такое тестирование.</p>
<p style="text-align: center;"><span style="color: #ffffff;">* * *</span></p>
<p><iframe title="Без тест кейсов, как дурак на льду (1)" width="665" height="374" src="https://www.youtube.com/embed/qVsuZD02chw?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p style="text-align: center;"><span style="color: #ffffff;">* * *</span></p>
<p><iframe title="Без тест кейсов, как дурак на льду (2)" width="665" height="374" src="https://www.youtube.com/embed/HrGb6_2REIw?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p style="text-align: left;">Ну, а теперь я хз, о чём ещё можно рассказать о тестировании в agile 🙂</p>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2013/11/27/tine-nasul-cumsecade/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3178</post-id>	</item>
		<item>
		<title>Трудности исследовательского тестирования</title>
		<link>https://testitquickly.com/2009/09/07/crapa-mi-ar-fierea-de-atita-explorare-in-testare/</link>
					<comments>https://testitquickly.com/2009/09/07/crapa-mi-ar-fierea-de-atita-explorare-in-testare/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Mon, 07 Sep 2009 13:28:03 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Exploratory testing]]></category>
		<category><![CDATA[Банальное]]></category>
		<category><![CDATA[Видео]]></category>
		<category><![CDATA[Книги]]></category>
		<category><![CDATA[Озарения]]></category>
		<category><![CDATA[Постановка мозгов]]></category>
		<category><![CDATA[Радости]]></category>
		<category><![CDATA[Соображения]]></category>
		<category><![CDATA[GlobalLogic]]></category>
		<category><![CDATA[James Bach]]></category>
		<category><![CDATA[Reuters]]></category>
		<category><![CDATA[Карузо]]></category>
		<category><![CDATA[Холмс]]></category>
		<guid isPermaLink="false">http://testitquickly.com/?p=1176</guid>

					<description><![CDATA[Пять тысяч слов о серьезном и наболевшем. Без картинок, но с линками и отступлениями. Думал и писал долго. Дочитал книгу «Secrets of a Buccaneer-Scholar» (How Self-Education and the Pursuit af Passion Can Lead to a Lifetime of Success) by JAMES BACH. Книга не о тестировании as is, она о корнях и истоках того, что называется… <span class="read-more"><a href="https://testitquickly.com/2009/09/07/crapa-mi-ar-fierea-de-atita-explorare-in-testare/">Читать далее: Трудности исследовательского тестирования &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p style="text-align: right;"><em>Пять тысяч слов о серьезном и наболевшем.</em></p>
<p><em>Без картинок, но с линками и отступлениями.</em></p>
<p><em>Думал и писал долго.</em></p>
<p>Дочитал книгу «<a href="http://testitquickly.com/2009/07/15/secrets-of-a-buccaneer-scholar/">Secrets of a Buccaneer-Scholar</a>» (How Self-Education and the Pursuit af Passion Can Lead to a Lifetime of Success) by JAMES BACH.</p>
<p>Книга не о тестировании as is, она о корнях и истоках того, что называется «исследовательское тестирование». ИссТест.</p>
<p>Уместный анекдот, в котором заключается вся суть исследовательского тестирования:</p>
<p><em>— Бэрримор, что это хлюпает у меня в ботинке?</em></p>
<p><em>— Овсянка, сэр!</em></p>
<p><em>— Но что она там делает?</em></p>
<p><em>— Хлюпает, сэр.</em></p>
<p style="text-align: center;"><span id="more-1176"></span></p>
<p><strong>Что такое Исследовательское тестирование по SWEBOK</strong></p>
<p><a href="http://www.it4business.ru/lib/42/">it4business.ru</a></p>
<p style="padding-left: 30px;">Это одновременное обучение, проектирование теста и его исполнение.</p>
<p style="padding-left: 30px;">Данный вид тестирования заранее не определяется в плане тестирования и такие тесты создаются, выполняются и модифицируются динамически, по мере необходимости.</p>
<p style="padding-left: 30px;">Эффективность исследовательских тестов напрямую зависит от знаний инженера, формируемых на основе поведения тестируемого продукта в процессе проведения тестирования, степени знакомства с приложением, платформой, типами возможных сбоев и дефектов, рисками, ассоциированными с конкретным продуктом и т.п.</p>
<p><a href="http://en.wikipedia.org/wiki/Exploratory_testing">wikipedia.org</a></p>
<p style="padding-left: 30px;">Cem Kaner, who coined the term in 1983, now defines exploratory testing as &#171;a style of software testing that emphasizes the personal freedom and responsibility of the individual tester to continually optimize the quality of his/her work by treating test-related learning, test design, test execution, and test result interpretation as mutually supportive activities that run in parallel throughout the project.&#187;</p>
<p style="padding-left: 30px;">Exploratory testing is often thought of as a black box testing technique. Instead, those who have studied it consider it a test approach that can be applied to any test technique, at any stage in the development process. The key is not the test technique nor the item being tested or reviewed; <strong>the key is the cognitive engagement of the tester</strong>, and the tester&#8217;s responsibility for managing his or her time.</p>
<p>Давно-давным, при первом знакомстве с этим термином, я подумал, что речь идет о разновидности dumb monkey testing (открой сайт и бессистемно кликай, авось, найдешь ошибку), подходом, который я не люблю, но в котором в какое-то время даже преуспел.</p>
<p style="padding-left: 30px;">Случайно я нашел однозначный способ резко и безапелляционно закрэшить какую-то из версий «Reuters Xtra 3000»*, и достиг этого именно потому, что внимательно, но достаточно бестолково переходил по линкам и заполнял поля каким-то подходящим по смыслу бредом. Нечем гордиться.</p>
<p style="padding-left: 30px;">* Гигантская софтина для трейдеров международных товарных бирж.</p>
<p>Потом понял, что ошибся, и посчитал ИссТест «тестированием без четкого плана и целей, но логичным». Плюс изучение продукта в ходе взаимодействия с ним. Это было ново и круто. Вместо того, чтобы сперва изучить матчасть и правила дорожного движения, предлагается сразу сесть за руль и поехать, нарабатывая знания на ходу&#8230;</p>
<p>Потом понял, что снова ошибся, и назвал это «тестирование по плану, но с возможностью вариаций; плюс изучение продукта в ходе тестирования».</p>
<p>Потом понял, что (настоящих тестировщиков неоднозначность и разное толкование профессиональной терминологии уже не удивляет!) это даже не вид тестирования, а вообще ПОДХОД. А подход подразумевает шиииииирокое поле самостоятельной деятельности. И что этот подход — дитя agile&#8230;</p>
<p>Тут стало туманнее — ведь agile у каждого свой 🙂 И в беседах про agile обязательно надо уточнять, что именно визави подразумевает под тем или иным термином.</p>
<p>Я забил и забыл про исследовательское тестирование. В конце концов, я не использую определенные методы и подходы, у меня в работе великий микс всего понемногу, в зависмости от контекста и поставленных задач. Не удивлюсь, если окажется, что я как раз специализируюсь на исследовательском, даже если не знаю этого термина.</p>
<p style="padding-left: 30px;">Знаю, не знаю — делов-то&#8230; Надо — изучу. Не надо — ну и не надо.</p>
<p>Я очень люблю Error guessing. Искать «слабые места» в софте я предпочитаю более логически, нежели интуитивно. Уметь «вычленять» проявление багов в определенных, труднодоступных местах, умение предупреждать места их нахождения, а затем действительно суметь их найти, обосновать, указать на точную причину проблемы — это круто. Очень круто. Это круче и ценнее, нежели «Вот вам скриншот, вот подробные шаги — разберитесь сами». Хоть и дольше и затратнее.</p>
<p>Но и от «классического подхода» «Сперва изучать документацию, затем составлять подробные тест-кейсы, стараясь максимально прояснить, придумать, описать варианты пользования, и надеяться на то, что это поможет «быть уверенным» — меня колбасит.</p>
<p>Поэтому — микс органичен!</p>
<p style="padding-left: 30px;">Тестирование «строго по тест-кейсам» мало того, что утомляет повторяемостью и безусловно снижает драгоценное внимание, но еще и реально устанавливает ощущение ограниченности, и ощущение «работаю для тим-лида, шоб он сдох». Коробит, если хорошим результатом дня условно считается «успел пройти весь скрипт».</p>
<p style="padding-left: 30px;">Понимаю в определенных обстоятельствах ценность этого подхода, но ведь сейчас я говорю только о себе, а не о том, как все надо «взять и поделить».</p>
<p>В agile я поначалу не понял, что именно следует делать мануальному тестировщику — кругом все носятся с автоматизацией&#8230;</p>
<p>Потом понял, что если программа предназначена для использования людьми — без мануального тестирования не обойтись. Проблема только в организации такой работы — привыкшим к последовательным этапам и подробным тест-кейсам бывает сложно переориентироваться. Но именно тут и работает это самое «исследовательское»! Ну, оно же и родилось в agile и для agile.</p>
<p>Тогда я стал искать теорию и практику иследовательского тестирования, чтобы не изобретать горный велосипед с подогревом, и поскучнел, бо НЕ НАШЕЛ теорию исследовательского тестирования. Нашел только блогосферные огрызки толкований отдельных аспектов этого подхода.</p>
<p style="padding-left: 30px;">Собственно, какая там теория, если это просто подход, а не методология&#8230;</p>
<p>Учеба «по-блогам» &#8212; это круто (я сам ее продукт), но в принципе у такой учебы есть большие проблемы.</p>
<h2><strong>Учеба по-блогам</strong></h2>
<p>Например, блогученику свойственно придавать неимоверно важное значение дизайну, юзабилити, логике, производительности интернет-магазина, который находится у него в разработке. Он знает все про важность выбора доменного имени, знает все про плотность ключевых слов в абзаце на странице, знает все о продвижении сайта&#8230; Знает, что нужную информацию пользователь должен найти максимум в три клика с главной страницы, и знает, что пользователи не читают ни справку, ни предупреждения, ни тексты на странице (они вообще с закрытыми глазами серфят), и если загрузка страницы длится больше пяти секунд — сразу убегают к конкурентам.</p>
<p style="padding-left: 30px;">В действительности — люди очень упорно возятся с нафигацией сайта, на который попадают в поиске чего-то, и при возникновении проблем склонны винить в неспособности найти нужное&#8230; скорее себя, чем сайтосоздателей.</p>
<p>Но этот блогученик в упор не знает о том, что для интернет-магазина важнее быть источником продаж, а не википедией по предлагаемым продуктам.</p>
<p>И не думает (ибо еще не знает) о том, как обустроена система доставки товаров, как обустроено их хранение, как устанавливается прохождение товара по статусам, как важно хранить и моментально давать пользователю историю каждой отдельной покупки и всех предыдущих тоже.</p>
<p>Он думает о том, как расположить и структурировать информацию&#8230; Он думает о том, что &#171;вот сделаем каталог, и это, вероятно, будет способствовать продажам.</p>
<p>Учеба «по-блогам» легко даст понятия и представление о чем-то, но с трудом расскажет основы, теорию, фундаментальность. Все это, обычно, в книгах. В лекциях. В головах других людей. И носители этих фундаментальных основ в своих блогах пишут про отдельные аспекты, а не про основу. Предполагается, что основу читатель знает, или же изучит.</p>
<p style="padding-left: 30px;">Куда там&#8230;</p>
<p>К чему приводит такая учеба: когда-нибудь ученик все равно захочет увидеть стройную систему в своих знаниях. Захочет «силлабус». Если найти систему сложно — придется строить ее самостоятельно. Придется делать обобщения и выводы, а они могут существенно отличаться от реального положения дел.</p>
<p><strong>Примеры пагубного воздействия учебы «по-блогам»</strong></p>
<p style="padding-left: 30px;"><span style="color: #008000;"><em>Девчонки, я мыла лицо мылом с яблочным ароматом. И у меня исчезли прыщи. Мой вам совет — чтобы прыщи сошли, используйте «яблочное» мыло!</em></span></p>
<p style="padding-left: 30px;">Ученик не знал о том, что его личный «переходный возраст» как раз завершился, и что «яблочное» мыло — просто совпадение. Но вывод уже сделан, и возведен в степень системы.</p>
<p style="padding-left: 30px;"><span style="color: #008000;"><em>Я сто раз ходил «на дело», и попался только потому, что меня сдали подельники. Мой вам совет — на дело надо ходить только в одиночку.</em></span></p>
<p style="padding-left: 30px;">Ученик не знал о том, что «если воровал, значит — сел» при любом раскладе, и что подельники — просто совпадение. Но вывод уже сделан, и возведен в степень системы.</p>
<p style="padding-left: 30px;"><span style="color: #008000;"><em>Я второй год бился над рейтингом моего интернет-магазина, и смог его поднять только после того, как поменял домен. Мой вам совет — заранее выбирайте подходящий домен для сайта.</em></span></p>
<p style="padding-left: 30px;">Ученик не знал о том, что одновременно со сменой домена у него на странице «Контакты» кто-то приписал телефоны его офиса, и убрал безликую форму «Обратная связь», которая никак не сообщала, куда пойдет письмо и дойдет ли вообще. Ну, не знал он, что телефон в продажах через интернет — один из серьезнейших стимулов доверия к магазину, и что при покупке через интернет телефон используется чаще, чем написание емайлов. Но вывод уже сделан.</p>
<p>Еще раз: учеба «по-блогам» хороша для прояснения деталей, но с системой профильных знаний надо знакомиться по книгам и людям, которые с этой системой УЖЕ знакомы. Ищи первоисточник, а не его пересказ</p>
<p style="padding-left: 30px;">«<em>Ваш Карузо ужасно фальшивит! Я его лично не слышал, но Рабинович мне кое-что напел</em>».</p>
<p>Моя проблема с исследовательским тестированием была в том, что я знакомился с ним по-блогам. Впечатление получилось неполное, неточное, неясное. И каждая новая статья приносила путаницу в стиле Алисы в стране чудес («<em>Чтобы стоять на месте — надо быстро бежать!</em>»)</p>
<p style="padding-left: 30px;">Даже шикарная статья «<a href="http://bugsclock.blogspot.com/2009/08/blog-post_26.html">Исследовательское тестирование: В поисках музыки исследования ПО</a>», по-моему, приносит больше смятения и путаницы, нежели ясного толкования исследовательского тестирования (<em>&#171;Конечно, эта статья не претендует на стройное изложение идей исследовательского тестирования, скорее она призвана привлечь интерес профессиональных тестировщиков к этому виду тестирования&#187;</em>). В ней сделан упор на объяснение того, какими качествами должен обладать тестировщик, который использует ИссТест, а не на объяснение сути ИссТест.</p>
<p style="padding-left: 30px;">Мне все кажется, что надо знакомиться с этим подходом по статьям «о сути», когда можно самостоятельно прикинуть и определить собственную подходимость к ИссТест.</p>
<p>Я рад, что смог полностью прочитать «Secrets of a Buccaneer-Scholar». Оказывается, этот подход ИссТест — серьезная, фундаментальная система жизнеобразования. Exploratory — это не столько стиль тестирования, сколько стиль жизни отдельно взятого Джеймса Баха. И подход «исследовательское тестирование» — следствие его рутинной жизнедеятельности.</p>
<p>После знакомства с его подходом к жизни и к обучению вообще, термин «исследовательское тестирование» становится весьма простым, понятным, недвусмысленным, доходчивым. Он органичен для его автора. Это, грубо говоря, сам Джеймс Бах. Ни добавить, ни отнять — бери, как есть.</p>
<h2><strong>(Не) бросай на фиг школу!</strong></h2>
<p>Способ учебы, который использует Бах, для «среднего» человека немыслим. Если судить о нем по первому впечатлению, и попытаться следовать его жизненному примеру, то картинка такая:</p>
<p style="text-align: center;">«Бросай нафиг школу!</p>
<p>Не ходи в университеты!</p>
<p>Учись самостоятельно!</p>
<p>Это может сделать каждый!»</p>
<p>Ничего подобного.</p>
<p>Среднему индивиду прямая дорога в школу, затем в вуз, затем на работу, затем на кладбище — удобрением был, удобрением и остался.</p>
<p>Самообучение сродни мастерам в agile – для того, чтобы быть «Гибким», надо сперва стать крайне собранным, огранизованным, самостоятельным, сильным духом. Иначе тебе будет нужен постоянный менеджер, который будет давать тебе работу, зарплату, пинок под зад, затем ты начнешь искать себе следующего менеджера&#8230; А дракона нужно убивать в себе.</p>
<p>Типам вроде Баха можно завидовать. Я, например, в свое время очень хотел бросить школу. Не посмел, отчисление из школы считалось очень серьезным наказанием. Хотя по-молодости несколько раз был на грани 🙂</p>
<p>Многое, очень многое мог бы сделать и до этого момента, если бы на пути оказался бы кто-то, кто помог избавиться от страхов вроде «Надо учиться только в вузе, ведь без диплома меня никто не возьмет на работу&#8230;» Ну, наверстаю. Сам.</p>
<p>Институт я хотел бросить уже на втором курсе, кроме шуток. Не посмел. Но, таки бросил, на самом последнем курсе, потому что обстоятельства сложились непробиваемые для авторитета моей мамы — «ввиду неоплаты учебы не допускать к выпускным экзаменам следующих студентов&#8230;» Я сказал «Наконец-то!» и убежал работать, убежал туда, где мне было интересно. Начал просто учиться профессии.</p>
<p style="padding-left: 30px;">Может быть, мне просто повезло?</p>
<p>Дык вот, тема доклада было не обо мне, а о трудностях исследовательского тестирования. Трудности тут такие: если не знать и/или не видеть систему этого подхода к тестированию, можно скатиться в его неверное толкование, а следовательно — и ошибочное внедрение.</p>
<p>И скатиться очень легко. Начнем хотя бы с «Надо бросить школу».</p>
<p style="padding-left: 30px;"><span style="color: #ff0000;"><strong>Да</strong></span>, если у тебя есть собственная система обучения, и та, что представлена в школе, тебе только мешает учиться.</p>
<p style="padding-left: 30px;"><span style="color: #ff0000;"><strong>Нет</strong></span>, если тебе просто лениво и собственной системы нет. Или если ты считаешь, что и так достаточно разумен, чтобы жить «без образования».</p>
<p>Бах считает, что пойти «его путем» может каждый. Точнее, он призывает попробовать. В самом начале книги есть знаковый диалог между ним и типичной учительницей:</p>
<p style="padding-left: 30px;">&#171;Mr, Bach, I want you to know that I will recommend against you speaking at our school again,&#187; she said. &#171;Your message is dangerous for children to hear.&#187;</p>
<p style="padding-left: 30px;">She was almost right. It was dangerous, what I said — dangerous for her. To maintain a docile herd of students, her school needs them to accept certain truths:</p>
<p style="padding-left: 30px;">* You must study what we tell you. What we say is the only thing that matters.</p>
<p>* You must pass our tests. Our tests measure the only important things about you,</p>
<p>* You must attend school. Only through schooling can you hope to enjoy a good life.</p>
<p style="padding-left: 30px;">This is what I call schoolism — the belief that schooling is the necessary and exclusive way to get a good education. Musf and only!</p>
<p style="padding-left: 30px;">&#171;I told them about myself,&#187; I said, &#171;and how I came to be here, I told them the truth.&#187;</p>
<p style="padding-left: 30px;">&#171;It may be true for you,&#187; she replied. But these kids aren&#8217;t super smart like you. They don&#8217;t come from well-off families. They&#8217;re barely staying in school, and you just told them that they don&#8217;t need to be here. They do need to be here!&#187;</p>
<p style="padding-left: 30px;">&#171;Yes they could be successful if they put in the work,&#187; she conceded. &#171;But I don&#8217;t think they heard that part of your message. I&#8217;m barely holding on to some of these kids as it is. I&#8217;m afraid you&#8217;ve made my job much harder, Mr. Bach. Some of them are going to take a &#8216;what the hell&#8217; attitude instead of applying themselves.&#187;</p>
<p style="padding-left: 30px;">&#171;So what if they do?&#187; I replied. &#171;This is America. They probably won&#8217;t starve. They probably won&#8217;t be eaten by wolves. If they don&#8217;t care about education, they may be forced to 14 work at low-skilied jobs they won&#8217;t enjoy, such as fast food or house cleaning. However bad those fates may sound, they are neither fatal nor permanent. Or perhaps they will accidentally educate themselves by starting a new business, building things, or doing theatre, music, or sports. Are you worried they&#8217;ll turn to crime? Then show them more options, not fewer. They will learn and grow from anything that happens, unless they believe there is no hope. Your job is not to make them huddle quietly in a corral, but to help them get out there and seek their fortunes. Show them a way!&#187;</p>
<p>Ближе к концу книги он вообще говорит:</p>
<p style="padding-left: 30px;">A typical public school in the United States is all about honoring the herd. The students are supposed to be sheep, but too many of the teachers are just older and fatter sheep. Schoolism is a herd mentality.</p>
<p>Прошу учесть, что фраза высказана в определенном контексте. Вырывать ее не следует.</p>
<p>Итак, Бах считает, что пойти «его путем» может каждый. Логично предсказать, что заниматься исследовательским тестированием может каждый?</p>
<p>Не может.</p>
<p>Нужно быть реально предрасположенным к такой деятельности.</p>
<p>Нужно уметь учиться «на ходу» НЕ ТОЛЬКО в процессе тестирования. Это должно быть нормой жизни. И умение это заключается не только в постоянном чтении блогов, it4business форума или статей с Software-Testing.ru.</p>
<p>Нужно уметь самостоятельно решать, что нужно изучить для дела, а что нет. Сам Бах руководствуется собственным интересом — где ему становится интересно, там он и «копает» углубленно. И ищет он, конечно, системность.</p>
<p>Вот как Джеймс учит историю:</p>
<p style="padding-left: 30px;">Roman Empire fell on some date. What was it? 476? That is not interesting history to me. I care about why Rome fell, not whether it fell on a Tuesday.</p>
<p style="padding-left: 30px;">What authentic problem motivated my questions? My need to make sense of the world. I wanted to understand human events on a millennial global scale, as well as a household daily scale. At the time, I thought that having the ability to analyze society and history in terms of the questions on my syllabus would help me be more comfortable even within the confines of my own life experience.</p>
<p>Обычный школьник этой возможности лишен. Он даже не знает, что его учат по какому-то плану, выбирать и корректировать который ученик <strong>не может</strong>.</p>
<p>По плану у нас записано «Причины падения Римской империи».</p>
<p>Знаете причины?</p>
<p style="padding-left: 30px;">Ну, рабов у них было слишком много, и вот, ослабли&#8230;</p>
<p style="padding-left: 30px;">Ну, политическая система обрушилась от собственной тяжести — солдаты в провинциях начали избирать собственных императоров, и таскать их в Рим (практика была не новой, но когда она приобрела пропорции вселенского флэш-моба, столичные власти не смогли ею управлять).</p>
<p>Нет, полагается сообщить, что в таком-то году вождь варваров Аларих — далее цитируем абзацами. И упоминаем источники, даже если мы их и не открывали. Приспособился к этой системе — ты хороший ученик. Не приспособился — наказание.</p>
<p>Однако умение учиться самостоятельно доступно многим.</p>
<p>Вот как Джеймс учится «для работы»:</p>
<p style="padding-left: 30px;">One day a lawyer called me with a proposal: &#171;We&#8217;d like to hire you to find if a software product infringes our patent. Is that the kind of testing you do?&#187;</p>
<p style="padding-left: 30px;">I said, &#171;Yeah!&#187; (I had never tested a product for patent infringement before. <strong>But I could test for anything</strong>.)</p>
<p style="padding-left: 30px;">She asked, &#171;Do you know the technology behind network switching in Windows?&#187; I said, &#171;Yeah!&#187; (I didn&#8217;t know what she was talking about. But I could learn it.)</p>
<p style="padding-left: 30px;">Then she asked me to read the patent and examine the product. Look at the first claim in that patent:</p>
<p style="padding-left: 30px;">&#171;<em>1. A method for dynamically routing data over multiple dissimilar parallel wireless networks that are each monitored for status information, the method comprising: maintaining a priority of each wireless network, the priorities indicating a most preferred path; determining availability of each wireless network based upon status information associated with each wireless network; indicating a current most preferred network from the wireless networks determined to be available, the indication being based upon the network priorities; switching from a current network, which is dissimilar from the current most preferred network, to the current most preferred network during a transmission, at least one of the current network and current most preferred network being time continuous; and remaining connected to the current network for a period of time after switching to the current most preferred network.</em>&#171;</p>
<p style="padding-left: 30px;">Did you read it through? If not, you&#8217;re in good company: me. According to the Flesch-Kincaid Index, which measures reading difficulty, that text is written at a sixtieth grade level. I found it terribly confusing, at first.</p>
<p style="padding-left: 30px;">This was a high-pressure learning challenge.</p>
<p style="padding-left: 30px;">How do you think I felt when I finally forced myself to read all those words? I was being paid three hundred dollars per hour. My client expected me to read the patent and understand it. I didn&#8217;t understand it. Was I intimidated?</p>
<p style="padding-left: 30px;">No. By the time you finish this book, you won&#8217;t feel intimidated by complex and obscure text, either.</p>
<p style="padding-left: 30px;">Complexity and obscurity are illusions. They are figments of mind-shock. For a buccaneer mind-shock is no cause for alarm. It is a temporary condition, a big wave coming over the bow. There&#8217;s a splash. I get wet. But steady on the helm, there. She&#8217;ll pull through.</p>
<p style="padding-left: 30px;">On first reading, I wasn&#8217;t sure I was qualified to do the project. The expert on the other side of the case, a professor at a well-respected university, was taken aback to discover his intellectual opponent was a high school dropout.</p>
<p style="padding-left: 30px;">Guess who won the case.</p>
<p style="padding-left: 30px;">By the time we went to trial, I had become a wizard of the patent. I wrote a program to separate and index each sentence, clause, and word. I memorized most of the three patents involved, analyzing them over hundreds of hours. I absorbed a dozen books on networking technology. I constructed a dedicated test lab. I studied the underlying instructions that comprised the product, and used a variety of hacking tools to analyze its operation. I was better prepared than the professor. He spent two or three days testing it. I devoted nearly four hundred hours to testing it. I brought in a video crew to film me testing it. I tested it inside out and sideways.</p>
<p style="padding-left: 30px;">The jury noticed.</p>
<p style="padding-left: 30px;">The facts were on our side, of course. That helps when you need to win a lawsuit. But here&#8217;s my point: the reason I plunged into this project, even though I didn&#8217;t know whether I was smart enough to complete it, was because I knew I was smart enough to start. Starting is what matters. I&#8217;ll be smarter by the finish.</p>
<p style="padding-left: 30px;">That&#8217;s one of the benefits of being a buccaneer-scholar. With a nonstop education you are in a position to attack opportunities that sail your way, instead of steering clear with &#171;Sorry, I&#8217;m not qualified.&#187;</p>
<p style="padding-left: 30px;">When the lawyer first called me, I was in the midst of writing the key elements of my buccaneering method for this book. That case became a fifteen-month interruption.</p>
<p>Круто.</p>
<p>Однако, почему этот подход не является всемирно признанным? Повзрослел, выбил в кабинете директора пару стекол, и ушел во взрослый мир, где можно все это делать, никого особо не спрашивая&#8230;</p>
<p>Во взрослом мире эта байда сохраняется в полную силу. Люди, проводящие интервью, придумывают множество технических вопросов, по которым, как предполагается, можно оценить уровень кандидата (<a href="http://habrahabr.ru/blogs/php/21681/">пример</a>).</p>
<p><strong>Computer science</strong></p>
<ol>
<li>Опишите различия между нитью и процессом.</li>
<li>Опишите основные принципы работы Virtual Memory. Какой максимальный объем виртуальной памяти доступен процессу на 32х битных системах?</li>
<li>Что такое функции высшего порядка? Опишите алгоритм работы функций высшего порядка &#8212; map и fold (также встречается под названием reduce).</li>
<li>Какая сложность у процедуры вставки в простое бинарное дерево поиска в среднем случае? Какой сложностью обладает алгоритм, проходящий по одному простому бинарному дереву из n элементов, и вставляющий эти элементы в другое простое бинарное дерево из m элементов?</li>
<li>P=NP? Перечислите самые известные NP задачи.</li>
<li>Опишите различия static и dynamic typing. А что такое слабая типизация?</li>
</ol>
<p>Чтобы это пережить и не ударить интервьюера лицом в грязь, надо заранее заучить, запомнить, зазубрить. Ну-ка, сынку, перечисли мне самые известные NP задачи&#8230;</p>
<p>Это Джеймс, понимаете, Бах лениво встанет, спросит «What a feeglee-meeglee?», и убежит обратно в США. А большинство пойдут неспешно домой, утрут слезки, и будут зубрить, чтобы на следующем интервью не «опозориться». Зубрить, а не учить алгоритмы&#8230;</p>
<p style="padding-left: 30px;">Тема скользкая, но&#8230;</p>
<p>Я тоже когда-то изрядно зубрил силлабус тестирования (теперь просто читаю при необходимости), хотя почти не понимал, что именно учу. На одном из первых интервью очень бойко говорил, но когда меня спросили, как я буду тестировать поле ввода — я обломался. Я ж не к этому готовился. В книгах про это не рассказывают&#8230;</p>
<p style="padding-left: 30px;">А уж каким ужасающим было мое первое интервью в тестировании&#8230; 🙁</p>
<p>В GlobalLogic, поскольку компания большая, есть особые, ежегодные митинги оценки знаний каждого работника в отдельности. На одном таком митинге-оценке меня спросили «Какие виды тестирования ты знаешь? Давай, перечисли как из пушки&#8230;» Но вместо «пушки» я сделал паузу, затем меня пробило на странное «хи-хи», и ответ не получился. Скомкался.</p>
<p style="padding-left: 30px;">Ну, я знаю много видов тестирования. Я могу много всякого о каждом из них рассказать. Но запоминать их в виде <a href="http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D1%8F#.D0.9A.D0.BB.D0.B0.D1.81.D1.81.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F_.D0.B2.D0.B8.D0.B4.D0.BE.D0.B2_.D1.82.D0.B5.D1.81.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F">списка</a>, почему-то, никогда не было нужды&#8230;</p>
<p>Я получил оценку «as expected» и пошел продолжать тестировать нашу сложную, многомиллионно стоящую софтину. И выпил изрядно квасу, бо вспотел. Ведь если бы оценка в итоге получилась бы ниже «as expected», и я не потдвердил бы свой высокий статус software engineer&#8230;</p>
<p style="padding-left: 30px;">Если кто не знает, квас в GlobalLogic — БЕСПЛАТНЫЙ и вкусный.</p>
<h2><strong>Забивай себе «чердак» лично</strong></h2>
<p>Если смотреть на учение Баха поверхностно (первое впечатление), то получится, что чему-то специально учиться не стоит. Учиться надо только тогда, когда есть необходимость. И только тому, чем нужно оперировать прямо сегодня и сейчас.</p>
<p>Неверный вывод.</p>
<p>Я уверен, что и сам Бах не хотел бы подразумевать именно такую интерпретацию. Хоть он постоянно прикидывается ленивым обжорой, он намного умнее этого «изображения себя».</p>
<p>На эту тему вспомнилась сцена знакомства Холмса с Ватсоном в «том самом» сериале. В самом начале есть такой диалог:</p>
<p style="padding-left: 30px;"><em>Сыщик берет в руки увесистый фолиант.</em></p>
<p style="padding-left: 30px;">&#8212; Мистер Ватсон!</p>
<p style="padding-left: 30px;">&#8212; Да!</p>
<p style="padding-left: 30px;">&#8212; Это роман?</p>
<p style="padding-left: 30px;">&#8212; Да!</p>
<p style="padding-left: 30px;"><em>Холмс обескуражен.</em></p>
<p style="padding-left: 30px;">&#8212; Вы что, читаете романы?!</p>
<p style="padding-left: 30px;">&#8212; А вы хотите сказать, что не читаете?.. Это Диккенс.</p>
<p style="padding-left: 30px;">&#8212; Не читал, не читаю и не собираюсь читать… Я вообще не читаю беллетристику.</p>
<p style="padding-left: 30px;">&#8212; А история, философия?</p>
<p style="padding-left: 30px;">&#8212; История, философия – в руки не беру!</p>
<p style="padding-left: 30px;">&#8212; Ну, а как же Аристотель, Жанна д’Арк… Коперник?!</p>
<p style="padding-left: 30px;">&#8212; «Коперник»? Знакомая фамилия… Что он сделал?</p>
<p style="padding-left: 30px;"><em>Ватсон фалломорфирует.</em></p>
<p style="padding-left: 30px;">&#8212; Боже мой!.. Так ведь это же он открыл, что Земля вращается вокруг Солнца! Или этот факт вам тоже не известен?</p>
<p style="padding-left: 30px;">&#8212; Нну-у… мои глаза говорят мне, что, скорее… солнце вращается вокруг земли… Впрочем, может, он и прав ваш этот… как его? Коперник!</p>
<p style="padding-left: 30px;">&#8212; Простите меня, Холмс. Вы человек острого ума, это сразу видно. Вы превосходно знаете химию… Как же вы не знаете вещей, которые известны каждому школьнику?!</p>
<p style="padding-left: 30px;">&#8212; Ну, когда я был школьником, я это знал, а потом основательно забыл!</p>
<p style="padding-left: 30px;">&#8212; Так вы что – хвастаетесь своим невежеством?!</p>
<p style="padding-left: 30px;">&#8212; А вы, Ватсон!? Вы можете отличить грязь на Риджин-стрит от грязи на Пикадилли?.. Или пепел гаванской сигары от пепла манильской? Или можете мне сказать – что написано в третьем параграфе уложения о наказаниях Британской Империи? Можете?!</p>
<p style="padding-left: 30px;">&#8212; Но ведь… я говорю&#8230; об элементарных вещах, которые знает каждый!..</p>
<p style="padding-left: 30px;">&#8212; Но я ведь – не каждый!! Ватсон, поймите&#8230; Человеческий мозг – это пустой чердак, куда можно набить всё, что угодно. Дурак так и делает – тащит туда нужное и ненужное. И, наконец, наступает момент, когда самую необходимую вещь туда уже не запихнёшь. Или она запрятана так далеко, что её не достанешь… Я делаю по-другому. В моём чердаке только необходимые мне инструменты! Их много. Но они в идеальном порядке и – всегда под рукой! А лишнего хлама мне не нужно.</p>
<p style="padding-left: 30px;">&#8212; Учение Коперника… по-вашему, хлам?</p>
<p style="padding-left: 30px;">&#8212; Хорошо. Допустим, земля вращается вокруг солнца.</p>
<p style="padding-left: 30px;">&#8212; То… то есть как, допустим?!</p>
<p style="padding-left: 30px;">&#8212; Земля! Вращается вокруг солнца… Но мне! В моём деле! Это не пригодится.</p>
<p style="padding-left: 30px;"><em>Ватсон окончательно фалломорфирует.</em></p>
<p style="padding-left: 30px;">&#8212; Как ужасно было бы жить в мире, где не с кем было бы поговорить о поэзии… о живописи… о политике… Где каждый знает только то, что ему нужно для дела…</p>
<p style="padding-left: 30px;">&#8212; Мистер Ватсон, я могу вас утешить. Дело в том, что таких людей, как я, в мире очень немного… Может быть, даже я такой один.</p>
<p>Обе стороны в этом диалоге неправы. Но обе представляют определенные подходы к учебе, и этим интересны.</p>
<p>Ватсон знает и ценит ВСЕОБЩЕСТЬ образования. Знать, кто такой Коперник, знать философские разности — это круто.</p>
<p>Холмс знает про всеобщесть, но не ценит ее. Он ценит точные знания, полученные в определенное время для решения определенных задач.</p>
<p>Неправильность заключается в следующем — оба представляют и, как бы, отстаивают правильность своей позиции, не делая скидок и попыток смиксовать оба подхода. В действительности ведь Холмс может не знать, кто такой Коперник, но НЕ может не знать о том, как и почему сменяются день и ночь. Иначе он не смог бы делать выводы. Дедукция не сработала бы. Это не дедукция — принять смену дня и ночи как данность.</p>
<p>А без умения самообучаться его дедуктивный метод так и не развился бы. Если кто помнит, Холмс развивал свой метод целенаправленно, и не видел в своих способностях ничего необычного.</p>
<p style="padding-left: 30px;">За необычность следует благодарить Ватсона, который ВИДИТ то же, что и Холмс, но не НАБЛЮДАЕТ (пример с количеством ступенек к его двери — Ватсон видит их ежедневно, но ни разу не утрудился их сосчитать).</p>
<p style="padding-left: 30px;">Поэтому Ватсон в упор не видит логической цепочки, которая начинается только от наблюдения. И чтобы интрига сохранялась, Конан Дойл заставлял Холмса всегда объяснять суть происходящего только в конце текста.</p>
<p style="padding-left: 30px;">Кстати, подсчет количества ступенек — лишняя информация в чердаке Холмса 🙂</p>
<p>Подход Ватсона тоже слишком всеобщий — он ценит ВСЕОБЩЕСТЬ знаний выше, чем их специализацию. Но, например, лично меня кормит именно специализация, которая построена на большой пласте знаний, не связанных с тестированием. В детстве под одеялом с фонариком я читал отнюдь не Майерса и Бейзера&#8230; 🙂</p>
<p>Подход Баха такой же — знать всё невозможно, но и не нужно. У него есть и бумажная, и электронная версия Британской энциклопедии, но это не сделало его умным (сам так пишет). У нас сейчас есть еще и википедия — ну, и что?</p>
<p>Умным делает нас не возможность цитирования, а способность обобщать и делать выводы.</p>
<p style="padding-left: 30px;">Догадайся по капле воды о существовании океана&#8230;</p>
<p>Способность решать возникающие проблемы (неважно &#8212; в тестировании или в приготовлении суши).</p>
<p>Способность запоминать наилучшую последовательность приемов и действий, и применять их по мере необходимости, комбинируя и изобретая.</p>
<p>Короче говоря, «чердак» надо забивать чем-то постоянно, но не тем, что тебе дают, а тем, что лично тебе интересно, и что ты ищешь и находишь самостоятельно. Секрет не в том, что много записано, а в том, как все тэгируется и организуется. И как используется 🙂</p>
<p>В моей голове петабайты информации. И есть место для еще миллиарда петабайт, мой мозг все никак не забивается информацией. И узнавание нового никак не сопровождается потерей чего-то ранее сохраненного.</p>
<h2><strong>Но как вы догадались, что я не «Холмс», мистер Холмс?</strong></h2>
<p>Стать таким, как Холмс, сможет не каждый. Им не стать — им надо быть. К Баху это относится в той же мере.</p>
<p><strong>Холмс или ЛСЭ (логико-сенсорный экстраверт)</strong></p>
<p style="padding-left: 30px;">Люди этого типа ценят деловые качества людей, их компетентность, любят оперировать конкретными фактами, комбинировать их, проявлять изобретательность.</p>
<p style="padding-left: 30px;">Один из наиболее выдающихся изобретателей (Томас Эдисон).</p>
<p style="padding-left: 30px;">ЛСЭ собирает множество фактов, относящихся к его роду деятельности. Не случайно, его можно назвать прирожденным разведчиком &#8212; сбор информации проходит вполне естественно. Здесь можно вспомнить легендарного Рихарда Зорге.</p>
<p style="padding-left: 30px;">Все яркие черты: безукоризненное логическое мышление как образец могущества человеческого разума, умение проводить экспертизу, ставить химические опыты, играть на скрипке и превосходная наблюдательность, изобретательность.</p>
<p style="padding-left: 30px;">Выполняя работу, ЛСЭ иногда опасается, что делает её несвоевременно, поэтому старается опередить события.</p>
<p>Лично я интроверт, да еще и инуитивно-логический. Я не Холмс. Я не Бах. Мне не стать настоящим буканиром?</p>
<p>Стать.</p>
<p>Просто мне не стать лично Джеймсом Бахом.</p>
<p>Кем Канер, по определеннию Баха, тот еще буканир. Но одновременно — еще и один из самых «систематически образованных» людей:</p>
<p style="padding-left: 30px;">Cem has a doctorate in psychology and a law degree, as well. He&#8217;s one of the most systematically educated people I know, and yet one of the most humble about what he knows. His studies are deep and his papers are heavily footnoted. Cem inspired me to study the philosophy and ethics of science.</p>
<p>Я могу сделать микс&#8230; И если мне суждено не подавиться собственным изобретением, то дела идут отлично.</p>
<p style="padding-left: 30px;">Хотя, есть определенная прелесть в том, что ему мною тоже никогда не стать, и я могу подумать о самостоятельном методе самообучения 🙂</p>
<p>Я нашел в книге Джеймса много того, что сам хотел бы сформулировать, но еще не дорос до этого. Мне такие книги ценны.</p>
<h3><strong>Избранные цитаты из книги «Secrets of a Buccaneer-Scholar»</strong></h3>
<p style="padding-left: 30px;">1</p>
<p style="padding-left: 30px;">If I can find the one person in a hundred who value what I am and pay for it, the other ninety-nine won&#8217;t matter.</p>
<p style="padding-left: 30px;">2</p>
<p style="padding-left: 30px;">I don&#8217;t know how to talk about things that don&#8217;t matter.</p>
<p style="padding-left: 30px;">3</p>
<p style="padding-left: 30px;">My public status comes from</p>
<p>&#8212; my reputation,</p>
<p>&#8212; Reputation is the story other people tell about me.</p>
<p>&#8212; my portfolio,</p>
<p>&#8212; My portfolio is the part of my work available for review.</p>
<p>&#8212; and how I do on life&#8217;s tests.</p>
<p>&#8212; A test is any opportunity to demonstrate my knowledge and skill.</p>
<p style="padding-left: 30px;">For instance, I&#8217;m attracted to software testing as a job because testing problems have no fixed solution. Every testing problem is a learning challenge. Testing always seems fresh to me, and it rewards ingenuity. It&#8217;s a game where the rules are sometimes murky and mysterious, and for me, that&#8217;s part of its charm. Perhaps the secret to happiness is finding the games we love to play, instead of learning how to win at games we hate.</p>
<p style="padding-left: 30px;">4</p>
<p style="padding-left: 30px;">Of course I read every testing book I could find. I discovered software testing standards and studied those, too. I studied most evenings and weekends.</p>
<p style="padding-left: 30px;">At first I thought I would learn a lot from the other testers. There were more than four hundred of them in my building. But talking to them revealed a startling truth: nobody cared.</p>
<p style="padding-left: 30px;">Almost nobody. In the first six months I worked at Apple, out of all the testers in the software testing division, I met maybe ten who were also reading testing books. The rest muddled through without much ambition to master their craft. It was clear that catching the college kids would not be difficult, after all.</p>
<p style="padding-left: 30px;">GREAT SECRET</p>
<p style="padding-left: 30px;">Most people, most of the time, don&#8217;t try very hard.</p>
<p style="padding-left: 30px;">5</p>
<p style="padding-left: 30px;">The pattern I experienced at Apple would be confirmed almost everywhere I travelled in the computer industry: most people have put themselves on intellectual autopilot. Most don&#8217;t study on their own initiative, but only when they are forced to do so. Even when they study, they choose to study the obvious and conventional subjects. This has the effect of making them more alike instead of more unique. It&#8217;s an educational herd mentality.</p>
<p style="padding-left: 30px;">6</p>
<p style="padding-left: 30px;">What this means for success is simple. Knowledge workers succeed, not based on what they know, but rather how they learn. It&#8217;s the difference between a pantry and a supermarket. I don&#8217;t stock my pantry with a year&#8217;s supply of every kind of food. Even if I did, the food wouldn&#8217;t be fresh. Instead, I go to the supermarket when I need something. The market has an amazing variety of anything I could want, whenever I want it. I keep myself from starving by living near a system that provides me with food, and by knowing how to use that system.</p>
<p style="padding-left: 30px;">The supermarket of learning is online, a Google away. Or it&#8217;s embodied in the minds of my colleagues, whom I email when I need emergency tutoring. It&#8217;s in my personal pantry of books}1&amp; two thousand of them, most of which I haven&#8217;t read—they are standing by in case I need them.</p>
<p style="padding-left: 60px;">Узнаем подход Холмса с его «чердаком»? Еще бы&#8230;</p>
<p style="padding-left: 30px;">7</p>
<p style="padding-left: 30px;">At first he (его брат Джон Бах, впоследствии работал тестировщиком в Microsoft) didn&#8217;t believe he could be a tester, because he had no training in computers. Like most people, lack of self-confidence is the first barrier to get over.</p>
<p style="padding-left: 30px;">&#171;You don&#8217;t need computer training, Jonny, but you do need to start learning,&#187; I told him. &#171;That&#8217;s under your control. You can learn anything you want about computers, starting now.&#187;</p>
<p style="padding-left: 30px;">I lectured him and I drilled him in the ways of examining technology to uncover its deficiencies. I stood him in front of a whiteboard and made him practice explaining his methods and results. Slowly he lost his fear.</p>
<p style="padding-left: 30px;">
<p><span style="display: block; width: 425px; margin: 0 auto;">[vodpod id=Groupvideo.3369521&amp;w=425&amp;h=350&amp;fv=id%3DgFupCdM3pqaO%26linktarget%3D_self]</span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2009/09/07/crapa-mi-ar-fierea-de-atita-explorare-in-testare/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1176</post-id>	</item>
		<item>
		<title>Тестирование в Agile (Подкаст)</title>
		<link>https://testitquickly.com/2009/09/04/testarea-in-agile-e-pentru-baieti-duri/</link>
					<comments>https://testitquickly.com/2009/09/04/testarea-in-agile-e-pentru-baieti-duri/#respond</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Fri, 04 Sep 2009 07:17:32 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Автоматизация]]></category>
		<category><![CDATA[Подкасты]]></category>
		<category><![CDATA[Асхат Уразбаев]]></category>
		<category><![CDATA[Илья Гаврилов]]></category>
		<guid isPermaLink="false">http://testitquickly.com/2009/09/04/%d1%82%d0%b5%d1%81%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2-agile-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82/</guid>

					<description><![CDATA[Участники: Асхат Уразбаев – учредитель ScrumTrek Илья Гаврилов – начальник отдела тестирования, Exigen Алексей Лупан – testitquickly.com О чем говорили Как вы стали тестировщиком? Чем программист отличается от тестировщика? Какой процент кода покрывать авто-тестами? Есть ли вред от TDD? Кто пишет и кто запускает тесты? Имеет ли смысл иметь выделенного тестировщика-автоматизатора и в каких случаях?… <span class="read-more"><a href="https://testitquickly.com/2009/09/04/testarea-in-agile-e-pentru-baieti-duri/">Читать далее: Тестирование в Agile (Подкаст) &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p>Участники:</p>
<ul>
<li>Асхат Уразбаев – учредитель <a href="http://ScrumTrek.com">ScrumTrek</a></li>
<li>Илья Гаврилов – начальник отдела тестирования, <a href="http://www.exigenservices.ru/">Exigen</a></li>
<li>Алексей Лупан – <a href="http://testitquickly.com">testitquickly.com</a></li>
</ul>
<p>О чем говорили</p>
<ul>
<li>Как вы стали тестировщиком?</li>
<li>Чем программист отличается от тестировщика?</li>
<li>Какой процент кода покрывать авто-тестами?</li>
<li>Есть ли вред от TDD?</li>
<li>Кто пишет и кто запускает тесты?</li>
<li>Имеет ли смысл иметь выделенного тестировщика-автоматизатора и в каких случаях?</li>
<li>Как проходит планирование итерации с точки зрения тестировщика?</li>
<li>Где хранить тесткейсы?</li>
<li>Как автоматизировать тестирование GUI и что такое архитектура тестирования?</li>
<li>Рост продуктов – как успевать все протестировать за итерацию?</li>
</ul>
<p>У меня микрофон оказался неимоверно галимым. Участвовал в записи <del>сидя</del> стоя на балконе, зыря на огоньки ночного Кишинева. Лето подходило к логическому концу.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2009/09/04/testarea-in-agile-e-pentru-baieti-duri/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://testitquickly.com/podcast/testitquickly.com_011.mp3" length="36868728" type="audio/mpeg" />

		<post-id xmlns="com-wordpress:feed-additions:1">1170</post-id>	</item>
		<item>
		<title>Каким должно быть приёмочное тестирование в agile-проектах?</title>
		<link>https://testitquickly.com/2009/09/02/dati-ne-testare-interesanta-in-agile/</link>
					<comments>https://testitquickly.com/2009/09/02/dati-ne-testare-interesanta-in-agile/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Wed, 02 Sep 2009 11:27:10 +0000</pubDate>
				<category><![CDATA[Acceptance testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Видео]]></category>
		<category><![CDATA[Откровения]]></category>
		<category><![CDATA[Переводы]]></category>
		<category><![CDATA[Постановка мозгов]]></category>
		<category><![CDATA[Презентации]]></category>
		<category><![CDATA[Программисты]]></category>
		<category><![CDATA[Радости]]></category>
		<category><![CDATA[Скриншоты]]></category>
		<category><![CDATA[FIT]]></category>
		<category><![CDATA[Алексей Баранцев]]></category>
		<guid isPermaLink="false">http://testitquickly.com/?p=1128</guid>

					<description><![CDATA[Автор: Алексей Баранцев, главный редактор портала Software-Testing.Ru © Перевел: Алексей Лупан, худший друг программистов, TestItQuickly.com © Момент истины Прошёл уже почти год после конференции AgileDays и уже слегка подзабылись те мысли, которые ворошились у меня в голове, когда я готовился выступать на ней. Поэтому когда я редактировал сейчас этот текст, я испытывал смешанные чувства. Местами… <span class="read-more"><a href="https://testitquickly.com/2009/09/02/dati-ne-testare-interesanta-in-agile/">Читать далее: Каким должно быть приёмочное тестирование в agile-проектах? &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p style="text-align: right;"><b>Автор</b>: <a href="http://www.software-testing.ru/about/323-chief">Алексей Баранцев</a>,</p>
<p>
главный редактор портала Software-Testing.Ru ©</p>
<p style="text-align: right;"><b>Перевел</b>: Алексей Лупан,</p>
<p>
худший друг программистов, <a href="http://testitquickly.com/">TestItQuickly.com</a> ©</p>
<p style="text-align: left;"><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev1.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1130" title="barancev1" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev1.jpg" alt="barancev1" width="500" height="375" /></a><b>Момент истины</b></p>
<p style="text-align: left;"><span lang="RU">Прошёл уже почти год после конференции AgileDays и уже слегка подзабылись те мысли, которые ворошились у меня в голове, когда я готовился выступать на ней. Поэтому когда я редактировал сейчас этот текст, я испытывал смешанные чувства. Местами я думал – да это же практически гениально, как же я сам до этого не догадался! И только потом вспоминал, что это же мои собственные слова. </span></p>
<p style="text-align: left;"><span lang="RU">А иногда мне очень хотелось возразить или объяснить, что я на самом деле думаю по тому или иному поводу. Но я решил, что никаких комментариев и разъяснений давать не буду, пусть текст сохранится в первозданном виде. </span></p>
<p style="text-align: left;"><span lang="RU">Надо также помнить, что это живая речь, поэтому местами изложение не очень структурированное (если не сказать сильнее), а кое-где весьма эмоциональное. Надеюсь, что текст сможет передать мои эмоции. </span></p>
<p style="text-align: left;"><span lang="RU">А если нет – посмотрите видеозапись&#8230;</span></p>
<p style="text-align: right;"><span lang="RU"><em>Алексей Баранцев</em></span></p>
<p style="text-align: center;"><span id="more-1128"></span></p>
<p style="text-align: center;">[vimeo=https://vimeo.com/5521072]</p>
<p style="text-align: left;">Уважаемые коллеги!</p>
<p>Я думаю, вы уже поняли, что в agile нет никаких других проблем, кроме как с тестированием. Всё остальное в agile хорошо (кроме вопросов о рефакторинге), а проблемы, так или иначе, связаны с тестированием. Я в первую очередь буду говорить о приёмочном тестировании, но также и о другом тестировании, которое&#8230; Впрочем, об этом «которое» мы как раз и поговорим.</p>
<h2><b>Часть I, Психологическая, а местами даже геополитическая</b></h2>
<p>Начнём с основ.</p>
<p>Наверняка в детстве вы видели мультик «Великая битва слона с китом»? Мультик потрясающий.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev2.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1131" title="barancev2" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev2.jpg" alt="barancev2" width="500" height="375" /></a></p>
<p>Там в течение семи минут реально слон бьётся с китом самыми разнообразными способами. Колбасит их там по-страшному, они сплетаются, расплетаются, поглощают друг друга, подавляют, что угодно делают&#8230; Сейчас примерно такая же ситуация происходит с двумя парадигмами в разработке программного обеспечения — с agile-направлением и не-agile-направлением. Я даже не знаю, как этот «не-agile» назвать.</p>
<p style="padding-left: 30px;"><b>Голос из зала</b>: Процессное!</p>
<p>Ну, agile тоже как бы процессы, там тоже есть процессуальные элементы, и нельзя сказать что вот это agile, а вот это процессы. Я буду говорить agile и не-agile. Я собираюсь показать, во-первых, в чём между ними разница, а во-вторых, какое это имеет отношение и влияние на тестировщиков, на то, что делают тестировщики и вообще те люди, которые так или иначе занимаются тестированием.</p>
<p>Вы знаете, в чём главное отличие agile от не-agile?</p>
<p style="padding-left: 30px;"><b>Голос из зала</b>: А вы расскажите.</p>
<p>А вдруг кто-нибудь знает?</p>
<p style="padding-left: 30px;"><b>Голос из зала</b>: Бизнес-ориентированность разработки.</p>
<p>Ну, бизнес-ориентированные тут все&#8230;</p>
<p style="padding-left: 30px;"><b>Голос из зала</b>: Способ организации процесса другой.</p>
<p>А в чём же разница?</p>
<p style="padding-left: 30px;"><b>Голос из зала</b>: Ну, что там у нас? Итерации и инкрементальность&#8230;</p>
<p>Итерации и инкрементальность впервые ввёл RUP, который настолько мощно-процессный, что хуже уже некуда. В чем разница?</p>
<p style="padding-left: 30px;"><b>Голос из зала</b>: Agile позволяет установить тотальный контроль над разработкой (хохот в зале)</p>
<p>Это новость для меня, если честно 🙂</p>
<p style="padding-left: 30px;"><b>Из зала &#8212; Александр Александров</b>: Моё мнение может быть кому-то не понравится. Agile это религия, в него надо либо верить, либо нет, а вот в процессы верить не нужно.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev3.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1132" title="barancev3" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev3.jpg" alt="barancev3" width="500" height="375" /></a></p>
<p>Да, очень верное замечание и оно очень близко к тому, что я собираюсь рассказать. Если вы посмотрите на RUP и на SCRUM, то вы увидите, что там довольно много похожих элементов. Там есть итерации, они достаточно короткие (в RUP типичная итерация, как и в agile-процессах – это две недели, иногда меньше), и в этих итерациях точно так же происходит всё — дизайн, разработка, тестирование, выпуск готового продукта. То же самое происходит в agile. Разница между ними по-внешнему виду, если посмотреть на схемы и на то, что за чем происходит, не очень заметна. Разница в чём-то другом. Разница не на уровне буквы, а на уровне духа присутствует.</p>
<p>Люди, которые работают в agile-проектах, ощущают то, как они работают, иначе. Но на самом деле — есть практики, если раздраконить agile на мелкие кусочки, получится целая куча инженерных практик. Что будет, если эти инженерные практики попытаться применить? Вот скажем парное программирование&#8230;</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev4.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1133" title="barancev4" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev4.jpg" alt="barancev4" width="500" height="375" /></a></p>
<p>Посадить людей парами, заставить их программировать в паре, один пилот, другой штурман, и сказать — «Вы, ребята, работаете по процессу RUP», и они будут прекрасно работать по процессу RUP и программировать в паре. То есть инженерную практику можно внедрить куда угодно.</p>
<p>Stand up meetings. Вот вам типичные stand up митинги в стиле RUP — «Встали! Так, сегодня ты делаешь это, ты — это».</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev5.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1134" title="barancev5" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev5.jpg" alt="barancev5" width="500" height="309" /></a></p>
<p>Все получили наряды, все пошли работать. Stand up митинги вполне уместны и в RUP, и в любом другом подходе. Нормальная инженерная практика — не делать длинные совещания. Очень хорошая практика.</p>
<p>Но, конечно, по сути от этого ничего не изменится, если мы все эти инженерные практики затолкаем в RUP – он останется RUP’ом, agile’ом от этого не станет. Дух у него от этого не изменится.</p>
<p>И я собираюсь этот дух продемонстрировать на некоем культурологическом феномене&#8230;</p>
<p>Посмотрим на картинку с графическим описанием рабочего процесса в RUP – она демонстрирует, как должны быть организованы все деятельности по тестированию. Расписаны роли, расписано кто что делает, расписаны артефакты, которые являются результатом всех этих деятельностей.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev6.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1135" title="barancev6" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev6.jpg" alt="barancev6" width="500" height="375" /></a></p>
<p>Да, кстати, обратное тоже верно. Смотрите, есть все эти артефакты, все эти деятельности, ведь их можно же в agile выполнять? Никто же не запрещает в agile генерировать test-ideas list. Берем wiki и записываем туда наши идеи по тестированию.</p>
<p>Тест-скрипты делаются? Делаются.</p>
<p>Описание тестовой стратегии? Да, на white-board записали, что тестируем, а что нет — вот вам и тестовая стратегия. Выбор инструмента — это тоже часть тестовой стратегии.</p>
<p>Test environment configuration – а куда от него денешься?</p>
<p>Test automation architecture – когда у вас десяток тестов, то у вас все в порядке. А когда у вас их сотни и тысячи, вам уже приходится аккуратно разрабатывать архитектуру, и будете ли вы ее документировать аккуратно или не будете — так или иначе она существует. То есть, все эти артефакты так или иначе у вас появляются.</p>
<p>Роли тоже. Они могут быть не выделенными — нет человека, у которого висит табличка «тест-аналитик». Ну, нет и нет, сделайте себе таблички, и каждый час их перевешивайте, сейчас я тест-аналитик, через час тест-дизайнер. От этого agile тоже RUP не станет. Буква совершенно не важна, важен дух.</p>
<p>В чем же этот самый дух?</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev7.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1136" title="barancev7" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev7.jpg" alt="barancev7" width="500" height="375" /></a></p>
<p>Есть в литературе и в живописи такое течение — стим-панк. Или дизель-панк. Его эстетика базируется на некоторой романтизации викторианской эпохи, когда были первые попытки все механизировать, картина мира представлялась полностью механистической. Были попытки сделать механического человека, появились первые паровые механизмы — паровозы, паровые машины, которые вызывали у людей очень большой энтузиазм. Люди поняли — «О, сейчас мы автоматизируем всё! Всё будут делать механизмы, а люди будут их обслуживать».</p>
<p>Что получилось в результате? Когда эта эстетика развивалась, происходило экстенсивное наращивание. Сложность механизмов росла, росла, росла, механизмы становились очень сложными, и если посмотрите современные картины, сделанные в стиле стим-панк, вы увидите какие-то гигантские дирижабли, с какими-то рычагами&#8230; Перехода количества в качество не происходит, просто количество наращивается, и в итоге получается очень сложный механизм.</p>
<p>Так вот, классические подходы устроены примерно так же.</p>
<p>Они зародились в определенный момент, и когда они зарождались, их, похоже, вдохновляли идеи, которые уже были в промышленности к этому моменту. Конвейерное производство, например, идея которой в том, что человек должен выполнять какую-то рутинную операцию, а всё остальное ему обеспечивает процесс. Конвейер подвозит какие-то детали, человек делает что-то, и конвейер отвозит детали дальше.</p>
<p>Какая от этого выгода?</p>
<p>Сейчас я вам буду рассказывать про отличие процессных подходов в agile и не-agile. В чём между ними самое главное по сути отличие?</p>
<p>Мы пытаемся построить работающую систему, которая должна что-то выдавать на выходе, а именно — программный продукт. У нас есть люди, из которых мы вот эту систему строим. Люди по своей сути элементы ненадежные, они болеют, они умирают, ругаются между собой, увольняются, им надоедает работа, они ленятся, они прогуливают иногда. Что нужно сделать, чтобы система из ненадежных элементов работала? Нужно её сделать с огромной избыточностью.</p>
<p>Элементов надо зафигачить в неё очень много, и сделать так, чтобы влияние каждого элемента на всю систему в целом было не очень значительным. Тогда любой элемент можно из неё изъять и заменить другим, похожим на него, и система в целом этого даже не заметит.</p>
<p>Мы тут недавно ездили в Израиль на конференцию, посвященную разработке и тестированию микропроцессоров, и там услышали совершенно потрясающее заявление одного из гуру в этой области: он сказал, что в микропроцессоре очень много ошибок, огромное количество ошибок. Почему же микропроцессоры при этом работают? Да потому, что 90% всех сбойных сигналов, которые происходят внутри микропроцессора, вообще не доходят никак до выходов, до «ножек», они не оказывают совершенно никакого влияния. Это он сказал про ошибочные сигналы. А какой отсюда ещё следует вывод? Те же 90% процентов полезных сигналов тоже не доходят до выхода. Вот какая избыточность у этой системы, вот какой низкий у неё в результате КПД (коэффициент полезного действия). Но за счёт этого мы можем построить из ненадёжных элементов вполне надёжную систему. За счёт понижения КПД отдельно взятого человека.</p>
<p>Люди в этом процессе — это вентили, которые можно легко заменять за счет того, что используется очень малая часть их способностей. Благодаря этому мы можем вставить в систему хорошего программиста, можем вставить посредственного программиста, можем вставить достаточно плохого программиста, и разницы не будет почти никакой. На общую работу системы это почти никак не влияет.</p>
<p>А в agile-процессах — нет.</p>
<p>Если вы читали книги Демарко, Листера или даже Брукса, вы, наверное, знаете, что они советуют делать, когда у вас остается мало времени и вам надо ускорить разработку. Что надо сделать? Надо уменьшить размер команды. Почему? За счет этого вы повышаете КПД её отдельных элементов, вы позволяете им оказывать большее влияние на общий результат работы системы за счет уменьшения количества связей, которые как раз всё это КПД гасят.</p>
<p>Но! При этом вы, конечно же, повышаете риск. Когда у вас есть команда в сто человек, и один уволился — ничего страшного. Когда у вас команда в пять или десять человек, и один из них уволился, это уже граничит с катастрофой. Если уволилось два — пора предпринимать очень серьёзные и решительные меры. Для повышения КПД мы делаем ненадёжную систему, но зато она даёт очень эффективный результат.</p>
<p>Что делать, чтобы повысить надёжность этой системы? Нужно брать более надёжные элементы. То есть — нужны хорошие программисты, нужны хорошие тестировщики, нужны хорошие аналитики. И если мы из них соберём проектную команду и не станем ей мешать, то эта команда сделает хороший продукт.</p>
<p style="padding-left: 30px;"><b>Голос из зала</b>: У вас в команде все хорошие?</p>
<p>Стараемся&#8230;</p>
<p style="padding-left: 30px;"><b>Голос из зала</b>: Нет, вы скажите — «да» или «нет».</p>
<p>Если я скажу «да» &#8212; вы поверите? (смех в зале)</p>
<p>Да, тут возникают риски, с которыми надо бороться, людей надо учить, и чтобы эти хорошие люди действительно выдавали хороший КПД, им нужно дать возможность хорошо работать.</p>
<p>Если вы их заставите работать по этим вот процессам, у них сразу мораль падает, им тяжело, их заставляют писать какие-то ненужные бумажки, выполнять, с их точки зрения, совершенно ненужные действия, им это не нравится, и всё — через некоторое время наблюдается тенденция ухода.</p>
<p>Если у вас процесс agile, то вы говорите, людям – «вам будет работаться хорошо». Да, в проекте с agile работать хорошо потому, что там много fun&#8217;а. Все эти инженерные практики нацелены на то, чтобы добавить в работу какой-то интерес.</p>
<p>Может быть, они осознаются не сразу. Да, программисты сначала не любят писать юнит-тесты. Потом они этому учатся, и им так нравится, все классно. Смена деятельности — это тоже хорошо.</p>
<p>Так вот&#8230; Что же делать, откуда брать таких людей? Был такой писатель, учитель Филиппа Дика — Теодор Старджон, и как-то его спросили, как он относится к научной фантастике. Это были пятидесятые годы, он писал социальную фантастику, а спросили его о научной. Он сказал, что «по моему убеждению, 80% научной фантастики, которая сейчас пишется, это дерьмо». Потом подумал и сказал: «Но если хорошенько подумать, то вообще 80% того, что делается — это дерьмо».</p>
<p>Да, хороших программистов, в общем-то, мало. Поэтому, если вы сейчас посмотрите в англоязычной литературе, то увидите очень много статей на тему «Почему agile-процессы проваливаются?» Не должны они проваливаться. Вот я, Кент Бек, сделал все по agile, и все классно, все работает. Вот я, Майкл Болтон, тестирую, у меня agile, и все круто тестируется, а вот другие люди делают по agile, и у них не получается. Почему? Потому, что они, когда строят, берут ненадежные элементы. Кент Бек надёжный элемент, Майкл Болтон тоже. Но не все такие гении, к сожалению.</p>
<p>Что делать?</p>
<p>Надежность элементов можно увеличивать. Можно людей учить, можно их чем-то увлекать, чтобы им работа нравилась. От этого у них мотивация повышается, сами учатся, больше отдачи, повышается КПД, на результаты проекта это тоже влияет положительно.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev8.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1137" title="barancev8" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev8.jpg" alt="barancev8" width="500" height="347" /></a></p>
<p>И тут мы подходим к такой проблеме: agile придумали программисты для программистов. И они придумали для себя много фановых штучек, практик. Они придумали парное <b>программирование</b>. Тестировщики потом как-то попытались делать парное тестирование — не получилось. А парное программирование работает хорошо.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev9.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1138" title="barancev9" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev9.jpg" alt="barancev9" width="500" height="375" /></a></p>
<p>Придумали доску, на которой бегают бумажки перевешивать — это кровь разгоняет, тоже весело, тоже развлечение. К сожалению, они всё это делали, нацеливаясь, в первую очередь, на программистов. Даже аналитикам и то не повезло, хотя что-то для них есть. Тестировщикам не повезло кардинально. Для них не придумали ничего хорошего, ни одной известной хорошей практики, которая позволяла бы им работать «с огоньком».</p>
<p>И тут мы переходим к технической части.</p>
<h2><b>Часть II, Техническая</b></h2>
<p>Почему тестировщикам ничего не придумали? Потому что программисты, когда начали придумывать&#8230; наверное, самой первой штукой был eXtreme programming, там это зафиксировали, а все остальные практически без изменений унаследовали&#8230; Они сказали: «Так, бывают unit testing и acceptance testing. И unit testing мы вообще себе забираем, а вам, тестировщикам, остаётся некий acceptance testing. И вообще, этот acceptance testing может делать сам заказчик, если дать ему подходящие инструменты». И всё, тестировщикам не осталось ни работы, ни развлечения.</p>
<p>Но что забыли эти программисты? Они же просто не были знакомы с тем, чем занимаются тестировщики, они думали, что только вот эти два аспекта являются тестированием&#8230; На самом деле, скоро выяснилось, что это не так.</p>
<p>Тогда программисты сказали: «Так, теперь всем вам будет FIT!» Ну, или FitNesse, более расширенная версия.</p>
<p>Тестировщики попробовали пользоваться FIT – нет, не айс *&#8230; Никакого fun нет.</p>
<p style="padding-left: 30px;"><em>* Тонкий намек на рекламу.</em></p>
<p>Почему? Оказалось, что у них разной работы гораздо больше. Помимо unit testing и acceptance testing есть еще и интеграционное тестирование, где надо вглубь системы руки по локоть запускать, и FIT туда не влезает. Есть системное тестирование, условно говоря, его можно назвать acceptance testing, но FIT помогает только если у вас веб-приложение. Если вы зайдете на сайт FIT и посмотрите, какие там есть предопределенные, стандартные fuxtures — вы найдете fuxtures для JDBC и для веб-приложений. Всё!</p>
<p>А если у вас какие-то сложные протоколы, а если вам надо SMS обмениваться, если у вас нормальный обычный GUI-интерфейс — что вам делать? Нет, там не работает FIT, он doesn&#8217;t fit вообще!</p>
<p style="text-align: center;">Unit testing</p>
<p>Integration testing</p>
<p>System testing</p>
<p>Performance testing</p>
<p>Reliability testing</p>
<p>Security testing</p>
<p>Usability testing</p>
<p>Portability testing</p>
<p>Acceptance testing</p>
<p style="text-align: left;">Тестирование производительности, тестирование надежности (когда система у вас сутки работает и при этом не падает), тестирование безопасности — FIT не работает. Тестирование удобства использования, тестирование переносимости, кросс-платформенное, кросс-браузерное, кросс-ещё-не-знаю-чего&#8230; на разных архитектурах, на разных процессорах, куда все это запихать?</p>
<p>Программисты сказали: «<em>Мы себе забираем unit testing</em>». А все остальное, по-видимому, следует отнести по их мнению к acceptance testing.</p>
<p>Хорошо. Мы, тестировщики — мы говорим «<em>О&#8217;кей! Всё это вот будем считать за acceptance testing, теперь мы будем заниматься всем этим. А куда от этого денешься? Надо — значит надо</em>».</p>
<p>А программисты: «<em>У вас есть только FIT!</em>»</p>
<p>Что мы должны сказать в ответ? Мы должны сказать этому решительное</p>
<h1 style="text-align: center;"><b>«</b><b>НЕТ!»</b></h1>
<p>FIT нам мало. Мы хотим много всего интересного.</p>
<p>Откуда взялся FIT? FIT взялся вот откуда.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev10.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1139" title="barancev10" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev10.jpg" alt="barancev10" width="500" height="443" /></a></p>
<p>У людей есть то, что я называю синдромом Емели. Я сначала думал, что он есть только у русского человека. Потом почитал, подумал, и выяснил, что нет, не только у русского. Он заключается в том, что вот сейчас я поймаю щуку, а потом буду лежать на печке, а всё будет происходить по-щучьему велению, по моему хотению. Это хорошо, это светлая мечта, я тоже душой к ней расположен.</p>
<p>Но что предлагается Емеле для этого?</p>
<p>Емеля, ты хочешь лежать на печке и играть на балалайке 24-й каприс Паганини? О&#8217;кей! Сейчас ты будешь пахать как папа Карло, долго, а потом (может быть – если требования не будут меняться, если то и это не произойдет, если мы интерфейс не поменяем, и все твои тесты будут работать) ты сможешь лежать на печке и играть на балалайке.</p>
<p>Фиг!</p>
<p>Требования меняются, интерфейс меняется, и печка с балалайкой никогда не наступает, постоянно остается эта проклятая работа папы Карло.</p>
<p>Более того, что они нам предлагают? «<em>Ну, вы же программировать толком не умеете, да?! Мы вам сделаем убогий язык, на котором вы будете программировать в виде таблички</em>».</p>
<p>Человеку, который умеет программировать, это дико. Программировать в виде таблички – это же неудобно! У нас есть хорошие инструменты, хорошие среды разработки, можно пользоваться сторонними библиотеками, можно писать свои библиотеки, чего только там нет&#8230; А нам вместо этого говорят: «<em>Вы будете программировать в виде табличек</em>», которые надо писать на wiki-подобном языке с такими вот палочками, в совершенно нечитаемом формате. И даже WYSISWYG толком нет! И после этого они нам говорят: «<em>А вот потом вы будете лежать на печке. И играть на балалайке&#8230;</em>»</p>
<p>Увы.</p>
<p>Увы, не наступает это. Именно поэтому мы говорим решительное «НЕТ!»</p>
<p>Наш ответ на это: «<em>Мы не хотим быть программистами на убогом языке. И вообще, что вы, собственно, ожидаете от тестирования, товарищи разработчики, менеджеры проектов и прочие? </em></p>
<p><em>Чего вы хотите? </em></p>
<p><em>Чтобы у вас просто были тесты, написанные на FIT, которые постоянно не работают из-за того, что всё меняется? </em></p>
<p><em>Или вы хотите получать какую-то обратную связь о том, насколько качественный ваш продукт? </em></p>
<p><em>Если вы хотите получать информацию о том, качественный или некачественный продукт — дайте нам, специалистам в этом вопросе, сделать то, что мы хотим, и мы предоставим вам эту обратную связь. </em></p>
<p><em>Мы вам расскажем и про производительность, и про безопасность, и про всё остальное, и для этого нам FIT не нужен, нам не надо писать убогие тесты. В крайнем случае, если заказчик хочет, давайте мы ему впарим этот FIT, и пусть он сам пишет эти тесты, а тестировщики будут заниматься своим делом</em>».</p>
<p>Своего дела у них много.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev11.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1140" title="barancev11" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev11.jpg" alt="barancev11" width="500" height="259" /></a></p>
<p>Главная задача тестировщика — это зачистка местности. Зачистка территории дефектов. При этом важна именно систематичность и широта охвата. Не так, чтобы пришли и выбили боевиков из этой деревни, а они убежали в соседнюю. Завтра пойдем в соседнюю — они опять в эту прибегут.</p>
<p>Представьте себе, что целый взвод всей толпой приходит в деревню, заходит в один дом и ищет там боевика. А они все в других местах рассредоточились. Зачистка местности предполагает, что мы проходимся по всей этой местности, и всё посмотрели, всё проверили. Конечно, боевики попрятались по подвалам, но мы говорим: «<em>На поверхности боевиков нет!</em>» Они все попрятались, но, по крайней мере, они не ходят внаглую с автоматами по деревне. Мы в первую очередь произвели небольшую зачистку.</p>
<p>Во вторую очередь мы пойдём заглядывать в дома. В домах их тоже уже нет, они сидят по чердакам да по подвалам.</p>
<p>Дальше мы снова проходим, уже с огнемётами и газовыми гранатами, которые закидываем в подвалы, и если они там были, то теперь их там тоже нет.</p>
<p>Зачистка местности при помощи инструментов автоматизированного тестирования произведена быть не может. Поэтому главный инструмент тестировщика — это голова и руки. Как ни поют дифирамбы автоматизированному тестированию в литературе, в статьях — все это вендорская* пропаганда, они просто хотят продать вам свои инструменты. Они это успешно делают, и иногда эти инструменты полезны, ими можно пользоваться, но зачистку местности с их помощью производить невозможно.</p>
<p style="padding-left: 30px;"><em>* Вендор — производитель/продавец.</em></p>
<p>При помощи этих инструментов можно расставить автоматчиков на углах, которые будут осуществлять паспортный контроль, которые будут следить, чтобы никто не бегал в темное время суток, но не более. Для зачистки местности нужен спецназ.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev12.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1141" title="barancev12" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev12.jpg" alt="barancev12" width="500" height="375" /></a></p>
<p>Выбирать надо тоже разное оружие. Если вы устраиваете ковровую бомбардировку, ядерный взрыв, и у вас все здания сносит, то всё – там потом и жить нельзя. Но если вы используете напалм, у вас сгорит то, что горит. А то, что не горит — останется. Это хорошо, поэтому оружие надо выбирать грамотно.</p>
<p>Назовем зачистку функциональным тестированием. Ковровая бомбардировка — это нагрузочное тестирование (тестирование производительности, тестирование надежности).</p>
<p>Когда вы ищете проблемы, связанные с безопасностью, это не похоже ни на то, ни на другое, это больше похоже на радиопеленгацию. Раньше это был очень популярный вид спорта, задача заключается в том, чтобы по некоторым признакам найти источник сигналов с помощью маленького приемника.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev13.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1142" title="barancev13" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev13.jpg" alt="barancev13" width="500" height="375" /></a></p>
<p>Тестирование защищенности примерно такое же — вы тыкаете в разные места, бегаете. Это очень хорошо видно, например, когда человек занимается поиском SQL-injection: он бежит сюда – нет, не получается, сигнал слабый, он заходит с другой стороны, и вот так, методом последовательных приближений, находит уязвимости.</p>
<p>Тестирование удобства использования — это дегустация.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev14.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1143" title="barancev14" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev14.jpg" alt="barancev14" width="500" height="375" /></a></p>
<p>Здесь можно даже вместе с заказчиком собираться, совмещать приятное с полезным. «<em>А вот какую удобную кнопочку мы сделали!</em>», «<em>А вот эту операцию мы выполняли за десять шагов, а теперь можно её за три клика сделать!</em>» – и от этого получаете удовольствие вместе с заказчиком.</p>
<p>Видов тестирования много разных. Не надо зацикливаться на чём-нибудь одном, ни на unit-тестировании, ни на FIT, ни на Selenium, ни ещё на чём-то. Смотрите на мир и на жизнь шире.</p>
<p>Ну и наконец, если у вас тестировщики уже всё протестировали, больше им заняться нечем, остается ещё очень большое поле деятельности, которое не относится напрямую к тестированию. Иногда его называют quality assurance. Возьмите тестировщиков, которые умеют программировать, и чтобы им было весело жить, пустите их читать ваш код. Пусть они занимаются code review. Пусть они тоже повеселятся, читая ваш код.</p>
<p>Единственной метрикой качества кода является количество «WTF?» в минуту 🙂</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/09/barancev15.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1144" title="barancev15" src="https://testitquickly.com/wp-content/uploads/2009/09/barancev15.jpg" alt="barancev15" width="500" height="375" /></a></p>
<p>У вас есть люди, которые по какой-то причине, в силу особенностей характера, или в силу исторических причин не хотят или не склонны к алгоритмической работе, но зато у них очень хороший аналитический потенциал, они явно склонны к аналитической работе, а code review это типично аналитическая работа, а не алгоритмическая. Поэтому заставлять программистов заниматься code review не рационально. Тестировщики, которые умеют по меньшей мере читать код, справляются с этим заметно лучше.</p>
<p>В другое время эти же люди могут анализировать и требования — обнаруживать в них несоответствия, противоречия, упущения и так далее.</p>
<blockquote>
<p><b>Для ясности</b></p>
<p>По внешним признакам и публичным выступлениям Алексея Баранцева можно типировать так: &#171;<em>Программист, пришедший в тестирование</em>&#171;.</p>
<p>Понятно, почему он так легко  проповедует подход &#171;<em>Тестировщик должен уметь программировать</em>&#171;?</p>
<p>Понятно, почему его предложение wtf-чить код программистов &#8212; не праздная выдумка? Тем более, что дух agile к этому подходу даже благоволит (долой роли!).</p>
<p>Некоторых программистов такой подход коробит. Ну, есть в нашем мире определенная кастовость, браминность&#8230;</p>
<p>Некоторых тестировщиков от такого подхода колбасит в другую крайность: &#171;<em>Да если бы я умел программировать, разве сидел бы я тут и по кнопкам кликал?!&#8230;</em>&#171;</p>
<p>А третьи видят в происходящем гармонию, и извлекают из нее очень выгодную выгоду, как лично, так и для команды.</p>
<p>Внедрение такого подхода требует реального знания гармонии, и отдельно &#8212; духа agile. Одного только призыва недостаточно.</p>
</blockquote>
<p>Ну и ещё раз призываю к тому, что в работу надо привносить как можно больше fun-овых штучек. Чем их больше, тем выше будет КПД, меньше люди будут рваться уйти в другую компанию, в другой проект, и всё это относится, в том числе, и к тестировщикам.</p>
<p>Спасибо.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2009/09/02/dati-ne-testare-interesanta-in-agile/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1128</post-id>	</item>
		<item>
		<title>Руководство по тестированию в Agile</title>
		<link>https://testitquickly.com/2009/08/03/rukovodstvo-po-testirovaniu-v-agile/</link>
					<comments>https://testitquickly.com/2009/08/03/rukovodstvo-po-testirovaniu-v-agile/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Mon, 03 Aug 2009 09:15:41 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Презентации]]></category>
		<category><![CDATA[Слайдкасты]]></category>
		<category><![CDATA[Алексей Кривицкий]]></category>
		<category><![CDATA[Асхат Уразбаев]]></category>
		<guid isPermaLink="false">http://testitquickly.com/?p=1077</guid>

					<description><![CDATA[Автор: Асхат Уразбаев © (scrumtrek.ru) В текст перевел: Алексей Лупан (testitquickly.com) Вместо введения Доклад был представлен на конференции SQA Days’2009 24 апреля. Его можно было послушать в виде слайдкаста (слайды, снабженные звуком), но слайдкаст утерян. Текст совсем чуть-чуть поправлен и снабжен (не всеми) картинками в нужных местах. Руководство по тестированию в Agile Кто-нибудь работает по эджайлу?… <span class="read-more"><a href="https://testitquickly.com/2009/08/03/rukovodstvo-po-testirovaniu-v-agile/">Читать далее: Руководство по тестированию в Agile &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p style="text-align: right;"><strong>Автор</strong>: Асхат Уразбаев © (<a href="http://scrumtrek.ru">scrumtrek.ru</a>)</p>
<p>
<strong> В текст перевел</strong>: Алексей Лупан (<a href="http://testitquickly.com">testitquickly.com</a>)</p>
<h2><strong>Вместо введения</strong></h2>
<p>Доклад был представлен на конференции SQA Days’2009 24 апреля. Его можно было послушать в виде слайдкаста (слайды, снабженные звуком), но слайдкаст утерян.</p>
<p>Текст совсем чуть-чуть поправлен и снабжен (не всеми) картинками в нужных местах.</p>
<h1><strong>Руководство по тестированию в Agile</strong></h1>
<p>Кто-нибудь работает по эджайлу? Пожалуйста, поднимите руки. Уау&#8230; А из тех, кто не поднял, кто-нибудь собирается это сделать? Хорошо. Давайте я сначала представлюсь — меня зовут Асхат Уразбаев, меня уже представили, поэтому я коротко&#8230; Он сказал всю правду обо мне, немножко преувеличил местами&#8230; Работаю в компании ScrumTrek, мы занимаемся внедрением гибких методологий, помогаем компаниям и организациям всем этим заниматься.</p>
<p><span id="more-1077"></span></p>
<h2><strong>Итеративность</strong></h2>
<p>Что такое эджайл еще раз пробежимся для тех, кто руки не поднимал ни первый, ни второй раз. Посмотрим, как там встраивается тестирование, и некоторые инструменты управления качеством.</p>
<p>Что такое эджайл — в большинстве случаев это просто итеративная разработка. Видите, там цель — бизнес-цель — сменилась?! Она во время пути, естественно, меняется. Мы следуем так, чтобы не выпускать ее из вида, даже если требования меняются, мы, постепенно корректируем движение и направление нашего проекта. Работаем при этом вот такими короткими итерациями.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/08/ashat1.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1078" title="ashat1" src="https://testitquickly.com/wp-content/uploads/2009/08/ashat1.jpg" alt="ashat1" width="500" height="378" /></a></p>
<p>
В конце каждой итерации стараемся добиться того, чтобы продукт был доделан до конца. Чтобы можно было сильно упростить планированием, чтобы все эти взаимосвязи не отслеживать, и так далее. И можем заново спланировать итерацию по достижению бизнес-цели.</p>
<h2><strong> Проблемы ответственности</strong></h2>
<p>Проблемы, которые тут возникают, прекрасно раскрыл Саша Орлов — его доклад был полностью посвящен раскрытию этих проблем. Не только между тестировщиками и программистами — такие проблемы существуют, например, и между двумя разработчиками одного модуля, проблемы связанные с ответственностью. Если отвечаю за свой модуль — у меня все работает на машине, а если там что-то не работает, то это не мои проблемы. Поэтому люди не пускают других программистов в свой модуль, потому что говорят — я за него отвечаю, ты не имеешь права тут что-либо делать, потому что это, якобы, порождает проблемы. Что действительно бывает&#8230;</p>
<p>Итак, какие тут есть проблемы: программисты не тестируют. Обвинение часто от тестировщика в сторону разработчика — тут такой простой баг, что ж ты его сам не нашел? Из-за него заблокировано наше тестирование. Программисты не тестируют, не царское это дело, да?! «<em>У меня на машине все работает</em>» &#8212; каждый хоть раз в жизни слышал это замечательное высказывание.</p>
<p>И еще одна проблема: «<em>Настоящий мужик решает свои проблемы сам</em>». У меня серьезный баг, я с ним вожусь уже три недели, но я буду сражаться, пока не сумею его побороть, потому что я — мужик, у меня есть проблема, но я о ней никому не скажу, я всегда сам&#8230;</p>
<p>Это &#8212; проблема ответственности.</p>
<h2><strong> Самоорганизация</strong></h2>
<p>Какой ответ на это дает эджайл? Самоуправляемые, самоорганизующиеся команды. Команды у которых до какой-то степени нет менеджмента — какой-то менеджмент, конечно, есть всегда, только он переквалифицировался. Product owner не раздает задачи людям — команда сама распределяет задачи.</p>
<p>Вот определение, которое мне очень нравится:</p>
<p style="padding-left: 40px;">Самоуправляемая команда это небольшая группа людей с дополняющими навыками, с общей целью, стремящаяся улучшить свою производительность и чувствующая ответственность по отношению к друг другу…</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/08/ashat21.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1080" title="ashat2" src="https://testitquickly.com/wp-content/uploads/2009/08/ashat21.jpg" alt="ashat2" width="500" height="378" /></a></p>
<p>
И по большому счету, можно смотреть на все практики гибкой разработки эджайл как способ этого добиться. Как сделать так, чтобы мы это смогли сделать.</p>
<p>Если крупными мазками набросать, что такое самоорганизация, то это коллективное принятие решений&#8230; Я не знаю, насколько вы с этим согласитесь, но ответственность — это право принимать решения. Если мы хотим коллективной ответственности от команды за что-то, то мы должны коллективно принимать решения. Согласны? Все кивают, удивительно. Несколько лет назад все качали бы головами «<em>Нееееет, мы не согласны, фигня это, всегда должен менеджер все решать&#8230;</em>»</p>
<p>Общая цель, без которой все это не работает. Иначе можно никогда не придти к коллективному решению.</p>
<p>Доверие — мы должны доверять, иначе мы никогда не договоримся. Для доверия нужна взаимная ответственность.</p>
<p>
Взаимная ответственность не работает без прозрачности.</p>
<p>Например&#8230; знаете, что такое daily scrum? Или stand up meeting? Это когда мы ежедневно общаемся на какую-то тему. Это способ увеличить прозрачность. Без такой прозрачности доверия между людьми не будет. Это способ установить взаимоответственность между людьми внутри команды — я отвечаю перед тобой, ты отвечаешь передо мной. Ты что-то не сделал? Ты виноват не по отношению к менеджеру, а по отношению к команде — ты нас задерживаешь.</p>
<p>Как устроено тестирование в Agile? Первая, самая важная вещь — за качество отвечает команда…</p>
<h2><strong> Жизненный цикл</strong></h2>
<p>В двух словах о жизненном цикле — это один из примеров, просто для того, чтобы все понимали, чтобы был некий общий контекст, потому что эджайл у всех разный и не у всех он эджайл в достаточной степени.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/08/ashat3.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1081" title="ashat3" src="https://testitquickly.com/wp-content/uploads/2009/08/ashat3.jpg" alt="ashat3" width="500" height="372" /></a></p>
<p>
Как все это происходит — есть Product Owner – менеджер, он определяет набор фич, которые нам нужно сделать. Это просто фичи, на уровне одного абзаца текста максимум. Команда помогает Product Owner&#8217;у создавать требования. Требование — это фича, детализированная на уровень, например, приемочных тестов.</p>
<p>В команду, которая создает требования, составной частью входят тестировщики. Они помогают менеджеру создавать требования в виде тестов, поэтому оторванность тестировщиков от команды, когда в конце программист говорит «<em>Вот, тестируй то, что я написал</em>». А что ты написал? «<em>А я вот сейчас тебе расскажу..</em>.» &#8212; вот такого не происходит. Если тестировщики принимают работу, то они должны ее и ставить. Иначе это просто безумие 🙂</p>
<p>Итак, у нас есть фичи, снабженные приемочными тестами. Команда, опять же, занимается декомпозицией — мы разбиваем большие фичи на технические задачи, эти задачи оцениваем, и сделаем так, чтобы мы успевали сделать это за одну итерацию — это называется time boxing. То есть, все, что не успеваем, вываливается в следующую итерацию.</p>
<p>Получается план итерации — фичи, задачи, и оценка. В течение итерации команда работает. Каждые 24 часа происходит daily scrum. Каждый отчитывается перед командой о том, что он делал вчера, что он будет делать сегодня, и какие у него проблемы… Мы выявляем проблемы, и мы можем коллективно их решить.</p>
<p>В конце итерации у нас демонстрация. Фактически это «приемка» &#8212; каждый демонстрирует, что он сделал, и product owner принимает результат.</p>
<p>Затем ретроспектива, на которой команда обсуждает свои проблемы и придумывает, что сделать, чтобы эти проблемы больше не возникали.</p>
<p>Как это все выглядит?</p>
<h2><strong> Task Board</strong></h2>
<p>Одна из практик, которую я очень рекомендую, называется task board. Что это такое — вот у нас есть To Do, In Progress и Done – три свимлайна, и вот фича большая (сверху), декомпозированная на кучу мелких задач.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/08/ashat4.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1082" title="ashat4" src="https://testitquickly.com/wp-content/uploads/2009/08/ashat4.jpg" alt="ashat4" width="500" height="380" /></a></p>
<p>
Тут есть задачи по тестированию и по разработке. Программист, или тестировщик, перевешивает одну задачу в In Progress, и в этот момент под ней подписывается — не раньше.</p>
<p>На планировании мы не распределяем задачи по людям. Иначе мы получаем проблему ответственности, когда у меня, у программиста, есть куча своих задач, и какой мне смысл помогать своим товарищам?! Меня попросят помочь, а я скажу «<em>Вообще-то, я занят</em>». Или «<em>Пошел ты в задницу!</em>» в самом пиковом случае. А если будете достаточно вежливы, то просто скажете «<em>У меня сейчас нет времени, но в конце итерации, когда я освобожусь, я тебе помогу&#8230;</em>» &#8212; то есть, этого не произойдет. Поэтому задачи на людей не планируются.</p>
<p>На daily scrum вы можете распределить задачи по людям.</p>
<p>Таким образом, задача переносится сюда, в In Progress, человек под ней подписывается, и, как только она сделана, она перевешивается направо, в Done. Таким образом, задачи слева все время перевешиваются направо. Когда они все перелезли, значит, мы сделали нашу работу. Это обеспечивает прозрачность — и это очень удобный механизм.</p>
<h2><strong>Методы обеспечения качества</strong></h2>
<p>Проблемы, которые здесь иногда возникают. Понимаете, чем раньше мы найдем баг, тем дешевле он будет нам стоить.</p>
<p>Согласны? Если баг нашли через год, это будет ужасно дорого. Если мы нашли его на следующей неделе, это будет более-менее дешево. Если мы нашли его сегодня, в тот день, когда его и сделали, исправить это будет совсем дешево, контекст не потеряется. Это как в примере с этим автобусом — если бы мы вовремя нашли эту проблему, нам не пришлось бы столько времени тратить на исправления. Мы просто подвернули бы руль и поехали бы дальше.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/08/ashat5.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1083" title="ashat5" src="https://testitquickly.com/wp-content/uploads/2009/08/ashat5.jpg" alt="ashat5" width="500" height="375" /></a></p>
<p>
Чем раньше найдем ошибку, тем дешевле она нам обойдется. Самый простой способ исправлять ошибки — это вообще их не делать.</p>
<p>Я часто езжу на поездах в разные города. Прекрасный сервис, не надо платить за проживание, но там есть одна проблема — некоторые граждане храпят. А я довольно чутко сплю, и это всегда было проблемой. Я придумывал всякие способы, как от этого избавиться (есть баг — человек храпит, как это исправить). Иногда я просто стучал в стенку — дыщ-дыщ&#8230;. Человек просыпался, на какое-то время это помогало.</p>
<p>Проблема в чем — он все-таки засыпает снова и начинает храпеть&#8230; К тому же, это просто небезопасно, рано или поздно меня бы за это наказали. К тому же, это просто негуманно по отношению к людям, которые спят. Хотя, с другой стороны, почему должен я страдать, если храпят они.</p>
<p><strong>Голос из зала</strong>: Есть еще один способ! Вот такой — еще пива.</p>
<p>Еще пива — способ, да, я его тоже пробовал, но это полумера.</p>
<p>
И вот я, по дороге сюда, все-таки исправил этот баг. Я сделал так, чтобы он вообще не появлялся. Я купил себе беруши. Знаете такие штуки? В уши вкручиваешь, и ни хрена не слышно, великолепно спишь. Кстати, появляются другие проблемы, можно проспать свою остановку.</p>
<p>Итак, как мы сделаем так, чтобы проблем не было вообще?</p>
<p>
В эджайле это парное программирование — постоянное ревью кода в разработке, к тому же, это способ генерировать новые решения и новые идеи. И это великолепный способ ловить ошибки. Вы придумываете во время парного программирования ситуации, когда это может не сработать. И когда вы вдвоем это делает за счет того, что люди так устроены, они любят покритиковать друг друга «<em>А вот ты еще вот это не учел, давай закроем. А вот вы от это не учел</em>» — закрыли и эту дырку. Возможно, вы тратите больше времени, но вы сэкономите на тестировании прорву времени.</p>
<p>Некоторая «полумера» — ревью кода. Оно должно происходить до коммита, тогда имеет смысл его делать.</p>
<p>Рефакторинг как способ упростить, улучшить код с тем, чтобы потом этих ошибок не возникало.</p>
<p>Если уж сделали ошибку, ее лучше исправить как можно раньше. Как это можно сделать? Ну вот:</p>
<ul>
<li>Непрерывная интеграция</li>
<li>Юнит-тесты</li>
<li>Разработка через тестирование (TDD)</li>
<li>Автоматизированное приемочное тестирование</li>
</ul>
<p>В эджайле это особенно важно, потому что каждые две недели требования могут поменяться. Это не значит, что у вас есть огромный пул задач, которые вы можете продумать достаточно далеко, и стабильно по ним жить. Требования поменяются, код будет деградировать, и вы рано или поздно столкнетесь с проблемой поддержки — когда у вас 50% времени занимает поддержка, исправление кода из-за того, что он не очень качественный. Код вообще, и в особенности в эджайле, надо поддерживать в великолепном качестве.</p>
<p>А что тогда такое «<span style="color: #ff0000;"><strong>Ручное тестирование</strong></span>»? Если вы делаете все то, что написано на двух предыдущих слайдах, (это, кстати, бывает не всегда), то что остается на долю ручного тестирования?</p>
<p>То, что не покрыто авто-тестами — это должно быть в каком-то небольшом количестве. Обычно это чек-лист вещей, которые нужно проверить раз в какое-то время.</p>
<p>И то, что в английской литературе называется Exploratory testing — это такое «Талантливое» тестирование, когда тестировщик садится без плана тестирования, и ловит ошибки в совершенно невероятных местах. То есть, это такое исследовательское тестирование, которое, если честно, намного приятнее и интереснее, и более мотивирует, чем просто тестирование по тест-плану. Тест-план должен быть автоматизирован.</p>
<p>
Вот и все тестирование 🙂</p>
<p>Я тут с <a href="http://www.agileukraine.org/">Лешей Кривицким</a> разговаривал, говорю «<em>Я поеду на конференцию, буду про тестирование в эджайле говорить</em>», а он говорит «<em>Я не понимаю, о чем вы там рассказываете. Просто автоматизируйте все тесты, и всё</em>».</p>
<p style="padding-left: 40px;">Леша рулит в agile, но он программист. У программистов всегда всё так — взять всё и <span style="text-decoration: line-through;">поделить</span> автоматизировать!</p>
<h2><strong> Проблемы</strong></h2>
<p>На самом деле проблемы, конечно есть, и проблемы связаны со следующим — как нам управлять этим качеством? Как нам добиться того, что у нас код будет&#8230; Например, мы решили сделать код-ревью. Мы натыкаемся на проблему мотивации — захотят ли люди делать код-ревью? Программисты есть разные — некоторые очень хотят, некоторые меньше&#8230; Эджайл значительно повышает мотивацию, но полностью проблемы мотивации не решит.</p>
<p>Недостаток дисциплины — да, мы решили, да, мы будем делать код-ревью, договорились. И не делаем. Тоже бывает достаточно часто — как мы это будем делать, как мы это будем контролировать?</p>
<p>Разные другие проблемы связаны с унаследованным кодом. Конечно, замечательная идея &#8212; все покрыть автотестами, но если у нас уже 10 млн строчек кода в системе, то все покрыть автотестами мы не можем просто физически. И нам нужен некий инструмент, фокусирующий внимание на аспектах качества.</p>
<h2><strong> Definition Of Done</strong></h2>
<p>Такой инструмент есть — его упоминал Саша Орлов в своем докладе — в оригинале этот инструмент называется Definition Of Done.</p>
<p>Мы должны определить, что значит «ГОТОВО». Определить критерии готовности той или иной вещи, которая нас интересует. Ну, самые распространенные кандидаты на определение Defintion of done это требования. Задачи. Фичи. Что значит «фича сделана до конца» &#8212; мы должны это определить. И итерация — что значит «Итерация сделана»?</p>
<p>Требование. Каждая история…</p>
<ul>
<li>снабжена приемочными тестами</li>
<li>снабжена сценарием демонстрации</li>
<li>имеет приоритет</li>
</ul>
<p>Для задачи</p>
<ul>
<li>Для каждой задачи проведено code review (если не разрабатывалась в паре)</li>
<li>Написаны автоматизированные тесты на основные методы</li>
<li>Все тесты успешно проходят</li>
</ul>
<p>Для фичи</p>
<ul>
<li>Созданы автоматизированные приемочные тесты</li>
<li>Неавтоматизированные тесты добавлены в Check list</li>
<li>Все пофиксенные дефекты валидированы</li>
<li>Фича получила статус Validated</li>
</ul>
<p>Для итерации</p>
<ul>
<li>Система прошла регресионное тестирование</li>
<li>Вся созданная документация прошла ревью</li>
</ul>
<p>То, что здесь написано, это не означает, что вы <strong>должны</strong> это взять и использовать. Это только пример, отнеситесь к нему <strong>только как к примеру</strong>. Но это реальный пример из реальной команды.</p>
<p>Значит, требования.</p>
<p>Перед тем, как фича падает вам в разработку, она должна быть снабжена приемочными тестами. Вы так считаете, и вы договорились об этом. В конце тестирования вы просто будет ставить галочки — это сделано, то сделано — все это значит, что фича готова. Она должна быть снабжена сценарием демонстрации. Мы должны в фиче указать, как мы потом будем демонстрировать ее результат. И она должна иметь приоритет.</p>
<p>
Можете повесить какие-то специфичные особенности для вас. Если это веб-девелопмент, к моменту когда фича ставится в итерацию должен быть готов дизайн на уровне как минимум мокапа экрана или даже дизайн в фотошопе.</p>
<p>Для каждой задачи проведено code review — вы договариваетесь об этом внутри команды &#8212; если она не разрабатывалась в паре (в этом случае код-верью проводить необязательно).</p>
<p>Написаны автоматизированные тесты на основные методы. Все тесты успешно проходят.</p>
<p>Вы можете определить, что значит «написан автоматизированный тест». Определить какое покрытие вы требуете — например 100% для бизнес-логики&#8230;</p>
<p>Для фичи – созданы автоматизированные приемочные тесты. Это значит, что создан приемочный тест, который проверяет, что фича готова.</p>
<p>Те тесты, которые не автоматизированны &#8212; добавлены в Check list.</p>
<p>Все пофиксенные дефекты валидированы — фича получила стату Validated.</p>
<p>Какие-то еще вещи, например, в фиче не должно быть критических дефектов.</p>
<p>Или вы можете определить долю дефектов: ни одного критического, не больше двух Major, не больше трех Minor. Или вообще ноль.</p>
<p>Еще одна важная вещь — в хорошей эджайл команде количество открытых багов в системе в любой момент времени — единицы. Не десятки и не сотни. Если у вас сотни — ищите проблемы, их <strong>очень много</strong>!</p>
<p>Для итерации &#8212; система прошла регресионное тестирование, вся созданная документация прошла ревью. Это способ определить, что значит для вас, для тестировщиков, работа внутри итерации. Вы должны добиться того, чтобы мы успели сделать полное регресионное тестирование или полное системное тестирование проводить внутри этой же итерации. Если вы не можете сделать это за один день — давайте добьемся того, чтобы к концу итерации она была доделана до конца.</p>
<h4><strong>Как мы вырабатываем Definition of Done</strong></h4>
<p>Очень просто, как всегда в эджайле — мы собираемся командой, куда входят тестировщики, разработчики, аналитики, менеджеры — все, кто вовлечены в разработку, у кого руки по локоть в работе. И мы выписываем на бумагу и договариваемся о том, что такое «готово». Все в команде должны быть согласны с тем, что это то, что нам нужно. Все. Если хотя бы один не согласен, то договариваемся дальше. Вы понимаете, зачем это нужно? Консенсус означает, что — вы же будете потом всем этим пользоваться?!</p>
<p>Если кто-то будет против, то он не будет этого делать? А какая же это командная работа? Мы должны договориться. Мы обсуждаем, что конкретно его не устраивает.</p>
<p>Definition Of Done должен отражать реальное положение дел. Это то, что вы собираетесь делать со следующей итерации. Это не то, что вы хотите делать, когда вырастите, когда у вас не будет legacy-кода, или когда вы найдете замечательных автоматических тестировщиков, которые вам все заавтоматизируют&#8230; Если вы этого делать не будете — выкиньте, потом добавите, если будет надо.</p>
<p>Результат стоит распечатать и повесить в рамочку, чтобы все было прозрачно.</p>
<h4><strong>Как мы пользуемся Definition Of Done</strong></h4>
<p>Корректируем на ретроспективах. Напомню, что ретроспектива — это способ скорректировать процесс. Собрались и обсудили. Какая была проблема — например, для какого-то куска кода не было написано автоматизированного теста. «Давайте обсудим, что мы с этим делаем». «А давайте, например, выкинем это нафиг из определения Definition of Done. Или давайте изменим Definition of Done, чтобы для этого типа нам не нужны автоматизированные тесты. Как-то скорректируем его, ведь это наш договор, договор внутри команды».</p>
<p>Используется при аппеляциях к совести разработчика. «Ты же коммитился на то, что будешь делать код-ревью, давал обязательства вместе со всеми, голосовал, мы помним, как ты голосовал — почему ты его не делаешь?» Это снимает проблему с дисциплиной. А как это снимает проблему с мотивацией — не совсем снимает, но это повод поговорить о том, какие у нас есть критерии качества. Выработать, обсудить, почему они для нас важны. В среднем, по моему опыту, команды стремятся сделать более качественный код. И, как правило, именно «бизнес» мешает писать качественный код.</p>
<p>Это давление снимается тем, что мы сами определяем наш time-box, что мы успеваем сделать в итерации. Вот теперь мы отвечаем за качество.</p>
<p>Ну вот, ребята собрались возле доски задач, и один говорит:</p>
<p>—  Слушайте, мы не делаем код-ревью, давайте выкинем его из definition of done.</p>
<p>— Да не, мы делаем, просто не всегда, &#8212; говорит второй.</p>
<p>— А как нам сделать так, чтобы было всегда?</p>
<p>— А давайте подписывать под каждой задачей кто провел ревью. Если есть инициалы человека, который провел ревью, то задача может быть перевешана в середину доски. Если нет — значит нельзя. И кто-нибудь из команды будет ее, неподписанную, находить, и говорить «<em>о, задачка, а тебя тут быть не должно</em>».</p>
<p>То есть, мы добавляем прозрачности и коммитмента, чтобы инструмент помогал команде сосредотачиваться не тех решениях, которые команда и приняла.</p>
<p>И один говорит:</p>
<p>— И штрафовать, если ревью не проведено. Десять рублей в пивной фонд!</p>
<p>Всем идея понравилась, приняли.</p>
<p>Вот еще один способ напомнить команде о договоренностях, которые команда достигла. Я сфотографировал одну из команд, наверху там написано «Поработаем в паре», а внизу «Ты делаешь код-ревью?» &#8212; способ напомнить команде о том, насколько это важно для нее.</p>
<p><a href="https://testitquickly.com/wp-content/uploads/2009/08/ashat6.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1084" title="ashat6" src="https://testitquickly.com/wp-content/uploads/2009/08/ashat6.jpg" alt="ashat6" width="500" height="376" /></a></p>
<h2><strong>Технологический долг</strong></h2>
<p>Технический Долг — еще одна вещь, достаточно важная&#8230; Все, что мы делаем неправильно, весь код, который мы плохо написали, все что мы не покрыли автотестами — это наш долг. Мы берем его как кредит в банке под проценты — да, мы знаем, что получили локальное ускорение в производительности благодаря тому, что мы не писали юнит-тестов в этой итерации, мы успели больше. Но это означает, что наше долгосрочная производительность снизилась. Потому что мы теперь тратим больше времени на ручное тестирование. Придется исправлять баги, все это стоит довольно дорого. Есть концепция технологического долга — мы должны постоянно его отслеживать. Если он будет слишком большой, наша производительность потом станет низкой потому, что большую часть времени мы будем заниматься багами вместо того, чтобы разрабатывать новую функциональность. Эта концепция помогает нам отслеживать вообще ситуацию. Бы должны поддерживать так называемый <strong>Технический Бэклог</strong>, и вписывать туда все, что мы должны сделать по улучшению ситуации — все то, что мы не покрыли автотестами, все модули, которые нужно переделать, потому что они в плохом состоянии, все то документирование которое мы не сделали, и которое выльется в проблему, когда у нас будут приходить новые люди. И тд.</p>
<p>Итак, у нас есть фичи, они помещаются в бэклог, мы этот бэклог оцениваем, декомпозируем</p>
<p>Понятно, что это сложная задача, не всегда подъемная даже внутри одной итерации, поэтому он должен быть декомпозирован так, чтобы каждая из этих задач была сделана внутри итерации и к концу итерации мы получили полностью работающий код.</p>
<p>Мы следим за тем, чтобы технический бэклог постоянно уменьшался. Суммируем всю сумму, получаем, например, сто условных попугаев, и следим за уменьшением. Если оно постоянно растет — стоп, ребята, мы двигаемся не туда, сами себе роем могилу. В идеале к концу ЖЦ продукта или проекта он должен уйти в ноль, не должно быть ни одной проблемы. Ну, хотя бы он должен уменьшаться, но никак не расти.</p>
<p>Договариваемся с Product Owner и планируем его внутри итерации. Конечно, не то, чтобы мы теперь пять итераций занимаемся улучшением бэклога. Конечно, задачи для бизнеса тоже нужно делать. Но мы постоянно стараемся что-то добавить в итерацию, чтобы он постоянно уменьшался. Это относится к работе с legacy-кодом — все сразу поднять нельзя, работаем постепенно.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2009/08/03/rukovodstvo-po-testirovaniu-v-agile/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1077</post-id>	</item>
		<item>
		<title>Три сита в грамотном тестировании</title>
		<link>https://testitquickly.com/2008/10/09/tri_sita/</link>
					<comments>https://testitquickly.com/2008/10/09/tri_sita/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Thu, 09 Oct 2008 15:17:36 +0000</pubDate>
				<category><![CDATA[Acceptance testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Автоматизация]]></category>
		<category><![CDATA[Банальное]]></category>
		<category><![CDATA[Гипотезы]]></category>
		<category><![CDATA[Инструменты]]></category>
		<category><![CDATA[Озарения]]></category>
		<category><![CDATA[Постановка мозгов]]></category>
		<category><![CDATA[Скриншоты]]></category>
		<category><![CDATA[Соображения]]></category>
		<category><![CDATA[Сита]]></category>
		<guid isPermaLink="false">http://testitquickly.wordpress.com/?p=463</guid>

					<description><![CDATA[Вечер. Хочется порассуждать о тестировании глобально, посасывая белое мартини из трубочки. Именно мартини, потому, что «массандровский» херес меня не восхитил, а коньяка в офисе уже мало. Рассуждать хочу долго и о ситах. Си́то — устройство для разделения сыпучих масс по величине их составляющих (зёрен, круп, песка и т.п.). Сперва послушаем историков: Человеческие жертвоприношения из ряда… <span class="read-more"><a href="https://testitquickly.com/2008/10/09/tri_sita/">Читать далее: Три сита в грамотном тестировании &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p>Вечер.</p>
<p>Хочется порассуждать о тестировании глобально, посасывая белое мартини из трубочки. Именно мартини, потому, что «массандровский» херес меня не восхитил, а коньяка в офисе уже мало.</p>
<p>Рассуждать хочу долго и о ситах.</p>
<p style="padding-left: 40px;"><strong>Си́то</strong> — устройство для разделения сыпучих масс по величине их составляющих (зёрен, круп, песка и т.п.).</p>
<p><span id="more-463"></span></p>
<p>Сперва послушаем историков:</p>
<p style="padding-left: 40px;">Человеческие жертвоприношения из ряда тестировщиков до и после релиза были распространённым явлением у менеджеров проектов, живших на полуострове Юкатан до нашествия конкистадоров. Тестировщиков приносили в жертву через повешение, утопление, отравление, избивание, а также посредством захоронения заживо в груде документации по проекту.</p>
<p style="padding-left: 40px;">Наиболее жестоким видом жертвоприношения являлось, как и у девелоперов, вспарывание живота и вырывание из груди ещё бьющегося сердца тестировщика, который пропустил баг.</p>
<p style="padding-left: 40px;">В жертву приносились как тестировщики, перекупленные в ходе войн представители других племён (корпораций), так и члены собственной группы, в том числе и высший слой, сениоры.</p>
<p style="padding-left: 40px;">Выбор времени, очерёдности и способа жертвоприношения тестировщиков до сих пор не ясен. Точно установлено, что в жертвоприношение в огромных масштабах приносились тестировщики, выявленные в офисе после демонстрации продакшн-релизов представителям заказчика. Однако до сих пор неясно, вели ли менеджеры проектов кровопролитные войны для получения большего количества тестировщиков с целью принесения их в будущем в жертву.</p>
<p>Итак, утопление.</p>
<p>В начале ХХ века в центральной Америке было модно заниматься археологическими раскопками в «подземных» озерах. Для тех, кто в эти озера когда-то нырял, это довольно мрачное место. А для археолога ХХ века подобное озеро &#8212; кладезь информации. На дне, в многовековых наслоениях грязи, лежат никем не разворованные украшения, кости, черепа и прочие интересные археологические штучки.</p>
<p>Как все это добро достать?</p>
<p>Любое движение водолаза по дну такого жилищного массива баламутит всю грязь, и видимость склоняется к нулю.</p>
<p>А водолаз без движения уподобляется тем, кто уже никогда не выныривал из этого озера.</p>
<p>Выход — использовать насосы с ситами разного калибра. Положим три сита друг на друга. Наверху будет сито с самыми крупными ячейками. В середине — среднее. Снизу — самое мелкоячеистое.</p>
<p>Насос начинает выкачивать грязь из подземного озера. Грязь вываливается на сита, и археологам надо только подставлять свои любопытные руки под это месиво.</p>
<ul>
<li>Все крупные предметы будут лежать на верхнем сите.</li>
<li>Самые мелкие тоже не пропадут, потому что их пропустит среднее сито, но задержит самое мелкое.</li>
<li>Все бусины буду сосчитаны и уложены в ящики. Если их не пропьют помощники археологов, то позже их можно будет выкрасть из европейских музеев.</li>
</ul>
<p>В идеальном, грамотном процессе девелопмента применим тот же принцип просеивания тонны грязи <span style="text-decoration: line-through;">софта</span> сквозь три сита. Но, поскольку у нас тут не все как у людей, то порядок расположения сит изменен. Сверху лежит самое мелкоячеистое, потом среднее, и внизу — сито с самой крупноячеистой сеткой.</p>
<p>Сделаем музыкальную паузу.</p>
<hr />
<p><strong><span style="color: #ff0000;">Прочти, раскрась, запомни:</span></strong></p>
<p style="padding-left: 40px;">Тестирование в Agile-way особенно сильно тем, что всё, что можно автоматизировать, автоматизируется до и во время разработки, а не отдельно от неё.</p>
<hr />
<p>Продолжим сосать мартини и рассуждать.</p>
<p>Каждое &#171;сито&#187; в девелопменте имеет свое имя.</p>
<ol>
<li>Test Driven Development — сито мелкоячеистое.</li>
<li>Acceptance Test Driven Development — сито среднеячеистое.</li>
<li>Functional Testing — сито крупноячеистое.</li>
</ol>
<p>Первые два сита — епархия программистов. Сам я существенно разбираюсь только в третьей теме.</p>
<p>Тестировщики и прочий рабочий люд тоже могут запускать акксептанс-тесты одной кнопкой, но по-настоящему полезно и мощно этот инструмент работает в руках программистов, которые могут писать, запускать и апдейтить акксептанс-тесты в ходе разработки, а не после или вместо неё.</p>
<p>Рассуждать о трех ситах следует абстрактно, с точки зрения процесса, не вдаваясь в детальки.</p>
<p style="padding-left: 40px;">Например, понятие сита — уже абстракция.</p>
<p>Абстрактность тут нужна потому, что большинству людей понятие TDD поначалу не «поддаётся», и неимоверно трудным оказывается процесс понимания всего этого. Но когда во все врубился и вгрыззся, становится странным, что до сих пор все это не использовал&#8230;</p>
<h2><span style="color: #008000;"><strong>Unit testing</strong></span></h2>
<p>Внятный пример &#8212; <a href="http://cylib.iit.nau.edu.ua/Books/ComputerScience/PhilosophyProblem/xprogramming.ru/Articles/LoveUT.html">LoveUT</a>.</p>
<p>Цитата из статьи:</p>
<p style="padding-left: 40px;">Тихо мурлыкая под нос, Анна продолжает кодировать свой класс.</p>
<p>Суть «разработки через тестирование» проста:</p>
<ul>
<li>Сначала программист пишет тест для проверки функциональности, которую собирается написать. Этот тест называется «unit-test», потому, что он проверяет только одну единицу функционала.</li>
<li>Затем программист пишет функциональность.</li>
<li>И постоянно проверяет ее посредством ранее написанного, специально для нее, теста.</li>
<li>Как только функционал удовлетворяет требованиям этого теста, разработка функции считается завершенной. Переходим к следующей.</li>
<li>Во время разработки других функций, которые связаны с уже существующей, программисту можно и следует запускать юнит-тесты чаще, чем его легкие всасывают в себя один литр воздуха. Если все «горит зеленым» — программист счастлив. Если красное — увы.</li>
</ul>
<p>Юнит-тестирование (на абстрактном уровне) позволяет достаточно быстро проверить, не привело ли очередное изменение кода к <em>регрессу</em> всей системы, то есть к ухудшению качества софта, а также существенно облегчает локализацию и устранение таких ошибок. Все это <strong>может</strong> ускорить разработку.</p>
<p>Особенности юнит-тестов:</p>
<ul>
<li>Неподготовленный человек не может их читать и понимать, не видя код.</li>
<li>Уровень абстракции в юнит-тестировании неимоверно нулевой. Тесты обрабатывают определенный код, и будучи отстраненными от кода просто не находят смысла в своем существовании. Цель юнит-тестирования — изолировать отдельные части программы и показать, что по отдельности эти части — работоспособны.</li>
<li>Когда функция меняется, юнит-тесты меняются в первую очередь.</li>
</ul>
<p>Дальше надо сидеть рядом и показывать, как это работает. Этот момент в одиночку вряд ли одолеть, поэтому пропускаем подробности и едем дальше.</p>
<h2><span style="color: #008000;"><strong>Acceptance testing</strong></span></h2>
<p>Внятное описание на английском языке: <a href="http://en.wikipedia.org/wiki/Acceptance_testing">wikipedia.org</a>.</p>
<p>Акксептанс-тесты — второй шаг после юнит-тестов. Это уже существенный уровень абстрактности от кода.</p>
<p>На предыдущем уровне проверялось и доказывалось, что каждая отдельная часть программы работоспособна. А на этом уровне проверяются взаимосвязи между отдельными частями программы, а также то, что программа выполняет заранее определенные задачи в определенном виде.</p>
<p style="padding-left: 40px;">Мне когда-то казалось, что акксептанс-тестирование означает проверку соответствия отдельных модулей заявленным критериям или достижение заранее и очень точно определенных целей, что можно делать вручную. Я ошибался. Это изумительно работает в руках разработчиков. В остальных руках это работает или очень просто, или никак.</p>
<p>Особенности акксептанс-тестов:</p>
<ul>
<li>Неподготовленный человек вполне может их читать и понимать, не видя код.</li>
<li>Уровень абстракции в юнит-тестировании неимоверно большой. Тесты обрабатывают не определенный код, а определенные абстракции, которые должны быть воплощены в коде.</li>
<li>Функция меняется как угодно. Акксептанс-тесты для нее не меняются.</li>
</ul>
<p>Неординарность подобного тестирования в том, что оно относится к методам <span style="text-decoration: line-through;">чернокнижников </span>тестирования черного ящика, когда про код мы знаем только то, что он где-то существует. Но тестирование происходит путем нажатия одной кнопки и прогона каких-то тест-кейсов, которые написаны на более-менее машинном языке, что неимоверно роднит эти тесты с юнит-тестами.</p>
<p>Парадкос в том, что подобные проверки хоть и абстрактны, но изрядно привязаны к существующему коду. Ведь абстракции проверяются работающим кодом, не так ли?</p>
<p>Для сочувствующих agile development уточняем: акксептанс-тесты проверяют юзер-сториз. А юзер-сториз &#8212; вне кода, вне технологий. Получается, что у нас есть high level tests, которые запускаются нажатиями кнопок.</p>
<h3><strong>Пример, пример! </strong></h3>
<p style="padding-left: 40px;">Приводится стандартный пример из учебного проекта, который видит каждый, кто умудряется запустить FitNesse.</p>
<p>В примере проверялась такая юзер-стори:</p>
<p style="padding-left: 40px;">«User want to perform money operation from my account to another one to pay/receive money to/from another User»</p>
<p>посредством следующего приемочного критерия:</p>
<p style="padding-left: 40px;">«After money operation one of the accounts is increased and another is decreased by the same amount of money».</p>
<p>Критерии акксептанс-тестов задают (а в идеальном мире — пишут) заказчики софта, а не разработчики. Например, пресловутый заказчик просит* следующего:</p>
<ul>
<li>в базе должны существовать аккаунты разных юзеров.</li>
<li>у каждого юзера на счету есть какие-то деньги.</li>
<li>после нажатия кнопки «Сделать офигенно», со счета юзера №1 на счет юзера №2 должны передаваться какие-то суммы.</li>
</ul>
<ul>* имхо, неимоверно удачно выбранный глагол.</ul>
<p>Как выглядит такой тест, написанный в wiki-разметке в фреймворке «FitNesse»</p>
<div id="attachment_464" style="width: 458px" class="wp-caption aligncenter"><a href="https://testitquickly.com/wp-content/uploads/2008/10/test-money-operation-default-view.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-464" class="size-full wp-image-464" title="test-money-operation-default-view" src="https://testitquickly.com/wp-content/uploads/2008/10/test-money-operation-default-view.jpg" alt="FitNesse" width="448" height="652" /></a><p id="caption-attachment-464" class="wp-caption-text">Тесты в FitNesse читаемы и понятны</p></div>
<p>Как эта таблица выглядит в формате wiki:</p>
<p style="padding-left: 40px;">Make sure that there are no accounts in the bank.</p>
<p style="padding-left: 40px;">!|ensure|clean accounts|</p>
<p style="padding-left: 40px;">Create two different accounts.</p>
<p style="padding-left: 40px;">!|create account for user|Bob|with amount|5|</p>
<p style="padding-left: 40px;">!|create account for user|John|with amount|7|</p>
<p style="padding-left: 40px;">и тд</p>
<p>Как это выглядит после прогона теста:</p>
<div id="attachment_465" style="width: 471px" class="wp-caption aligncenter"><a href="https://testitquickly.com/wp-content/uploads/2008/10/test-money-operation-results.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-465" class="size-full wp-image-465" title="test-money-operation-results" src="https://testitquickly.com/wp-content/uploads/2008/10/test-money-operation-results.jpg" alt="FitNesse рапортует о выполнении задач партии" width="461" height="677" /></a><p id="caption-attachment-465" class="wp-caption-text">FitNesse рапортует о выполнении задач партии</p></div>
<p>Как и почему это работает — не уточним, чтобы не переходить в детали и не разрушать сказки и абстракции. Но стоит сказать, что написание подобных тестов требует интеллекта и какого-то времени. Все равно, что стихи писать&#8230;</p>
<h3>Предварительное резюме</h3>
<p>Тестирование на уровне юнит-тестов показывает, что кусочки кода по-отдельности работают, как ожидалось.</p>
<p>Тестирование на уровне приемочных-тестов показывает, что кусочки кода по-отдельности работают, как ожидалось, а также то, что взаимосвязи между ними работают и выполняются, как ожидалось.</p>
<p style="padding-left: 40px;">Сравним это с муравьями. Пропустим муравьев через мелкое сито. Если каждый в отдельности муравей не хромает и бодро шевелит своими шестью лапками — это отличный муравей. Но это не гарантирует нам то, что муравейник, большая система взаимоотношений между муравьями, будет работать.</p>
<p>Систему взаимоотношений мы начинаем проверять средним ситом. В ячейки попадают по-несколько муравьев, например, отсортированных по принципам выполнения задач. Отдельно — фуражиры, отдельно — охранники, отдельно — муравьи-мамки, отдельно — все остальное. Но сцепленное между собой по какой-то логике.</p>
<h2><span style="color: #008000;"><strong>Functional testing</strong></span></h2>
<p>Сито с самыми крупными ячейками. Оно отлавливает логические взаимодействия, которые посредством проверки работоспособности мелких муравьев проверить невозможно.</p>
<p>Тут мы руками или головой проверяем, что будет, если мимо муравейника проедет танк, и кто победит, если муравьи нападут на танк. Ставлю сто баксов на муравьев&#8230;</p>
<p>Тут мы глазами проверяем, что случится, если все этажи муравейника соединены между собой проходами, и по ним все двигаются, как положено.</p>
<p>Тут мы узнаем, что бывает, если муравьев в системе слишком много или слишком мало.</p>
<p>Это можно делать как всеми органами осязания, воззрения и осмысления, так и заранее документируя свои действия (тест-кейсы).</p>
<p>Иногда проверки на этом уровне можно автоматизировать, но это не та волшебная автоматизация, которая присуща предыдущим уровням. Это грубое вмешательство с мечтательной целью избавиться от необходимости шерстить софт руками 🙂</p>
<h2>Окончательное прозрение</h2>
<p>Если</p>
<ol>
<li>проект только начинается</li>
<li>разработка ведется в стиле on-going (неизвестны ни конечный результат, ни дата полного финала)</li>
<li>код пишется «с нуля»</li>
<li>заказчик умеет работать в agile-стиле</li>
<li>разработчики умеют работать в agile-стиле</li>
<li>инженеры «болеют» тестированием</li>
<li>все три сита постоянно применяются в процессе разработки</li>
</ol>
<p>тогда</p>
<ol>
<li>проект вполне может завершиться выпуском идеального продукта</li>
<li>все риски, которые влечет неполное тестирование, могут быть предупреждены и преодолены</li>
<li>скорость разработки возрастает в неимоверные разы</li>
<li>каждый гребёт свою кучу денег и убегает домой пить пиво и смотреть футбол с любимой женой.</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2008/10/09/tri_sita/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">463</post-id>	</item>
		<item>
		<title>Manifesto for Agile Development</title>
		<link>https://testitquickly.com/2008/08/24/manifesto-for-agile-development/</link>
					<comments>https://testitquickly.com/2008/08/24/manifesto-for-agile-development/#respond</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Sun, 24 Aug 2008 16:16:06 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Соображения]]></category>
		<category><![CDATA[Манифест]]></category>
		<category><![CDATA[Хватит тупить]]></category>
		<guid isPermaLink="false">http://testitquickly.com/2008/08/24/manifesto-for-agile-development/</guid>

					<description><![CDATA[Сравнилось &#171;Manifesto for Agile Development&#187; со всеми Евангелиями. Текст один, но как-то толкуется по-разному&#8230; Например: Люди важнее процесса Несомненно. Нерушим императив: &#171;Найди подходящего человека, укажи задачу, дай ему спокойно работать&#187;. Этот прикол может &#171;не работать&#187; из-за разногласий в методах достижения конечного результата, или из-за проблем с коммуникациями (&#171;Чем занимаешься? Почему не приходишь на работу вовремя?… <span class="read-more"><a href="https://testitquickly.com/2008/08/24/manifesto-for-agile-development/">Читать далее: Manifesto for Agile Development &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p>Сравнилось &#171;Manifesto for Agile Development&#187; со всеми Евангелиями. Текст один, но как-то толкуется по-разному&#8230;</p>
<p>
Например:</p>
<ol>
<li><strong>Люди</strong> важнее <strong>процесса</strong></li>
<p>Несомненно. Нерушим императив: &#171;Найди подходящего человека, укажи задачу, дай ему спокойно работать&#187;.</p>
<p>
Этот прикол может &#171;не работать&#187; из-за разногласий в методах достижения конечного результата, или из-за проблем с коммуникациями (&#171;Чем занимаешься? Почему не приходишь на работу вовремя? Почему не утвердил эти изменения у такого-то начальника?&#187;).</p>
<p>
Тем не менее, процесс должен быть всегда и везде. Хоть какой-то. Отрицать необходимость процесса, упирая на &#171;люди важнее&#187; &#8212; к несчастью в личной жизни. Или к дождю.</p>
<p>
Верно следующее утверждение: если работник просит изменить процесс, то при рассмотрении этого дела приоритет будет у работника, а не у заведующего процессом.</p>
<li><strong>Реакция на изменения</strong> важнее <strong>следования плану</strong></li>
<p>Отрицать необходимость существования хоть какого-то плана &#8212; тоже ошибка юности, и несомненно &#8212; к дождю в личной жизни.</p>
<p>
Просто надо знать, что планы корректируются по ходу дела. Ежеминутно.</p>
<p>
Двое людей выезжают из пункта А в пункт Б. У первого есть план. У второго &#8212; нет. Второй &#8212; романтик&#8230; У кого больше шансов &#171;доехать&#187;?</p>
<p>
Учитывая прогноз &#171;к дождю&#187;, вероятнее всего &#8212; не доедут оба. Но у первого, как ни крути, больше шансов доехать, чем у того, кто просто жмет на педали, глядя на ромашки.</p>
<p>
Ведь у первого есть хоть какие-то соображения по выбору пути и техническому оснащению. И если заблудится &#8212; он хотя бы знает, куда и зачем ехал. И если придется выбирать дорогу на перекрестках, или делать компромиссы &#8212; у него будет путеводная Альфа-Центавра, которую он никак не найдет на засыпанном звездами небе.</p>
<p>
Вот если он заблудится, но будет тупо следовать плану&#8230;</p>
<li><strong>Работающий код</strong> важнее <strong>документации</strong></li>
<p>Да.</p>
<p>
Но это не значит, что документацию не надо писать 🙂</p>
<p>
Если встает проблема &#171;или делать код, или делать к нему документацию&#187;, то первый вариант приоритетнее &#8212; вот и всё.</p>
<p>
Сперва подумай о том, что ты сам в какой-то момент начнешь путаться в &#171;работающем коде&#187;.</p>
<p>
Затем подумай о том, что когда-нибудь состав команды изменится. Кто-то уйдет, кто-то придет. Как быстро ввести новичка в курс дела?</p>
<p>
Еще запланируй внезапную смерть главного &#171;носителя&#187; информации по проекту&#8230;</p>
<p>
Документацию, все-таки, надо делать. &#171;Agile&#187; не означает, что можно проектировать и кодировать без сборника информации о том, что и как, по-меньшей мере, предполагалось делать.</p>
<p>
Просто документация должна быть в этом случае менее формализованной и более доступной для изменения всеми участниками. Да, подразумевается <a href="http://softwaremaniacs.org/blog/2006/03/07/two-wikis/">грамотное использование wiki-систем</a>.</p>
<li><strong>Сотрудничество</strong> важнее <strong>формальных отношений</strong></li>
<p>Еще бы&#8230;</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2008/08/24/manifesto-for-agile-development/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">289</post-id>	</item>
		<item>
		<title>Agile и пирожки</title>
		<link>https://testitquickly.com/2008/08/22/bunica-bate-agile/</link>
					<comments>https://testitquickly.com/2008/08/22/bunica-bate-agile/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Fri, 22 Aug 2008 14:52:43 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Не смешно]]></category>
		<category><![CDATA[Озарения]]></category>
		<category><![CDATA[Откровения]]></category>
		<category><![CDATA[Постановка мозгов]]></category>
		<category><![CDATA[Смешно]]></category>
		<category><![CDATA[Даешь Agile в массы!]]></category>
		<category><![CDATA[Методологии]]></category>
		<category><![CDATA[Пирожки]]></category>
		<category><![CDATA[Хватит тупить]]></category>
		<guid isPermaLink="false">http://testitquickly.com/2008/08/22/agile-%d0%b8-%d0%bf%d0%b8%d1%80%d0%be%d0%b6%d0%ba%d0%b8/</guid>

					<description><![CDATA[Disсlaimer: запись на тему «Люди, мы дышим воздухом, воздухом, люди!». Но это надо, это важное. I. Бабушка &#171;фурычит&#187; в пирожках Технология создания пирожков слегка запутанная. Одни пирожки пекутся в духовой печи. Другие жарятся во фритюре. Третьи сперва обмакиваются в кляр. Тесто для пирожков делают различное: слоеное, рассыпчатое, рубленое, блинчатое, заварное, на дрожжах &#8212; постное и… <span class="read-more"><a href="https://testitquickly.com/2008/08/22/bunica-bate-agile/">Читать далее: Agile и пирожки &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p>Disсlaimer: запись на тему «Люди, мы дышим воздухом, воздухом, люди!». Но это надо, это важное.</p>
<h2>I. Бабушка &#171;фурычит&#187; в пирожках</h2>
<p>Технология создания пирожков слегка запутанная.</p>
<p>Одни пирожки пекутся в духовой печи.</p>
<p>Другие жарятся во фритюре.</p>
<p>Третьи сперва обмакиваются в кляр.</p>
<p>Тесто для пирожков делают различное:</p>
<ol>
<li>слоеное,</li>
<li>рассыпчатое,</li>
<li>рубленое,</li>
<li>блинчатое,</li>
<li>заварное,</li>
<li>на дрожжах &#8212; постное и скоромное.</li>
</ol>
<p>Конечные пирожки тоже бывают разными:</p>
<ol>
<li>слоеные в виде рога изобилия с фаршем из мозгов</li>
<li>с грибным фаршем</li>
<li>с фаршем из печенки, с ромом и мадерою</li>
<li>с фаршем из щуки или окуня</li>
<li>с сыром</li>
<li>с телячьим ливером</li>
<li>с вишней</li>
</ol>
<p style="padding-left: 40px;">Поклонникам Елены Молоховец &#8212; <a href="http://nuclphys.sinp.msu.ru/recipes/molohovec/11.htm">полный расклад</a> пирожковой индустрии.</p>
<p>Теперь идем к такой-то бабушке и просим пирожков.</p>
<p>Нормальная бабушка спросит только: &#171;<em>Какие именно, внучара? Творог, капуста, вишня?</em>&#171;</p>
<p>Ненормальная бабушка спросит: &#171;<em>Какие именно тебе нужны пирожки? Одни пирожки пекутся в духовой печи, другие жарятся во фритюре, третьи &#8212; обмакиваются сперва в кляр. Я могу сделать слоеные в виде рога изобилия с фаршем из мозгов, или с грибным фаршем, или с фаршем из печенки, с ромом и мадерою, или с фаршем из щуки или окуня, или с сыром, или с телячьим ливером, или с вишней&#8230;</em>&#171;</p>
<p>Нам нас жаль&#8230;</p>
<p>И бабушку жаль. Когда-то она была бригадиром (тим-лид) девелоперов, теперь характер у нее въедливый, анордический&#8230;</p>
<h2>II. Сколько раз в неделю нужно проводить daily-митинги?</h2>
<p>На любой тусовке agile-девелоперов кто-то из пришедших обязательно спрашивает о следующем:</p>
<ul>
<li>сколько раз в неделю нужно проводить daily-митинги?</li>
<li>как и когда agile-тестировщикам нужно сочинять тест-кейсы?</li>
<li>как девелопить без документации по проекту?</li>
<li>как <span style="text-decoration: line-through;">убить</span> убедить заказчика в том, что он сам не знает, чего захочет через несколько итераций?</li>
<li>как &#171;уйти&#187; от фиксыд-прайс-прожэкта? (<em>имеется ввиду &#171;fixed-price project&#187;, якобы антипод agile-ориентированного процесса</em>)</li>
<li>как продавать agile-процесс?</li>
</ul>
<p>Все эти вопросы вы уже где-то видели &#8212; это же темы семинаров по agile. <a href="http://agilerussia.ru/index.php?option=com_content&amp;task=view&amp;id=97&amp;Itemid=27">Пример</a> последнего семинара&#8230;</p>
<p>Вот о последнем и хочется сказать: НИКАК.</p>
<p>Еще раз: как продать процесс создания пирожка человеку, которому нужен собственно пирожок?</p>
<p>Продаются пирожки, а не процесс их создания.</p>
<p style="padding-left: 40px;">Исключение &#8212; продажа патента на пирожковое производство.</p>
<h2>III. У нас офигенный процесс производства сайтов</h2>
<p>В бытность мою полудиректором компании по производству веб-сайтов случилось у меня прозрение на тему того, что грамотно поставленные рабочие процессы не имеют никакого значения в глазах стандартных покупателей веб-сайтов.</p>
<p>Наш менеджер по продажам, рекламе и мозгойопству где-то допер до соображения о том, что &#171;для успешного бизнеса надо, чтобы компания чем-то отличалась от всех других&#187; (даже спец-термин есть: дифференциация). Случился диалог:</p>
<ul>
<li><em>Леша, чем наша кишиневская студия веб-дизайна отличается от других кишиневских студий веб-дизайна? Вот, например, у нас офигенный процесс производства сайтов &#8212; мы все делаем поэтапно. Сбор информации, затем расписание контента будущего сайта, потом постановка творческих задач для дизайнера и программиста, потом передача готового сайта клиенту. И на каждом этапе мы согласовываем результат с клиентом. Мы начинаем делать дизайн только тогда, когда решен вопрос с контентом. Мы программируем только тогда, когда есть готовый, обсужденный и одобренный дизайн. Ну, и так далее&#8230; Леха?</em></li>
</ul>
<ul>
<li>&#8230;(<em>тупое молчание</em>)&#8230;</li>
</ul>
<p>Мне реально нечего было ответить. В тот момент я понял, что весь наш прекрасный процесс не имеет никакого значения в глазах клиента. Клиенту нужен сайт, &#171;пирожок&#187;, а как именно мы станем его делать &#8212; наша тема.</p>
<p>У нас есть сотня вариантов того, что мы можем сделать. У нас есть десяток вариантов того, как именно мы это будем делать (толкую о рабочих процессах). Для решения задачи нужно выбрать &#171;наилучшие&#187; вариант и процесс. Можно сделать по этапам. Можно сделать быстро. Можно изрядно задокументироваться&#8230; Можно всё! Критерий успешности &#8212; решение задачи.</p>
<p>Как решить задачу? Удобнее средствами Waterfall? Нате вам. Удобнее использовать V-Model? Welcome! Кому тут кажется, что все проекты лучше всего делать через agile? А через задницу проекты делать не приходилось?</p>
<p>Они же все разные, проекты эти 🙂 Можно ли в agile-way делать софт для управления системами боевого истребителя Su-35? Если ответ &#171;Да&#187;, то мне очень приятно познакомиться с вами, вождь Бромден. Старшая медсестра Милдред Рэтчед уже ждет вас.</p>
<p>Разумно ли делать &#171;GMail&#187; ватерфольным методом? О, мистер Буш, проходите, бушмены у нас сидят справа.</p>
<p>Надо ли убеждать людей, которые хотят построить сайт для решения &#171;таких-то&#187; маркетинговых задач, что им лучше всего доверить это дело фанатам agile? Вы знаете, что такое медиапланирование? Вы уверены, что эти люди <strong>не знают, чего, когда и зачем</strong> хотят?</p>
<p>Клиенту, который не задает дополнительных вопросов, незачем знать, какими методами будет выполнена работа. Клиенту нужен пирожок, а не глубокое понимание процессов его приготовления.</p>
<p>Если хочется напугать кого-то словом agile, то пожалуйте пример:</p>
<p style="padding-left: 40px;">&#8212; <strong>Вы строите дома? Мне нужен дом!</strong></p>
<p style="padding-left: 40px;">&#8212; Построим. Мы уверены, что вы не знаете, какой дом вы хотите.</p>
<p style="padding-left: 40px;">&#8212; <strong>Что значит &#8212; не знаю?</strong></p>
<p style="padding-left: 40px;">&#8212; Не знаете, не знаете. Ни один заказчик не знает точно, чего он хочет. Поверьте моему опыту.</p>
<p style="padding-left: 40px;">&#8212; <strong>И что вы предлагаете?</strong></p>
<p style="padding-left: 40px;">&#8212; Я предлагаю вам гибкий подход к строительству дома. Мы не будем знать общую стоимость проекта. Сперва мы возведем первый этаж. Затем напишем общий план постройки. Юз-кейс простой &#8212; человек хочет жить в доме. Запишем это в бэклог, и&#8230; вам плохо?</p>
<p style="padding-left: 40px;">&#8212; <strong>Нет. А подвал построите?</strong></p>
<p style="padding-left: 40px;">&#8212; Ну, это же подразумевается. Потом оценим результаты первого спринта, и если вам понравится первый этаж (вы в нем поживете), то мы начнем делать второй этаж.</p>
<p style="padding-left: 40px;">&#8212; <strong>И на втором надо будет пожить?</strong></p>
<p style="padding-left: 40px;">&#8212; Да.</p>
<p style="padding-left: 40px;">&#8212; <strong>А если мне не понравится?</strong></p>
<p style="padding-left: 40px;">&#8212; Снесем и начнем строить заново&#8230;</p>
<h2>IV. Agile оценивается в задочасах, а не в пирожках</h2>
<p>Сложно принимать сомнения тех, которые понимают agile как &#171;проект, для которого невозможно назначить фиксированную цену&#187;. Очень даже можно. Просто рассчитывать тут придется не количество воплощенных функций, а количество задочасов.</p>
<p style="padding-left: 40px;">(откашлявшись) Для ориентира: один задочас &#8212; это одна восьмая обычного восьмичасового рабочего дня.</p>
<p>Это разумнее, чем ляпнуть &#171;Функция поиска на сайте стоит $100&#187;, и не суметь объяснить, почему именно $100, а не $99.</p>
<p>Зная стоимость одного задочаса (примерная оценка), и время разработки той или иной функции (примерная оценка), можно точно сказать, сколько времени будет длиться весь проект, и сколько он будет стоить (тоже примерная, но обсуждаемая оценка). Если в будущем проект выйдет за эти рамки или даже займет меньше ресурсов &#8212; какие проблемы? Все течет, все изменяется&#8230;</p>
<p>В Agile-разработке тоже существуют сроки, как и в Waterfall (wow, what a surprise!). Эти сроки оговариваются и должны соблюдаться. И в Waterfall тоже есть короткие итерации, постоянная смена ориентиров и сроков. Нетрудно даже провести параллели.</p>
<p>Подробнее о том, как оценивать будуший проект, см. в книге &#171;<a href="http://testitquickly.com/2008/08/28/scrum-and-xp-from-the-trenches/">Scrum and XP from the trenches</a>&#171;. Подсказка: оценивать надо в стори-пойнтах.</p>
<p>Еще надо знать: неграмотное внедрение Agile-процессов требует человеческих жертв. Первой жертвой будет тот, кто громче всех звал народ на agile-бастионы, соблазняя преимуществами TDD перед АКМ.</p>
<p>Резюме: хватить болтать ерундой! Agile не продается. Продаются пирожки.</p>
<p style="padding-left: 40px;">Проще Родину продать, чем agile&#8230;</p>
<h2>Третьи стороны медали</h2>
<ol>
<li>Денис Петелин, рулевой agilebelarus.org рассказывает о том, &#171;<a title="Как продать Agile" href="http://www.agilebelarus.org/topics/kak-prodavat-agile" rel="bookmark">Как продать Agile?</a>&#187;
<ul>
<li>Вкратце: декларации об agile надо подтверждать клиенту наличием опытной команды.</li>
</ul>
</li>
<li>Michele Sliger, consultant and co-author of The Software Project Manager&#8217;s Bridge to Agility, talks <a href="http://searchsoftwarequality.techtarget.com/news/interview/0,289202,sid92_gci1342625,00.html?track=sy280">about the role of project managers in an agile environment</a>.
<ul>
<li>Вкратце: Don&#8217;t think that transitioning to agile is simply a matter of tool substitution. Don&#8217;t think you can put down the Gantt chart and pick up a burndown chart, and poof, you&#8217;ll be agile.</li>
</ul>
</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2008/08/22/bunica-bate-agile/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">280</post-id>	</item>
	</channel>
</rss>
