software
de
Teste
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
Iremos falar sobre...
• Qualidade de software
• Conceitos básicos de teste
• Testes manuais
• Testes automatizados
• TDD – Testar antes de codificar
Ahá!
moments
compartilho alguns...
Qualidade de Software
O que é
qualidade
mesmo?
Mas...
Qual dos carros abaixo tem mais
qualidade?
Ahá! moment #1
Nós ainda não
aprendemos a
entregar software!
Projetos de software
Sucesso; 6%
Falhou; 42%
Atrasou,
Ficou mais
caro, cliente
insatisfeito
52%
Stanish Group
Chaos Report 2012
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
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)
Custo de correção de um bug no ciclo
de vida de um software
Conceitos básicos de Teste
O que é
testar
mesmo?
Mas...
Um processo feito de forma
responsável precisa ser
testado sempre, a fim de
garantir que o resultado
obtido confere com o
resultado esperado
Ahá! moment #2
Um teste de qualidade
precisa ter clareza do(s)
seu(s) resultado(s)
esperado(s)!
Processo: “Pendurar quadro na parede”
Qual seria o teste deste processo?
Passou no Teste - OK!!!
Resultado esperado =
quadro na parede
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.
Qualquer processo manual
que também possua um
resultado
esperado
é passível
de
testes unitários
(automatizado
ou manual)
Software: é aqui que entramos...
Construir um Software significa
automatizar um processo que
antes era feito manualmente
Dados de
Entrada
Processamento
Automático
Dados de
Saída
Testes manuais
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
Vamos a demo!
Somente os
testes
manuais
bastam?
Mas...
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
Além disso, outros fatores que
dificultam o teste manual...
Testes automatizados
Pensando além
do F5 (RUN)...
se nós já
automatizamos o
processo, será que
não conseguimos
também
automatizar
o seu
teste???
um software
testando...
Aqui entra o Teste Unitário
Automatizado que nada mais é...
...outro software
Quando rodamos um teste
automatizado, fica sob
responsabilidade dele nos informar
quais testes passaram ou não
Frameworks de Teste Automatizado
• C#
– MSTest (http://msdn.microsoft.com/en-us/library/ms243147.aspx)
• Java
– JUnit (http://junit.org)
• JavaScript
– Unit.JS (http://unitjs.com)
• Delphi
– DUnit (http://dunit.sourceforge.net)
• Objetive-C
– OCUnit (http://www.sente.ch/software/ocunit)
• Demais linguagens
– http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
Vamos a demo!
TDD – Testar antes de Codificar
Escutar o
que teste
está
dizendo
TDD como nossa
Rede de proteção
Test Driven
Develoment
Ahá! moment #4
TDD te ajuda a escrever
o menor e o melhor
código para resolver um
problema
1
23
Vamos a demo!
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
Ahá! moment #5
Participar de
Coding Dojos me
ajudou muito a
compreender o TDD
Isso tudo
funciona no
mundo real?
Mas...
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.
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)
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;
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.
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:
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).
Nem tudo são flores...
• Como toda mudança, o primeiro passo é
sairmos da zona de conforto
Pirâmide da automação de testes
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.
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
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/
Ahá! moment #FINAL
Programadores
profissionais
escrevem testes,
e ponto final!
Obrigado ☺
Dúvidas?!

Teste de software, na visão de um desenvolvedor

  • 1.
  • 2.
    Help  Aboutme... • 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
  • 4.
  • 7.
  • 8.
  • 9.
    Qual dos carrosabaixo tem mais qualidade?
  • 10.
    Ahá! moment #1 Nósainda não aprendemos a entregar software!
  • 11.
    Projetos de software Sucesso;6% Falhou; 42% Atrasou, Ficou mais caro, cliente insatisfeito 52% Stanish Group Chaos Report 2012
  • 12.
    Em busca demais 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)
  • 14.
    Custo de correçãode um bug no ciclo de vida de um software
  • 15.
  • 16.
  • 17.
    Um processo feitode forma responsável precisa ser testado sempre, a fim de garantir que o resultado obtido confere com o resultado esperado
  • 18.
    Ahá! moment #2 Umteste de qualidade precisa ter clareza do(s) seu(s) resultado(s) esperado(s)!
  • 19.
    Processo: “Pendurar quadrona parede” Qual seria o teste deste processo?
  • 20.
    Passou no Teste- OK!!! Resultado esperado = quadro na parede
  • 21.
    Aqui entra oteste 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 quetambém possua um resultado esperado é passível de testes unitários (automatizado ou manual)
  • 23.
    Software: é aquique entramos...
  • 24.
    Construir um Softwaresignifica automatizar um processo que antes era feito manualmente Dados de Entrada Processamento Automático Dados de Saída
  • 25.
  • 26.
    Como acontece umteste 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
  • 27.
  • 28.
  • 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
  • 30.
    Além disso, outrosfatores que dificultam o teste manual...
  • 31.
  • 32.
    Pensando além do F5(RUN)... se nós já automatizamos o processo, será que não conseguimos também automatizar o seu teste???
  • 33.
    um software testando... Aqui entrao Teste Unitário Automatizado que nada mais é... ...outro software
  • 34.
    Quando rodamos umteste automatizado, fica sob responsabilidade dele nos informar quais testes passaram ou não
  • 35.
    Frameworks de TesteAutomatizado • C# – MSTest (http://msdn.microsoft.com/en-us/library/ms243147.aspx) • Java – JUnit (http://junit.org) • JavaScript – Unit.JS (http://unitjs.com) • Delphi – DUnit (http://dunit.sourceforge.net) • Objetive-C – OCUnit (http://www.sente.ch/software/ocunit) • Demais linguagens – http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
  • 36.
  • 37.
    TDD – Testarantes de Codificar
  • 41.
  • 42.
    TDD como nossa Redede proteção
  • 43.
  • 44.
    Ahá! moment #4 TDDte ajuda a escrever o menor e o melhor código para resolver um problema
  • 45.
  • 46.
  • 47.
    Exercício para TDD Desenvolveruma 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
  • 48.
    Ahá! moment #5 Participarde Coding Dojos me ajudou muito a compreender o TDD
  • 49.
  • 51.
    Benefícios • Desenvolver testesencoraja 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 oprogramador 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 doprogramador (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 sistemascomplexos 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ãoflores... • 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ãoflores... • 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ãoflores... • Como toda mudança, o primeiro passo é sairmos da zona de conforto
  • 58.
  • 59.
    Lembretes importantes! • NÃOexiste 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ó imaturosnã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 explicarTDD 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/
  • 62.
  • 63.