<?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>Acceptance testing &#8212; Можно Подумать</title>
	<atom:link href="https://testitquickly.com/category/testing-like/acceptance-testing/feed/" rel="self" type="application/rss+xml" />
	<link>https://testitquickly.com</link>
	<description>про тестирование ПО и всё такое прочее</description>
	<lastBuildDate>Wed, 02 Sep 2009 11:27:10 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://testitquickly.com/wp-content/uploads/2021/09/favicon_lupan-150x150.jpg</url>
	<title>Acceptance testing &#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/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 fetchpriority="high" 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 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 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>Три сита в грамотном тестировании</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>Источник всех бед</title>
		<link>https://testitquickly.com/2008/09/10/all_trablas/</link>
					<comments>https://testitquickly.com/2008/09/10/all_trablas/#comments</comments>
		
		<dc:creator><![CDATA[Alexei Lupan]]></dc:creator>
		<pubDate>Wed, 10 Sep 2008 14:46:11 +0000</pubDate>
				<category><![CDATA[Acceptance testing]]></category>
		<category><![CDATA[Exploratory testing]]></category>
		<category><![CDATA[Инструменты]]></category>
		<category><![CDATA[Соображения]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[Фишки]]></category>
		<category><![CDATA[Mind Map]]></category>
		<category><![CDATA[Чек-лист]]></category>
		<guid isPermaLink="false">http://testitquickly.com/2008/09/10/%d0%b8%d1%81%d1%82%d0%be%d1%87%d0%bd%d0%b8%d0%ba-%d0%b2%d1%81%d0%b5%d1%85-%d0%b1%d0%b5%d0%b4/</guid>

					<description><![CDATA[Все проблемы у программистов от того, что они продают трубу неограниченной длины и неограниченного диаметра со склада производителя. Тщетно пытается программист уточнить, какая именно труба должна получиться в итоге &#8212; иногда клиент этого не знает. Пытается программист уточнить, зачем эта труба клиенту нужна. Умудренный знает, что клиенту этой информацией делиться нафиг не нужно. Что ему… <span class="read-more"><a href="https://testitquickly.com/2008/09/10/all_trablas/">Читать далее: Источник всех бед &#187;</a></span>]]></description>
										<content:encoded><![CDATA[<p>Все проблемы у программистов от того, что они продают трубу неограниченной длины и неограниченного диаметра со склада производителя.</p>
<p>Тщетно пытается программист уточнить, какая именно труба должна получиться в итоге &#8212; иногда клиент этого не знает.</p>
<p>Пытается программист уточнить, зачем эта труба клиенту нужна. Умудренный знает, что клиенту этой информацией делиться нафиг не нужно. Что ему труба нужна. Или <a href="http://testitquickly.com/2008/08/22/agile-%d0%b8-%d0%bf%d0%b8%d1%80%d0%be%d0%b6%d0%ba%d0%b8/">пирожок</a> 🙂 Но пытается.</p>
<p>А потом тестировщики пытаются понять, как проверить, что труба неограниченной длины и неограниченного диаметра со склада производителя действительно соответствует заявленной неограниченной длине и такому же диаметру.</p>
<p>&#171;<a href="http://searchsoftwarequality.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid92_gci1328589,00.html?track=NL-778&amp;ad=660780&amp;asrc=EM_NLT_4405951&amp;uid=7880056">How to test software with dynamic requirements?</a>&#187; &#8212; достаточно вменяемая статья на тему нестандартных труб, исходя из всей доступной &#171;широты&#187; этого вопроса.</p>
<p>Решение в этому случае достаточно взвешенное, хотя и местами рисковое &#8212; <a href="http://testitquickly.com/2008/06/13/short-test-plan/">чек-лист</a>.</p>
<p style="padding-left: 40px;">Кто незамутненно уверен в том, что чек-лист &#8212; стопроцентная панацея в работе тестировщика, тот дурак. Зависит от проекта и уровня образования тестировщика. Например, без понимания софта тестировать в таком режиме почти невозможно. А вот по тест-кейсам может тестировать любой товарищ, даже не понимающий, что именно оне изволят-с тестировать и зачем. <a href="http://testitquickly.com/2008/04/25/%D0%BA%D0%B0%D0%BA-%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE-%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D1%82%D0%BE-%D0%B2-%D1%87%D0%B5%D0%BC-%D0%BD%D0%B5-%D1%80%D0%B0%D0%B7%D0%B1%D0%B8/">Доказательство</a>.</p>
<p>Или MindMap.</p>
<p>Вот <a href="http://www.mindomo.com/view.htm?m=4da87ac463bb40e78f05212f9e436937">пример карты</a> в MindMap (required Flash). В примере я показал часть того, что должно было быть сделано программистом в отношении гипотетической задачи &#171;ER-678&#187;.</p>
<p>
Это все было расписано не в требованиях, а размазано в комментариях к задаче. Занести все это в MindMap и как следует раскидать по логикам вещей &#8212; 7 минут. Проще, чем просить письмо с однозначными требованиями и громко предпочитать работать в гетеросексуальном коллективе.</p>
<p>
Сколько времени занимает само тестирование &#8212; уже не так важно, it&#8217;s depends&#8230; Важно то, что если какое-то требование будет изменено через час, его изменение займет в этой карте минимальное время, и все равно будет понятно, что и как надо делать. А если будет добавлено что-то новое, то и в карту его добавить несложно.</p>
<p>Интереснее всего то, что будет видно потом. Видно, что в пункте &#171;<em>all the other checkboxes should be unchecked and greyed out</em>&#187; возникли какие-то проблемы&#8230; И в комментарии указано, что по этому поводу открыт новый баг в баг-трекере.</p>
<p>MindMap позволяет очень и очень грамотно и гибко сортировать топики по разным признакам &#8212; пользуемся Queries.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://testitquickly.com/2008/09/10/all_trablas/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">402</post-id>	</item>
	</channel>
</rss>
