← Projetos

Tutorial

Testes de software

Um guia do começo ao fim: o que é testar, quando começar e parar, quem faz o quê, quais métodos e níveis existem e como documentar e estimar o trabalho de teste.

O que é testar

Testar é avaliar um sistema, ou parte dele, para descobrir se ele atende aos requisitos especificados. Em outras palavras, é executar o software para encontrar lacunas, erros ou requisitos que faltam em relação ao que foi pedido. [1] [2]

A norma ANSI/IEEE 1059 define teste como o processo de analisar um item de software para detectar as diferenças entre as condições existentes e as exigidas, ou seja, os defeitos, e para avaliar as características desse item. [2] Glenford Myers resume a atitude certa numa frase: testar é executar um programa com a intenção de encontrar erros, e não para provar que ele funciona. [7]

Três palavras aparecem o tempo todo e vale separá-las desde já, como faz o glossário do ISTQB: [3]

  • Erro (engano): a ação humana que produz um resultado incorreto, como interpretar mal um requisito.
  • Defeito (bug): a imperfeição que esse erro deixa no código ou em um documento.
  • Falha: o comportamento errado que aparece quando o código com defeito é executado.

Quem testa

Depende do processo e das pessoas envolvidas no projeto. Empresas maiores costumam ter uma equipe dedicada a avaliar o software diante dos requisitos, mas os desenvolvedores também testam: o teste que fazem no próprio código é o teste unitário. Em geral participam:

  • testadores e analistas de qualidade (QA);
  • desenvolvedores;
  • líderes e gerentes de projeto;
  • usuários finais.

Os cargos variam de empresa para empresa: testador, engenheiro de qualidade de software, analista de QA e outros.

Quando começar e quando parar

Comece o mais cedo possível

Começar cedo reduz o custo e o tempo de retrabalho. No ciclo de vida de desenvolvimento (SDLC), o teste pode começar já no levantamento de requisitos e seguir até a implantação. Barry Boehm mostrou que um defeito fica muito mais caro de corrigir quanto mais tarde é descoberto: o que se resolve com uma conversa na fase de requisitos pode exigir retrabalho em várias camadas quando aparece em produção. [5]

Gráfico de barras com o custo relativo de corrigir um defeito: 1 vez nos requisitos, 5 vezes no projeto, 10 vezes na codificação, 20 vezes nos testes e 100 vezes em produção. Uma seta indica que testar cedo sai mais barato.
O custo de corrigir um defeito cresce a cada fase. Valores ilustrativos, com base em Boehm (1981).

O momento também depende do modelo de desenvolvimento. No modelo cascata, o teste formal acontece na fase de testes; no modelo incremental, ao fim de cada iteração, e a aplicação inteira é testada no final. Em qualquer modelo, o teste aparece em formas diferentes ao longo do ciclo:

  • na fase de requisitos, analisar e verificar os requisitos já é testar;
  • na fase de projeto, revisar o desenho para melhorá-lo também é testar;
  • ao terminar o código, o teste do desenvolvedor faz parte do processo.

Saiba quando parar

Nenhum software pode ser dado como 100% testado, por isso o teste nunca “acaba” de verdade. Como escreveu Edsger Dijkstra:

O teste de programas pode ser usado para mostrar a presença de bugs, mas nunca para mostrar a sua ausência.

Edsger W. Dijkstra, 1970 [6]

Na prática, decide-se parar com base em critérios combinados antes, os chamados critérios de saída:

  • prazo de testes atingido;
  • execução completa dos casos de teste planejados;
  • cobertura funcional e de código acima de um patamar definido;
  • taxa de defeitos abaixo de um limite e nenhum defeito de alta prioridade em aberto;
  • decisão da gestão, com os riscos conhecidos.

Verificação e validação

Os dois termos costumam ser usados como sinônimos, mas respondem a perguntas diferentes. [8]

VerificaçãoValidação
Responde: “estamos construindo certo?”Responde: “estamos construindo a coisa certa?”
Confere se cada produto atende à sua especificação.Confere se o produto atende à necessidade real e ao uso pretendido.
Vem primeiro e examina documentos, projeto e código.Vem depois e examina o produto como um todo.
Envolve mais analistas e desenvolvedores.Envolve mais testadores, clientes e usuários.
Atividades estáticas: revisões, walkthroughs e inspeções.Atividades dinâmicas: executar o software diante dos requisitos.
Processo objetivo: conforme ou não conforme.Processo com julgamento: quão bem o software atende.

