<?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>Zona J &#187; qualidade</title>
	<atom:link href="http://zonaj.org/tag/qualidade/feed/" rel="self" type="application/rss+xml" />
	<link>http://zonaj.org</link>
	<description>Zona Java - Um blog português sobre java.</description>
	<lastBuildDate>Sun, 29 Jun 2014 18:29:19 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Como garantir Qualidade de Software?</title>
		<link>http://zonaj.org/2008/09/28/como-garantir-qualidade-de-software/</link>
		<comments>http://zonaj.org/2008/09/28/como-garantir-qualidade-de-software/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 09:42:05 +0000</pubDate>
		<dc:creator><![CDATA[Ruben Badaró]]></dc:creator>
				<category><![CDATA[microsoft]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[qualidade]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=145</guid>
		<description><![CDATA[Definir qualidade de software é difícil pois são muitos os factores que influenciam os resultados. Mais do que ser uma lista extensiva de soluções, este post tem como objectivo identificar a maioria dos pontos &#8211; são, aliás, perfeitamente lógicos buy viagra us e conhecidos &#8211; que têm de ser testados e validados, e apontar a &#8230; <a href="http://zonaj.org/2008/09/28/como-garantir-qualidade-de-software/" class="more-link">Continue reading <span class="screen-reader-text">Como garantir Qualidade de Software?</span></a>]]></description>
				<content:encoded><![CDATA[<p>
Definir qualidade de software é difícil pois são muitos os factores que influenciam os resultados.<br />
Mais do que ser uma lista extensiva de soluções, este post tem como objectivo identificar a maioria dos pontos &#8211; são, aliás, perfeitamente lógicos
<div style="display: none"><a href='http://buyviagra.name/' title='buy viagra us'>buy viagra us</a></div>
<p>e conhecidos &#8211; que têm de ser testados e validados, e apontar a direcção e algumas ferramentas.<br />
É uma visão na perspectiva de QA (<em>Quality Assurance</em>), mais especificamente de testes. Posso dividir estes factores em dois grupos:</p>
<ul>
<ul>
<li><strong>Organizacionais ou processuais</strong></li>
</ul>
</ul>
<p>Englobam o tipo de gestão de projecto, metodologia de desenvolvimento da equipa, qualidade e processo de recolha de requisitos.</p>
<ul>
<ul>
<li><strong>Técnicos</strong></li>
</ul>
</ul>
<p>Os artefactos de código e semelhantes produzidos pelos developers e os processos levados a cabo por testers.</p>
<p>Este post foca-se primordialmente nos factores técnicos, que passo a enumerar.</p>
<h3>Correcção do código produzido</h3>
<p>É importantíssima a exigência que cada programador coloca em si próprio para escrever código de qualidade: primeiramente, código o mais correcto possível.<br />
No entanto, não basta tentar escrever código correcto, é também necessário pensar nas implicações de performance do que se escreve (por exemplo, fazer um select completo a uma tabela grande sem necessidade),
<div style="display: none"><a href='http://cialisonlinenowe.org/' title='buy cialis discount'>buy cialis discount</a></div>
<p> de thread safety, de segurança (caso mais comum, SQL injection para o qual PreparedStatements são uma grande ajuda), de documentação (comentários relevantes) e de estética do próprio código (definir e seguir convenções).</p>
<p>Este ponto depende também da própria qualidade das pessoas na equipa e a diferença além de se pagar nota-se!</p>
<h3>Testes Unitários</h3>
<p>Escrever testes unitários é a forma mais directa que a equipa tem de garantir correcção do
<div style="display: none"><a href='http://cheapviagra-2013.com/'>cheap viagra</a></div>
<p> código.<br />
Em TDD (<em>Test Driven Development</em>) o teste unitário é a unidade básica e o código é desenvolvido para satisfazer cada teste. Esta aproximação é altamente eficaz mas exige disciplina e considero que é difícil de ser usada pela maioria das equipas, especialmente portuguesas.<br />
No entanto, mesmo em ambientes não TDD este tipo de testes são essenciais, não só para garantir que o código está correcto, como para verificar que não se quebra código anterior cada vez que se alteram ou adicionam funcionalidades.<br />
Quanto maior for a percentagem de caminhos possíveis de código coberta por testes unitários &#8211; o chamado <em>code coverage</em> &#8211; maior é a indicação de garantia de qualidade do código como um todo.</p>
<p>Ferramentas:<br />
<a href="http://www.junit.org/">JUnit</a>, <a href="http://testng.org">TestNG</a>, <a href="http://dbunit.sourceforge.net/">DbUnit</a>, <a href="http://jakarta.apache.org/cactus/">Cactus</a>, <a href="http://www.atlassian.com/software/clover/">Atlassian Clover</a> (<em>code coverage</em>)</p>
<h3><em>Code Reviews</em></h3>
<p>Ainda dentro dos mecanismos de controle que a própria equipa pode usar durante o desenvolvimento encontram-se os <em>code reviews</em>.<br />
Devemos fazer sempre <em>code reviews</em>, embora seja aceitável que não tenhamos 100% do código revisto, apenas uma boa percentagem. E esta boa percentagem é um equilíbrio entre o esforço que a equipa tem a rever e a melhoria de qualidade percebida.<br />
Ter este tipo de controle cria um tipo de <em>peer pressure</em> na equipa. Ninguém é dono do seu pedaço de código, todos sabem que os outros colegas vão validar o que escrevem por isso vão ter um cuidado extra no que produzem.<br />
Desta forma más práticas e erros são detectados cedo no processo e toda a equipa ganha pois todos os membros da equipa aprendem com as correcções que lhes são feitas, especialmente os membros menos experientes que têm neste processo um <em>mentoring</em> por parte de toda a equipa.</p>
<p>Ferramentas:<br />
<a href="http://www.atlassian.com/software/crucible/">Atlassian Crucible</a></p>
<h3>Análise Estática</h3>
<p>Ferramentas de análise estática permitem detectar no erros e standards no código de forma simples. Alguns erros detectados por estas ferramentas poucos ou nenhums programadores conseguem detectar e não são apanhados na grande maioria dos outros testes por isso são uma grande adição.</p>
<p>Ferramentas:<br />
<a href="http://findbugs.sourceforge.net/">FindBugs</a> (obrigatório!), <a href="http://checkstyle.sourceforge.net/">Checkstyle</a></p>
<h3>Sistema de builds / integração contínua</h3>
<p>Builds automatizados é obrigatório! Muitos são os projectos hoje em dia em que cada developer tem o seu próprio processo de build separado no seu IDE.<br />
Seguindo a regra de ouro de que quanto mais cedo se detecta um erro melhor, o processo de builds pode e deve ser escalonado num motor de integração contínua que permite rapidamente detectar quando um membro da equipa quebra o build.<br />
Igualmente importante é adicionar ao processo de build meios adicionais de controlo de qualidade na forma de plugins ou tasks extra &#8211; correr testes unitários, gerar relatórios de code coverage, correr ferramentas de análise estática de código, etc.</p>
<p>Ferramentas:<br />
<a href="http://ant.apache.org/">Ant</a>, <a href="http://maven.apache.org/">Maven</a>, <a href="http://ant.apache.org/ivy/">Ivy</a>, <a href="http://cruisecontrol.sourceforge.net/">Cuise Control</a>, <a href="https://hudson.dev.java.net/">Hudson</a>, <a href="http://www.jetbrains.com/teamcity/">TeamCity</a>, <a href="http://www.atlassian.com/software/bamboo/">Atlassian Bamboo</a></p>
<h3>Equipa de testes / QA</h3>
<p>Este ponto não é técnico mas considero-o importante. Em todos os projectos que trabalhei em Portugal apenas uma vez trabalhei uma equipa de QA (<em>Quality Assurance</em>) organizada. Na maioria dos projectos os testes de &#8220;qualidade&#8221; resumiam-se a fazer deploy da aplicação para outro ambiente e ter alguém &#8211; muitas vezes da parte do cliente &#8211; testar ad-hoc a aplicação. E quem fazia estes testes era muitas vezes o interessado em passar a aplicação a produção &#8211; muitas vezes o próprio project manager da equipa.<br />
É muito importante ter uma equipa, ou mesmo apenas uma pessoa, de QA que tem responsabilidades de testes em determinadas fazes. É ainda mais importante que esses membros não façam parte da equipa de desenvolvimento, pois estariam com &#8220;maus hábitos&#8221;, nem da gestão de projectos, pois vai querer é satisfazer o cliente, nem do cliente, que simplesmente não vai testar devidamente e depois a culpa é da equipa. Grande parte dos projectos têm baixa qualidade porque o desenvolvimento para clientes envolve os tais &#8220;compromissos&#8221; entre qualidade e tempo/dinheiro que os PMs tanto falam.</p>
<h3>Testes funcionais</h3>
<p>Quer se tenha um processo de desenvolvimento em cascata ou iterativo, depois de cada release deve-se passar à fase de QA em que os testes funcionais são executados.<br />
Estes testes devem ser feitos com base num plano de testes já elaborado ou nos próprios requisitos do projecto &#8211; sejam eles use cases, user stories ou outra coisa qualquer.<br />
Nestes testes o carácter específico de um membro QA entram em cena: o espírito inquisitivo e a capacidade de interpretarem os requisitos do ponto de vista do utilizador.</p>
<h3>Testes de carga</h3>
<p>Num modelo de desenvolvimento iterativo os testes de carga não precisam de ser feitos no fim de cada iteração mas apenas em releases major.<br />
Duas perspectivas devem ser testadas: performance e escalabilidade.<br />
Algumas ferramentas podem ser usadas para testar as duas perspectivas &#8211; por exemplo, a aplicação que testa o tempo de invocação de algo pode lançar x threads para testar como escala.<br />
Para testar devidamente escalabilidade, devem ser tida em conta a infraestrutura do projecto. Não é necessário replicar um ambiente de produção, é aliás impossível a maioria das vezes devido aos custos, mas se em produção temos uma base de dados numa máquina e um aplication server noutra, vamos deixá-los separados também para testes para ter em conta todas as variáveis.</p>
<p>Ferramentas:<br />
<a href="http://www.webload.org/">WebLoad</a>, <a href="http://jakarta.apache.org/jmeter/">JMeter</a>, <a href="http://grinder.sourceforge.net/">Grinder</a></p>
<h3>Testes de segurança</h3>
<p>Uma das áreas menos testadas no desenvolvimento de aplicações web é a segurança, normalmente até acontecer algo de mau. Mesmo a maioria dos testers não sabem fazer testes de segurança nem o que é uma ataque de <em>Cross-Site Scripting</em> (XSS). E mesmo a maioria dos developers não têm grandes cuidados com segurança além dos típicos ataques de <em>SQL Injection</em>.<br />
A falta de ferramentas é um dos grandes problemas nesta área.</p>
<p>Ferramentas:<br />
<a href="http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project">WebScarab</a></p>
<h3>Testes de UI</h3>
<p>O teste mais básico de UI é ver se as coisas fazer <em>rendering</em> correcto nos diferentes browsers. Validar automaticamente o código gerado de acordo com standards é também importante.<br />
Para facilitar o trabalho, existem diversos projectos de automatização de testes de UI.</p>
<p>Ferramentas:<br />
<a href="http://selenium.openqa.org/">Selenium</a>, <a href="http://wtr.rubyforge.org/">Watir</a>, <a href="http://www.getwindmill.com/">Windmill</a></p>
<p>Outros testes importantes são os de integração e de regressão mas não são áreas em que tenha muita experiência ou opinião formada por isso abstenho-me.</p>
<p>Todos estes pontos são bastante lógicos, penso eu. Tudo o que se possa fazer para aumentar a qualidade final do que se desenvolve é positivo e a qualidade deve estar na mente de todos e não ser uma moeda de troca, razão da mediocridade de grande parte das aplicações feitas para clientes que vi na minha vida profissional.<br />
Qualidade custa também dinheiro, sim, mas o retorno é grande, tenho a certeza.</p>
<p><strong>Update</strong>:<br />
A proposito de um comentário do <a href="http://www.mouseoverstudio.com/blog/">Diego Carrion</a>, fica uma referência para o <a href="http://jbehave.org/">JBehaviour2</a>, para testes funcionais numa aproximação BDD (<em>Behaviour-Driven Development</em>)</p>
]]></content:encoded>
			<wfw:commentRss>http://zonaj.org/2008/09/28/como-garantir-qualidade-de-software/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
