<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untitled Publication]]></title><description><![CDATA[Untitled Publication]]></description><link>https://blog.andersonmedeiros.net</link><generator>RSS for Node</generator><lastBuildDate>Fri, 05 Jun 2026 19:31:56 GMT</lastBuildDate><atom:link href="https://blog.andersonmedeiros.net/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Por que escrever testes em suas aplicações?]]></title><description><![CDATA[O motivo de eu estar escrevendo esse artigo, em primeiro lugar, se deve a uma conversa que tive com o meu gestor a alguns dias atrás, onde nós estávamos discutindo sobre a importância e impacto dos testes de software no início e longo prazo em um pro...]]></description><link>https://blog.andersonmedeiros.net/por-que-escrever-testes-em-suas-aplicacoes</link><guid isPermaLink="true">https://blog.andersonmedeiros.net/por-que-escrever-testes-em-suas-aplicacoes</guid><category><![CDATA[clean code]]></category><category><![CDATA[Testing]]></category><category><![CDATA[best practices]]></category><dc:creator><![CDATA[Anderson Medeiros]]></dc:creator><pubDate>Fri, 02 Apr 2021 02:31:13 GMT</pubDate><content:encoded><![CDATA[<p>O motivo de eu estar escrevendo esse artigo, em primeiro lugar, se deve a uma conversa que tive com o meu gestor a alguns dias atrás, onde nós estávamos discutindo sobre a importância e impacto dos testes de <em>software</em> no início e longo prazo em um projeto. Então, basicamente, estarei compartilhando algumas reflexões obtidas durante nossa interação, adicionando alguns pontos e perspectivas particulares.</p>
<p>É importante ressaltar que esse artigo não trata sobre testes de aceitação realizados por usuários com o auxílio de um designer ou inspetor, mas sim sobre testes que são escritos ou criados para serem executados de forma autônoma, como vocês verão nos próximos capítulos. </p>
<h2 id="o-que-sao-testes-de-software">O que são testes de software?</h2>
<blockquote>
<p>Esse tópico tem o objetivo de demonstrar, através da teoria e prática, o que são testes de software e sua importância dentro de uma aplicação. Então, caso você ainda não tenha esse conhecimento, sugiro que não pule essa parte do artigo.</p>
</blockquote>
<p>Testes de software basicamente são trechos de código escritos por uma equipe de testes - ou em muitos casos pelas pessoas desenvolvedoras - cujo intuito é validar, de forma autônoma, se software (ou parte dele), está se comportando da forma esperada. Para tal, é aplicado um método do científico, onde você parte de hipóteses e experimentações com o objetivo de chegar a uma conclusão, que normalmente está relacionada ao questionamento "essa aplicação se comporta de maneira esperada?".</p>
<p>Para exemplificar, pegue o exemplo em pseudo código abaixo:</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">soma</span><span class="hljs-params">(a, b)</span>:</span>
    <span class="hljs-keyword">return</span> a + b;