O modelo em V junta as duas ideias: cada etapa de especificação, no lado esquerdo, tem um nível de teste correspondente, no lado direito, planejado desde cedo. [9]

Modelo em V. À esquerda, descendo: requisitos do cliente, especificação, arquitetura e projeto dos módulos, até a codificação no vértice. À direita, subindo: teste unitário, de integração, de sistema e de aceitação. Linhas tracejadas mostram que cada teste é planejado a partir da etapa correspondente do lado esquerdo.
Modelo em V: os testes da direita são planejados a partir das etapas da esquerda.

Mitos sobre testes

Algumas crenças sobre testes são tão repetidas que parecem verdade. Estas são as mais comuns, e o que acontece na realidade. [2]

  • “Testar é caro demais”

    Realidade: ou se paga pouco para testar durante o desenvolvimento, ou se paga muito para corrigir depois. Cortar testes para economizar costuma sair mais caro.

  • “Testar toma tempo demais”

    Realidade: o que consome tempo é diagnosticar e corrigir os defeitos encontrados, e esse tempo é produtivo.

  • “Só se testa o produto pronto”

    Realidade: revisar requisitos e escrever casos de teste não depende do código. Modelos iterativos reduzem ainda mais essa dependência.

  • “É possível testar tudo”

    Realidade: o número de combinações de entradas e caminhos é grande demais. Sempre haverá cenários que só aparecem em produção. [6]

  • “Software testado não tem bugs”

    Realidade: ninguém pode garantir que um software está 100% livre de defeitos, por melhor que seja o testador.

  • “Defeito que escapou é culpa do testador”

    Realidade: prazos, custos e requisitos que mudam pesam tanto quanto a estratégia de teste escolhida.

  • “Qualidade é problema do testador”

    Realidade: o testador informa os defeitos; a decisão de corrigir ou lançar é dos responsáveis pelo produto. Qualidade é do time todo.

  • “Automatize tudo o que der”

    Realidade: a automação economiza tempo, mas só compensa quando o software já está estável. Com requisitos mudando toda hora, o custo de manter os scripts dispara.

  • “Qualquer um pode testar”

    Realidade: pensar em cenários alternativos e tentar quebrar o software exige técnica e criatividade. E quem escreveu o código é quem tem mais dificuldade de enxergar os próprios erros. [7]

  • “Testador só acha bugs”

    Realidade: o testador conhece o sistema de ponta a ponta, as dependências e o impacto de um módulo sobre o outro, e isso o torna um especialista no domínio.

QA, QC e testes

Garantia da qualidade (QA), controle da qualidade (QC) e testes estão ligados, mas não são a mesma coisa. Uma forma simples de lembrar é pensar em círculos, um dentro do outro. [3]

Três elipses aninhadas: a maior é a garantia da qualidade, focada no processo e em prevenir defeitos; dentro dela, o controle da qualidade, focado no produto e em detectar defeitos; no centro, os testes, que executam o software para encontrar defeitos. Ao lado, dois quadros: teste encontra a falha e depuração corrige; auditoria examina o processo e inspeção revisa um artefato.
Testes são parte do controle da qualidade, que é parte da garantia da qualidade.
Garantia da qualidade (QA)Controle da qualidade (QC)Testes
Garante que processos, procedimentos e padrões sejam seguidos.Verifica o software desenvolvido diante dos requisitos.Identifica defeitos no software.
Foco no processo.Foco no produto.Foco no produto.
Preventiva.Corretiva.Detecta para que se possa corrigir.
Abrange todo o ciclo.É um subconjunto da QA.É um subconjunto do QC.

Auditoria e inspeção

Auditoria é um exame sistemático e, em geral, independente de como o processo de teste é conduzido numa organização. Pelo IEEE, é a revisão dos processos documentados que a organização diz seguir. Pode ser de conformidade legal, interna ou de sistema.

Inspeção é uma técnica formal em que requisitos, projeto ou código são examinados em detalhe por pessoas que não são o autor, para encontrar defeitos e desvios de padrão. Uma inspeção formal tem planejamento, apresentação, preparação, reunião de inspeção, retrabalho e acompanhamento.

