<?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" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Lucas Eduardo Scrini on Medium]]></title>
        <description><![CDATA[Stories by Lucas Eduardo Scrini on Medium]]></description>
        <link>https://medium.com/@scrini?source=rss-cc3467e49bff------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*kYvAv-Quq0xFMk6N_l6QfQ.jpeg</url>
            <title>Stories by Lucas Eduardo Scrini on Medium</title>
            <link>https://medium.com/@scrini?source=rss-cc3467e49bff------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 05:31:24 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@scrini/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Entendendo teste de software: Conceitos]]></title>
            <link>https://medium.com/@scrini/entendendo-teste-de-software-conceitos-9c4cb42595a1?source=rss-cc3467e49bff------2</link>
            <guid isPermaLink="false">https://medium.com/p/9c4cb42595a1</guid>
            <category><![CDATA[informatica]]></category>
            <category><![CDATA[validação-e-verificação]]></category>
            <category><![CDATA[desenvolvimento-software]]></category>
            <category><![CDATA[orientação-a-objeto]]></category>
            <category><![CDATA[teste-de-software]]></category>
            <dc:creator><![CDATA[Lucas Eduardo Scrini]]></dc:creator>
            <pubDate>Tue, 24 Apr 2018 23:44:42 GMT</pubDate>
            <atom:updated>2018-04-25T10:58:00.305Z</atom:updated>
            <content:encoded><![CDATA[<blockquote><strong><em>“No amount of testing can prove a software right, a single test can prove a software wrong.” — Amir Ghahrai</em></strong></blockquote><p>Todos os dias, a aplicação de teste em software ganha maior importância dentro das empresas que buscam entregar um produto de forma ágil e sem possíveis defeitos. Essa tarefa pode se tornar cara conforme a complexidade do código. Portanto, empresas de software tem investido mais dinheiro e tempo em testes, contudo o foco não está no número de execuções da mesma funcionalidade, mas sim na <strong>qualidade</strong> e <strong>garantia</strong> de funcionamento.</p><p>A prática de aplicação de testes em software possui alguns termos usuais e muitas vezes fundidos, como por exemplo: validação, verificação, erro, falha, entre outros. Essa mistura de conceitos não é um problema grave dentro das empresas, mas difundir a cultura e diferenciar essas pequenas atribuições pode agregar muito ao sistema de trabalho.</p><h3>Verificação e validação</h3><p>A verificação e validação, utilizadas no exemplo acima, são palavras que causam certa confusão por serem tão semelhantes na rotina diária, mas que possuem uma diferença significativa de uso.</p><ul><li><strong>Verificação</strong>: Tem por objetivo definir se o software atende a sua especificação. Faz parte desta etapa também verificar se o produto está sendo produzido dentro dos padrões;</li><li><strong>Validação</strong>: Definir se o software atende a necessidade do cliente.</li></ul><p>A aplicação dos conceitos é a mesma tanto para linguagens <strong>orientadas a objetos</strong> quanto <strong>imperativas</strong>. O que difere são os artefatos utilizados, podendo ser drivers e adaptações ao código respectivamente.</p><p>Agora, conhecendo um pouco mais sobre essas denominações. É possível entender a verificação e validação sendo um processo e não necessariamente apenas etapas. Afinal, esse processo é utilizado durante todo ciclo de vida do software. Adentrando um pouco mais nos conceitos usuais, é bom deixar claro quais serão os <strong>objetivos</strong> de um teste eficaz e como é possível definir um <strong>limite </strong>de execuções a serem feitas.</p><h3>Objetivos e Limites</h3><p>Entre os objetivos, a segurança e confiabilidade do sistema sem dúvida são prioridades, entretanto é possível classificar estes como objetivos “macro” ou de maior escala. Em “micro” ou de menor escala o objetivo envolve executar uma implementação do software, informando<strong> dados de teste</strong> e examinando suas <strong>saídas</strong> e seu comportamento operacional.</p><p>Mesmo com essas informações a dúvida se mantém, qual o número de testes que irá comprovar a inexistência de defeito no software? Infelizmente a resposta disso pode ser: Quanto tempo você ou sua empresa pretende dedicar nisso?</p><p>Sim, isso mesmo! Tempo é a resposta para tudo que se relaciona a testes. Quando questionado sobre quantas vezes uma rotina precisa ser executada para provar que esta não possui defeitos, a resposta na grande maioria das vezes será:<strong> INFINITAS</strong>. No entanto, essa quantidades de execuções nunca será possível, uma rotina que tenha por objetivo testar todas as possibilidades é denominada <strong>teste massivo</strong>. Para exemplificar, podemos supor que uma função recebe dois inteiros como no trecho abaixo.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/9262ec18ef0d91bbb9f0f83927ab0d06/href">https://medium.com/media/9262ec18ef0d91bbb9f0f83927ab0d06/href</a></iframe><p>Visto que o domínio de entrada é formado por <strong>todos os pares de inteiros</strong>, o cálculo de variações é equivalente a:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/79/1*LIsr8BE6lSmnVU1v0cHswg.png" /></figure><p>Onde <strong>n</strong> é utilizado para o número de bits utilizados para representar um inteiro. Em uma arquitetura de 32 bits o número de execuções da mesma função seria de <strong>18446744073709551616 vezes</strong>. Supondo que cada teste demore 1 milissegundo, o mesmo demoraria <strong>5.849.424 séculos</strong>. Portanto, é necessário buscar alternativas como testes de robustez ou de pior caso (possivelmente irei escrever sobre estas alternativas em outro momento). Mas sempre tendo em mente que cada nível de proteção ou segurança, exigirá um maior tempo.</p><h3>Mais conceitos</h3><p>Caso não tenha notado, em nenhum momento foi descrita a busca de <strong>erros</strong> no sistema. Afinal, o que descreve as saídas que divergem do correto são denominadas <strong>defeitos</strong>. Isso porque, assim como destacado anteriormente, estas palavras são conceitos fundidos. Para a distinção desses termos, pode-se seguir a regra:</p><ul><li><strong>Defeito</strong>: Saída do programa que difere da correta. Exemplo disso são relatórios com dados incorretos, ou mesmo outras informações que o sistema possa lidar de forma incorreta e apresentar ao usuário;</li><li><strong>Erro</strong>: Manifesto interno do defeito, não necessariamente ocorre devido ao código. Pode ocorrer de entradas no sistema não estarem corretas, então o sistema não saber lidar com esta informação;</li><li><strong>Falha</strong>: Problema no código, que ao executar pode levar ao erro e ao defeito.</li><li><strong>Exemplo</strong>: Ao executar gera um defeito, ao animar detecta o estado de erro que possivelmente leve a falha no código.</li></ul><p>Claro que assim como toda informação absorvida, para se tornar usual deve ser colocada em prática. Por esse motivo, apenas o uso diário e adaptado a rotina de trabalho irá auxiliar no tratamento de testes.</p><h3>Observações</h3><ol><li>A utilização desses termos não são obrigatórias para funcionamento da prática de testes. Apenas foram destacados para entender a distinção de etapas.</li><li>Esse foi o primeiro artigo que escrevi, podem haver falhas técnicas ou falhas gramaticais. Em qualquer situação, gostaria MUITO de receber seu feedback positivo e negativo.</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9c4cb42595a1" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>