O documento fornece uma introdução aos conceitos básicos de teste de software, incluindo: 1) A importância da qualidade de software e dos testes; 2) Uma distinção entre testes manuais e testes automatizados; 3) Uma explicação do método TDD (Test-Driven Development) de escrever testes primeiro antes de codificar.
2. Help About me...
• André Phillip Bertoletti
• Desenvolvedor de software
autônomo, professor, consultor e
agitador de comunidades
• Entusiasta das Boas Práticas e
Métodos Ágeis
• Curto também: violão, políticas
públicas, café, espiritualidade, etc...
apbertoletti@gmail.com
@apbertoletti
/apbertoletti
/apbertoletti
3. Iremos falar sobre...
• Qualidade de software
• Conceitos básicos de teste
• Testes manuais
• Testes automatizados
• TDD – Testar antes de codificar
11. Projetos de software
Sucesso; 6%
Falhou; 42%
Atrasou,
Ficou mais
caro, cliente
insatisfeito
52%
Stanish Group
Chaos Report 2012
12. Em busca de mais qualidade...
Paradigmas de
programação
Métodos
ágeis
Padrões
De projeto
Frameworks
Boas
práticas
Teste de
Sotware
Open Source
Lean
Software
Ferramentas
Mais robustas
Maturidade dos
Profissionais
Comunidades
13. Teste de Software (zoom in)
• Testes de unidade (manual)
• Testes de unidade (automatizado)
• Testes de integração
• Testes de sistema
• Testes de aceitação
• Testes de carga/stress
• Testes de usabilidade
• Testes de UI (User Interface)
• TDD (Criar o teste antes do código)
• BDD (Criar cenários de teste diversos)
20. Passou no Teste - OK!!!
Resultado esperado =
quadro na parede
21. Aqui entra o teste unitário
Teste unitário é a verificação da
menor unidade de um processo (ou
das unidades mais importantes),
afim de validar se os resultados de
entrada/saída conferem com o
esperado.
22. Qualquer processo manual
que também possua um
resultado
esperado
é passível
de
testes unitários
(automatizado
ou manual)
26. Como acontece um teste manual
NECESSIDADE:
Desenvolver um software que
calcule as quatro operações
aritméticas básicas entre dois
valores e mostre o resultado na
tela.
RESULTADO ESPERADO:
(operação de adição)
• Valor1 = 100
• Valor2 = 200
• Resultado = 300
29. O problema é que estes testes
não são automáticos
... e tarefas complexas
feitas de forma manual
chatas... e tornando-se chatas,
uma hora ou outra, nós deixamos
de fazê-las.
e repetitiva tornam-se
47. Exercício para TDD
Desenvolver uma rotina que calcule o salário
líquido do funcionário (com descontos), levando em
consideração o salário atual e o cargo
do funcionário.
As regras de negocio são as seguintes:
• Desenvolvedores possuem 20% de desconto caso
seu salario seja maior do que R$ 3000,0. Caso
contrario, o desconto e de 10%.
• DBAs e testadores possuem desconto de 25% se
seus salários forem maiores do que R$ 2500,0.
15%, em caso contrario.
Resolução: https://github.com/DevRioClaro/TesteDeSoftware_05-07-2014/tree/master/TDD
51. Benefícios
• Desenvolver testes encoraja o programador a
fazer um bom design do seu código,
afim de facilitar o seu teste automatizado.
• Exemplo: separação dos métodos de regras de
negócio, da camada apresentação.
52. Benefícios
• Encoraja o programador a desenvolver
código limpo. Pois, se o método estiver
coberto com testes automatizados, é
garantida a sua refatoração. E isso é feito de
forma segura, garantindo que o mesmo
continuará funcionando.
• Exemplo: (mostrar no código)
53. Benefícios
• Independente do programador (iniciante ou
experiente) que esteja mexendo no código, o
produto final continuará funcionando
como era esperado. Por isso, o teste unitário
automatizado, pode ser considerado um
“Ativo Fixo” de uma empresa de software;
54. Benefícios
• Em sistemas complexos como um ERP,
onde há métodos reutilizáveis e com alto grau
de dependência entre eles, os testes
automatizados garantem que uma simples
manutenção não “quebre” aquilo que já
estava funcionando.
• Exemplo: Implementação da última Nota
Técnica da NFe.
55. Nem tudo são flores...
• Mais código para escrever, pois além do
próprio método original, haverá também o(s)
método(s) de testes que irá cobri-lo.
• Exemplo:
56. Nem tudo são flores...
• Mais código para manter, pois caso haja
alguma alteração nos resultados esperados
dos métodos já cobertos, os seus respectivos
testes também deverão ser reajustados.
• Exemplo:
– Mudou a assinatura do método testado (novo
parametro, novo nome, etc).
57. Nem tudo são flores...
• Como toda mudança, o primeiro passo é
sairmos da zona de conforto
59. Lembretes importantes!
• NÃO existe software sem Bug! A ideia do teste
unitário é MINIMIZAR AO MÁXIMO a existência
deles.
• Métodos de testes também são software!
Portanto cuidado: testes mal escritos podem
retornar falsos positivos ou falsos negativos!
• O alto número de testes unitários pode trazer
uma falsa sensação de segurança. Pois a
garantia de qualidade exige também a prática de
outros testes, como integração, stress,
aceitação, etc.
60. Referências I
Só imaturos não testam!
http://nomedojogo.com/2009/04/08/so-os-imaturos-nao-testam-o-video/
Programadores profissionais escrevem testes, e
ponto final!
http://blog.fragmental.com.br/2007/10/31/programadores-profissionais-escrevem-testes-ponto-final/
Tudo o que você precisa saber sobre testes no Visual
Studio
(parte 1) http://www.youtube.com/watch?v=kGnlItZyOzY
(parte 2) http://www.youtube.com/watch?v=UgPMmR2LaZo
(parte 3) http://www.youtube.com/watch?v=oLFBPGuIqGk
Você testa o seu Software? Como?
http://luizcorrea.blogspot.com.br/2009/10/voce-testa-o-seu-software-como.html
61. Referências II
Como explicar TDD para o seu chefe
http://tdd.caelum.com.br
Podcasts sobre TDD
http://podcast.dotnetarchitects.net/2010/07/podcast-14-test-driven-development/
http://podcast.dotnetarchitects.net/2010/01/tdd-nao-existe/
http://www.bluesoft.com.br/podcast-8-test-driven-development/
Artigos sobre TDD
http://dojofloripa.wordpress.com/2007/09/10/tudo-sobre-tdd/
http://desenvolvimentoagil.com.br/xp/praticas/tdd/