Teste e depuração

Teste identifica o defeito sem corrigi-lo. Depuração (debugging) é o trabalho do desenvolvedor de localizar a causa, isolá-la e corrigi-la. A depuração acontece durante o teste unitário ou quando se corrigem os defeitos relatados.

Normas ISO e IEEE

Várias normas ajudam a definir e medir a qualidade do software. Algumas das citadas com frequência já foram substituídas; as notas abaixo indicam a referência atual quando é o caso.

Modelos de qualidade

  • ISO/IEC 9126 definia um modelo de qualidade com seis características: funcionalidade, confiabilidade, usabilidade, eficiência, manutenibilidade e portabilidade. Foi substituída pela ISO/IEC 25010, que amplia o modelo e inclui, por exemplo, segurança e compatibilidade. [10]
  • ISO/IEC 25000 (SQuaRE) organiza os requisitos e a avaliação da qualidade de software em divisões: gestão (2500n), modelo (2501n), medição (2502n), requisitos (2503n) e avaliação (2504n). Ela substituiu a ISO/IEC 9126 e a ISO/IEC 14598. [10]
  • ISO 9241-11 define usabilidade como a medida em que um produto pode ser usado por certos usuários para atingir certos objetivos com eficácia, eficiência e satisfação, num contexto de uso específico. [11]
  • ISO/IEC 12119 tratava de requisitos e de testes para pacotes de software entregues ao cliente. Hoje o tema está na ISO/IEC 25051.

Normas de processo e documentação

NormaAssuntoObservação
IEEE 829Documentos usados nas etapas de testeSubstituída pela ISO/IEC/IEEE 29119-3 [4]
IEEE 1008Teste unitárioAbsorvida pela série ISO/IEC/IEEE 29119 [4]
BS 7925-1 e 7925-2Vocabulário de teste e teste de componentesAbsorvidas pela série ISO/IEC/IEEE 29119 [4]
IEEE 1012Verificação e validação de sistemas e software—
IEEE 1059Guia para planos de verificação e validação—
IEEE 1028Revisões e inspeções de software—
IEEE 1044Classificação de anomalias de softwareA edição de 2009 incorporou o guia 1044.1
IEEE 830Especificação de requisitos de softwareSubstituída pela ISO/IEC/IEEE 29148
IEEE 730Planos de garantia da qualidade de software—
IEEE 1061Metodologia de métricas de qualidade de software—
ISO/IEC/IEEE 12207Processos do ciclo de vida do software—

Para quem está começando, a série ISO/IEC/IEEE 29119 é o melhor ponto de partida: reúne conceitos, processos, documentação e técnicas de teste num só lugar. [4]

Teste manual e automatizado

Teste manual

No teste manual, o testador faz o papel do usuário final e usa o software sem scripts nem ferramentas de automação, procurando comportamentos inesperados. Ele segue planos, casos e cenários de teste para garantir a cobertura, e também pratica o teste exploratório: aprende sobre o sistema enquanto testa e decide o próximo passo com base no que acabou de ver.

Teste automatizado

Na automação, o testador escreve scripts e usa outro software para testar o produto. O ganho maior é repetir rápido e muitas vezes os mesmos cenários, como na regressão, e simular carga com muitos usuários. A automação aumenta a cobertura e a precisão e economiza tempo em relação ao teste manual repetitivo.

O que automatizar: fluxos críticos e muito usados, como login e cadastro; áreas acessadas por muitos usuários ao mesmo tempo; validações de campos; e integrações com banco de dados. Martin Fowler sugere a pirâmide de testes: muitos testes unitários, rápidos e baratos, na base; menos testes de serviço no meio; e poucos testes pela interface gráfica no topo, que são lentos e frágeis. [12]

Quando automatizar:

  • projetos grandes e críticos;
  • áreas que precisam ser testadas com frequência;
  • requisitos que não mudam o tempo todo;
  • testes de carga e desempenho com muitos usuários virtuais;
  • software já estável no teste manual;
  • tempo disponível para criar e manter os scripts.

