A cultura de testes no processo de desenvolvimento de software
Cléber Zavadniak
- Arquiteto de Software
- Desenvolvedor de Software
- Consumidor de Software
- Desde 2004, profissionalmente
https://cleber.solutions
1- Por quê?
Por que ter testes automatizados?
- Para evitar regressão.
Fim
Regressão
Regressão
- Antes funcionava
- Agora não funciona mais
Regressão
- O que quebra não é a funcionalidade nova
- Quebra outra parte que você nem mexeu!
-
E nem sempre quebra imediatamente
- O bug pode ser descoberto N releases depois
- Vide `git bisect`
- O bug pode ser descoberto N releases depois
Regressão
- Trabalho miserável / "inútil"
- Consertar o que já estava funcionando
- Toma tempo precioso da equipe
- "À toa"
- E explode na mão do cliente!
- Pode gerar efeito dominó
- "Bug que criei ao corrigir outro bug"
- Queima o filme da equipe
- Perante a diretoria
- (E vai gerando "trauma da entrega")
- Perante o cliente
- (E a reputação da empresa vai junto)
- Perante a diretoria
Regressão queima o filme da empresa
- Caso: Salesforce/Apex
- Força você a escrever testes
- Por que, se o software nem é deles?
Regressão custa caro
E mais caro quanto mais perto de produção.
- Levantamento de requisitos: 100
- QA: 1.500
- Produção: 10.000
Departamento de Comércio dos EUA:
"bugs de software custam 59,5 bilhões de dólares para a economia americana"
https://www.isixsigma.com/industries/software-it/defect-prevention-reducing-costs-and-enhancing-quality/
https://www.celerity.com/the-true-cost-of-a-software-bug
Fonte: IBM System Sciences Institute
Fonte: a experiência do cara, baseado em um wage de USD 100,00/hora.
Por que o custo sobe tanto?
- Envolve mais gente
- Cliente
- Suporte N1
- Suporte N2
- PM
- Equipe de desenvolvimento
- Desenvolvedor
- É um desvio
- Pode gerar outros custos
- Infraestrutura
- Negação de serviço
- Processos legais
Ou seja
- Se ter testes torna o processo 2x mais demorado...
- Ainda assim se paga!
Vantagens
1- Eliminação do
cagaço-de-mexer
- Típico de integrantes novos
- Tende a atrasar as entregas
- E "incomodar" os colegas
Depois que mexo no código, que garantia eu tenho de que não quebrei nada?
"Parece okay" é insuficiente.
2- Código "hermético"
- Outra pessoa pode mexer no "teu" código
- Se fizer algo errado, os testes detectam!
3- Testes são uma forma de documentação
"Atenção: é muito importante jamais permitir que um usuário do grupo X altere configurações da seção Y!"
- Questões de controle de acesso (segurança)
- Checagem de possíveis abusos
- Casos especiais
4- Falhar local é muito melhor que falhar em produção
- Público afetado = 1 pessoa (você)
- Fora do ciclo de deploy
- Rule of Repair: When you must fail, fail noisily and as soon as possible.
Como começar
Como começar
- Bugs
- Novas funcionalidades
- Código "em repouso"
Bugs
- Nenhum bug é "corrigido" sem testes para comprovar
- Correção em 2 etapas:
- Entender o problema e escrever o teste
- (que deve falhar)
- Fazer o teste passar
- Entender o problema e escrever o teste
(pytest)
Novas funcionalidades
- Se não tem teste comprovando que funciona,
- então não funciona
- e, se funcionar por pura sorte, vai bugar em breve.
- É necessário uma "prova formal".
("Nova funcionalidade" nem sempre é "entrega".)
Ferramentas
- Checklist
- Code coverage
Checklist
- Interessante: usar template de Pull Request
- Incluir: "tem testes?"
- Na definição das tarefas, incluir "escrever os testes"
Code coverage
- É possível impedir que a cobertura decaia.
- (PR fica "bloqueado")
- Mas primeiro precisa medir!
- Ou seja: configurar CI adequadamente.
- No começo, pode ser um git-hook.
Macetes
Seja rápido!
- Localmente: mais fácil
- (Se for difícil e lento, você não usa)
- No CI: mais barato
- (Cada minuto conta)
Faça bom uso de transactions+rollbacks
- Evite I/O no HDD/SDD!
- ("Se usa banco é unitário?" - a discussão é longa...)
- SGBDs geralmente suportam transações aninhadas.
Evite I/O no geral
- I/O na rede local = teste de integração
- I/O no disco = apenas com fixtures
Capriche nas mensagens de erro
- Da aplicação:
- Deve guiar o usuário
- Dos testes:
- Deve guiar o desenvolvedor
- Seguir a ideia de "alertas acionáveis"
- Os nomes dos testes devem ser descritivos também
Cultura
Pessoas > Processos
- Nenhum processo se estabelece sozinho
- Ter testes dá mais trabalho
- Exige
- compromisso
- boa-vontade
- disciplina
- flexibilidade
- visão de médio/longo-prazo
- Exige
Fim
- Cultura = pessoas
- Regressão e bugs são caros
- Testes automatizados ajudam
Cultura de testes
By Cléber Zavadniak
Cultura de testes
- 208