Apoiando a Construção de Testes de Aceitação Automatizados ...
Testes Automatizados de Software
-
Upload
mauricio-aniche -
Category
Technology
-
view
6.748 -
download
4
description
Transcript of Testes Automatizados de Software
Testes Automatizados de Software
Seu software faz realmente o que você quer?
Mauricio [email protected]
Objetivos
• Por quê testar?
• Como testar?
E o mais importante:
MOTIVAR VOCÊ A TESTAR!
test all the f*cking time...
Por quê testar?
Prejuízos de aproximadamente $59.5 bilhões na economia dos EUA (Fonte: NIST/2002)
É impossível garantir que o software funcione corretamente, sem erros.
PORQUE SIM!
O cliente não comprou software que falha.
E por que as pessoas não testam?
Porque demora!
Meu projeto está atrasado!
Porque sou programador, e programador não testa!
Compilou, tá funcionando!
Tá pronto... Só falta testar!
“Inspecionar para prevenir defeitos é bom; Inspecionar para encontrar defeitos
é desperdício.”Shigeo Shingo
Revisões de código
Análises Formais
Testes automatizados!
Versões alfa & beta
Erro,
Defeito
Ou Falha?
test all the f*cking time...
Anatomia de um bug
Usuário executou um pedaço de código não testado.
A ordem em que o usuário executou as ações foram diferentes da ordem em que foi testado.
O usuário informou uma combinação de valores de entrada não testados.
O ambiente do usuário não foi simulado.
Observando seu sistema...
Os usuários enxergam o sistema a partir do exterior...
Os testadores espiam um pouco por debaixo dos panos...
Os desenvolvedores veem tudo...
E você precisa considerar todos esses pontos de vista!
Classificação
Caixa branca
Caixa preta
Caixa cinza
Fases de Teste
de unidade
de integração
de sistema
... diferentes tipos de testes, como aceitação, performance, stress, etc.
Testes de Regressão
Testes Manuais
Díficil
Demorado e cansativo
Executado poucas vezes
Cobre poucos casos
Sem documentação
Testes Automatizados
Rodam rápido
Cobrem muitos casos
Segurança na manutenção
Ajudam na documentação
Muitas vantagens...
Eficiência
Segurança
Flexibilidade
Robustez
… etc!
test all the f*cking time...
Você consegue ...
Simular grandes quantidades de dados ou usuários.
Medir o tempo de execução de certas partes do programa.
Encontrar gargalos.
Além disso ...
Você tem segurança em caso de mudanças.
Testes de regressão são executados.
Servem de documentação.
Ajuda a codificar?
Programe sempre pensando na testabilidade do código.
Seu código ganhará em qualidade e flexibilidade!
Facilidade de Manutenção
Você pode refatorar sem medo.
Adição de novas funcionalidades sem medo de danificar outras partes do sistema.
Chega de NÃO ENCOSTA NO QUE ESTÁ FUNCIONANDO!
Reprodutibilidade
test all the f*cking time...
Primeiros passos
Código dos testes devem ser simples.
Podem conter erros.
Devem fazer parte da manutenção.
Não devem exigir intervenção humana.
Devem ser independentes.
NUnit
Framework para testes de unidade.
Muito simples de usar.
Open source.
www.nunit.org
[TestFixture]
[Test]
using NUnit.Framework;
Criando um teste...
[Ignore]
[SetUp]
[TearDown]
Assert’s
Assert.AreEqual
Assert.Greater
Assert.GreaterOrEqual
Assert.IsTrue
Assert.IsNull
Assert.IsEmpty
Assert.AreSame
...
Exemplopublic class Calculadora {
public int soma(int a, int b) {
return a + b;
}
public int subtracao(int a, int b) {
return a - b;
}
}
using NUnit.Framework;
[TestFixture]
public class CalculadoraTest {
[Test]
public void TestaSomaSimples() {
Calculadora c = new Calculadora();
Assert.AreEqual(3, c.soma(1,2));
}
[Test]
Public void TestaSubtracaoSimples() {
Calculadora c = new Calculadora();
Assert.AreEqual(5,c.subtracao(6,1));
}
}
Vendo os resultados...
É hora de sujar as mãos!
test all the f*cking time...
Técnicas de Modelagem
Partição de Equivalência
Análise do Valor Limite
Grafo de Causa-Efeito
Mock Objects
Simulam objetos reais.
Úteis quando temos objetos que são difíceis de criar, reproduzir, lerdos, que ainda não existem, etc.
Você pode setar expectativas desse objeto.
Testar sai caro?
... É mais barato do que não testar!
Ferramentas
Testar é legal!
Célebre citação...
"The idea of "unit tests" appeals to me only rarely, when I’m feeling my way in a totally unknown environment and need feedback about what works and what doesn’t. Otherwise, lots of time is wasted on activities that I simply never need to perform or even think about. Nothing needs to be "mocked up"."
Donald Knuth
“Whenever you are tempted to type something into a print statement or a debugger expression, write it as a test instead.” Martin Fowler.
“Any program feature without an automated test simply does not exist.”
Kent Beck.
"Program testing can be used to show the presence of bugs, but never to show their absence."
Edsger W. Dijkstra
Citações
TESTE O TEMPO TODO!
Agradecimentos
Bryan Liles, por ter me cedido o uso do TATFT.
Palestras da Agilcoop.
Bibliografia
•Delamaro, et. al. Introdução ao teste de software. Campus. 2007.•Pressman, R.S. “Software Engineering : A Practitioner's Approach”, ed. McGraw-Hill, Science/Engineering/Math, 2006.•Teles, V.M. “Extreme Programming: Aprenda como encantar seus usuários desenvolvendo software com agilidade e alta qualidade”, ed. Novatec, 2004.•Whittaker, J.A. “What Is Software Testing? And Why Is It So Hard? ”. IEEE Software, Jan/Fev 2000, p. 70-79.•Vincenzi, M.R.; Maldonado, J. C.; Delamaro, M. E.; Spoto E. S.; Wong, W. E.•“Software Baseado em Componentes: Uma Revisão sobre Teste”, in: “Desenvolvimento Baseado em Componentes: Conceitos e Técnicas”. ed. Ciência Moderna, 2005.•Myers, Glenford J. The Art of Software Testing. Ed. Wiley, 2004.