Como automatizar, passo a passo:

  1. identificar as áreas do software a automatizar;
  2. escolher a ferramenta adequada;
  3. escrever os scripts de teste;
  4. montar as suítes de teste;
  5. executar os scripts;
  6. gerar os relatórios de resultado;
  7. analisar os defeitos e problemas de desempenho encontrados.

Ferramentas

O texto original cita ferramentas clássicas como HP QuickTest Professional (hoje OpenText UFT), IBM Rational Functional Tester, SilkTest, TestComplete, WinRunner, LoadRunner, Visual Studio Test Professional e Watir. Hoje são muito usadas ferramentas abertas como Selenium e Playwright, para interface web, e Apache JMeter, para carga. [15]

Métodos: caixa preta, cinza e branca

Os métodos se diferenciam pelo quanto o testador conhece do funcionamento interno da aplicação. [7]

Três caixas lado a lado, cada uma com uma seta de entrada e uma de saída. A caixa preta é opaca, com um ponto de interrogação: o testador vê só entradas e saídas. A caixa cinza mostra parte do interior, como um banco de dados e tabelas. A caixa branca mostra o fluxo do código, com desvios. Uma barra em degradê abaixo indica o conhecimento da estrutura interna, de nenhum a total.
Da caixa preta à branca, cresce o conhecimento da estrutura interna.

Caixa preta

O testador não conhece a arquitetura nem tem acesso ao código. Ele interage pela interface, fornece entradas e examina as saídas, sem saber como elas são processadas.

  • Vantagens: serve bem para grandes volumes de código; não exige acesso ao código; separa a visão do usuário da visão do desenvolvedor; permite que muitos testadores, sem conhecer a linguagem ou a plataforma, testem a aplicação.
  • Desvantagens: cobertura limitada aos cenários escolhidos; cobertura “às cegas”, sem mirar trechos de código mais sujeitos a erro; casos de teste difíceis de projetar sem uma boa especificação.

Caixa branca

Também chamada de caixa de vidro ou caixa aberta, é a investigação detalhada da lógica e da estrutura do código. O testador precisa olhar o código para descobrir qual trecho se comporta mal.

  • Vantagens: facilita escolher os dados de teste mais eficazes; ajuda a otimizar o código e a remover linhas que escondem defeitos; permite cobertura máxima dos caminhos.
  • Desvantagens: exige testadores com conhecimento técnico, o que aumenta o custo; é impossível percorrer todos os caminhos; depende de ferramentas especializadas, como analisadores de código e depuradores.

Caixa cinza

O testador tem conhecimento parcial do interior: acesso a documentos de projeto e ao banco de dados, mas não ao código. Com isso prepara dados e cenários melhores, principalmente em integrações, protocolos de comunicação e tipos de dados.

Comparação

Caixa pretaCaixa cinzaCaixa branca
Conhecimento internoNenhumParcialTotal
Outros nomesCaixa fechada, funcional, orientado a dadosTranslúcidoCaixa clara, estrutural, baseado em código
Quem fazUsuários, testadores e desenvolvedoresUsuários, testadores e desenvolvedoresTestadores e desenvolvedores
Base do testeExpectativas externasDiagramas de banco e de fluxo de dadosEstrutura interna do código
EsforçoO menos exaustivo e o mais rápidoIntermediárioO mais exaustivo e demorado
Testar algoritmosNão indicadoNão indicadoIndicado
Limites e domínios de dadosSó por tentativa e erroTestáveis, se conhecidosTestados com mais precisão

Níveis e tipos funcionais

Os testes se dividem em dois grandes grupos: os funcionais, que verificam o que o sistema faz, e os não funcionais, que verificam como ele faz, como desempenho e segurança.

Teste funcional em cinco passos

O teste funcional é um teste de caixa preta baseado na especificação. Fornecem-se entradas e comparam-se as saídas com o que a funcionalidade deveria fazer:

  1. definir a funcionalidade que a aplicação deve executar;
  2. criar os dados de teste a partir da especificação;
  3. definir a saída esperada para esses dados;
  4. escrever os cenários e executar os casos de teste;
  5. comparar os resultados obtidos com os esperados.

Teste unitário

Feito pelo desenvolvedor sobre cada unidade de código, antes de entregar a versão para a equipe de teste. O objetivo é isolar cada parte do programa e mostrar que ela está correta. Tem limites: não é possível avaliar todos os caminhos de execução, e em algum momento a unidade precisa ser integrada às demais.

