Testes de Software

Conceitos, Benefícios e Aplicabilidade
Diogo Damiani

Desenvolvedor de Software

Estudante compulsivo de Arquitetura de Software e
Boas Práticas de Desenvolvimento.
Tipos de Testes
Unitários
Integrados
Regressão
Funcionais
  Stress
    ...
Unitários
Integrados
Regressão
Funcionais
  Stress
    ...
Teste Unitário


“É um código executável que testa uma
   unidade funcional do software”

    Geralmente uma classe, um método.
Por que testes?
“Testes são documentação executável”
“Testes garantem a mudança sem medo”
Desculpas para não escrever testes...
Não tenho tempo para isso!
                             Pode piorar!
Vou demorar muito mais!
                          Depende!
Código legado é impossível de testar!
                                    Mito!
Isso é responsabilidade do testador!
                               Nem sempre!
Compila! Logo, funciona!
      O compilador é só mais um teste, quando existe!
Consequências da Falta de Testes
“Desenvolvedor que não faz testes é como
   um cirurgião que não lava as mãos”




                          Uncle Bob (Robert C. Martin)
“Software sem testes dá medo!”




                           Giovanni Bassi
Para testar, o software tem que ser
              testável!


SRP
Separação de Reponsabilidades
Coesão
Inversão de Controle
Injeção de Dependência
...
TDD

Test Driven Development
TDD

“É uma técnica para desenvolvimento
de software cujo processo é formado
por pequenas iterações e os testes são
         escritos primeiro”

Não é um método para testar software, mas
       para (re)construir software!
Benefícios dos Testes
TDD: garante a existência de testes
            unitários
                  Oba! Ganhei um conjunto de testes!
Diminui a quantidade de erros
                    Mais qualidade de código!
Testes servem como especificação
                  Agora eu sei como isso funciona!
Melhora a arquitetura do software
                   Mais desacoplamento e coesão!
Princípios
Testes devem ser isolados
     Um teste não deve depender do sucesso do outro!
Testes devem ser limpos
    Legibilidade = clareza + simplicidade + consistência
Um conceito e uma confirmação por teste
                        Uma análise, uma conclusão
Ferramentas
Teste Unitários e TDD
Teste Unitários e TDD

Teste Unitários e TDD