You are on page 1of 9

06/11/2008

Testes de Software
Teste de Componentes Teste de Unidade

Teste de Módulo Teste de Integração Teste de Subsistema

Teste de Sistema
Módulo: coleção de componentes dependentes

Teste de Usuário Teste de Aceitação

EA976 - Prof. Eleri Cardozo

Testes de Software
Projeto Detalhado

Especificação de Requisitos

Especificação de Sistema

Projeto de Sistema

Elo entre o desenvolvimento e a validação

Plano de Teste de Aceitação

Plano de Teste de Integração de Sistema

Plano de Teste de Integração de Subistema

operação

Teste de Aceitação

Teste de Integração de Sistema
EA976 - Prof. Eleri Cardozo

Teste de Integração de Subsistema

Teste de Unidade e Módulo

1

• analisar os resultados dos testes. tendo suas saídas comparadas com as saídas esperadas (corretas). entradas que provocam comportamento anômalo entradas sistema saidas EA976 . EA976 . O software é submetido a casos de teste. Problemas: • determinar os casos de teste.06/11/2008 Testes de Unidade e Módulo Objetivo: expor defeitos presentes no software (e não declarar o software livre de defeitos).Prof.Prof. Nestes testes o sistema é tratado como uma caixa preta. • realizar os testes. Eleri Cardozo saidas que revelaram presença de defeitos 2 . Eleri Cardozo Testes de Caixa Preta Verificam se o sistema cumpre certas funcionalidades (testes funcionais).

Os casos de teste devem fazer com que todas as instruções do programa sejam executadas pelo menos uma vez. Os casos de teste são escolhidos nestas partições. Exemplo: formulário preenchido correta e incorretamente. EA976 . Testes de caminho são testes de estrutura onde casos de teste forçam a execução de cada caminho independente. Eleri Cardozo 3 . switch. Exemplo de caminho são blocos definidos pelos comandos if. etc. Eleri Cardozo saidas que revelaram presença de defeitos Testes de Estrutura Testes de estrutura (caixa clara) são aplicados a unidades pequenas (método. função). for. while. entradas válidas entradas inválidas sistema saidas EA976 . É necessário conhecimento do código para a realização de testes de estrutura.Prof.Prof.06/11/2008 Partição de Equivalência São conjuntos de dados de entrada que produzem comportamento equivalente no sistema.

• falhas de configuração.06/11/2008 Testes de Integração Testes de integração identificam defeitos originados na integração de componentes e subsistemas. • falhas de implementação de protocolos de interação. componentes que simulam os componentes de níveis inferiores.Prof.Prof. No teste bottom-up ocorre o inverso. EA976 . Testes top-down são mais adequados para validar a arquitetura do sistema. Tais defeitos são causados por: • falhas de implementação da arquitetura. Testes bottom-up requerem drivers de teste (ambientes artificiais onde os componentes de baixo nível possam executar). • falhas ou uso incorreto de middlewares e contêineres. Usualmente utiliza-se uma combinação destas duas estratégias de teste. Eleri Cardozo 4 . isto é. EA976 . Eleri Cardozo Testes top-down e bottom-up No teste top-down os componentes de mais alto nível são integrados primeiro. • falhas de instalação. Testes de integração podem ser top-down ou bottom-up. mas requerem componentes stub (ou mock).

parâmetros. Certos defeitos como overflow de buffers e da área de heap se manifestam somente quando o sistema opera sob estresse.Prof.06/11/2008 Testes de Interface Teste de interface detectam falhas na interconexão de componentes e subsistemas. • manipulação incorreta de dados compartilhados. etc. testes de estresse verificam se o sistema atende certas propriedades emergentes tais como desempenho e confiabilidade. EA976 . Eleri Cardozo 5 . Falhas de interconexão podem ser causadas por: • dados incorretos trocados entre componentes. • erros em protocolos de interação (timing.) EA976 . Testes de estresse são importantes para sistemas distribuídos para determinar o overhead da distribuição. Eleri Cardozo Testes de Estresse Realizados com o sistema totalmente integrado. • erros em parâmetros de métodos (tipos.Prof. valores).