<span class="hljs-comment">// Testando a função soma</span>
soma(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>) deve ser igual a <span class="hljs-number">3</span>
soma(<span class="hljs-number">4</span>, <span class="hljs-number">7</span>) deve ser igual a <span class="hljs-number">11</span>
</code></pre><p>O exemplo anterior pode ser quebrado dos passos a seguir:</p>
<ol>
<li>Criamos uma função soma que faz alguma coisa;</li>
<li>Refletimos sobre qual o comportamento esperado da função e chegamos a conclusão que, ao receber dois números como parâmetros, ela deveria nos retornar a soma de ambos;</li>
<li>Baseado na reflexão anterior, definimos algumas hipóteses:<ol>
<li>Ao chamar a função soma com os números 1 e 2, eu espero que ela me retorne o número 3;</li>
<li>Ao chamar a função soma com os números 4 e 7, eu espero que ela me retorne o número 11;</li>
</ol>
</li>
<li>Agora chegou a hora da experimentação, que é feita através da execução de nossos testes;</li>
<li>Ao executar os testes, caso a função soma esteja de acordo com as nossas hipóteses, os testes vão rodar sem mensagens de erro;</li>
<li>Agora chegamos a etapa de conclusão, onde nós avaliamos o resultado do passo anterior e fazemos a seguinte reflexão: "O comportamento do código testado está suficientemente satisfatório? Tendo em vista a experimentação de nossas hipóteses ". Caso a resposta seja afirmativa, podemos dizer que a nossa função está de acordo com o comportamento esperado, além de estar <strong>coberta pelos testes</strong>.</li>
</ol>
<p>Dessa forma, nós podemos dizer que os testes de software servem como um método científico usado para garantirmos a assertividade comportamental de nosso código, servindo também como um registro histórico que evita a inserção de problemas em recursos já existentes na aplicação. Visto que, uma vez que os todos comportamentos desenvolvidos estejam cobertos por testes, linhas de código problemáticas farão com que hipóteses antigas passem a ser tomadas como inválidas, fazendo com que, uma vez que os testes sejam executados, mensagens de erro sejam informadas a pessoa desenvolvedora.</p>
<h2 id="porque-testar">Porque testar?</h2>
<p>Para explicar os benefícios de se ter uma aplicação coberta por testes, gostaria de apresentar alguns pontos que são perceptíveis tanto a curto quanto a médio e longo prazo.</p>
<h3 id="curto-prazo">Curto Prazo</h3>
<p>No início, as pessoas tendem a não compreender muito bem por que estão "gastando" tempo escrevendo testes em vez de criar novos recursos. Porém começam a perceber, aos poucos, que os testes estão evitando que problemas "simples" sejam publicados em produção, o que acaba aumentando a produtividade e confiança da equipe, já que não é mais necessário ficar "apagando fogo em produção" toda hora.</p>
<p>Paralelo a isso, as pessoas começam a entender e desenvolver a aplicação como um conjunto de componentes que "fazem uma única coisa", já que assim você contrói elementos que podem ser testados isoladamente. Também é aqui onde o time começa a ver a importância prática de bons princípios no desenvolvimento como o <a target="_blank" href="https://www.eduardopires.net.br/2013/04/orientacao-a-objeto-solid/">SOLID</a>).</p>
<p>Outro ponto muito perceptível é que os testes passam a servir como documentação durante a "code review", já que eles mostram, de forma prática, qual o comportamento esperado dos recursos em desenvolvimento.</p>
<h3 id="medio-e-longo-prazo">Médio e Longo Prazo</h3>
<p>Aqui nós vemos um movimento onde o foco do time passa a ser majoritariamente em desenvolver novos recursos, pois o sistema está coberto por testes e isso significa que serão raras as vezes onde problemas em produção ocorrerão, e, quando ocorrerem, um novo teste será criado cobrindo os comportamentos inesperados. Dessa forma, caso alguém cometa o mesmo erro no futuro, os testes existentes servirão para indicar um possível problema em tempo de desenvolvimento.</p>
<p>Além disso, o time começa a usar os testes antigos como documentação, permitindo assim o entendimento de como o software foi projetado e pensado, ajudando na manutenção do sistema e prevenindo a quebra acidental de regras de negócio previamente estipuladas.</p>
<p>Outro evento que pode ser percebido nesse momento está relacionado à satisfação das partes envolvidas (stakeholders) quanto ao time de desenvolvimento, pois menos problemas em produção significa que menos clientes estão ligando para o suporte insatisfeitos com a empresa.</p>
<h3 id="regra-10-de-meyers">Regra 10 de Meyers</h3>
<p>Além dos pontos previamente mencionados, gostaria de compartilhar a <strong>Regra 10 de Meyers</strong>, que foi desenvolvida pelo cientista da computação chamado Glenford Myers e, resumidamente, estipula que "quanto mais esperamos para resolver um problema no ciclo de vida da aplicação, maior será o custo da resolução desse problema". Isso quer dizer que o custo de correção está diretamente relacionado ao tempo de descoberta do problema, de tal forma que problemas descobertos ainda em de desenvolvimento são muito mais baratos de serem resolvidos do que quando são percebidos e reportados por um cliente. Já que, para corrigir um problema em produção, seria necessário encontrar a versão com problema, avisar os clientes afetados, marcar o deploy da nova versão, e esse ciclo segue até que sejam gasto dias para resolver um problema que poderia ser facilmente identificado através de um teste antigo.</p>
<p>Se ainda não acredita em mim, veja a seguir um gráfico que representa o custo de correção de um problema vs o tempo levado para identificá-lo.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1617328749181/h1Ar9I6N-.png" alt="image.png" /></p>
<h2 id="conclusao">Conclusão</h2>
<p>Muitas vezes as pessoas começam a desenvolver aplicações sem testes de software pelos mais variados motivos, que podem vir desde a tempo de vida do projeto, pressão das partes interessadas, ou até pela falsa sensação de produtividade, porém esse <a target="_blank" href="https://ezdevs.com.br/o-que-e-debito-tecnico-saiba-como-tratar/">débito técnico</a> acaba tornando o desenvolvimento insustentável a longo prazo, já que que qualquer alteração no software resulta em problemas reportados e clientes insatisfeitos, fazendo assim com que as pessoas desenvolvedoras passem a tomar meses no desenvolvimento de recursos que no início do projeto poderiam ser feito em semanas (simplesmente por "medo de quebrar algo no código"). Como uma medida desesperada, a empresa tenta contornar a baixa de produtividade adicionando cada vez mais pessoas na equipe, o que só acaba amplificando o problema, pois agora o time também terá que lidar com pessoas inexperientes com o software, que vão criar bugs simplesmente pela falta de conhecimento sobre os alinhamentos e regras de negócio do sistema.</p>
<p>Tendo esse cenário em vista, finalizo com a seguinte frase:</p>
<blockquote>
<p>"Por que a maioria dos desenvolvedores teme fazer mudanças contínuas em seu código? Eles tem medo de quebrá-lo! Por que eles têm medo de quebrá-lo? Porque eles não têm testes" - Robert C. Martin</p>
</blockquote>
]]></content:encoded></item></channel></rss>