2. Help → About me...
André P. Bertoletti
Pai “júnior” :D
Analista de Sistemas,
desenvolvedor, 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
4. Senta que lá vem a história...
• Frente a outras indústrias, somos
muito novos e ainda temos muito
a aprender e melhorar
• Na década de 1960, a indústria
de software começa a se
organizar melhor, na tentativa
de contornar a crise do software
e dar um tratamento de
engenharia (mais sistemático e
controlado) ao desenvolvimento
de software.
5. A idade da indústria de software
Engenharia
civil
2550 a.C
Engenharia de software
1948 d.C
6. Mas qual crise era esta?
• Amadorismo no desenvolvimento
• Projetos estourando o orçamento
• Projetos estourando o prazo
• Software de baixa qualidade
• Software muitas vezes não atendendo os
requisitos
• Projetos não gerenciáveis e código difícil de
manter
7. Será que conseguimos sair da crise?
Fonte: Chaos Rerport – Standish Group
https://www.standishgroup.com/sample_research_files/CHAOSReport2015-
Final.pdf
Década de 1960 Ano de 2015
9. Definições de qualidade
• “Qualidade é desenvolver, projetar, produzir e
comercializar um produto que seja sempre mais
econômico, mais útil, e que satisfaça o consumidor.”
(ISHIKAWA apud MORETTI, 2003, p. 15)
• “Qualidade é a conformidade do produto às suas
especificações” (CROSBY apud MORETTI, 2003, p. 15)
• “A qualidade consiste nas características dos produtos que
vão ao encontro das necessidades dos clientes, e dessa
forma proporcionam satisfação em relação ao produto. A
qualidade é a ausência de falhas.” (JURAN apud MORETTI,
2003, p. 14)
10. Em busca de mais qualidade...
Paradigmas de
programação
Métodos
Padrões
De projeto
Frameworks
Boas
práticas
Teste de
Sotware
Planejamento
Lean
Software
Ferramentas
Mais robustas
Maturidade dos
Profissionais
Comunidades
11. Tipos de testes de Software
• 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 mutação
• Testes de UI (User Interface)
• TDD (Criar o teste antes do código)
• BDD (Criar cenários de teste diversos)
14. Definição de teste
Um processo feito de forma
responsável precisa ser testado
sempre, a fim de garantir que o
resultado obtido confere com o
resultado esperado
16. Passou no Teste - OK!!!
Resultado esperado =
quadro na parede
17. 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.
18. Qualquer processo manual
que também possua um
resultado
esperado
é passível
de
testes unitários
(automatizado
ou manual)
22. 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
25. 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
44. 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.
48. 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.
49. 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: um algoritmo pré-existente, que não
está tão performático, se ele estiver coberto por
testes automatizados, ele poderia ser reescrito
com mais tranquilidade, sem “fator cagaço” de
quebrar algo que já estava funcionando.
50. 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 automatizado, pode ser
considerado um “Ativo Fixo” de uma
empresa de software;
51. Benefícios
Em sistemas mais complexos, 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.
52. Mas... 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.
53. Mas... 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
parâmetro, novo nome, etc).
Mudaram os resultados esperados dos testes que já
estavam prontos
54. Mas.. Nem tudo são flores...
Como toda mudança, o primeiro passo é sairmos
da zona de conforto
55. Pirâmide dos testes
Execução lenta e alto
custo
Execução rápida e
baixo custo
Abrangência maior
Abrangência menor
56. 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.
57. Referências I
Por que nós amamos testes (e você também deveria)?
https://www.youtube.com/watch?v=32sG8DO3ZdA
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
58. Referências II
Como explicar TDD para o seu chefe
http://tdd.caelum.com.br
Podcasts sobre TESTES
https://hipsters.tech/testes-automatizados-hipsters-51
https://www.lambda3.com.br/2016/11/podcast-18-testes/
https://labs.bluesoft.com.br/test-driven-development-bluesoft-podcast-8/
Artigos sobre TDD
http://dojofloripa.wordpress.com/2007/09/10/tudo-sobre-tdd/
http://desenvolvimentoagil.com.br/xp/praticas/tdd/