<?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"
	>

<channel>
	<title>developers.org.ua &#187; Егор Егоров</title>
	<atom:link href="http://www.developers.org.ua/archives/author/egorfine/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.developers.org.ua</link>
	<description>сообщество программистов</description>
	<pubDate>Fri, 21 Nov 2008 11:16:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Об эффективных багрепортах</title>
		<link>http://www.developers.org.ua/archives/egorfine/2008/04/03/effective-bug-reports/</link>
		<comments>http://www.developers.org.ua/archives/egorfine/2008/04/03/effective-bug-reports/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 07:01:00 +0000</pubDate>
		<dc:creator>Егор Егоров</dc:creator>
		
		<category><![CDATA[Тестирование]]></category>

		<category><![CDATA[статьи]]></category>

		<category><![CDATA[багрепорт]]></category>

		<category><![CDATA[тестирование]]></category>

		<guid isPermaLink="false">http://www.developers.org.ua/archives/egorfine/2008/04/03/effective-bug-reports/</guid>
		<description><![CDATA[Ты ставишь чайник на плиту, включаешь над ней подсветку, чтобы увидеть, что вкусненького в соседней сковородке приготовил тебе муж, а света-то и нет. Как ты ему об этом скажешь?


Related posts:<ol><li><a href='http://www.developers.org.ua/archives/zakhar-gryshchenko/2007/11/19/test-automation-autohotkey/' rel='bookmark' title='Permanent Link: Автоматизация тестирования. Заметка об AutoHotKey'>Автоматизация тестирования. Заметка об AutoHotKey</a> <small>AutoHotKey &mdash; не очень известная, но очень полезная утилита, позволяющая...</small></li><li><a href='http://www.developers.org.ua/archives/vseloved/2008/05/07/software-testing-infrastructure/' rel='bookmark' title='Permanent Link: Инфраструктура для интегрированного тестирования ПО'>Инфраструктура для интегрированного тестирования ПО</a> <small>-- No, Take the Fit Challenge Instead -- OK Fit...</small></li><li><a href='http://www.developers.org.ua/archives/max/2006/02/20/testirovanie-python-prilozheniy-ot-unittest-k-nose/' rel='bookmark' title='Permanent Link: тестирование Python-приложений: от unittest к nose'>тестирование Python-приложений: от unittest к nose</a> <small>С тех пор, как появилась первая библиотека для модульного тестирования...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Ты ставишь чайник на плиту, включаешь над ней подсветку, чтобы увидеть, что вкусненького в соседней сковородке приготовил тебе муж, а света-то и нет. Как ты ему об этом скажешь?</p>
<p>&laquo;Дорогой, поменяй лампочку на кухне&raquo; или &laquo;Любимый, там эта штука не светит&raquo;? В этот момент любимый вникает в свежую версию subversion, пытается понять как сделать merge двух репозиториев и ему твоя лампочка &mdash; до лампочки.</p>
<p>Как сказать ему о подсветке? Точнее, давай так себя спросим: как ему сказать о подсветке таким образом, чтобы он <i>услышал,</i> обратил внимание и однозначно понял, в чем состоит проблема? </p>
<p>Это называется &laquo;баг репорт&raquo; (bug report), сообщение о дефекте. Это понятие пришло из области разработки программного обеспечения, но оно касается человеческого общения в целом. Не то чтобы это было очень уж важной частью нашей жизни, но для работы полезно знать, как обращать внимание людей и коллег на проблемы. Более того, ведь мы не ставим себе целью просто обратить внимание на проблему, на сам факт ее существования. Нам важно, чтобы наш собеседник понял, в чем именно ее суть и чтобы на фоне его сознания сразу же закрутился поиск решения. </p>
<blockquote><p>
Нечеткий багрепорт (&laquo;там эта штука не светит&raquo;) все равно придется редуцировать (уточнять) до внятного. Но на это уйдет время и дополнительные уточнения (&laquo;какая штука? А почему ты считаешь что она должна светить?&raquo;), получить которые без нервов не получится. А нервы надо беречь.
</p></blockquote>
<p>Программисты, привыкшие формулировать мысли ясно (ладно-ладно, это комплимент), за долгие годы развития индустрии пришли к простой формуле, по которой можно сообщать друг другу о проблемах. </p>
<h2>Формула совершенного багрепорта</h2>
<p>Формула совершенного багрепорта состоит из трех простых пунктов: </p>
<p style="padding-left: 5em;">
<span style="font-size: 150%;">Что сделала?</span><br />
(Steps required to reproduce the problem)</p>
<p style="padding-left: 5em;">
<span style="font-size: 150%">Что получила?</span><br />
(Actual results)</p>
<p style="padding-left: 5em;">
<span style="font-size: 150%">Что ожидала получить?</span><br />
(Expected results)</p>
<p>Кроме того, нужно сообщить, где именно произошла проблема, при каких условиях а также дать ошибке название. </p>
<blockquote><p>
&laquo;Дорогой, я включила свет над плитой, чтобы посмотреть, что вкусного ты приготовил, а он не горит. Ты не мог бы посмотреть, в чем там дело?&raquo;
</p></blockquote>
<p><b>Что сделала.</b> Конкретная пошаговая инструкция, что нужно сделать для того, чтобы воспроизвести дефект.</p>
<p><b>Что получила.</b> Что было получено в результате выполнения этой инструкции. Собственно, дефект.</p>
<p><b>Что ожидала.</b> Что должно было, по мнению репортера, получиться в результате выполнения этой инструкции.</p>
<p>А также: </p>
<p><b>Где получила.</b> Эта информация должна присутствовать в багрепорте, чтобы тот, кто будет его читать, сразу понял, в какой части  системы случилась беда. Необязательно эту информацию давать отдельным пунктом. Можно просто включить ее в &laquo;что сделала&raquo;, поскольку путешествие по системе к сломавшейся формочке &mdash; это действия. </p>
<p><b>Условия.</b> То, что не является действием, но что важно. Например, для веб-приложений нужно упомянуть броузер/ОС. </p>
<p><b>Название.</b> Это самое краткое описание проблемы или ее части, какое только можно сформулировать. Используется для устного общения, для списков багрепортов и т.п.</p>
<p>Это &mdash; очень полезная форма:</p>
<ol>
<li>Она прозрачна. Она не позволяет репортеру отклониться в повествовательный стиль или транслировать поток сознания;</li>
<li>По ней сложно написать что-то, отличное от  багрепорта. Как следствие, уменьшается количество информационного шума в работе;</li>
<li>Легко верифицировать. Т.е. выполнив указанные шаги, можно получить такой же результат  и подтвердить что дефект существует; или же получить иной результат и создать новый багрепорт; или же получить ожидаемый результат и отклонить багрепорт;</li>
<li>В таком багрепорте четко видно, валиден ли он, т.е. действительно ли данная ситуация является дефектом. Вдруг так и надо, чтобы лампочка над плитой не горела, потому что ее там вовсе не предусмотрено, а холостой выключатель по непонятным соображениям поставили загадочные китайцы? </li>
<li>Такая форма избавляет от лишней коммуникации (донельзя надоевших общих уточняющих вопросов);</li>
<li>Этой форме легко обучить несмышленных пользователей; Всего два-три дня истерик и ваши коллеги научатся внятно общаться;</li>
<li>Сообщая вам в багрепорте, что именно ожидал увидеть пользователь, он тем самым как бы подтверждает, что он владеет системой и понимает, как она должна работать в данном случае;</li>
<li>Такой багрепорт не мотивирует ответственное лицо заткнуть его в угол подальше и забыть поскорее;</li>
</ol>
<h2>А теперь &mdash; слайды</h2>
<p>Типовая ошибка, которую заметил пользователь:</p>
<blockquote><p>
<b>Не могу войти в систему</b></p>
<p><b>Что сделал:</b><br />
1. Открыл http://www.something.com/<br />
2. Кликнул на &#8220;логин&#8221;, увидел форму входа<br />
3. Ввел &#8220;egor&#8221; в поле логина, ввел корректный пароль в поле пароля, кликнул на &#8220;вход&#8221;</p>
<p><b>Что получил:</b> <br />
Белая страничка, адрес http://www.something.com/checklogin</p>
<p><b>Что ожидал получить:</b><br />
1. Форму входа с диагностикой &#8220;неправильный пароль&#8221;  или<br />
2. Главную страничку системы для пользователя</p>
<p><b>Условия:</b> <br />
MSIE 4.01/Windows ME
</p></blockquote>
<p>
Типовая ошибка, которую заметил системный администратор:
</p>
<blockquote><p>
<b>Exim&#8217;у капец</b></p>
<p><b>Что сделал: </b><br />
Запустил /etc/init.d/exim4 restart на сервере lopata.something.com</p>
<p><b>Что получил:</b><br />
touch: `/var/lib/exim4&#8242;: directory not found</p>
<p><b>Что ожидал:</b><br />
exim перезапустился, стандартное сообщение Ubuntu об успешном перезапуске сервиса
</p></blockquote>
<p>Типовая ошибка, которую заметил программист:</p>
<blockquote><p>
<b>Сломался dbPeerAccess-&gt;version()</b></p>
<p><b>Что сделал:</b><br />
use dbPeerAccessor;<br />
use DBI;</p>
<p>my $dbh = DBI-&gt;connect(&#8221;dbi:mysql:telme&#8221;, &#8220;telme&#8221;, &#8220;telme&#8221;);<br />
my $dbAccess = $dbPeerAccessor-&gt;new($dbh);</p>
<p><b>Что получил:</b><br />
$dbAccess-&gt;version() == undef</p>
<p><b>Что ожидал:</b><br />
$dbAccess-&gt;version() == &#8220;1.3.0&#8243;;</p>
<p><b>Условия:</b><br />
trust:htdocs egor$ mysql -utelme -ptelme telme<br />
Welcome to the MySQL monitor.  Commands end with ; or \g.<br />
Your MySQL connection id is 302<br />
Server version: 5.0.51 Source distribution</p>
<p>Type &#8216;help;&#8217; or &#8216;\h&#8217; for help. Type &#8216;\c&#8217; to clear the buffer.</p>
<p>mysql&gt; 
</p></blockquote>
<p>Кстати, такого рода багрепорты (по коду) вообще можно сообщать в виде тестов  (reduced test case), примерно как вот здесь, только в виде одного, целого скрипта, например: </p>
<blockquote><p>
use dbPeerAccessor;<br />
use DBI;</p>
<p>my $dbh = DBI-&gt;connect(&#8221;dbi:mysql:telme&#8221;, &#8220;telme&#8221;, &#8220;telme&#8221;);<br />
my $dbAccess = $dbPeerAccessor-&gt;new($dbh);<br />
printf(&#8221;dbPeerInstance is %s\n&#8221;, <br />
&nbsp;&nbsp;&nbsp;defined $dbAccess-&gt;version() ? &#8220;defined&#8221; : &#8220;undefined&#8221;);
</p></blockquote>
<p>Типовая ошибка, которую заметил проектный менеджер:</p>
<blockquote><p>
<b>&#8220;Забыл пароль&#8221; должно работать иначе</b></p>
<p><b>Что сделал: </b><br />
1. Открыл http://www.something.com/<br />
2. Кликнул в &#8220;забыл пароль&#8221;<br />
3. Открылась форма с предложением ввести свой email, ввел туда свой email, существующий в базе и принадлежащий моему юзеру<br />
4. Кликнул &#8220;восстановить&#8221;</p>
<p><b>Что получил:</b><br />
1. &#8220;Вам отправлен новый пароль&#8221;<br />
2. Пришло письмо, в котором был сгенерированный новый пароль<br />
3. Этот пароль действительно работает, старый не работает</p>
<p><b>Что ожидал:</b><br />
В соответствии с нашими user stories, письмом должен был прийти не новый пароль, а линк на страничку, на которой пользователь может сам создать себе новый пароль
</p></blockquote>
<p>Типовая ошибка, которую заметил финансовый директор: </p>
<blockquote><p>
<b>Почему такие дорогие кресла?</b></p>
<p>В полученном 01.04.2008 от Васи отчете увидел раздел  &laquo;офисная мебель&raquo;, а в нем пункт &laquo;кресла для новых сотрудников, 2шт&raquo;, по цене $1,400 за штуку. Мы ожидали, что Вася будет покупать в отдел кресла для сотрудников в пределах $200, но не полторы же тыщи баксов? Просьба на первое апреля не ссылаться.
</p></blockquote>
<p>Обратите внимание &mdash; необязательно чтобы текст багрепорта был написано именно по такой форме, но важно, чтобы там была нужная информация. Пример программиста и последний пример отлично иллюстрируют, как можно написать хороший багрепорт с исчерпывающей информацией, не прибегая к &laquo;Что увидела?&raquo; и т.п.</p>
<h2>No pain &mdash; no gain</h2>
<blockquote><p>
Хорошо зафиксированный пациент не нуждается в анестезии.
</p></blockquote>
<p>Есть важный момент, который необходимо учитывать при внедрении вот такой формы багрепорта (а фактически &mdash; бизнес-процесса) в вашей команде. Дело в том, что никто не считает себя дураком; напротив, обнаружив багу, пользователь сразу почувствует себя умнее создателя системы. Даже бессознательно. Поэтому, <i>находясь в контексте</i> обнаруженного дефекта, пользователь будет абсолютно комфортно и уверенно себя чувствовать, заполняя багрепорт вида &laquo;программа не работает, точка&raquo;. </p>
<p>Поэтому внедрение строгой формальной формы багрепорта будет болезненной для коллектива. Причем если для IT-коллектива эта боль переживается довольно быстро, поскольку все &mdash; люди рациональные, то внедрение  в отдаленном от IT коллективе будет ощущаться весьма. Багрепорт приносит прозрачность в работу, а прозрачность требует определенных усилий. Да и не каждому человеку в принципе под силу осознать, что такое &laquo;контекст&raquo; и почему собеседник его не понимает, ведь это же так просто, программа не работает, вот смотри.</p>
<p>Мне доводилось внедрять этот &laquo;бизнес-процесс&raquo; на предприятии, где с пользователями общалась только менеджер по работе с клиентами. Она получала от пользователей замечания и заполняла по ним багрепорты. Как и всякий гуманитарий, она мыслила изящными линиями и написать прямой и тупой багрепорт ей было очень сложно. Это были слезы, истерики и обиды на меня, руководителя подразделения. Совершенно искренние слезы! И хоть мне и было ее жалко и совсем не хотелось причинять человеку боль, тем не менее, я отклонял багрепорт за багрепортом, пока она не научилась писать эту несложную форму. На это ушло около трех дней. Через еще пару дней она уже на полном автомате писала прекрасные багрепорты, а спустя еще недельку она поняла ценность такого подхода и стала его сторонником.  Продуктивность ее работы возросла, и проблемы клиентов стали решаться оперативнее.</p>
<p>В связи с этим могу порекомендовать следующее. Внедрение такого подхода должно происходить в компании насильно. Оно должно быть навязано руководителем и лишь только тогда, когда руководитель сам лично понимает, зачем это насилие нужно и какой выйгрышь от этого получит компания. </p>
<p><em>Перевод этой статьи на английский язык: <a href="http://www.fine.kiev.ua/en/articles/priceless-bugreports/">Priceless bugreports</a>.</em></p>
<br/><a href="http://www.developers.org.ua/archives/egorfine/2008/04/03/effective-bug-reports/#ratings">Оценить статью на сайте</a> | <a href="http://www.developers.org.ua/archives/egorfine/2008/04/03/effective-bug-reports/#comments">47 комментариев</a>]]></content:encoded>
			<wfw:commentRss>http://www.developers.org.ua/archives/egorfine/2008/04/03/effective-bug-reports/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
