<?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>Alex Sergeev @ ALSEDI &#187; тесткейсы</title>
	<atom:link href="http://alsedi.com/blog/tag/testkejsy/feed/" rel="self" type="application/rss+xml" />
	<link>http://alsedi.com/blog</link>
	<description>Блог о собственных наблюдениях, ошибках и находках в QA, софтверном бизнесе и жизни.</description>
	<lastBuildDate>Fri, 26 Mar 2010 21:08:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Test &amp; Test Case Management in Jira [инструменты]</title>
		<link>http://alsedi.com/blog/test-test-case-management-part-2/</link>
		<comments>http://alsedi.com/blog/test-test-case-management-part-2/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 22:37:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[QA]]></category>
		<category><![CDATA[jira]]></category>
		<category><![CDATA[tcms in jira]]></category>
		<category><![CDATA[test case management]]></category>
		<category><![CDATA[test management]]></category>
		<category><![CDATA[тесткейсы]]></category>
		<category><![CDATA[управление тестами]]></category>
		<category><![CDATA[фильтры]]></category>

		<guid isPermaLink="false">http://alsedi.com/blog/?p=761</guid>
		<description><![CDATA[Части:
1. Условности
2. Реализация
3. Автоматизации работы &#8211; вы тут
4. Создание отчетов
5. Связь с другими проектами
Во многом, для того чтобы работать с системой, о которой я рассказал в первых двух частях, достаточно возможностей самой Jira. Чтобы отслеживать текущее состояние по проектам, вполне подходит совмещение фильтров (по проекту и статусу Open) и дашбордов.  Но на мой взгляд это [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Части:</strong><br />
1. <a href="http://alsedi.com/blog/test-test-case-management-in-jira-part-0/">Условности</a><br />
2. <a href="http://alsedi.com/blog/test-test-case-management-part-1/">Реализация</a><br />
3. <a href="http://alsedi.com/blog/test-test-case-management-part-2/">Автоматизации работы</a> &#8211; <em>вы тут</em><br />
4. Создание отчетов<br />
5. Связь с другими проектами</p>
<p>Во многом, для того чтобы работать с системой, о которой я рассказал в первых двух частях, достаточно возможностей самой Jira. Чтобы отслеживать текущее состояние по проектам, вполне подходит совмещение фильтров (по проекту и статусу Open) и <a href="http://alsedi.com/blog/tag/dashboard/">дашбордов</a>.  Но на мой взгляд это не слишком интересно отслеживать работу конкретно по тест кейсам. Интереснее оперативно получать информацию о тех кейсах, которые показали ошибки (Resolution: Failed). Для того, чтобы работа была приятнее, нужно настроить какие поля будут отображаться для этого фильтра. Делается это прямо из навигатора по задачам, пункт справа вверху <strong><span style="text-decoration: underline;">Set</span> Column Order for filter</strong>.</p>
<p>Я использую следующие поля: Priority,Key, Summary, Status, Assignee, Fix Version,Links, Created, Updated. А когда смотрю на табличку анализирую записи вот так. Смотрю, есть ли внешние ссылки (Links). Если есть, то просматриваю сначала описание тест кейса для теста (там так же могут быть внешние ссылки) и после смотрю внешние ссылки для этого теста. Если ссылок нет и  приоритет выше, чем Major смотрю дату создания и последнего обновления и комментарии по тест кейсу и тесту. Если ничего нет запрашиваю объяснения у человека, который выполнил тестирование (Assignee) и его лида (тут уже достаточно памяти). Такой подход не позволяет решить проблему обмена информацией и своевременной актуализации тест кейсов. Например существовавшая функциональность сильно изменилась в новой версии, но информация об этом будет в несена  в тест кейсы только после того, как изменения будут проанализированы тестерами. К этому времени тест кейсы могут быть уже пройдены. Вместе с тем это достаточно надежный способ для того, чтобы поддерживать актуальную информацию о регрессионных проблемах при тестировании.</p>
<p>Итак, что легко можно автоматизировать при работе с TCMS средствами Jira, например:</p>
<ul>
<li>Получение актуального статуса по объему оставшейся и выполненной работы (фильтр, либо отчет. Project Pivot Report, например);</li>
<li>Получение статуса по загрузке участников группы в тестирование по тест кейсам (фильтр + портлет Pie Chart);</li>
<li>Составление календаря с указанием предполагаемых сроков завершения тестирования по каждому тесту [правда, обычно по всем разом] (фильтр + портлет Issue Calendar);</li>
<li>Получение актуального статуса по упавшим тестам (фильтр);</li>
<li>Получение отчётов по проделанной работе  (отчеты по проекту);</li>
<li>Получение списка изменений в тест кейсах (фильтр по Update After/Before);</li>
<li>Получение списка автоматических тестов (фильтр);</li>
<li>Получение отчета по загрузке работой по людям и по версиям (снова отчеты по проекту);</li>
</ul>
<p>В общем то, всё что касается отчётов и вытягивания информации по задачам можно сделать стандартными средствами. Но вот управлять задачами на тестирование уже так легко не получится. Стандартными средствами нельзя создать множество подзадач или задач и поставить правильные линки. Даже через массовые операции (Bulk Operations) этого сделать нельзя.  Я когда, при проектировании столкнулся с этой проблемой сильно задумался. Три дня, пока создавал сабтаски руками, думал о том, что вся предыдущая работа вот-вот пойдёт насмарку, потому что работа с системой требовала неадекватного количества операций, длительных по времени, что делало систему нерабочей в тех объемах в которых хотелось. А хотелось не только управлять тест кейсами, но контролировать тестирование по ним.</p>
<p>Решений, в итоге, было несколько (в порядке появления):</p>
<p>1. Забыть про создание отдельных задач (тестов) к тест кейсам и обойтись одной общей (Test by Test Cases, а в описании давать список ссылок). Проблему этот подход не решал.</p>
<p>2. Доработать Jira, чтобы можно было создавать сабтаски массово. После реализации оказалось, что это не эффективно и отнимало слишком много ресурсов на серверной стороне.</p>
<p>3. Разработать плагин для Jira. Идея сразу умерла, уже не помню почему.</p>
<p>4. Использовать XML-RPC. Вот это уже прижилось, хотя всё-равно потребовались небольшие доработки в Jira. Оказалось, что в RPC так же нет возможности создавать подзадачи, хотя просто задачи создавать можно. А в Jira отличие задачи от подзадачи только в её типе (Issue Types) и том, что у подзадачи ссылка на родительскую задачу не пустое значение. <a href="http://jira.atlassian.com/browse/JRA-6896">Не смотря на просьбы участников</a>, эта возможность еще не добавлена в официальный плагин XML-RPC. Большой привет Atlassian. Но никто не мешает внести изменения самостоятельно. К сожалению плагин, который опубликован в таске <a href="http://jira.atlassian.com/browse/JRA-6896">JRA-6896</a> не работает с версиями старше 3.10, придётся править исходники, которые поставляются вместе с используемой версией Jira (не самая сложная работа).</p>
<p>В результате я написал несколько простых программ, которые позволили сделать рутинную работу намного проще и быстрее.</p>
<p>Самой первой появилась программа для создания подзадач. Напомню, что в описанной структуре тест кейс представлен как задача верхнего уровня, а тест (как действие) представлен подзадачей и создается для каждой версии попавшей в тестирование (в идеале).</p>
<p><img class="alignnone" title="Создание подзадач" src="http://www.alsedi.com/blog/blogimg/jira/tcms-create-subs.jpg" alt="" width="433" height="407" /></p>
<p>Она позволяет залогинится, получить список фильтров, получить список задач по выбранному фильтру и создать подзадачи. При создании подзадача формируется из данных тест кейса и данных логина в Jira.</p>
<p>В итоге подзадача состоит из:</p>
<p>- <strong>Summary</strong> -  Тема (Summary) тест кейса с префиксом Test ( например, TEST &#8211; Check login form)</p>
<p>- <strong>Reporter</strong> &#8211; имя залогинившегося пользователя</p>
<p>- <strong>Assignee</strong> &#8211; Никого (Unassigned).</p>
<p>- <strong>Fix For, Affected Version, Component, Original Estimate, тип теста (автоматический/ручной) и Labels.</strong> Копируются из тест кейса.</p>
<p>Такой набор данных позволяет четко идентифицировать ответственных людей, область воздействия теста и затраты по времени не заглядывая в тест кейс.</p>
<p>Ответственный (Assignee) за тестирование проставляется позже через Bulk Operations, либо точечно.</p>
<p>Вторая программа позволила быстро создать костяк отчёта по тестированию и включить в него задачи из разных проектов и автоматически отслеживать актуальный статус.</p>
<p><img class="alignnone" title="Создание страницы в Confluence" src="http://www.alsedi.com/blog/blogimg/jira/tcms-create-page.jpg" alt="" width="530" height="672" /></p>
<p>Тут уже использовалось соединение через XML-RPC с Confluence и с Jira. Вообще, я только когда разобрался в этих возможностях понял, что оба продукта разрабатывают разные группы, со своим взглядом (и похоже они иногда вынашивают планы взаимного тотального уничтожения).</p>
<p>В плагине для Confluence не пришлось что-либо менять. Эта программа вытаскивает версии из нескольких проектов в Jira, подставляет нужные темплейты (с тест планом, тест кейсами, найденными багами)  и каким то волшебным способом создаёт страницу в Confluence.</p>
<p>Это уже не столько относится к автоматизации работы по получению данных или управлению массой задач, сколько к созданию отчётов и представления актуального статуса тестирования. Основная идея в том, что большинство задач по манипуляциям с информацией в Jira можно сделать с помощью RPC, при этом, для представления результатов лучше использовать стандартные средства и не изобретать велосипед.</p>
]]></content:encoded>
			<wfw:commentRss>http://alsedi.com/blog/test-test-case-management-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Test &amp; Test Case Management in Jira [условности]</title>
		<link>http://alsedi.com/blog/test-test-case-management-in-jira-part-0/</link>
		<comments>http://alsedi.com/blog/test-test-case-management-in-jira-part-0/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 22:31:21 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[QA]]></category>
		<category><![CDATA[jira]]></category>
		<category><![CDATA[tcms in jira]]></category>
		<category><![CDATA[test case management]]></category>
		<category><![CDATA[test management]]></category>
		<category><![CDATA[жизненный цикл тест кейса]]></category>
		<category><![CDATA[тесткей]]></category>
		<category><![CDATA[тесткейсы]]></category>
		<category><![CDATA[управление тестами]]></category>

		<guid isPermaLink="false">http://alsedi.com/blog/?p=611</guid>
		<description><![CDATA[Части:
1. Условности &#8211; вы тут
2. Реализация
3. Автоматизации работы
4. Создание отчетов
5. Связь с другими проектами
Собираясь продолжить рассказ, начатый больше года назад, о тех проблемах, c которыми я столкнулся во время руководства QA отделом, долго не мог решить о чем рассказать дальше. Выбор был между идеями по организации работы QA и описанием технического обеспечения. Оказалось, что тяжело [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Части:</strong><br />
1. <a href="http://alsedi.com/blog/test-test-case-management-in-jira-part-0/">Условности</a> &#8211; вы тут<br />
2. <a href="http://alsedi.com/blog/test-test-case-management-part-1/">Реализация</a><br />
3. <a href="http://alsedi.com/blog/test-test-case-management-part-2/">Автоматизации работы</a><br />
4. Создание отчетов<br />
5. Связь с другими проектами</p>
<p>Собираясь продолжить рассказ, <a href="http://alsedi.com/blog/departament-qa-oshibki-upravleniya/">начатый больше года назад</a>, о тех проблемах, c которыми я столкнулся во время руководства QA отделом, долго не мог решить о чем рассказать дальше. Выбор был между идеями по организации работы QA и описанием технического обеспечения. Оказалось, что <strong>тяжело рассказывать об идеях</strong>, не рассказав подробнее об инструментах.</p>
<p>В следующих постах я расскажу о том, <strong>как можно сделать систему управления тест кейсами</strong> <strong>на основе</strong> обычных возможностей <strong>Jira </strong>и управления тестами с небольшой добавкой в RPC, а при определённой сноровке и без неё. Но обо всём по порядку — сначала об условиях, потом о технике и после о хитростях работы.</p>
<p>Условий минимум, всё строится на жизненном цикле тест кейса в системе и связи его с тестами и автоматизацией.</p>
<h3>Жизненный цикл</h3>
<p>Он такой</p>
<p><img class="alignnone" title="Test Case Lifeline" src="http://www.alsedi.com/blog/blogimg/jira/tcms-tclife.png" alt="" width="764" height="527" /></p>
<p>В отдельные блоки вынесены значения полей в Jira, просто для демонстрации связей. Подробнее о них я расскажу в следующей части.</p>
<p>Готовый тест кейс сперва уходит на ревью и после того, как он будет вылизан, то отправляется либо на автоматизацию, либо в план ручного тестирования (для представления планов используются фильтры в Jira). В какой именно <strong>план</strong> попадёт тест кейс <strong>зависит от значения статус</strong>а (<em>Status</em>). Будет ли тест кейс автоматизирован или нет решается на этапе его описания, соответственно и содержание будет разным.</p>
<p>Для автоматических тестов разумно описывать сценарий наиболее полно. Если требуется производить расчёты, то указывать все зависимые значения. Для ручного проверки не всегда правильно описывать сценарий досконально. <strong>Точное описание</strong> ручного теста может быть полезно только для компаний, в которых персонал часто меняется (и тест кейсы используются для обучения новых сотрудников), для стабильных компаний большое количество точно описанных тестов — <strong>это лишние затраты</strong> на обслуживание тестирования, а эффективность обучения не факт, что будет выше.</p>
<p>Проводить ревью всех тест кейсов не имеет смысла чаще чем раз на крупный релиз, и часто достаточно проверить актуальность только тех тест кейсов, которые не были пройдены ни для одной версии в релизе (чтобы не было путаницы в терминах, у нас релиз включает в себя множество версий, в общем как аналог Release Line). У меня ненужные больше тест кейсы не удаляют, а только закрывают (Close) и забывают, никаких особых причин для этого нет, просто так принято.</p>
<h3>Связь с Jira</h3>
<p>Тест кейсы и тесты по ним в Jira представлены в виде задачи TestCase и под-задачи Test. В TestCase находится всё описание, <strong>включая начальные (Pre) и конечные (Post) условия</strong>, там же выставляется приоритет и статус, которые отражают текущее положение тест кейса в жизненном цикле:</p>
<p><strong>«Живой» тест кейс (Status – Open):</strong><br />
Assignee = Reporter – тест кейс на стадии разработки и еще не готов для использования<br />
Assignee = лидер группы (или другой человек отвечающий за ревью) — тест кейс проверяется<br />
Assignee = Unassigned – тест кейс проверен и может быть использован для тестирования.<br />
Assignee = разработчик – тест кейс отправлен на автоматизацию<br />
Assignee = Unassigned, Test Сase State = Automated – тест кейс отправлен на автоматизацию</p>
<p><strong>Устаревший тест кейс:</strong><br />
Status = Closed, Assignee = Unassigned или человек, которые закрыл тест кейс (но это не важно, всё есть в истории изменений).</p>
<p>Для разбиения тест кейсов на группы используются совместно метки (<strong>Labels</strong>) и приоритет (<strong>Priority</strong>).</p>
<p>В приоритете используется только три уровня — <strong>Critical</strong>, <strong>Major</strong>, <strong>Normal</strong>, которые определяют частоту использования тест кейса — для каждой версии (билда), для каждого значимого изменения (например — связанных компонент) и если есть время, соответственно. Метки используются для группировки по любому интересующему признаку — бизнес значимость, функциональность, прощупываемая  с разных сторон. Причем такие группы кросс-компонентные (компонент может означать &#8211; целый проект, часть бизнес логики, группу проектов, что угодно, лишь бы было полезно в работе).</p>
<p>Комбинацией фильтров и плагинов (для Jira или Confluence) набор задач приводится в приемлемый вид и может быть выведен на персональных дашбордах или на общих страницах в Confluence (например через плагин <strong>jiraissues</strong>).</p>
]]></content:encoded>
			<wfw:commentRss>http://alsedi.com/blog/test-test-case-management-in-jira-part-0/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CubicTest плюсы и минусы</title>
		<link>http://alsedi.com/blog/cubictest-plyusy-i-minusy/</link>
		<comments>http://alsedi.com/blog/cubictest-plyusy-i-minusy/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 16:28:02 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[QA]]></category>
		<category><![CDATA[Инструменты]]></category>
		<category><![CDATA[CubicTest]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[user story]]></category>
		<category><![CDATA[обучение]]></category>
		<category><![CDATA[тест]]></category>
		<category><![CDATA[тестирование]]></category>
		<category><![CDATA[тесткейсы]]></category>

		<guid isPermaLink="false">http://alsedi.com/blog/?p=502</guid>
		<description><![CDATA[Продолжаем разговор о тестах в CubicTest.
Хочу отметить, что технические возможности пристально разглядывали мои сотрудники (Лиля и Ира), а я лишь ковылял вслед за ними, всего лишь их подбадривая и горячо надеясь в полезность кубика.
Но при близком рассмотрении CubicTest разочаровал (хотя концепция неплоха, но подвела текущая реализация). Он плохо подходит для создания сложных тестов. Есть проблемы [...]]]></description>
			<content:encoded><![CDATA[<p>Продолжаем <a href="http://alsedi.com/blog/funkcionalnye-web-testy-dlya-selenium-v-cubictest/" target="_blank">разговор о тестах в CubicTest</a>.</p>
<p>Хочу отметить, что технические возможности пристально разглядывали мои сотрудники (Лиля и Ира), а я лишь ковылял вслед за ними, всего лишь их подбадривая и горячо надеясь в полезность кубика.</p>
<p>Но при близком рассмотрении CubicTest разочаровал (хотя концепция неплоха, но подвела текущая реализация). Он плохо подходит для создания сложных тестов. Есть проблемы с рекордером — запись возможна только в Firefox и Opera, не все элементы определяются корректно. Проблемы с использованием переменных в тестах, например зациклить тест для прохода сценария по одному тест кейсу, но с разными параметрами в текущей версии (1.9.6) не получится. Такую поддержку обещают в будущем. Единственная возможность перевести тесты в Selenium — это экспорт тестов в скрипты, совместимые с Selenium, но даже после этого для запуска теста в Selenium RC его нужно шлифовать руками. Существует теоретическая возможность интеграции CubicTest в Selenium Grid, но у нас этого не получилось.</p>
<p>Но есть и плюсы, которые делают CubicTest отличным инструментом для обучения неопытных тестировщиков и составления простых функциональных тестов. А также для общения с заказчиком, для получения User Story.</p>
<p><strong>Плюс 1.</strong> Визуальное представление тестов, операций, связей между тестами и элементов страниц. Ошибки и удачные проходы условий при выполнении теста тоже подсвечиваются прямо в редакторе.</p>
<p><a href="http://www.alsedi.com/blog/blogimg/cubictest/visual.jpg"><img class="alignnone" title="Визуальное представление теста" src="http://www.alsedi.com/blog/blogimg/cubictest/visual_th.jpg" alt="" width="400" height="188" /></a></p>
<p><strong>Плюс 2. </strong>Возможность расширять тестовые наборы с помощью Java (но не залезать внутрь существующего теста).<br />
<a href="http://www.alsedi.com/blog/blogimg/cubictest/java.jpg"><img class="alignnone" title="Визуальное представление теста" src="http://www.alsedi.com/blog/blogimg/cubictest/java_th.jpg" alt="" width="400" height="158" /></a></p>
<p><strong>Плюс 3. </strong>Создание прототипа HTML по тесту (на лицо попытка адаптации к TDD или User Story). Сама идея мне очень даже понравилась, остаётся только проверить её на профпригодность.</p>
<p>Код генерируется чистенький (судя по всему из одного темплейта, просто подставляются новые элементы), с использованием li, div, css и js. Есть несогласованность языковых настроек, по умолчанию HTML создаётся с кодировкой ISO-8859-1, хотя из Eclipse, в моей инсталляции, приходит Cp1251 (эта же кодировка используется при записи тестов).</p>
<p>Теоретически этот прототип можно использовать для дальнейшей разработки, либо для показа заказчику, на этапе проектирования.</p>
<p><strong>Плюс 4. </strong>Обилие поддерживаемых браузеров и режимов их работы (всего семь) и возможность указывать профайлы для Firefox и Opera.<br />
<code><br />
*firefox -&gt; Firefox (chrome mode)<br />
*opera -&gt; Opera<br />
*googlechrome -&gt; Google Chrome<br />
*iexplore -&gt; Internet Explorer (HTA mode)<br />
*safari -&gt; Safari<br />
*pifirefox -&gt; Firefox - Proxy injection mode<br />
*piiexplore -&gt; Internet Explorer - Proxy injection mode</code></p>
<p>Proxy Injection Mode достался от Selenium. HTA (HTML Application?) у меня просто отказался работать, IE8 упорно валился с ошибками в JS.</p>
<p><strong>Плюс 5. </strong>При записи теста в Recorder Plugin прямо на странице указывать какие элементы нужно проверять, условия автоматически добавятся в тест.</p>
<p><strong>Плюс 6. </strong>Интеграция с Maven.</p>
<p>Об использовании CubicTest, еще можно поспорить, но познакомить с ним тестировщиков web приложений точно стоит, вполне возможно, что найдутся такие рутинные операции, которые CubicTest позволит очень быстро автоматизировать и вынести за пределы ручной переборки.</p>
]]></content:encoded>
			<wfw:commentRss>http://alsedi.com/blog/cubictest-plyusy-i-minusy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Рутинное &#8211; тест кейсы</title>
		<link>http://alsedi.com/blog/rutinnoe-test-kejsy/</link>
		<comments>http://alsedi.com/blog/rutinnoe-test-kejsy/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 16:57:30 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[ALSEDI]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[внутреннее]]></category>
		<category><![CDATA[департамент qa]]></category>
		<category><![CDATA[оспоримое]]></category>
		<category><![CDATA[рекомендации]]></category>
		<category><![CDATA[тестирование]]></category>
		<category><![CDATA[тесткейсы]]></category>

		<guid isPermaLink="false">http://alsedi.com/blog/?p=288</guid>
		<description><![CDATA[Рекомендации были написаны для внутреннего употребления и пришлось вырезать некоторые части и ссылки. Что то вообще не соответствует теории.
Общее
Всегда, когда пишите тест кейс нужно помнить очень простую связку:
Объект – Действие – Результат
Объект – это всё что угодно: от расположения точек в картинке, до строк файлов, от кнопок до всей платформы целиком.
Действие – что мы делаем [...]]]></description>
			<content:encoded><![CDATA[<p>Рекомендации были написаны для внутреннего употребления и пришлось вырезать некоторые части и ссылки. Что то вообще не соответствует теории.<span id="more-288"></span></p>
<h2>Общее</h2>
<p>Всегда, когда пишите тест кейс нужно помнить очень простую связку:</p>
<blockquote><p>Объект – Действие – Результат</p></blockquote>
<p><strong>Объект</strong> – это всё что угодно: от расположения точек в картинке, до строк файлов, от кнопок до всей платформы целиком.<br />
<strong>Действие</strong> – что мы делаем с объектом.<br />
<strong>Результат</strong> – что получилось в результате действия  с объектом.</p>
<p>В идеале результат действия один, в принципе, к этому надо стремиться. Но в реальности производимое действие может аукнуться в разных местах. И это не всегда проблемы архитектуры. Особенно часто несколько результатов появляется при тестировании пользовательских интерфейсов или многопоточных приложений.</p>
<h2>Термины</h2>
<p>В зависимости от продукта они разные, но это и понятно. Точное название зачастую могут дать разработчики, и если вы стопроцентно не уверены как правильно называется элемент – спросите девелопера, ткните девелопера, кусите девелопера, порвите его как грелку, но точное название должно быть.<br />
Будьте внимательны и используйте правильно следующие термины «Panel» и «Form» (группировка и интерактивность), «Window» и «Dialog» (окно, контролируемое процессом и окно, желающее пользователя). Так же используйте правильно «left» и «right» (лево и право).<br />
Не забывайте, так же что:</p>
<ul>
<li>«button» нажимают: «press» или «push»;</li>
<li> «link» и большую часть элементов кликают: «click»;</li>
<li> «menu», «menu+tree+list+grid item» выбирают:  «select»;</li>
<li> «check box» и «radio box» выделяют: «check» или «flag»;</li>
<li> текст вводят: «type» или «enter»;</li>
<li> информацию и объекты показывают: «show», «display», «pop-up» и иногда «appear» (когда хоба, его никто не ждал, а оно появилось);</li>
<li> последовательность существительных в английском переводится задом наперёд;</li>
<li> «number» – это и «integer» и «float» («real»);</li>
<li> «string» – это и буквы и «number»;</li>
<li> «number» может включать в себя буквы от «A» до «F» и «E», точки или запятые, как указатель дробной части;</li>
<li> «text» – это набор «string», обычно со смыслом.</li>
</ul>
<h2>Подходы к написанию тест кейсов.</h2>
<ol>
<li>Прямое описание</li>
<li> Описание на основе определений</li>
<li> Группировка объектов по признаку</li>
<li> Зацикливание тест кейса</li>
<li> Ссылки на другие тест кейсы</li>
<li> Alias</li>
<li> Начальные и пост- условия</li>
</ol>
<p>Частенько они переплетаются в одном тест кейсе.</p>
<h3>Прямое описание</h3>
<p>В двух словах – это то, что вижу, то и пишу. Удобно, когда сценарий простой, а объекты четко определимы. Если взять главную страницу Google.com (классическое представление), то там можно четко определить следующие элементы:</p>
<ul>
<li>Логотип (image)</li>
<li>Поле ввода (input box, input field)</li>
<li>Две кнопки (button)</li>
<li>Группа из двух радио боксов (я не знаю, как правильно перевести radiobox на русский, никогда не задумывался).</li>
</ul>
<p>Можно так же определить все ссылки, назвав их, но это будет неправильно, потому что они явно представлены в разных блоках и имеют косвенное отношение к главной функции – поиску, но об этом позже.<br />
Имея эти элементы легко составить тест кейсы по проверке формы для поиска:<br />
<strong>Step 1. Type “wiki test case” string into input box and press “Google Search” button<br />
Result: New page will be opened in same window with list of sites<br />
Step 2. Check that any word from search phrase present in any part of site representation (in title, description, URI or Sitelinks)<br />
Result: Each site in search results list contains any or few words from search phase</strong></p>
<p>Хозяйке на заметку: «Sitelinks» &#8211; это определение используется только в гугл (в контексте показа результатов поиска) и означает небольшой блок из 1 – 8 ссылок на внутренние ресурсы сайта. Причем будет или не будет показываться этот блок для сайта и какие ссылки он будет содержать решают только в Google. Впрочем, если у вас есть доступ в Webmaster Tolls, вы это уже знаете.</p>
<p>Нужно ли писать так много слов? Вовсе нет, можно вообще написать «Type “wiki test case” and press “Google Search” button» и «Verify that search result contains search phrase parts». Еще разок повторю, писать надо так, чтобы было понятно, что сделать, с чем сделать, и какой результат ожидать. А это значит, что использовать слова «corresponding, proper, respective» и прочие со смыслом «правильный» использовать нужно аккуратно. Например, фразы в «Expected Results»: «Respective blank appeared in the left frame» и «Check time» &#8211; ничего не значат, и писать надо, например, так «”Budviser Panel” loaded into left frame» и «Check that time format is “HH:MM:SS”, where HH – hours (24h или 12am/pm), MM – minutes, SS &#8211; seconds».<br />
В общем и целом в прямом описании сценария нет ничего сложного или заумного, достаточно внимательно описать действия и объекты, при возможности строя новый шаг тест кейса на основе предыдущего, тогда простота описания «Expected result» получится сама собой.</p>
<h3>Описание на основе определений</h3>
<p>Определения позволяют сильно сэкономить, когда в тест кейсе какая-то информация повторяется несколько раз. Например, при проверке однотипных значений, которые легко описать в виде формата, например время, элементы списков, записи в логах и так далее.</p>
<p>У определения есть имя и значения, описывается оно в комментариях тест кейса, например:</p>
<p>“Long Time” format is HH:MM:SS, where HH is hours from 0 to 23, MM are minutes 0-59, SS are seconds 0-59.</p>
<p>После чего «Long Time» можно использовать в тексте тест кейса вместо полного описания.</p>
<p>Точно так же поддаются определению практически любые объекты, группы и значения. Помните, что то, что понятно вам, может быть непонятно другому человеку.</p>
<p>Использование определений поможет вам сократить количество писанины, упростить текст тест кейса и при этом поможет другому человеку лучше понять что правильно, а что нет во время проверки.</p>
<h3>Группировка объектов по признаку</h3>
<p>Это опять-таки имеет отношение к проверке однотипных объектов и упрощению тест кейсов. В данном случае в одном шаге тест кейса объединяется проверка сразу нескольких объектов. Классическое тестирование это развлечение не приветствует, но мне всё равно. При таком подходе пишется следущее:</p>
<p><strong>Step 1: Check property ‘x’ of objects: a) ‘Object a’ b) Object ‘b’ c) Object ‘c’<br />
Expected Result: property ‘x’ is in format of (has value of)</strong></p>
<p>То есть в разных объектах значение, какого-то свойства одинаковое, но при этом объекты могут быть независимыми друг от друга.</p>
<h3>Зацикливание тест кейса</h3>
<p>Это миф. Тест кейс зацикливать нельзя. То есть писать «Repeat steps 1-3» не стоит. А собственно почему? Только потому, что это прерывает последовательность шагов? Вот фигня то. Тест кейс – это обычный сценарий действий, и если действительно нужно повторить шаг с первого по третий, то почему бы не повторить? Но вот если шаг 1-3 говорит о том, что действие надо сделать с  объектом «А», а нужно повторить эти шаги для объекта «Б», тогда придется писать эти шаги снова, но уже для объекта «Б». Так же придется делать, если количество шагов больше семи (магическая цифра, найденная психологами или психиатрами).</p>
<h3>Ссылки на другие тест кейсы</h3>
<p>Допускаются только в комментариях. Нельзя написать пройдите тест кейс «TC-1» ни в шагах, ни в начальных или пост- условиях. Потому что тест кейс – самостоятельный сценарий и для его выполнения не требуются другие тест кейсы.</p>
<h3>Alias</h3>
<p>Набор действий, с чётко известным результатом, выраженные простой фразой или словом, которые нужно совершить перед началом прохода по тест кейсу. Например &#8211; логин.</p>
<p>Смысла описывать в каждом тест кейсе одни и те же рутинные операции имеет ли смысл? Для этого допустимо (хотя классическая теория это запрещает) использовать ассоциацию, связанную с набором этих операций. Возвращаясь к пример. Логин – вроде как понятное определение, но даже у нас оно будет включать разные действия в разных проектах, но смысл везде один – идентификация и авторизация в системе, получение доступа к набору персонализированной информации.</p>
<p>Поэтому в тест кейсах в начальных условиях можно просто написать «User must be logged in», «User must be authorized», «User logged into [] under [] role». Понятно ли что нужно сделать перед тем, как начать работу с тесткейсом? Единственное «но», алиас всё равно должен быть описан где-либо в доступном месте (FAQ к проекту вполне подойдет).</p>
<h3>Начальные и пост- условия</h3>
<p>Состояние тестируемой системы до и после теста. Что означает «До», в принципе, проблем не должно быть. Я надеюсь. Очень.<br />
После – это то, как изменилась вся или часть системы, когда тест пройден успешно. Это эдакая последняя проверка на то, что даже правильно работающие кусочки, проверенные последовательно не отразились в сумме своей на системе негативно.</p>
<p>Хозяйке на заметку: <a href="http://blog.abakas.com/2009/02/look-even-when-you-know.html" target="_blank">http://blog.abakas.com/2009/02/look-even-when-you-know.html</a><br />
Это только начало…</p>
]]></content:encoded>
			<wfw:commentRss>http://alsedi.com/blog/rutinnoe-test-kejsy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