. Eleri Cardozo 6 .Prof. Telelogic. • analisadores dinâmicos de código (como HttpUnit. ... • ferramentas de teste de estresse (como tcpdump. • Testes de integração podem ser derivados dos casos de uso e diagramas de robustez.). Parasoft.06/11/2008 Testes de Sistemas Orientados a Objeto • Testes de unidade verificam os objetos individuais. • ferramentas de instrumentação de código (como compiladores OCL..). . pacotes java).. • Testes de subsistema verificam agrupamentos de objetos (por exemplo. • simuladores (como ServletUnit. ..). EA976 .. EA976 . Eleri Cardozo Bancadas de Teste Bancadas de teste integram várias ferramentas de teste em um ambiente integrado. .. • geradores de relatório.. etc. Produtos comerciais para teste de software são oferecidos por empresas como IBM (Rational). • Testes de interface podem ser derivados dos modelos dinâmicos como diagramas de seqüência e colaboração.).)....). • ferramentas de análise de cobertura de teste. • ferramentas de teste de unidade (como JUnit..Prof. . Exemplo de ferramentas de teste: • analisadores estáticos de código (como FindBugs.

Eleri Cardozo } 7 .1. @After . caso necessárias). } public void multiply(int n) { } // not ready yet // Static variable where the result is stored //Bug : should be result = result . EA976 . EA976 . } public void square(int n) { result = n * n.Prof. public void add(int n) { result = result + n. } public void substract(int n) { result = result .Prof. @Test .n public void divide(int n) { result = result / n. JUnit auxilia testes de unidade). As anotações mais comuns são: @Before .anota código responsável por realizar os testes (tipicamente invoca métodos de objetos da classe e compara o retorno com um valor esperado). public class Calculator { private static int result.anota código executado antes dos testes (tipicamente instancia e inicializa objetos da classe).anota código executado após os testes (tipicamente ações de cleanup.06/11/2008 JUnit: Framework de Teste de Unidade JUnit é um framework que utiliza anotações Java para definir seqüências de testes para classes Java (portanto. Eleri Cardozo JUnit: Exemplo package calc.

Ignore.junit.) .Test. display "hello".Assert. static org. import import import import import import calc.06/11/2008 JUnit: Exemplo public void squareRoot(int n) { for (. } EA976 . } public void switchOff() { // Display "bye bye". org. /** * Basic test class using @Test. } } EA976 .framework.Before. Ant and JUnit 3 text runner) public static junit. beep // and do other things that calculator do nowadays result = 0.Test suite() { return new JUnit4TestAdapter(CalculatorTest. . } // Cleans the result public void switchOn() { // Swith on the screen.Prof.Calculator.Prof. @Before and @Ignore annotation * as welll as assert keyword and assertEqual methods */ public class CalculatorTest { private static Calculator calculator = new Calculator().junit. Eleri Cardozo JUnit: Exemplo package junit4.junit. org.framework.assertEquals. Eleri Cardozo 8 . //Bug : loops indefinitely } public void clear() { result = 0.junit.class).JUnit4TestAdapter. beep. junit. switch off the screen } public int getResult() { return result. // Used for backward compatibility (IDEs. org.

} } EA976 . } // @Ignore has a String parameter which displays a message @Test @Ignore("not ready yet") public void multiply() { calculator.Prof. Eleri Cardozo JUnit: Exemplo @Test public void divide() { calculator.substract(2). assert calculator.add(10). 2). } EA976 .getResult().divide(0). assertEquals(calculator. } @Test public void subtract() { calculator.divide(2).clear(). Eleri Cardozo 9 . calculator.06/11/2008 JUnit: Exemplo @Before // must be public not protected like the setup public void clearCalculator() { calculator.add(8).getResult().add(1). 8). } @Test(expected = ArithmeticException. assertEquals(calculator. calculator.add(10). 100).getResult() == 5.Prof. } //================================== //= Test cases = //================================== @Test public void add() { calculator. calculator.add(1). calculator. assertEquals(calculator.getResult().multiply(10).class) public void divideByZero() { calculator.