Teste de
Software
Conhecendo e aplicando
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
Estamos contratando!
www.luxfacta.com
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.
A idade da indústria de software
Engenharia
civil
2550 a.C
Engenharia de software
1948 d.C
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
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
Mas o que é qualidade mesmo?
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)
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
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)
Custo de correção de um bug no ciclo
de vida de um software
O que é testar mesmo?
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
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
Teste 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
Modelo de documento de testes
Mas os testes manuais
bastam?
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
Testes
unitários
Demo
TDD
Test Driven
Development
Escutar o
que teste
está
dizendo
TDD como nossa Rede de
proteção
Test Driven
Develoment
1
23
Ciclo do TDD
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.
Demo 3
Mas isso tudo funciona no
mundo real?
SIM! Pelo menos deveria...
Bateria de testes do projeto ActList
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: 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.
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;
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.
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.
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
Mas.. Nem tudo são flores...
 Como toda mudança, o primeiro passo é sairmos
da zona de conforto
Pirâmide dos testes
Execução lenta e alto
custo
Execução rápida e
baixo custo
Abrangência maior
Abrangência menor
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
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
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/
Perguntas…

Qualidade e Testes de Software

  • 1.
  • 2.
    Help → Aboutme...  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
  • 3.
  • 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 daindústria de software Engenharia civil 2550 a.C Engenharia de software 1948 d.C
  • 6.
    Mas qual criseera 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 conseguimossair da crise? Fonte: Chaos Rerport – Standish Group https://www.standishgroup.com/sample_research_files/CHAOSReport2015- Final.pdf Década de 1960 Ano de 2015
  • 8.
    Mas o queé qualidade mesmo?
  • 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 demais 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 testesde 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)
  • 12.
    Custo de correçãode um bug no ciclo de vida de um software
  • 13.
    O que étestar mesmo?
  • 14.
    Definição de teste Umprocesso feito de forma responsável precisa ser testado sempre, a fim de garantir que o resultado obtido confere com o resultado esperado
  • 15.
    Processo: “Pendurar quadrona parede” Qual seria o teste deste processo?
  • 16.
    Passou no Teste- OK!!! Resultado esperado = quadro na parede
  • 17.
    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.
  • 18.
    Qualquer processo manual quetambém possua um resultado esperado é passível de testes unitários (automatizado ou manual)
  • 19.
    Software: é aquique entramos...
  • 20.
    Construir um Software significaautomatizar um processo que antes era feito manualmente Dados de Entrada Processamento Automático Dados de Saída
  • 21.
  • 22.
    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
  • 23.
  • 24.
    Mas os testesmanuais bastam?
  • 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
  • 26.
    Além disso, outrosfatores que dificultam o teste manual...
  • 27.
  • 28.
    Pensando além do F5(RUN)... se nós já automatizamos o processo, será que não conseguimos também automatizar o seu teste???
  • 29.
    um software testando... Aqui entrao Teste Unitário Automatizado que nada mais é... ...outro software
  • 30.
    Quando rodamos umteste automatizado, fica sob responsabilidade dele nos informar quais testes passaram ou não
  • 31.
    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
  • 32.
  • 33.
  • 34.
  • 40.
  • 41.
    TDD como nossaRede de proteção
  • 42.
  • 43.
  • 44.
    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.
  • 45.
  • 46.
    Mas isso tudofunciona no mundo real? SIM! Pelo menos deveria...
  • 47.
    Bateria de testesdo projeto ActList
  • 48.
    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.
  • 49.
    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: 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 doprogramador (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 sistemasmais 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 tudosã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 tudosã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 tudosão flores...  Como toda mudança, o primeiro passo é sairmos da zona de conforto
  • 55.
    Pirâmide dos testes Execuçãolenta e alto custo Execução rápida e baixo custo Abrangência maior Abrangência menor
  • 56.
    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.
  • 57.
    Referências I Por quenó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 explicarTDD 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/
  • 59.