Teste de integração

Testa partes combinadas da aplicação para ver se funcionam juntas. Há duas estratégias clássicas:

  • De baixo para cima (bottom-up): começa pelas unidades e sobe para combinações cada vez maiores. Usa drivers, programas que chamam os módulos ainda sem “chefe”.
  • De cima para baixo (top-down): começa pelos módulos de mais alto nível e desce. Usa stubs, versões simplificadas dos módulos inferiores que ainda não existem.

Teste de sistema

Testa o sistema inteiro, já integrado, num ambiente o mais parecido possível com o de produção. É o primeiro momento em que a aplicação é testada como um todo, tanto nos requisitos de negócio quanto na arquitetura. Costuma ser feito por uma equipe especializada.

Teste de regressão

Toda mudança pode afetar outras partes do sistema. O teste de regressão verifica se uma correção ou melhoria não quebrou algo que já funcionava. Ele reduz o risco das mudanças, aumenta a cobertura sem estourar o prazo e é o primeiro candidato à automação.

Teste de aceitação

Avalia se a aplicação atende à especificação e às necessidades do cliente, com cenários preparados antes. É feito pelo cliente ou pelos usuários, muitas vezes com apoio da equipe de QA, e pode ter efeito contratual ou legal. Não procura só erros de digitação ou de aparência, mas qualquer problema que impeça o uso real.

Alfa e beta

  • Teste alfa: feito no ambiente de quem desenvolve, por usuários em potencial ou por uma equipe independente, antes de o produto sair de casa. Busca erros de texto, links quebrados, instruções confusas e desempenho em máquinas modestas.
  • Teste beta: também chamado de pré-lançamento, é feito por uma amostra do público real, no ambiente dele. Os usuários instalam, usam e enviam feedback, e o time corrige antes do lançamento geral.

Testes não funcionais

Verificam atributos que não são funções do sistema, mas são igualmente importantes: desempenho, usabilidade, segurança e portabilidade, entre outros.

Desempenho

Procura gargalos, mais do que defeitos. As causas mais comuns de lentidão são atraso de rede, processamento no cliente, transações de banco de dados, balanceamento de carga entre servidores e renderização de dados. Os aspectos medidos são velocidade (tempo de resposta), capacidade, estabilidade e escalabilidade. Os dois subtipos mais conhecidos são carga e estresse.

Gráfico do tempo de resposta pelo número de usuários simultâneos, com três faixas: carga normal, pico esperado e além do limite. A curva sobe devagar, cruza a linha do tempo aceitável no limite de capacidade e dispara até o ponto de ruptura. O teste de carga cobre a carga normal e o pico; o teste de estresse vai além do limite.
O teste de carga vai até o pico esperado; o de estresse passa do limite para achar o ponto de ruptura.
  • Teste de carga: aplica o volume de acessos e de dados esperado, em condições normais e de pico, para descobrir a capacidade máxima e o comportamento no horário de maior uso. Usa ferramentas que simulam usuários virtuais, como JMeter ou LoadRunner, com a quantidade aumentada aos poucos ou de uma vez. [15]
  • Teste de estresse: leva o software a condições anormais, acima do limite ou tirando recursos, para achar o ponto de ruptura. Exemplos: derrubar e religar portas de rede, desligar e ligar o banco de dados, rodar processos que consomem CPU e memória.

Usabilidade

Técnica de caixa preta que observa usuários reais usando o software para encontrar erros e melhorias. Jakob Nielsen define usabilidade por cinco componentes: facilidade de aprendizado, eficiência de uso, facilidade de memorização, poucos erros e satisfação. [13] A ISO 9241-11 a mede por eficácia, eficiência e satisfação num contexto de uso. [11]

Interface × usabilidade: o teste de interface (UI) verifica se a tela está conforme o requisito, em cores, alinhamento e tamanhos. O de usabilidade verifica se ela é fácil de usar. O primeiro é uma parte do segundo.

Segurança

