Qualidade, testes, revisão de código e refatoração
Do zero
Um carro de qualidade não é só o que anda: é o que anda rápido quando precisa (desempenho), aguenta a família toda na viagem (escalabilidade), liga toda manhã (disponibilidade), não quebra no meio da estrada (confiabilidade) e é fácil de consertar na oficina (manutenibilidade). Software é julgado pelas mesmas qualidades.
Testar é verificar essas qualidades antes que o usuário descubra o problema. Pense na fábrica do carro: testa-se cada peça sozinha (teste unitário), depois as peças montadas juntas (integração), depois o carro inteiro numa pista (sistema ou funcional) e, por fim, o cliente faz o test drive (aceitação). Sempre que se troca uma peça, confere-se se o resto continua funcionando (regressão).
Com o tempo, todo código acumula remendos. Refatorar é arrumar a casa sem mudar o que ela faz: reorganizar o código para ficar mais simples, mantendo o mesmo comportamento. Dívida técnica é o nome do remendo que se deixou para depois: como uma dívida, cobra juros a cada nova mudança.
Frase para guardar: testa-se do pequeno para o grande; refatorar muda a forma, não o comportamento; dívida técnica cobra juros.
Em 1 minuto
- Qualidades: desempenho, escalabilidade, disponibilidade, confiabilidade e manutenibilidade.
- Níveis de teste: unitário, integração, sistema e aceitação. Teste funcional é um tipo, não um nível: verifica, como caixa-preta, se o sistema faz o que os requisitos funcionais pedem, e pode ser aplicado em qualquer nível. Regressão confirma que o que funcionava continua funcionando depois de uma mudança.
- Carga testa o volume esperado e de pico; estresse vai além do limite, para ver como o sistema falha e se recupera.
- Caixa-preta testa entradas e saídas sem olhar o código (classes de equivalência, valor-limite); caixa-branca usa a estrutura interna (cobertura de comandos e caminhos).
- Pirâmide de testes: muitos unitários (rápidos e baratos), menos de integração, poucos de ponta a ponta.
Exemplo concreto: a emissão de certidões
| Teste | O que verifica no portal de certidões |
|---|---|
| Unitário | A função que calcula se há pendência, isolada, com dados simulados |
| Integração | A função conversando com o banco de dados real e com o serviço de assinatura |
| Sistema (com testes funcionais) | O fluxo completo: o gestor pede e recebe a certidão assinada; e a certidão é negada quando há pendência |
| Aceitação | Servidores e gestores conferem se atende ao que precisam |
| Regressão | Depois de mudar o layout do PDF, a verificação de pendências continua correta |
| Carga | 2.000 gestores pedindo certidões no último dia do prazo |
| Estresse | 20.000 pedidos simultâneos: o sistema degrada com elegância ou cai de vez? |
Valor-limite: se o campo “exercício” aceita de 2015 a 2026, os testes mais valiosos são 2014, 2015, 2026 e 2027, porque os erros se concentram nas bordas. Classes de equivalência: um valor de cada faixa (abaixo, dentro, acima) representa a faixa inteira.
Disponibilidade em números: 99,9% de disponibilidade permite cerca de 43 minutos de indisponibilidade num mês de 30 dias (0,1% de 43.200 minutos) e cerca de 8,8 horas num ano.
Comparação: carga, estresse e as qualidades
| Teste | Volume | Pergunta |
|---|---|---|
| Desempenho | Normal | Responde no tempo exigido? |
| Carga | Esperado e de pico | Aguenta o movimento previsto? |
| Estresse | Acima do limite | Como falha e como se recupera? |
| Qualidade | O que significa | Como se mede ou se obtém |
|---|---|---|
| Desempenho | Rapidez e uso de recursos | Tempo de resposta, vazão |
| Escalabilidade | Atender mais demanda | Vertical (máquina maior) ou horizontal (mais máquinas) |
| Disponibilidade | Estar acessível quando preciso | Percentual de tempo no ar; redundância |
| Confiabilidade | Funcionar sem falhar por um período | Tempo médio entre falhas (MTBF) |
| Manutenibilidade | Facilidade de corrigir e evoluir | Código legível, testes, baixo acoplamento |
Revisão de código, refatoração e dívida técnica
- Revisão de código: outra pessoa lê a mudança antes de ela entrar (no pull request), procurando erros, falhas de segurança e código confuso. Na forma mais rigorosa, a inspeção, há papéis definidos e checklist.
- Refatoração: melhorar a estrutura interna sem alterar o comportamento externo. Os sinais de que é preciso (“code smells”) incluem código duplicado, método longo demais e classe com responsabilidades demais. Testes automatizados são a rede de segurança: rodam antes e depois para provar que nada mudou.
- TDD (desenvolvimento guiado por testes): escreva um teste que falha (vermelho), escreva o mínimo de código para passar (verde) e refatore.
- Dívida técnica: atalhos tomados para entregar antes (falta de testes, gambiarras, documentação adiada). Pode ser consciente e até razoável, mas precisa ser registrada e paga, ou cada mudança futura fica mais cara.
Como a FCC cobra
Um cenário e a pergunta “que tipo de teste é este?”. Regressão, carga × estresse e unitário × integração são os pares mais cobrados.
- Níveis e tipos de teste e o objetivo de cada um.
- Caixa-preta × caixa-branca; valor-limite e classes de equivalência.
- Refatoração (muda a estrutura, não o comportamento).
- Dívida técnica e suas consequências.
- Atributos de qualidade e escalabilidade vertical × horizontal.
Pegadinhas
- “Refatorar é acrescentar funcionalidades ao código.” Falso: é reorganizar sem mudar o comportamento externo.
- “Teste de estresse e teste de carga são a mesma coisa.” Falso: carga usa o volume esperado; estresse ultrapassa o limite.
- “Teste de regressão só é necessário em sistemas novos.” Falso: é para depois de qualquer mudança, justamente em sistemas que já funcionavam.
- “Teste caixa-branca dispensa conhecer o código.” Falso: quem dispensa é o caixa-preta.
- “Dívida técnica é sempre resultado de incompetência.” Falso: pode ser uma decisão consciente; o problema é não registrá-la nem pagá-la.
Explique com suas palavras
Explique a um gestor por que vale a pena ter testes automatizados de regressão, e o que é dívida técnica, com um exemplo seu.
- Escreva sem olhar a lição, com frases curtas e um exemplo seu.
- Onde travar ou precisar de jargão, há uma lacuna: releia só essa parte.
- Compare com a explicação-modelo e reescreva o que faltou.
Fica salva neste navegador.
Comparar com uma explicação-modelo
Toda mudança num sistema pode quebrar algo que já funcionava, às vezes numa parte que ninguém imaginaria. Testes de regressão automatizados conferem, em minutos e a cada mudança, que o que funcionava continua funcionando. Sem eles, ou se testa tudo à mão, o que é lento, ou se descobre o erro em produção, com o usuário.
Dívida técnica é deixar um remendo para depois para entregar antes. Por exemplo, copiar e colar o mesmo cálculo em três telas em vez de criar uma função só. Funciona hoje, mas, quando a regra mudar, será preciso lembrar de alterar os três lugares, e esquecer um vira erro. Esse trabalho extra a cada mudança são os juros da dívida.
Teste-se
Engenharia de Software · Qualidade e testes · Inédita, estilo FCC
Questão 1 de 3
Após alterar o layout do PDF da certidão, a equipe executou novamente o conjunto de testes automatizados que já existia para confirmar que a verificação de pendências e a assinatura digital continuavam funcionando. Esse tipo de teste é o de
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Engenharia de Software · Qualidade e testes · Inédita, estilo FCC
Questão 2 de 3
Para avaliar o portal de prestação de contas, a equipe submeteu o sistema a um número de acessos simultâneos dez vezes maior que o pico já registrado, com o objetivo de descobrir o ponto de ruptura e observar como o sistema falha e se recupera. Trata-se de teste de
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Engenharia de Software · Qualidade e testes · Inédita, estilo FCC
Questão 3 de 3
Um desenvolvedor dividiu um método de 300 linhas em funções menores, eliminou trechos duplicados e renomeou variáveis para nomes mais claros, sem alterar nenhum resultado produzido pelo sistema. Essa atividade é denominada
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Mais duas questões deste tópico estão em Questões.
Flashcards gerados
| Frente | Verso |
|---|---|
| Níveis de teste | Unitário, integração, sistema e aceitação. Teste funcional é um tipo de teste, que cabe em qualquer nível. |
| Caixa-preta × caixa-branca | Caixa-preta testa entradas e saídas sem olhar o código; caixa-branca usa a estrutura interna, como a cobertura de caminhos. |
| Pirâmide de testes | Muitos testes unitários, menos de integração e poucos de ponta a ponta. |
| Ciclo do TDD | Escrever um teste que falha (vermelho), o mínimo de código para passar (verde) e refatorar. |
| Escalabilidade vertical × horizontal | Vertical aumenta a máquina (mais CPU e memória); horizontal acrescenta máquinas. |
Ligação com o estudo de caso
Em casos sobre código gerado por IA ou sobre um pipeline de CI/CD, testes são o portão de qualidade: “testes unitários e de integração automatizados rodam a cada mudança, e o deploy é bloqueado se algum falhar; testes de carga antes de períodos de pico, como o fim do prazo de prestação de contas”. Some a revisão de código humana no pull request.
Fontes da lição
- Edital nº 01/2026, Anexo II, Engenharia de Software (fontes/edital-01-2026.txt).
- Ian Sommerville, Engenharia de software (níveis de teste, verificação e validação).
- Martin Fowler, Refatoração (definição de refatoração e “code smells”).
- Ward Cunningham, “The WyCash Portfolio Management System” (1992), origem da metáfora da dívida técnica.
Claude explica
Tire dúvidas sobre este tema no Claude: o site copia o pedido com a lição e abre uma conversa nova, na sua conta. Confira na fonte qualquer fato de lei ou de norma.
Pratique fora do site
Faça questões da FCC sobre este tópico no QConcursos ou no Gran e registre aqui quantas fez: elas contam na meta da semana e no status do tópico.