<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>QualidadeBR</title>
	<atom:link href="https://qualidadebr.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://qualidadebr.wordpress.com</link>
	<description>Teste &#38; Qualidade de Software</description>
	<lastBuildDate>Wed, 31 Jul 2013 05:32:24 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<site xmlns="com-wordpress:feed-additions:1">3987718</site><cloud domain='qualidadebr.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://secure.gravatar.com/blavatar/2bfee71ee7858d8b4d0736c528cb340d140cd16f8c1c10d0f19940bb97efc219?s=96&#038;d=https%3A%2F%2Fs0.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>QualidadeBR</title>
		<link>https://qualidadebr.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://qualidadebr.wordpress.com/osd.xml" title="QualidadeBR" />
	<atom:link rel='hub' href='https://qualidadebr.wordpress.com/?pushpress=hub'/>
	<item>
		<title>Brincando com PhantomJS e CasperJS</title>
		<link>https://qualidadebr.wordpress.com/2013/07/31/brincando-com-phantomjs-e-casperjs/</link>
					<comments>https://qualidadebr.wordpress.com/2013/07/31/brincando-com-phantomjs-e-casperjs/#comments</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Wed, 31 Jul 2013 05:24:17 +0000</pubDate>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[CasperJS]]></category>
		<category><![CDATA[coffescript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[PhantomJS]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4373</guid>

					<description><![CDATA[Esses dias usei o PhantomJS para converter uma imagem em SVG para PNG, e gostei bastante, tanto que dei uma olhada mais a fundo em como ele pode ser usado. E umas das formas é para testar aplicações. Com o Phantom você pode testar de forma headless, ou seja, sem usar a interface gráfica, o [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Esses dias usei o <a href="http://phantomjs.org/" target="_blank">PhantomJS</a> para converter uma imagem em SVG para PNG, e gostei bastante, tanto que dei uma olhada mais a fundo em como ele pode ser usado. E umas das formas é para testar aplicações.</p>
<p>Com o Phantom você pode testar de forma <em>headless</em>, ou seja, sem usar a interface gráfica, o que resulta numa diminuição do tempo dos testes.</p>
<p>Mas ele por si só não é um framework de teste, portanto quando usado pra testar você geralmente vai querer usar algum framework de teste como o <a href="http://pivotal.github.io/jasmine/" target="_blank">Jasmine</a>.</p>
<p>Pra minha brincadeira eu acabei usando apenas o <a href="http://casperjs.org/" target="_blank">CasperJS</a>, que abstrai o PhantomJS visando a execução de testes. Assim sendo ele nos dá funções de navegação, preenchimento de campos, screenshot, etc.</p>
<p><a href="https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg" target="_blank"><img data-attachment-id="4376" data-permalink="https://qualidadebr.wordpress.com/2013/07/31/brincando-com-phantomjs-e-casperjs/casper_1995_2/#main" data-orig-file="https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg" data-orig-size="1280,720" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Casper" data-image-description="" data-image-caption="" data-medium-file="https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg?w=300" data-large-file="https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg?w=620" class="aligncenter size-medium wp-image-4376" alt="Casper" src="https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg?w=300&#038;h=168" width="300" height="168" srcset="https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg?w=300 300w, https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg?w=600 600w, https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg?w=150 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Após instalar o PhantomJS e o CasperJS (versão 1.1 beta 1). Dei uma olhada nos samples do Casper, e usei o &#8220;googletesting.coffee&#8221;, para entender como ele funciona, e fiz uma pequena mudança, para capturar um screenshot no último teste, como pode ser visto no <a href="https://gist.github.com/FabricioFFC/fd6e6ca12897478a012c" target="_blank">código</a> abaixo:</p>
<style>.gist table { margin-bottom: 0; }</style>
<div style="tab-size: 8" id="gist6119437" class="gist">
<div class="gist-file" translate="no" data-color-mode="light" data-light-theme="light">
<div class="gist-data">
<div class="js-gist-file-update-container js-task-list-container">
<div id="file-googletesting-coffee" class="file my-2">
<div itemprop="text"
      class="Box-body p-0 blob-wrapper data type-coffeescript  "
      style="overflow: auto" tabindex="0" role="region"
      aria-label="googletesting.coffee content, created by FabricioFFC on 05:07AM on July 31, 2013."
    ></p>
<div class="js-check-hidden-unicode js-blob-code-container blob-code-content">
<p>  <template class="js-file-alert-template"></p>
<div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center">
  <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
    <span><br />
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br />
      <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a><br />
    </span></p>
<div data-view-component="true" class="flash-action">        <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn">    Show hidden characters<br />
</a>
</div>
</div>
<p></template><br />
<template class="js-line-alert-template"><br />
  <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"><br />
    <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
</span></template></p>
<table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="4" data-paste-markdown-skip data-tagsearch-path="googletesting.coffee">
<tr>
<td id="file-googletesting-coffee-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td>
<td id="file-googletesting-coffee-LC1" class="blob-code blob-code-inner js-file-line"># Google sample testing.</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td>
<td id="file-googletesting-coffee-LC2" class="blob-code blob-code-inner js-file-line">#</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td>
<td id="file-googletesting-coffee-LC3" class="blob-code blob-code-inner js-file-line"># Usage:</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td>
<td id="file-googletesting-coffee-LC4" class="blob-code blob-code-inner js-file-line">#     $ casperjs test googletesting.coffee</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td>
<td id="file-googletesting-coffee-LC5" class="blob-code blob-code-inner js-file-line">casper.test.begin &#39;Google search retrieves 10 or more results&#39;, 5, (test) -&gt;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td>
<td id="file-googletesting-coffee-LC6" class="blob-code blob-code-inner js-file-line">    casper.start &quot;<a href="http://www.google.fr/&#038;quot" rel="nofollow">http://www.google.fr/&#038;quot</a>;, -&gt;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td>
<td id="file-googletesting-coffee-LC7" class="blob-code blob-code-inner js-file-line">        test.assertTitle &quot;Google&quot;, &quot;google homepage title is the one expected&quot;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td>
<td id="file-googletesting-coffee-LC8" class="blob-code blob-code-inner js-file-line">        test.assertExists &#39;form[action=&quot;/search&quot;]&#39;, &quot;main form is found&quot;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td>
<td id="file-googletesting-coffee-LC9" class="blob-code blob-code-inner js-file-line">        @fill &#39;form[action=&quot;/search&quot;]&#39;, q: &quot;foo&quot;, true</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td>
<td id="file-googletesting-coffee-LC10" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L11" class="blob-num js-line-number js-blob-rnum" data-line-number="11"></td>
<td id="file-googletesting-coffee-LC11" class="blob-code blob-code-inner js-file-line">    casper.then -&gt;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L12" class="blob-num js-line-number js-blob-rnum" data-line-number="12"></td>
<td id="file-googletesting-coffee-LC12" class="blob-code blob-code-inner js-file-line">        test.assertTitle &quot;foo &#8211; Recherche Google&quot;, &quot;google title is ok&quot;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L13" class="blob-num js-line-number js-blob-rnum" data-line-number="13"></td>
<td id="file-googletesting-coffee-LC13" class="blob-code blob-code-inner js-file-line">        test.assertUrlMatch /q=foo/, &quot;search term has been submitted&quot;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L14" class="blob-num js-line-number js-blob-rnum" data-line-number="14"></td>
<td id="file-googletesting-coffee-LC14" class="blob-code blob-code-inner js-file-line">        test.assertEval (-&gt;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L15" class="blob-num js-line-number js-blob-rnum" data-line-number="15"></td>
<td id="file-googletesting-coffee-LC15" class="blob-code blob-code-inner js-file-line">            __utils__.findAll(&quot;h3.r&quot;).length &gt;= 10</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L16" class="blob-num js-line-number js-blob-rnum" data-line-number="16"></td>
<td id="file-googletesting-coffee-LC16" class="blob-code blob-code-inner js-file-line">        ), &quot;google search for \&quot;foo\&quot; retrieves 10 or more results&quot;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L17" class="blob-num js-line-number js-blob-rnum" data-line-number="17"></td>
<td id="file-googletesting-coffee-LC17" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L18" class="blob-num js-line-number js-blob-rnum" data-line-number="18"></td>
<td id="file-googletesting-coffee-LC18" class="blob-code blob-code-inner js-file-line">    casper.run -&gt; test.done()</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L19" class="blob-num js-line-number js-blob-rnum" data-line-number="19"></td>
<td id="file-googletesting-coffee-LC19" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L20" class="blob-num js-line-number js-blob-rnum" data-line-number="20"></td>
<td id="file-googletesting-coffee-LC20" class="blob-code blob-code-inner js-file-line">casper.test.begin &quot;Casperjs.org is first ranked&quot;, 1, (test) -&gt;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L21" class="blob-num js-line-number js-blob-rnum" data-line-number="21"></td>
<td id="file-googletesting-coffee-LC21" class="blob-code blob-code-inner js-file-line">    casper.start &quot;<a href="http://www.google.fr/&#038;quot" rel="nofollow">http://www.google.fr/&#038;quot</a>;, -&gt;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L22" class="blob-num js-line-number js-blob-rnum" data-line-number="22"></td>
<td id="file-googletesting-coffee-LC22" class="blob-code blob-code-inner js-file-line">        @fill &quot;form[action=\&quot;/search\&quot;]&quot;, q: &quot;casperjs&quot;, true</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L23" class="blob-num js-line-number js-blob-rnum" data-line-number="23"></td>
<td id="file-googletesting-coffee-LC23" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L24" class="blob-num js-line-number js-blob-rnum" data-line-number="24"></td>
<td id="file-googletesting-coffee-LC24" class="blob-code blob-code-inner js-file-line">    casper.then -&gt;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L25" class="blob-num js-line-number js-blob-rnum" data-line-number="25"></td>
<td id="file-googletesting-coffee-LC25" class="blob-code blob-code-inner js-file-line">        test.assertSelectorContains &quot;.g&quot;, &quot;casperjs.org&quot;, &quot;casperjs.org is first ranked&quot;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L26" class="blob-num js-line-number js-blob-rnum" data-line-number="26"></td>
<td id="file-googletesting-coffee-LC26" class="blob-code blob-code-inner js-file-line">        @capture &#39;./search_for_casperjs.png&#39;</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L27" class="blob-num js-line-number js-blob-rnum" data-line-number="27"></td>
<td id="file-googletesting-coffee-LC27" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L28" class="blob-num js-line-number js-blob-rnum" data-line-number="28"></td>
<td id="file-googletesting-coffee-LC28" class="blob-code blob-code-inner js-file-line">    casper.run -&gt; test.done()</td>
</tr>
<tr>
<td id="file-googletesting-coffee-L29" class="blob-num js-line-number js-blob-rnum" data-line-number="29"></td>
<td id="file-googletesting-coffee-LC29" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
</table>
</div></div>
</p></div>
</div></div>
<div class="gist-meta">
        <a href="https://gist.github.com/FabricioFFC/fd6e6ca12897478a012c/raw/c71775d61f9aaf78756dc0bfc3026e1963da8756/googletesting.coffee" style="float:right" class="Link--inTextBlock">view raw</a><br />
        <a href="https://gist.github.com/FabricioFFC/fd6e6ca12897478a012c#file-googletesting-coffee" class="Link--inTextBlock"><br />
          googletesting.coffee<br />
        </a><br />
        hosted with &#10084; by <a class="Link--inTextBlock" href="https://github.com">GitHub</a>
      </div>
</p></div>
</div>
<p>Como vocês podem ver, a declaração do teste é bem similar a qualquer xUnit da vida.</p>
<p>Portanto, se você tiver procurando formas de testar usando Javascript/CoffeeScript, o PhantomJS pode te ajudar com certeza, e o CasperJS pode ser uma opção dentre as <a href="https://github.com/ariya/phantomjs/wiki/Headless-Testing" target="_blank">várias</a> existentes.</p>
<p>Se quiser saber mais, sobre o <a href="http://phantomjs.org/" target="_blank">PhantomJS</a> o projeto é bem documentado, portanto dê uma olhada na <a href="https://github.com/ariya/phantomjs/wiki" target="_blank">doc</a> e pra saber do <a href="http://casperjs.org/" target="_blank">CasperJS</a>, veja a <a href="http://docs.casperjs.org/en/latest/index.html" target="_blank">documentação</a> e principalmente os <a href="https://github.com/n1k0/casperjs/tree/master/samples" target="_blank">samples</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2013/07/31/brincando-com-phantomjs-e-casperjs/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4373</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>

		<media:content url="https://qualidadebr.wordpress.com/wp-content/uploads/2013/07/casper_1995_2.jpg?w=300" medium="image">
			<media:title type="html">Casper</media:title>
		</media:content>
	</item>
		<item>
		<title>Crowdtest &#8211; Minhas impressões</title>
		<link>https://qualidadebr.wordpress.com/2013/06/03/crowdtest-minhas-impressoes/</link>
					<comments>https://qualidadebr.wordpress.com/2013/06/03/crowdtest-minhas-impressoes/#comments</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Mon, 03 Jun 2013 12:00:43 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Ferramentas]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4368</guid>

					<description><![CDATA[Nos últimos anos surgiram plataformas que utilizam o “poder das massas”. Essas plataformas são chamadas de crowdsourcing, e muitas delas são focadas no financiamento de projetos, como por exemplo o famoso KickStarter e a “versão” brasileira Catarse.me. Nessa onda de crowdsourcing nasceu o Crowdtest em 2010, criado pela empresa mineira Base2 Tecnologia. O Crowdtest se [&#8230;]]]></description>
										<content:encoded><![CDATA[<p dir="ltr">Nos últimos anos surgiram plataformas que utilizam o “poder das massas”. Essas plataformas são chamadas de <a href="http://youtu.be/3lQoe9GlYWU" target="_blank">crowdsourcing</a>, e muitas delas são focadas no financiamento de projetos, como por exemplo o famoso <a href="http://www.kickstarter.com/" target="_blank">KickStarter</a> e a “versão” brasileira<a href="http://catarse.me/pt/" target="_blank"> Catarse.me</a>.</p>
<p dir="ltr">Nessa onda de crowdsourcing nasceu o <a href="http://crowdtest.me/" target="_blank">Crowdtest</a> em 2010, criado pela empresa mineira <a href="http://www.base2.com.br/" target="_blank">Base2 Tecnologia</a>. O Crowdtest se apoia no crowdsourcing para fornecer serviços de Teste de Software. O seu foco é “organizar mão-de-obra disponível na Internet para execução de testes”.</p>
<p dir="ltr">Participei recentemente de um projeto no Crowdtest, mas antes de falar da minha impressão sobre a plataforma. Vou explicar como ela funciona.</p>
<p dir="ltr">Primeiro é bom entender que a Crowdtest faz a interface entre os Testadores e os clientes. O cliente cadastra o projeto no site e a equipe da Crowdtest monta a equipe de Testadores, avisando os Testadores já cadastrados no site.</p>
<p dir="ltr">Após montada a equipe, o projeto tem início e os Testadores testam os projetos com o objetivo de encontrar bugs. Cada bug encontrado é validado pela equipe da Crowdtest em conjunto com o cliente, e caso aprovado irá render uma remuneração ao Testador, de acordo com o tipo de bug encontrado (interface, funcional e impeditivo).</p>
<p dir="ltr">Eu participei do projeto de teste do novo portal da Natura e foi um experiência bem interessante, pois além de Testador, tenho a <a href="http://vizir.com.br/" target="_blank">Vizir</a>, portanto olhei o Crowdtest das duas perspectivas.</p>
<p dir="ltr">Primeiro vou falar da perspectiva de Testador.</p>
<p dir="ltr">A primeira coisa que me impressionou foi o profissionalismo. Logo que você entra no projeto de teste, há uma página informando detalhes do projeto. Nela é bem explícito os objetivos do teste e quais áreas que o Testador deve ter mais foco.</p>
<p dir="ltr">Uma vez ciente das informações de acesso e dos objetivos, vamos à diversão, ou melhor, aos testes. Aí é hora de arregaçar as mangas e fazer o máximo de testes exploratórios que você puder.</p>
<p dir="ltr">A cada bug encontrado, você primeiro pesquisa se o mesmo, já não foi encontrado por outro testador. Se o bug é “novinho em folha”, você cadastra todas as informações dele, e cadastra de forma bem completa, informando todos os dados necessários para o pessoal da Crowdtest poder reproduzir e identificar a ocorrência.</p>
<p dir="ltr">E qual a graça disso tudo, você pode está se perguntando? Bem, se você é Testador e gosta do que faz, só o fato de existir um sistema que acabou de nascer, já basta para você fazer uma boa “caça”. Mas brincadeiras à parte, o que eu achei interessante, foi que o Crowdtest te permite ter uma experiência real no mundo do Teste de Software, pois mesmo se você não estiver nessa área, o “reporte” de outros bugs irão te ensinar como fazer um bom “reporte” e dá dicas de onde procurar por bugs. Além disso, ao cadastrar o bug e ele ser aceito pela equipe da Crowdtest (eles verificam se não há duplicidade no bug e se ele realmente ocorre para poder validá-lo), você recebe uma remuneração.</p>
<p dir="ltr">Agora da perspectiva da empresa, a Crowdtest surge como uma boa alternativa para estressar o sistema que está para ser lançado.</p>
<p dir="ltr">Aqui na Vizir por exemplo, nós não temos uma equipe dedicada exclusivamente para os testes, portanto ter a rede de pessoas que a Crowdtest tem, testando sistemas que desenvolvemos em fase beta, seria uma boa opção. Uma vez que isso iria reduzir o número de bugs que nossos clientes encontrariam na realização de seus testes.</p>
<p dir="ltr">Principalmente para sistemas que vão alcançar um grande público, como por exemplo o próprio portal da Natura, usar a plataforma da Crowdtest faz com que o sistema seja testado por <a href="http://crowdtest.me/vantagens-teste-de-software-crowdsourcing/" target="_blank">centenas/milhares</a> de Testadores usando diferentes sistemas operacionais (mobile e desktop) e versões de navegadores. Só esse fato por si só, já te dá um feedback do nível de interoperabilidade do seu sistema.</p>
<p dir="ltr">Resumindo, a Crowdtest é uma ótima forma de você profissional de Teste de Software, viver experiências novas. E para você que está lançando um novo site/sistema/app, seja mobile ou web, aí está uma boa forma e a baixo custo, de você reduzir surpresas em suas apresentações para o cliente ou até mesmo em produção.</p>
<p dir="ltr">Para saber mais sobre o Crowdtest, veja o blog dele: <a href="http://crowdtest.me/crowdtest/" target="_blank">http://crowdtest.me/crowdtest/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2013/06/03/crowdtest-minhas-impressoes/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4368</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
		<item>
		<title>Automação de testes: Aproximando contextos</title>
		<link>https://qualidadebr.wordpress.com/2013/02/18/automacao-de-testes-aproximando-contextos/</link>
					<comments>https://qualidadebr.wordpress.com/2013/02/18/automacao-de-testes-aproximando-contextos/#comments</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Mon, 18 Feb 2013 21:34:55 +0000</pubDate>
				<category><![CDATA[Teste & Qualidade de Software]]></category>
		<category><![CDATA[automação de teste]]></category>
		<category><![CDATA[contexto]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[generalista]]></category>
		<category><![CDATA[programar]]></category>
		<category><![CDATA[testador]]></category>
		<category><![CDATA[teste de software]]></category>
		<category><![CDATA[tester]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4346</guid>

					<description><![CDATA[A área de Teste evoluiu muito desde quando eu iniciei nela, em 2007. Hoje mesmo não atuando nela, eu vejo o quanto é diferente a forma de se testar, de quando eu comecei na área. Naquela época automação de testes era um assunto ainda muito pouco difundido e as ferramentas usadas pagas, de grandes suítes [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>A área de Teste evoluiu muito desde quando eu iniciei nela, em 2007. Hoje mesmo não atuando nela, eu vejo o quanto é diferente a forma de se testar, de quando eu comecei na área.</p>
<p>Naquela época automação de testes era um assunto ainda muito pouco difundido e as ferramentas usadas pagas, de grandes suítes de teste como a Rational.</p>
<p>Hoje em 2013 o cenário muito bastante, práticas ágeis estão mais difundidas, a comunidade brasileira está mais madura e ferramentas <em>open sources</em> dão todo o &#8220;ferramentário&#8221; necessário para a automação.</p>
<p>Para chegarmos no estado de hoje, várias mudanças e revoluções ocorreram. E como toda revolução, ela promete algo muito melhor ao <em>status quo</em> e para se prevalecer, muitas vezes ela se apoia em dizer que tudo está errado.</p>
<p>A automação de testes surgiu como um &#8220;lobo mau&#8221; para muitos <em>Testers</em> e outros se agarram a ela, como se ela fosse o único caminho de se testar. Com o tempo perceberam que ela nada mais é do que uma evolução. Ela não veio pra expurgar testes manuais, ela veio pra trazer maior eficiência aos testes e evitar o &#8220;caos&#8221; das manutenções de software.</p>
<p>Um dos efeitos colaterais da automação de teste, foi a aproximação da área de Teste com a área de Desenvolvimento. Ela ocorreu fisicamente com os Testadores sentando mais próximos dos Desenvolvedores, pra facilitar a comunicação quando é preciso tirar dúvidas sobre programação.</p>
<p>Mas ela ocorreu mais ainda na formação do Tester, no próprio DNA do Tester, uma vez que programar não é mais uma arte usada apenas para construir, ela também é usada para &#8220;quebrar &#8221; (testes de carga usando <a href="http://jmeter.apache.org/" target="_blank">JMeter</a>), pra verificar (testes de aceitação usando <a href="http://pivotal.github.com/jasmine/" target="_blank">Jasmine</a>) e pra dá segurança para mudar (testes unitários com <a href="http://rspec.info/" target="_blank">RSpec</a>).</p>
<p>Com isso dois contextos que de forma errada muitas vezes eram separados, hoje estão mais próximos. Afinal, Desenvolvimento e testes sempre existiram pelo mesmo propósito, entregar software de qualidade.</p>
<p>Com a dinâmica atual do mercado de TI, não há mais espaço pra guerrinhas setorias, nem para Desenvolvedores que só cospem código, e nem pra Testadores que só navegam por telinhas. Não é mais questão de ser generalista, é questão que saber analisar um problema é tão básico para um Desenvolvedor, como programar é para o Testador.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2013/02/18/automacao-de-testes-aproximando-contextos/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4346</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
		<item>
		<title>Retornando?</title>
		<link>https://qualidadebr.wordpress.com/2012/11/14/retornando/</link>
					<comments>https://qualidadebr.wordpress.com/2012/11/14/retornando/#respond</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Wed, 14 Nov 2012 14:06:17 +0000</pubDate>
				<category><![CDATA[Off]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4342</guid>

					<description><![CDATA[Olá pessoal! A quanto tempo não escrevo no QualidadeBR! Bom estar de voltar. Na verdade eu nunca estive longe, só estive ausente mesmo. Essa ausência que ocasionou mais de um ano de lacuna nas publicações tem vários motivos, sendo o mais importante, o fato de eu não mais atuar na área de Teste de Software. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Olá pessoal! A quanto tempo não escrevo no QualidadeBR! Bom estar de voltar.</p>
<p>Na verdade eu nunca estive longe, só estive ausente mesmo.</p>
<p>Essa ausência que ocasionou mais de um ano de lacuna nas publicações tem vários motivos, sendo o mais importante, o fato de eu não mais atuar na área de Teste de Software.</p>
<p>Quem me acompanha no Twitter e Facebook, deve ter percebido as mudanças que ocorreram tanto na minha vida profissional, quanto na pessoal. Muita coisa mudou nesse 1 ano que estive digamos de &#8220;férias&#8221; do QualidadeBR.</p>
<p>Para aqueles que não sabem o porquê desse período sabático, e gostariam de saber, abaixo eu explico o motivo principal, para os que não querem, podem pular o próximo parágrafo. <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Como eu sair da área de Testes, aliás, isso ocorreu bem antes do início do período sabático, foi no começo de 2010. A saída da área inicialmente não era total e eu ainda participava das Mesas Redondas que ocorriam no DFTestes (aliás, hoje em dia as Mesas Redondas ocorrem até em <a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/videos/testes-elias-nogueira" target="_blank">eventos</a>, muito bom ver o pessoal continuando o trabalho e ampliando!). Porém com o tempo e principalmente com o início da <a href="http://www.vizir.com.br/" target="_blank">Vizir</a>, empresa na qual eu atuo e sou sócio-fundador, o recurso tempo ficou mais escasso, e nesse momento decidi por sair das minhas atividades relacionadas a Teste de Software, pois vi que não consegueria manter tudo e principalmente o nível de qualidade dos posts.</p>
<p>Agora sobre o título do post, não sei ao certo se estou realmente retornando as atividades do blog. De momento, o que posso dizer é que tenho algumas ideias de publicações sobre a área. <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Agora de outra perspectiva, acredito que há até bastante coisa pra escrever sobre Teste de Software, mesmo não atuando na área (isso não é tão verdade assim, uma vez que parar de testar,  eu nunca parei hehe).</p>
<p>Abraço! E desculpas pelo longo período sabático, e obrigado a todos que ainda consultam o blog e assinam o <a href="http://feeds.feedburner.com/QualidadeBR" target="_blank">feed</a>, eu fico muito feliz em saber que o conteúdo aqui publicado ao longo dos anos, ajuda tantas pessoas. <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2012/11/14/retornando/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4342</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
		<item>
		<title>Pesquisa sobre RBT</title>
		<link>https://qualidadebr.wordpress.com/2011/10/12/pesquisa-sobre-rbt/</link>
					<comments>https://qualidadebr.wordpress.com/2011/10/12/pesquisa-sobre-rbt/#comments</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Wed, 12 Oct 2011 23:11:29 +0000</pubDate>
				<category><![CDATA[Teste & Qualidade de Software]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4332</guid>

					<description><![CDATA[Pessoal, O Olavo Vitor está fazendo uma pesquisa para o seu trabalho de bacharelado em Sistemas, a respeito de Teste Baseado em Risco. Quem puder ajudar ele respondendo o questionário abaixo: http://bit.ly/q9jXKL O questionário é bem rápido de ser respondido.]]></description>
										<content:encoded><![CDATA[<p>Pessoal,</p>
<p>O Olavo Vitor está fazendo uma pesquisa para o seu trabalho de bacharelado em Sistemas, a respeito de <a href="https://qualidadebr.wordpress.com/2010/05/02/risk-based-testing-rbt/" target="_blank">Teste Baseado em Risco</a>. Quem puder ajudar ele respondendo o questionário abaixo:</p>
<p><a title="http://bit.ly/q9jXKL" href="http://bit.ly/q9jXKL" target="_blank">http://bit.ly/q9jXKL</a></p>
<p>O questionário é bem rápido de ser respondido.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2011/10/12/pesquisa-sobre-rbt/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4332</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
		<item>
		<title>Seja o &#8220;Curador&#8221; das Mesas Redondas</title>
		<link>https://qualidadebr.wordpress.com/2011/09/14/seja-o-curador-das-mesas-redondas/</link>
					<comments>https://qualidadebr.wordpress.com/2011/09/14/seja-o-curador-das-mesas-redondas/#comments</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Wed, 14 Sep 2011 19:23:47 +0000</pubDate>
				<category><![CDATA[Off]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4329</guid>

					<description><![CDATA[Como puderam perceber, há um bom tempo que não atualizo o blog. E não apenas ele, mas também a minha participação em grupos de discussão da nossa área, twitter, etc foram afetadas devido ao ritmo frenético do trabalho, o que é bom por um lado, mas tem suas consequências e demanda de certos &#8220;sacrifícios&#8221; e [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Como puderam perceber, há um bom tempo que não atualizo o blog. E não apenas ele, mas também a minha participação em grupos de discussão da nossa área, twitter, etc foram afetadas devido ao ritmo frenético do trabalho, o que é bom por um lado, mas tem suas consequências e demanda de certos &#8220;sacrifícios&#8221; e escolhas (o que é normal na vida de qualquer adulto).</p>
<p>Uma das atividades que faço na nossa comunidade e que foi afetada, é a organização das Mesas Redondas que ocorrem no grupo DFTestes. Atualmente eu apenas abro as votações e inicio as discussões,  não conseguindo mais acompanhar, participar e resumir as discussões, como eu fazia antigamente.</p>
<p>E é exatamente esse o trabalho que estou querendo passar para outra pessoa, pois hoje a minha contribuição é muito baixa, e não consigo dedicar o tempo que seria necessário para fazer um bom trabalho.</p>
<p>Basicamente, as atividades do &#8220;Curador&#8221; das Mesas Redondas são:</p>
<ul>
<li>Abrir a votação 1/2 semanas antes do final do mês;</li>
<li>Fechar a votação no primeiro dia do mês;</li>
<li>Abrir a discussão no primeiro dia do mês, do tema mais votado;</li>
<li>Abrir a discussão no dia 15 do mês, com o tema que ficou em segundo lugar na votação.</li>
</ul>
<div>A criação do resumo de cada discussão, também é algo que seria legal de fazer, uma vez que o conteúdo gerado nas Mesas Redondas costuma ser de alta qualidade e relevância, mas essa atividade não é mandatória da função, embora altamente desejável.</div>
<div>Se você tem interesse em ser o &#8220;Curador&#8221; das Mesas Redondas, me mande um e-mail para ffc.fabricio@gmail.com. E qualquer dúvida, só me mandar um e-mail ou postar um comentário.</div>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2011/09/14/seja-o-curador-das-mesas-redondas/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4329</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
		<item>
		<title>IEEE 1028 &#8211; Padrão para Revisões de Software</title>
		<link>https://qualidadebr.wordpress.com/2011/07/04/ieee-1028-padrao-para-revisoes-de-software/</link>
					<comments>https://qualidadebr.wordpress.com/2011/07/04/ieee-1028-padrao-para-revisoes-de-software/#comments</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Mon, 04 Jul 2011 13:35:44 +0000</pubDate>
				<category><![CDATA[Teste & Qualidade de Software]]></category>
		<category><![CDATA[ctfl]]></category>
		<category><![CDATA[ieee]]></category>
		<category><![CDATA[IEEE 1028]]></category>
		<category><![CDATA[revisão]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4241</guid>

					<description><![CDATA[Um amigo meu, o Edimilson Estevam, fez o último exame da CTFL, e comentou comigo que caiu algumas questões a respeito desse padrão do IEEE. Eu particularmente nunca tinha ouvido falar a respeito dele, nem na época que me preparei para a CTFL. O intuito desse post, é compartilhar esse padrão (enviado pelo Edimilson &#8211; obrigado!), [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Um amigo meu, o Edimilson Estevam, fez o último exame da CTFL, e comentou comigo que caiu algumas questões a respeito desse padrão do IEEE.</p>
<p>Eu particularmente nunca tinha ouvido falar a respeito dele, nem na época que me preparei para a CTFL.</p>
<p>O intuito desse post, é compartilhar esse padrão (enviado pelo Edimilson &#8211; obrigado!), e também fazer um resumo a respeito dele.</p>
<h4>O que é o IEEE 1028?</h4>
<p>Como todo padrão elaborado pelo IEEE (lê-se &#8220;I três E&#8221;), o 1028 é fruto do trabalho voluntário de alguns membros do IEEE. E sendo um padrão, eles nos traz algumas importantes e relevantes informações a respeito de revisão de software. Mas é sempre bom lembrar, que ele deve ser usado com bom senso, pois o contexto sempre prevalece sob o padrão (ou deveria prevalecer).</p>
<p>O IEEE 1028 nos traz cinco tipos de revisão de software, junto com os procedimento necessários para a execuçaõ de cada tipo. Está fora do escopo do padrão questões como: quando uma revisão se faz necessária? como escolher qual tipo de revisão deve ser usado?</p>
<p>Os 5 tipos de revisão abordados são:</p>
<ul>
<li>Revisões gerenciais;</li>
<li>Revisões técnicas;</li>
<li>Inspeções;</li>
<li>Walk-throughs;</li>
<li>Auditórias.</li>
</ul>
<h4>Os cinco tipos de revisão</h4>
<p>Segue abaixo, a tradução do anexo B do padrão, que contém uma tabela comparativa entre os tipos de revisão (o texto original está numa linguagem meio chata de entender, e não consegui melhorar muito na tradução &#8211; se notarem algum erro ou melhoria, por favor me avisem):</p>
<table style="border:1px solid #DADADA;text-align:center;border-collapse:collapse;">
<tbody>
<tr>
<td style="font-weight:bold;font-size:11px;border-collapse:collapse;padding:2px;">Característica</td>
<td style="font-weight:bold;font-size:11px;border:1px solid #DADADA;border-collapse:collapse;padding:2px;">Revisão gerencial</td>
<td style="font-weight:bold;font-size:11px;border:1px solid #DADADA;border-collapse:collapse;padding:2px;">Revisão técnica</td>
<td style="font-weight:bold;font-size:11px;border:1px solid #DADADA;border-collapse:collapse;padding:2px;">Inspeção</td>
<td style="font-weight:bold;font-size:11px;border:1px solid #DADADA;border-collapse:collapse;padding:2px;">Walk-through</td>
<td style="font-weight:bold;font-size:11px;border:1px solid #DADADA;border-collapse:collapse;padding:2px;">Auditória</td>
</tr>
<tr>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Objetivo</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Garantir o progresso; recomendar ações corretivas; garantir alocação correta dos recursos</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Avaliar a conformidade do estado atual com as especificações e planos; garantir integridade da mudança</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Encontrar anomalias; verificar decisões; verificar a qualidade do produto</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Encontrar anomalias; examinar alternativas; melhorar o produto; fórum para aprendizado</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Avaliação independente de cumprimento com os objetivos de padrões e regulamentos</td>
</tr>
<tr>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Tomada de decisão</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">A equipe de gerenciamento traça o curso da ação; decisões são feitas na reunião ou como resultado das recomenda-ções</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">A equipe de revisão solicita aos gerentes ou a liderança técnica que atuem nas recomendações</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">A equipe de revisão escolhe as disposições pré-definidas do produto; os defeitos devem ser removidos</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">A equipe concorda com as mudanças para serem feitas pelo autor</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Organização auditada, iniciador, comprador, cliente ou usuário</td>
</tr>
<tr>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Verificação das mudanças</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">O líder verifica que itens são fechados; a verificação das mudanças é deixada para outros controles do projeto</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">O líder verifica que itens são fechados; a verificação das mudanças é deixada para outros controles do projeto</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">O líder verifica que itens são fechados; a verificação das mudanças é deixada para outros controles do projeto</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">O líder verifica que itens são fechados; a verificação das mudanças é deixada para outros controles do projeto</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Responsabili-dade da organização auditada</td>
</tr>
<tr>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Tamanho recomendado do grupo</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Duas ou mais pessoas</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Três ou mais pessoas</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Três a seis pessoas</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Duas a sete pessoas</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Uma a sete pessoas</td>
</tr>
<tr>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Quem participa</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Gerentes, liderença técnica e algumas pessoas de outras áreas</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Liderença técnica e algumas pessoas de outras áreas</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Pessoas da área com acompanhe-mento documen-tado</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Liderença técnica e algumas pessoas de outras áreas</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Auditores, organização auditada, pessoal de gerência e técnico</td>
</tr>
<tr>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Grupo da liderança</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Normalmente o gerente responsável</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Normalmente o engenheiro líder</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Um facilitador treinado</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">O facilitador ou o autor</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">O auditor líder</td>
</tr>
<tr>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Volume de materiais</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Moderado para muito, depende dos objetivos da reunião</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Moderado para muito, depende dos objetivos da reunião</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Relativa-mente baixo</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Relativa-mente baixo</td>
<td style="border:1px solid #DADADA;font-size:11px;border-collapse:collapse;padding:2px;">Moderado para muito, depende dos objetivos da reunião</td>
</tr>
</tbody>
</table>
<p>Abaixo, segue o link para baixar o padrão IEEE 1028:</p>
<p><a href="http://bit.ly/ieee_1028" target="_blank">http://bit.ly/ieee_1028</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2011/07/04/ieee-1028-padrao-para-revisoes-de-software/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4241</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
		<item>
		<title>3 anos!!!</title>
		<link>https://qualidadebr.wordpress.com/2011/06/19/3-anos/</link>
					<comments>https://qualidadebr.wordpress.com/2011/06/19/3-anos/#comments</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Sun, 19 Jun 2011 11:00:40 +0000</pubDate>
				<category><![CDATA[Teste & Qualidade de Software]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4310</guid>

					<description><![CDATA[Como o tempo passa, parece que foi ontem que estava escrevendo o primeiro post do QualidadeBR. É&#8230; já fazem três anos que o QualidadeBR nasceu, e com certeza há muita história pra contar sobre esses três anos, além do 282 posts que já foram publicados nesse período. Mas hoje vou deixar um pouco de lado [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Como o tempo passa, parece que foi ontem que estava escrevendo o primeiro post do QualidadeBR.</p>
<p>É&#8230; já fazem três anos que o QualidadeBR nasceu, e com certeza há muita história pra contar sobre esses três anos, além do 282 posts que já foram publicados nesse período.</p>
<p>Mas hoje vou deixar um pouco de lado a temática do blog, e falar a respeito de 3 coisas que o QualidadeBR me proporcionou nesses 3 anos.</p>
<p><strong>Conhecer pessoas</strong></p>
<p>Sem dúvidas um dos pontos mais legais de ter criado o QualidadeBR foi ter a oportunidade de conhecer tantas pessoas, desde outros blogueiros até leitores. Vários deles considero verdadeiros amigos, mesmo não conhecendo alguns pessoalmente.</p>
<p>Acredito que esse seja uma das coisas mais bacanas ao se criar um blog, independente do assunto.</p>
<p><strong>Ajudar pessoas</strong></p>
<p>Como sabem o QualidadeBR não possui nenhum tipo de apoio financeiro ou veiculação de propaganda. Nunca ganhei nenhum centavo com ele, e aliás, essa nunca foi a minha intenção (não que eu ache ruim apoiadores ou veicular propagandas, muito pelo contrário).</p>
<p>Mas algo que ganhei e isso não tem preço, é o prazer de poder ajudar as pessoas, seja por meio do próprio conteúdo do blog, ou via e-mail.</p>
<p>Então se você gosta de ajudar as pessoas, criar um blog pode ser uma boa forma de fazer isso.</p>
<p><strong>Aprendizado</strong></p>
<p>A minha intenção inicial com o QualidadeBR era me motivar a continuar os estudos na área de Teste de Software, pois tinha acabado de obter a CBTS, e não queria me acomodar, muito pelo contrário, queria estudar sobre novos assuntos e compartilhar experiências e o pouco que conhecia da área na época.</p>
<p>O QualidadeBR me fez e ainda faz aprender muito, seja durante as pesquisas para um post, firmando conhecimentos durante a escrita ou até mesmo por meio dos comentários dos leitores.</p>
<p>Se você gosta de estar sempre aprendendo, um blog pode ser uma boa forma de motivar os seus estudos e além disso, você estará compartilhando eles com outras pessoas.</p>
<p>Bem é isso. Obrigado a todos leitores por acompanhar o QualidadeBR. <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2011/06/19/3-anos/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4310</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
		<item>
		<title>Software Testing Weekly</title>
		<link>https://qualidadebr.wordpress.com/2011/05/31/software-testing-weekly/</link>
					<comments>https://qualidadebr.wordpress.com/2011/05/31/software-testing-weekly/#respond</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Tue, 31 May 2011 14:02:29 +0000</pubDate>
				<category><![CDATA[Teste & Qualidade de Software]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4305</guid>

					<description><![CDATA[Se você gosta de receber newsletters informativos (não spams) e se interessa por Teste de Software, o Software Testing Weekly lhe será útil. Baseado no Ruby Weekly e derivados (ex.: NoSQL Weekly), o Software Testing Weekly irá trazer toda segunda-feira, um resumo do que ocorreu na comunidade de Teste de Software, tanto em blogs como em [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Se você gosta de receber <em>newsletters</em> informativos (não <em>spams</em>) e se interessa por Teste de Software, o <a href="http://eepurl.com/3Yvc" target="_blank">Software Testing Weekly</a> lhe será útil.</p>
<p>Baseado no <a href="http://rubyweekly.com/" target="_blank">Ruby Weekly</a> e derivados (ex.: <a href="http://www.nosqlweekly.com/" target="_blank">NoSQL Weekly</a>), o <a href="http://eepurl.com/3Yvc" target="_blank">Software Testing Weekly</a> irá trazer toda segunda-feira, um resumo do que ocorreu na comunidade de Teste de Software, tanto em blogs como em grupos de discussão.</p>
<p>Para receber, basta se inscrever no seguinte endereço: <a href="http://eepurl.com/3Yvc" rel="nofollow" target="_blank">http://eepurl.com/3Yvc</a>. E veja um piloto aqui: <a href="http://bit.ly/exemplo_stw" target="_blank">http://bit.ly/exemplo_stw</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2011/05/31/software-testing-weekly/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4305</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
		<item>
		<title>Escrevendo testes melhores com o Watir</title>
		<link>https://qualidadebr.wordpress.com/2011/05/25/escrevendo-testes-melhores-com-o-watir/</link>
					<comments>https://qualidadebr.wordpress.com/2011/05/25/escrevendo-testes-melhores-com-o-watir/#respond</comments>
		
		<dc:creator><![CDATA[Fabrício Ferrari de Campos]]></dc:creator>
		<pubDate>Thu, 26 May 2011 02:14:29 +0000</pubDate>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[manutenção de testes]]></category>
		<category><![CDATA[testes de interface]]></category>
		<category><![CDATA[watir]]></category>
		<guid isPermaLink="false">http://qualidadebr.wordpress.com/?p=4288</guid>

					<description><![CDATA[Vimos no último post sobre o Watir, como melhorar os nossos testes usando o Rspec. Já nesse post, iremos vê como melhorar os testes que escrevemos, utilizando um helper criado pelo Jeff Morgan. Mas antes disso, deixa eu contar uma breve história sobre os nossos testes. O Twitter mudou e quebrou os nossos testes Como vocês [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Vimos no <a href="https://qualidadebr.wordpress.com/2011/03/14/melhorando-os-testes-com-o-rspec/" target="_blank">último post sobre o Watir</a>, como melhorar os nossos testes usando o Rspec.</p>
<p>Já nesse post, iremos vê como melhorar os testes que escrevemos, utilizando um <em>helper</em> criado pelo <a href="https://github.com/cheezy/uitesting_blog" target="_blank">Jeff Morgan</a>.</p>
<p>Mas antes disso, deixa eu contar uma breve história sobre os nossos testes.</p>
<h4><strong>O Twitter mudou e quebrou os nossos testes</strong></h4>
<p>Como vocês devem ter notado, o Twitter recentemente (coisa de 1/2 meses), mudou a página de login. E a alteração também afetou os ids de alguns elementos da página, como por exemplo, o do <em>text field</em> do login e senha.</p>
<p>Os posts já foram atualizados, mas o que ocorreu é interessante pra ilustrar a fragilidade dos testes que dependem da interface.</p>
<p>Pode parecer estranho, mas tanto testar como desenvolver <em>front-end</em> são tarefas complicadas, principalmente Web (só lembrar das várias tecnologias usadas numa interface Web e os vários navegadores existentes). A sensação e de que quando falamos de sistemas <em>front-end</em>, pisamos num chão mais gelatinoso, e qualquer mudança faz ele tremer.</p>
<p>Para evitar o que ocorreu, o ideal é a equipe de desenvolvimento NÃO MUDAR o id dos elementos,  afinal de contas, para o usuário tanto faz se o <em>text field</em> tem o id <em>username</em> ou <em>login</em>, mas para os Testadores isso importa, e muito. Aliás, para ajudar na nomeação desses ids, estabelecer um padrão pra equipe ou boas práticas pode ajudar.</p>
<p>Bem era isso, agora vamos falar do <em>helper</em> que irá melhorar os nossos testes.</p>
<h4><strong>Melhorando os testes</strong></h4>
<p>Esse helper é uma mão na roda pra quem utiliza o Watir, com ele vamos passar a escrever menos código e será mais fácil de manter os nossos testes.</p>
<p>O helper mágico que estou falando é o seguinte:</p>
<pre class="brush: ruby; title: ; notranslate">
module WatirHelper
  # A helper class to make accessing web elements via Watir easier.
  # All methods take an identifier parameter.  This parameter is
  # an array of hashes that are used to identify an element on the
  # page.  On elements that support multiple attributes you can
  # provide multiple identifiers.
  #
  # This module assumes there is a @browser variable available.

  def self.included(cls)
    cls.extend ClassMethods
  end

  module ClassMethods
    # adds three methods - one to put data in a text field, another
    # to fetch that data, and another to return the actual text_field.
    #
    # Example:  text_field(:first_name, {:id =&gt; &quot;first_name})
    # will generate the 'first_name', 'first_name=', and
    # 'first_text_field' methods
    def text_field(name, identifier)
      define_method(name) do
        @browser.text_field(identifier).value
      end
      define_method(&quot;#{name}=&quot;) do |_value|
        @browser.text_field(identifier).value = _value
      end
      define_method(&quot;#{name}_text_field&quot;) do
        @browser.text_field(identifier)
      end
    end

    # adds three methods - one to put data in a hidden field, another
    # to fetch that data, and a third to return the hidden field.
    #
    # Example:  hidden(:first_name, {:id =&gt; &quot;first_name})
    # will generate the 'first_name', 'first_name=' and
    # 'first_hidden' methods
    def hidden(name, identifier)
      define_method(name) do
        @browser.hidden(identifier).value
      end
      define_method(&quot;#{name}=&quot;) do |value|
        @browser.hidden(identifier).set(value)
      end
      define_method(&quot;#{name}_hidden&quot;) do
        @browser.hidden(identifier)
      end
    end

    # adds three methods - one to select an item in a drop-down,
    # another to fetch the currently selected item, and another
    # to return the select_list.
    #
    # Example:  select_list(:state, {:id =&gt; &quot;state&quot;})
    # will generate the 'state', 'state=' and 'state_select_list'
    # methods
    def select_list(name, identifier)
      define_method(name) do
        @browser.select_list(identifier).value
      end
      define_method(&quot;#{name}=&quot;) do |value|
        @browser.select_list(identifier).set(value)
      end
      define_method(&quot;#{name}_select_list&quot;) do
        @browser.select_list(identifier)
      end
    end

    # adds three methods - one to check, one to uncheck and
    # a third to return a checkbox
    #
    # Example: checkbox(:active, {:name =&gt; &quot;is_active&quot;})
    # will generate the 'check_active', 'uncheck_active', and
    # 'active_checkbox' methods
    def checkbox(name, identifier)
      define_method(&quot;check_#{name}&quot;) do
        @browser.checkbox(identifier).set
      end
      define_method(&quot;uncheck_#{name}&quot;) do
        @browser.checkbox(identifier).clear
      end
      define_method(&quot;#{name}_checkbox&quot;) do
        @browser.checkbox(identifier)
      end
    end

    # adds three methods - one to select, another to clear and
    # another to return a radio button
    #
    # Example:  radio_button(:north, {:id =&gt; &quot;north&quot;})
    # will generate 'select_north', 'clear_north', and
    # 'north_radio_button' methods
    def radio_button(name, identifier)
      define_method(&quot;select_#{name}&quot;) do
        @browser.radio(identifier).set
      end
      define_method(&quot;clear_#{name}&quot;) do
        @browser.radio(identifier).clear
      end
      define_method(&quot;#{name}_radio_button&quot;)  do
        @browser.radio(identifier)
      end
    end

    # adds three methods - one click a button, another
    # to click a button without waiting for the action to
    # complete, and a third to return the button.
    #
    # Example:  button(:save, {:value =&gt; &quot;save&quot;})
    # will generate the 'save', 'save_no_wait', and
    # 'save_button' methods
    def button(name, identifier)
      define_method(name) do
        @browser.button(identifier).click
      end
      define_method(&quot;#{name}_no_wait&quot;) do
        @browser.button(identifier).click_no_wait
      end
      define_method(&quot;#{name}_button&quot;) do
        @browser.button(identifier)
      end
    end

    # adds three methods - one to select a link, another
    # to select a link and not wait for the corresponding
    # action to complete, and a third to return the link.
    #
    # Example:  link(:add_to_cart, {:text =&gt; &quot;Add to Cart&quot;})
    # will generate the 'add_to_cart', 'add_to_cart_no_wait',
    # and 'add_to_cart_link' methods
    def link(name, identifier)
      define_method(name) do
        @browser.link(identifier).click
      end
      define_method(&quot;#{name}_no_wait&quot;) do
        @browser.link(identifier).click_no_wait
      end
      define_method(&quot;#{name}_link&quot;) do
        @browser.link(identifier)
      end
    end

    # adds a method that returns a table element
    #
    # Example:  table(:shopping_cart, {:index =&gt; 1})
    # will generate a 'shopping_cart' method
    def table(name, identifier)
      define_method(name) do
        @browser.table(identifier)
      end
    end

    # adds two methods - one to return the text within
    # a row and one to return a table row element
    #
    # Example: row(:header, {:id =&gt; :header}) will
    # generate a 'header' and 'header_row' method
    def row(name, identifier)
      define_method(name) do
        @browser.row(identifier).text
      end
      define_method(&quot;#{name}_row&quot;) do
        @browser.row(identifier)
      end
    end

    # adds a method to return the text of a table data &lt;td&gt; element
    # and another one to return the cell object
    #
    # Example:  cell(:total, {:id =&gt; &quot;total&quot;})
    # will generate a 'total' method and a 'total_cell'
    # method
    def cell(name, identifier)
      define_method(name) do
        @browser.cell(identifier).text
      end
      define_method(&quot;#{name}_cell&quot;) do
        @browser.cell(identifier)
      end
    end

    # adds a method that returns the content of a &lt;div&gt;
    # and another method that returns the div element
    #
    # Example: div(:header, {:id =&gt; &quot;banner&quot;})
    # will generate a 'header' and 'header_div' methods
    def div(name, identifier)
      define_method(name) do
        @browser.div(identifier).text
      end
      define_method(&quot;#{name}_div&quot;) do
        @browser.div(identifier)
      end
    end

    # adds a method that returns the content of a &lt;dd&gt;
    # and another method that returns the dd element
    def dd(name, identifier)
      define_method(name) do
        @browser.dd(identifier).text
      end
      define_method(&quot;#{name}_dd&quot;) do
        @browser.dd(identifier)
      end
    end

    # adds a method that returns the content of a &lt;dl&gt;
    # and another that returns the dl element
    def dl(name, identifier)
      define_method(name) do
        @browser.dl(identifier).text
      end
      define_method(&quot;#{name}_dl&quot;) do
        @browser.dl(identifier)
      end
    end

    # adds a method that returns the content of a &lt;dt&gt;
    # and another that returns the dt element
    def dt(name, identifier)
      define_method(name) do
        @browser.dt(identifier).text
      end
      define_method(&quot;#{name}_dt&quot;) do
        @browser.dt(identifier)
      end
    end

    # adds a method that returns the content of a
    # &lt;form&gt; element and another that returns the
    # form element
    def form(name, identifier)
      define_method(name) do
        @browser.form(identifier).text
      end
      define_method(&quot;#{name}_form&quot;) do
        @browser.form(identifier)
      end
    end

    # adds a method that returns a the content of a
    # &lt;frame&gt; element and another that returns the
    # frame element
    def frame(name, identifier)
      define_method(name) do
        @browser.frame(identifier).text
      end
      define_method(&quot;#{name}_frame&quot;)  do
        @browser.frame(identifier)
      end
    end

    # adds a method that returns an image &lt;image&gt; element
    def image(name, identifier)
      define_method(name) do
        @browser.image(identifier)
      end
    end
  end

  def content
    @browser.text
  end

  def visit_page(page_url)
    @browser.goto(page_url)
  end

  def page_title
    @browser.title
  end

  def wait_for_page
    @browser.wait
  end
end
</pre>
<p>Os comentários feitos pelo Jeff já explicam muito bem o que esse <em>helper</em> faz. Mas mesmo assim deixa eu dá uma explicação rápida, sobre a magia por de trás dele: Basicamente ele facilita a definição dos elementos da página. Provendo tanto o <em>setter</em> quanto <em>getter</em> dos elementos que iremos interagir durante o teste, além de prover o objeto do próprio elemento.</p>
<p>Pra utilizar esse <em>helper</em>, basta fazer o <em>include</em>, o que irá fazer com que a classe <em>HomePage</em> &#8220;ganhe&#8221; todos os métodos dele, como por exemplo o método <em>page_title</em>, que irá retornar o título da página que está aberta.</p>
<p>Abaixo está como ficou o código dos nossos testes com a utilização desse <em>helper</em>.</p>
<pre class="brush: ruby; title: ; notranslate">
require 'rubygems'
#require 'watir'
require 'firewatir'
require 'lib/watir_helper.rb'

module Twitter

  class HomePage
    include WatirHelper

    HOME_PAGE = 'twitter.com'

    link(:tweet_button, :class =&gt; 'tweet-button button')
    link(:tweet_button_disable, :class =&gt; 'tweet-button button disabled')
    text_field(:username, :name =&gt; 'session[username_or_email]')
    text_field(:password, :name =&gt; 'session[password]')
    text_field(:editor, :class =&gt; 'twitter-anywhere-tweet-box-editor')
    button(:sign_in_submit, :class =&gt; 'submit button')
    div(:message, :class =&gt; 'tweet-text')

    def initialize
      @browser = Watir::Browser.new
    end

    def visit
      @browser.goto(HOME_PAGE)
    end

    def login(username, password)
      self.username = username
      self.password = password
      self.sign_in_submit
    end

    def type_message(message)
      self.editor = message
      self.editor_text_field.fire_event('onMouseDown')
    end

    def tweet
      self.tweet_button
    end

    def message_exists?(message)
      @browser.wait_until {self.message_div.text == message}
    end

    def alert_message_exists?(message)
      @browser.wait_until {@browser.text.include? message}
    end

    def tweet_button_is_disabled?
      @browser.link(self.tweet_button_disable_link.exists?)
    end

  end
end

</pre>
<p>O que ganhamos utilizando esse <em>helper,</em> você pode estar se perguntando. Basicamente duas vantagens.</p>
<h4><strong>Definição mais simples dos elementos web</strong></h4>
<p>Ganhamos três métodos  pra cada elemento:</p>
<ul>
<li>um pra setar o valor do elemento (setter): self.<strong>username =</strong></li>
<li>outro pra retornar o valor do elemento (getter): self.<strong>username</strong></li>
<li>e por fim um que retorna o próprio objeto do elemento: <strong>username_text_field </strong>(podemos utilizar qualquer método do objeto TextField)</li>
</ul>
<ul>
<li>o NOME_DO_SEU_ELEMENTO<strong>_text_field </strong>é para o caso do elemento ser da classe TextField. Se for um div, seria<strong> _div</strong>, se fosse um button seria <strong>_button</strong> e assim vai.</li>
</ul>
<div>
<h4><strong>Manutenção mais controlada</strong></h4>
<p>Como você viu no começo do post, não é difícil a gente precisar dá manutenção nos nossos testes, e definindo desta forma os elementos que utilizamos, precisamos alterar apenas em um lugar eles.</p>
<p>Por exemplo, se a classe do div com o tweet mudou de <em>tweet-text</em> para apenas <em>tweet</em>, basta mudar a definição desse div, ficando assim: <em>div(:message, :class =&gt; &#8216;tweet&#8217;)</em></p>
<p>Ambas vantagens são mais evidentes ainda, quando temos suítes maiores de testes.</p>
<p>Qualquer dúvida a respeito do uso do <em>helper</em> ou do próprio Watir, abuse e use dos comentários. Lembrando que o <em>helper</em>, foi disponibilizado pelo <a href="http://www.cheezyworld.com/" target="_blank">Jeff Morgan</a> no seu <a href="https://github.com/cheezy" target="_blank">GitHub</a>.</p>
<p>O projeto completo deste post, está disponível no <a href="https://github.com/FabricioFFC/watir_tests/tree/1.2" target="_blank">meu GitHub</a>. Aliás, você pode vê a evolução do projeto navegando pelas tags do projeto.</p>
<p>Abraços!</p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://qualidadebr.wordpress.com/2011/05/25/escrevendo-testes-melhores-com-o-watir/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4288</post-id>
		<media:content url="https://2.gravatar.com/avatar/ed30e052a8636685a47e5db4fe3afc22098334d4ee1eb87a6a6e68eeccce7533?s=96&#38;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Fabrício Ferrari de Campos</media:title>
		</media:content>
	</item>
	</channel>
</rss>