Procura falhas e brechas do ponto de vista de vulnerabilidades. Deve garantir confidencialidade, integridade, disponibilidade, autenticação, autorização e não repúdio, e verificar ataques conhecidos como injeção de SQL e outras injeções, falhas no gerenciamento de sessão, cross-site scripting (XSS), estouro de buffer e travessia de diretórios. O OWASP Top 10 é a referência mais usada para os riscos mais críticos de aplicações web. [14]

Portabilidade

Verifica se o software pode ser levado para outros ambientes: outro computador, outro sistema operacional, outro navegador. Pré-condições: o software foi projetado pensando em portabilidade, os testes unitário e de integração já foram feitos e o ambiente de teste está pronto.

Documentação de testes

Documentar ajuda a estimar o esforço, medir a cobertura e rastrear os requisitos. Os quatro artefatos mais usados se encaixam como na figura. [4]

À esquerda, uma hierarquia: o plano de teste gera o cenário login do usuário, que gera três casos de teste: senha válida entra, senha errada mostra mensagem e três erros bloqueiam a conta. À direita, uma matriz de rastreabilidade liga os requisitos REQ-01 a REQ-03 aos casos CT-01 a CT-03, e o REQ-03 está associado ao defeito BUG-17.
Plano, cenário, casos de teste e matriz de rastreabilidade, com um exemplo de login.

Plano de teste

Descreve a estratégia, os recursos, o ambiente, as limitações e o cronograma dos testes. Em geral é escrito pelo líder de QA e inclui: introdução, premissas, casos de teste previstos, funcionalidades a testar, abordagem, entregáveis, recursos, riscos, e tarefas e marcos.

Cenário de teste

Uma frase que diz qual área da aplicação será testada, por exemplo “login do usuário”. Os cenários garantem que os fluxos sejam testados de ponta a ponta. Uma área pode ter de um a centenas de cenários. Um cenário reúne vários casos de teste e a ordem em que devem ser executados.

Caso de teste

Um conjunto de passos, condições e entradas para verificar se uma funcionalidade passa ou falha. Não há modelo oficial, mas estes campos quase sempre aparecem:

CampoExemplo
IDCT-02
Módulo e versãoAutenticação, versão 2.3
ObjetivoVerificar a mensagem de senha incorreta
Pré-condiçõesUsuário “ana” cadastrado e ativo
Passos1. Abrir o login · 2. Informar “ana” e uma senha errada · 3. Clicar em Entrar
Resultado esperadoMensagem “usuário ou senha inválidos” e acesso negado
Resultado obtidoPreenchido na execução
Pós-condiçõesContador de tentativas igual a 1

Vários casos de teste saem de um mesmo cenário, e um conjunto de casos forma uma suíte de testes.

Matriz de rastreabilidade

A matriz de rastreabilidade de requisitos (RTM) é uma tabela que liga cada requisito aos seus casos de teste e aos defeitos encontrados. Pode ser lida para a frente, do requisito ao teste, para saber se tudo foi testado, ou para trás, do defeito ao requisito, para achar a origem do problema. Serve para:

  • garantir que o software foi feito conforme os requisitos;
  • ajudar a encontrar a causa raiz de um defeito;
  • rastrear os documentos ao longo das fases do ciclo de vida.

Estimativa do esforço

Estimar bem o esforço de teste é o que permite testar com a maior cobertura possível dentro do prazo. As técnicas mais conhecidas:

  • Análise de pontos de função (APF): mede o tamanho funcional do software a partir de cinco elementos: saídas, consultas, entradas, arquivos internos e arquivos externos. É mantida pelo IFPUG. [16]
  • Análise de pontos de teste (TPA): parte dos pontos de função para estimar testes de caixa preta e de aceitação, considerando tamanho, produtividade, estratégia, interfaces, complexidade e uniformidade. [18]
  • Método Mark II: mede o tamanho do ponto de vista funcional do usuário final, contando transações lógicas. Os passos são: definir o ponto de vista, o propósito e o tipo de contagem; delimitar a fronteira; identificar as transações lógicas; classificar as entidades de dados; contar os elementos de entrada; e calcular o tamanho funcional. [17]
  • Outras: técnica Delphi (consenso entre especialistas), estimativa por analogia com projetos anteriores, estimativa pela contagem de casos de teste e estimativa por tarefas.

Revisão rápida

Tente responder antes de abrir cada pergunta.

1. Qual a diferença entre verificação e validação?

Verificação pergunta se estamos construindo o produto certo em relação à especificação (“construindo certo?”). Validação pergunta se o produto atende à necessidade real do cliente (“a coisa certa?”).

2. Por que não dá para dizer que um software está 100% testado?

Porque as combinações de entradas e caminhos são praticamente infinitas. O teste mostra a presença de defeitos, nunca a sua ausência. Por isso se para com base em critérios de saída.

3. Onde um defeito é mais barato de corrigir?

Nos requisitos. Quanto mais tarde ele é encontrado, mais camadas precisam ser refeitas, e em produção o custo é várias vezes maior.

4. Qual método exige acesso ao código-fonte?

O de caixa branca. O de caixa preta só usa entradas e saídas, e o de caixa cinza usa documentos de projeto e banco de dados, mas não o código.

5. Para que servem stubs e drivers na integração?

Stubs substituem módulos inferiores que ainda não existem, na integração de cima para baixo. Drivers fazem o papel dos módulos superiores que chamam a unidade, na integração de baixo para cima.

6. Qual a diferença entre teste de carga e de estresse?

O de carga mede o comportamento sob o volume esperado, incluindo o pico. O de estresse vai além do limite para descobrir onde e como o sistema quebra.

7. O que a matriz de rastreabilidade responde?

Se todos os requisitos têm testes (para a frente) e de qual requisito vem cada defeito (para trás).

8. Quando vale a pena automatizar um teste?

Quando o teste é repetido com frequência, a área é crítica, os requisitos são estáveis e o software já passou pelo teste manual. A regressão é a primeira candidata.

↑ Voltar ao topo

Referências

  1. Giovani Perotto Mesquita, “Software Testing”, GitHub Gist, texto original deste tutorial, gist.github.com/GiovaniPM/65ee981f26194197f25e6cfa3b6ee859.
  2. Tutorialspoint, “Software Testing Tutorial”, acesso em 25/09/2026, tutorialspoint.com/software_testing.
  3. ISTQB, “Glossário de testes”, acesso em 25/09/2026, glossary.istqb.org.
  4. Wikipedia (em inglês), “ISO/IEC 29119”, acesso em 25/09/2026, en.wikipedia.org/wiki/ISO/IEC_29119.
  5. Barry W. Boehm, Software Engineering Economics, Prentice Hall, 1981.
  6. Edsger W. Dijkstra, “Notes on Structured Programming” (EWD249), 1970, cs.utexas.edu/~EWD/ewd02xx/EWD249.PDF.
  7. Glenford J. Myers, Corey Sandler e Tom Badgett, The Art of Software Testing, 3ª ed., Wiley, 2011.
  8. Wikipedia (em inglês), “Verification and validation”, acesso em 25/09/2026, en.wikipedia.org/wiki/Verification_and_validation.
  9. Wikipedia (em inglês), “V-model (software development)”, acesso em 25/09/2026, en.wikipedia.org/wiki/V-model_(software_development).
  10. Wikipedia (em inglês), “ISO/IEC 25010”, acesso em 25/09/2026, en.wikipedia.org/wiki/ISO/IEC_25010.
  11. Wikipedia (em inglês), “ISO 9241”, acesso em 25/09/2026, en.wikipedia.org/wiki/ISO_9241.
  12. Martin Fowler, “Test Pyramid”, 2012, martinfowler.com/bliki/TestPyramid.html.
  13. Jakob Nielsen, “Usability 101: Introduction to Usability”, Nielsen Norman Group, nngroup.com/articles/usability-101-introduction-to-usability.
  14. OWASP, “OWASP Top Ten”, acesso em 25/09/2026, owasp.org/www-project-top-ten.
  15. Ferramentas: Selenium, selenium.dev; Playwright, playwright.dev; Apache JMeter, jmeter.apache.org.
  16. IFPUG, International Function Point Users Group, ifpug.org.
  17. Charles R. Symons, “Function Point Analysis: Difficulties and Improvements”, IEEE Transactions on Software Engineering, v. 14, n. 1, 1988.
  18. Martin Pol, Ruud Teunissen e Erik van Veenendaal, Software Testing: A Guide to the TMap Approach, Addison-Wesley, 2002.
↑ Voltar ao topo