Sie sind auf Seite 1von 97

Wilkerson de Lucena Andrade

wilkerson.andrade@gmail.com

Sumrio
Introduo ao Teste de Software Teste Funcional JUnit Teste Estrutural EMMA

Introduo ao Teste de Software

Introduo
Por que testar?
Avaliar a qualidade ou aceitabilidade Descobrir problemas

Objetivos:
Mostrar que a aplicao faz o esperado Mostrar que a aplicao no faz mais do que o esperado

O que Teste de Software e o que No ?


Processo para descobrir a existncia de defeitos em um software Um defeito pode ser introduzido em qualquer fase do desenvolvimento ou manuteno como resultado de:
Impreciso Desentendimentos Omisses Direcionamento a solues particulares Inconsistncias No completude

O que Teste de Software e o que No ?


Teste um processo referencial
necessrio existir uma definio precisa do que se quer verificar e quais os resultados esperados

Teste no debugging
Debugging o processo de encontrar/localizar defeitos

Terminologia
Erro
Engano ou omisso causado por uma ao humana Ocorre durante a codificao Tende a ser propagado

Falta
Representao de um erro Sinnimo de defeito ou bug Falta de comisso - representao incorreta Falta de omisso representao ausente

Terminologia
Falha
Impossibilidade de um sistema ou componente de executar uma funo requisitada Ocorre quando um software com falta executado evidenciada atravs de sada incorreta, trmino anormal, no satisfao de restries de tempo e espao

Modelo do Ciclo de Vida do Teste


Erro Correo Erro

Especificao de Requisitos
Falta Projeto

Soluo de faltas

Erro
Isolao de faltas

Erro Falta

Implementao

Classificao de faltas

Falta Teste [Jorgensen, 2002]

Caso de Teste
Comportamento a ser testado, normalmente definido em termos de estmulos de entrada e respostas esperadas Especifica o que se quer testar:
Pr-estado da implementao e seu ambiente Condies Entradas de teste Resultados esperados

Caso de Teste
Resultados esperados incluem:
Mensagens geradas pela implementao Excees Valores retornados Estado esperado da implementao e seu ambiente

Caso de Teste
ID do Caso de Teste
Propsito Pr-condies

Entradas Sadas esperadas


Ps-condies Histrico de execuo

Data Resultado Verso Executado por


[Jorgensen, 2002]

Teste X Comportamento
Teste fundamentalmente associado a comportamento A viso comportamental ortogonal em relao a viso estrutural Desenvolvedores possuem uma viso estrutural Os documentos bsicos so escritos por desenvolvedores Testadores geram os testes a partir dos documentos gerados

Teste X Comportamento
Especificao (esperado)
S P

Programa (observado)

Casos de Teste
[Jorgensen, 2002] T

Intercalando Teste e Desenvolvimento


Desenvolvimento Iterativo e Incremental:
Analise um pouco Projete um pouco Codifique um pouco Teste o que puder

Filosofia:
Teste o quanto antes Teste sempre Teste o suficiente

Intercalando Teste e Desenvolvimento


Anlise Planejamento e Especificao de Testes Projeto Refinamento e Projeto de Testes Implementao Implementao de Testes

Casos de teste podem ser identificados mais cedo durante a fase de requisitos Analistas e projetistas podem expressar e entender melhor requisitos e assegurar que so testveis

Intercalando Teste e Desenvolvimento


Anlise Planejamento e Especificao de Testes Projeto Refinamento e Projeto de Testes Implementao Implementao de Testes

Defeitos podem ser detectados mais cedo


So mais fceis e baratos de consertar

Casos de teste podem ser revisados


Desentendimentos podem levar a aceitar programas incorretos e rejeitar programas corretos

Testabilidade
Propriedade que indica a facilidade e preciso na avaliao dos resultados de um teste Um produto testvel se oferece suporte a:
Gerao de testes Implementao Verificao de seus resultados de forma precisa

Testabilidade
Requisitos constituem a fonte bsica para a gerao de testes de sistema e de aceitao Testadores devem garantir que os documentos gerados propiciam um nvel suficiente de entendimento para a gerao de testes e que sejam corretos, completos, consistentes e no-ambguos

Dimenses de Teste
Quem executa os testes?
Equipe dedicada e/ou desenvolvedores

Que partes sero testadas e que tipos de testes sero considerados?


Unidades, componentes, sistemas Todos ou seletivos? Funcionalidade, interface, desempenho, usabilidade, robustez, etc

Dimenses de Teste
Quando o teste ser executado?
Escalonamento dentro do processo de desenvolvimento

Como o teste ser executado?


Viso Funcional X Viso Estrutural

Qual a quantidade adequada de casos de teste?


Critrios de Aceitao e de Cobertura

Requisitos para um Bom Testador


Ter um bom entendimento do processo de desenvolvimento, de tecnologias empregadas e do produto sendo gerado, alm da habilidade de indicar possveis falhas e erros Ter uma atitude de questionar todos os aspectos relacionados com o software:
Ctico Quer prova de qualidade Objetivo No se baseia em suposies Cuidadoso No deixa passar detalhes importantes Sistemtico Buscas so reproduzveis

Vantagens de Teste
Se conduzidos de forma rigorosa:
Contribuem para aumentar a confiabilidade do software Evidenciar caractersticas de qualidade Verificar o software no ambiente operacional

Limitaes de Teste
Nmero de possveis combinaes muito grande ou infinito:
Espao de Estado/Entrada Seqncias de Execuo (branching e dynamic binding) Sensibilidade a Falta habilidade do cdigo esconder faltas Correo coincidental um cdigo correto pode produzir resultados corretos para algumas entradas

Limitaes de Teste
Prova de Correo = Teste Exaustivo Certos aspectos podem ser impossveis de implementar
Situaes em que o sistema no pode produzir uma resposta indecibilidade

Deve ter um ponto de referncia (especificao):

No pode verificar requisitos diretamente Testes com pouco valor podem ser produzidos se requisitos esto incorretos ou incompletos

No podemos garantir que uma aplicao esteja correta

Teste Funcional

Teste Funcional
Tambm conhecido como Teste Black-Box Parte do pressuposto que qualquer programa pode ser visto como uma funo que mapeia valores do domnio de entrada em valores do contradomnio O principal objetivo verificar se uma dada implementao est de acordo com a sua respectiva especificao A nica informao usada a especificao do software

Teste Funcional
Vantagens
Os casos de teste so independentes de implementao O desenvolvimento dos casos de teste podem ocorrer paralelamente com o desenvolvimento do software

Desvantagens
Dificuldade em quantificar a atividade de teste No se pode garantir que partes essenciais ou crticas do software foram executadas

Teste Funcional
As principais tcnicas de teste funcional:
Testes derivados de especificao Partio por Equivalncia Anlise de Valores Limites Teste Baseado em Estado-Transio

Teste Funcional
Testes Derivados de Especificao
Baseado na especificao, os testes so gerados de acordo com as vrias expresses contidas na mesma No se pode precisar que as expresses contidas na mesma refletiro as expresses contidas no cdigo, mas isso tende a ser uma prtica comum em vrios trechos

Testes Derivados de Especificao


Exemplo Funo para clculo de Raiz Quadrada
Input Nmero Real Output Nmero Real Para uma dada entrada maior ou igual a 0, a raiz positiva do nmero ser retornada. Para uma dada entrada menor que 0, a mensagem Erro Entrada invlida dever ser mostrada e o valor 0 dever ser retornado. A rotina PrintLine dever ser usada para mostrar a mensagem.

Testes Derivados de Especificao


Exemplo Funo para clculo de Raiz Quadrada
Caso 1: Entrada 4.0, Retorno 2.0 Testa a primeira expresso da especificao Caso 2: Entrada -10.0, Retorno 0.0, Sada Erro Entrada invlida atravs de PrintLine Testa a segunda e terceira expresso da especificao

Teste Funcional
Partio por Equivalncia
Significa identificar parties dos domnios das entradas e sadas onde os elementos, supostamente, fariam com que o sistema se comportasse da mesma forma Parties so identificadas no somente em parmetros de funes, mtodos, etc., mas tambm em dados acessados, tempo, seqncia de entradas e sadas bem como em estados

Partio por Equivalncia


Exemplo Funo para clculo de Raiz Quadrada

Partio por Equivalncia


Exemplo Funo para clculo de Raiz Quadrada
Caso 1: Entrada 4.0, Retorno 2.0 Testa ii e a Caso 2: Entrada -10.0, Retorno 0.0, Sada Erro Entrada invlida atravs de PrintLine Testa i e b

Teste Funcional
Anlise de Valores Limites
Esta tcnica se baseia na hiptese de que erros geralmente so encontrados nas regies limites das parties Ex.: uma funo que trabalha no domnio dos inteiros possui como um valor limite o 0 Neste ponto estamos interessados em procurar por erros

Anlise de Valores Limites


Anlise de Valores Limites foca nos limites do espao de entrada para identificar casos de teste Erros tendem a ocorrer prximo aos valores extremos das variveis de entrada Exemplo
Condies de loop Testar < quando deveria ser <=

Anlise de Valores Limites


Valores das variveis utilizados no teste:
O Valor mnimo O valor mnimo + 1 Um valor qualquer O valor mximo - 1 O valor mximo

Um teste mais robusto deve considerar:


O Valor mnimo - 1 O Valor mximo + 1

Anlise de Valores Limites


Exemplo Funo para clculo de Raiz Quadrada

(i)

(ii)

Anlise de Valores Limites


Exemplo O problema do Tringulo
H entrada trs inteiros a, b e c: a, b e c so os lados do tringulo e devem satisfazer as seguintes condies: 1 <= a <= 200 1 <= b <= 200 1 <= c <= 200 a<b+c b<a+c c<a+b

Anlise de Valores Limites


Exemplo O problema do Tringulo
A sada do programa o tipo do tringulo determinado pelos lados: Equilateral Isosceles Scalene NotATriangle Se alguma entrada falha em alguma das condies citadas, o programa deve mostrar uma mensagem de erro

Casos de Teste - Problema do Tringulo


Teste 1 2 3 4 5 6 7 8 9 10 a 100 100 100 100 100 100 100 100 100 100 b 100 100 100 100 100 1 2 100 199 200 c Sada Desejada 1 Isosceles 2 Isosceles 100 Equilateral 199 Isosceles 200 Not a Triangle 100 Isosceles 100 Isosceles 100 Equilateral 100 Isosceles 100 Not a Triangle

Casos de Teste - Problema do Tringulo

Teste 11

a 1

Sada Desejada Isosceles

100 100

12 13 14 15

2 100 199 200

100 100 100 100

100 100 100 100

Isosceles Equilateral Isosceles Not a Triangle

Dados em Teste Funcional


Como dito anteriormente os dados so um fator crucial em testes funcionais Com dados ruins, os testes podem no produzir os resultados esperados
Os dados podem no refletir o contexto real efetivamente

Bons dados permitem maior fidelidades dos testes


Testes precisam ser repetidos com o mesmo resultado ou variaes precisam ser diagnosticadas

Consideraes
Teste funcional se preocupa com a satisfao de contratos (especificaes)
Dependendo do tipo e do nvel de teste

Testes funcionais so executados nas fases de desenvolvimento, principalmente, e de deployment (aceitao) possvel automatizar a gerao tanto dos testes quanto dos casos de teste, desde que se tenha especificaes formalizadas O ferramental existente para automatizao de testes funcionais bastante abrangente

Introduo
JUnit um framework open source usado para o desenvolvimento e execuo de testes escritos em Java Desenvolvido por Eric Gamma e Kent Beck A maioria das IDEs incorporam o JUnit dentro de seu ambiente de desenvolvimento
JBuilder JDeveloper Netbeans Eclipse

Como usar o JUnit?


Depende da metodologia de testes que est sendo usada:
Cdigo existente Desenvolvimento guiado por testes (TDD)

Onde obter o JUnit?


www.junit.org

Como instalar?
Incluir o arquivo junit.jar no classpath

Testando cdigo com JUnit


Crie uma classe de teste para cada classe a ser testada
Public class MyClassTest { ...
}

Testando cdigo com JUnit


Para cada mtodo xxx(args) a ser testado defina um mtodo @Test public void xxx():
MyClass:
public String setObject(Object o) { ... }

MyClassTest: @Test public void setObject() {...}

O que colocar em um teste?


Cada mtodo criado na sua classe de teste pode ser um caso de teste
Escreva o cdigo para verificar o correto funcionamento da unidade de cdigo dentro deste mtodo

Use asseres do JUnit para verificar os resultados do teste e para causar falhas se o resultado no for o esperado

O que colocar em um teste?


Mtodo assertTrue assertFalse assertEquals assertNotNull assertNull
assertSame assertNotSame fail

Descrio Verifica se uma condio verdade Verifica se uma condio falsa Verifica se dois objetos so iguais Verifica se um objeto no null Verifica se um objeto null Verifica se dois objetos apontam para um mesmo objeto Verifica se dois objetos no apontam para um mesmo objeto Faz com que um teste falhe

Como executar um teste?


Para executar digite:
java -classpath .;dir/junit-4.4.jar org.junit.runner.JUnitCore [classes de teste]

Como funciona?
Para cada mtodo de teste public void xxx(), a ferramenta executa: O mtodo anotado com @Before O prprio mtodo xxx() O mtodo anotado com @After
Um teste pode terminar, falhar ou causar uma exceo

Anotaes
Anotao @BeforeClass @AfterClass @Before @After @Test @Ignore Descrio

Mtodos invocados antes da execuo da sute de teste Mtodos invocados aps a execuo da sute de teste Mtodos que so executados antes de todos os testes Mtodos que so executados depois de todos os testes Mtodos reais de teste Testes que ainda no foram implementados podem ser desabilitados temporariamente

Fixture
So os dados utilizados por vrios testes
public class CollectionNamesTest { protected Collection<String> stringCollection; @Before public void setUp() throws Exception { stringCollection = new ArrayList<String>(); stringCollection.add("Maria"); } @Test public void testLength(){ assertEquals(1, stringCollection.size()); } @Test public void testToString(){ assertEquals("[Maria]", stringCollection.toString()); } ...

Teste de situaes de falha


@Test(expected=ProductException.class) public void testInvalidCode() { Product product = new Product(-2); }

public void testInvalidCode() { try { Product product = new Product(-2); fail("Should have caused Exception!"); } catch (Exception e) { assertNotNull(e.getMessage()); }

TestSuite
Representa uma composio de testes Boa prtica: crie uma classe AllTests em cada pacote de testes
@RunWith(Suite.class) @SuiteClasses({CelsiusTemperatureTest.class, FahrenheitTemperatureTest.class}) public class AllTests { }

TestSuite
Boa prtica: crie uma classe para a execuo de todos os testes da sua aplicao
Inclua nesta classe as suites de teste de cada pacote
@RunWith(Suite.class) @SuiteClasses({tempconverter.app.AllTests.class, tempconverter.scales.AllTests.class}) public class AllTests { }

Teste Estrutural

Teste Estrutural
O principal objetivo deste tipo de teste testar detalhes procedimentais Os requisitos de teste so extrados de uma implementao em particular Os critrios desta tcnica utilizam grafo de fluxo de controle (grafo de programa) tambm conhecido como teste WhiteBox

Teste Estrutural
Vantagens
Testa partes do software que no esto na especificao

Desvantagens
No reconhece comportamentos que esto na especificao mas no foram implementados

Teste Estrutural
As principais tcnicas de teste estrutural:
Baseada em Fluxo de Controle Teste de Comandos Teste de Ramos Teste de Condio Teste de Condio Mltipla Baseada em Fluxo de Dados Baseada na Complexidade Critrio de MacCabe (Caminhos Base)

Teste Estrutural
Grafo de Fluxo de Controle
Consiste de um grafo direcionado Os ns representam blocos de comandos
Um bloco de comando um conjunto de expresses tal que se a primeira expresso for executada, todas as demais tambm o so

Os arcos representam precedncia ou transferncia de controle A representao de fluxo de controle permite uma anlise independente da funo

Teste Estrutural
Grafo de Programa
Representaes bsicas

Teste Estrutural
Exemplo 1: programa com um caminho
... { double x = 10.0; 1 double r = sqr(x); 2 return r; 3 }
1

Teste Estrutural
Exemplo 2: programa com dois caminhos
... { double x = readDouble(); 1 String msg = ; 2 if(x >= 0){ 3 msg = sqr(x) = + sqr(x); 4 } else { msg = Error; 5 } System.out.println(msg); 6 }
1

3 4
6

Teste Estrutural
Exemplo 3: programa com loop
... { double x = readDouble(); 1 String msg = ; 2 while(x != 0.0){ 3 if(x >= 0){ 4 msg = sqr(x) = + sqr(x); 5 } else { msg = Error; 6 } System.out.println(msg); 7 } System.out.println(FIM); 8 }
1
2

3
4

5
7 8

1. Program Triangle 5 6 7 8 4 2. Dim a,b,c AS Integer 3. Dim IsATriangle As Boolean #Step 1: Get Input 9 4. Output(Enter 3 integers) 5. Input(a,b,c) 10 11 6. Output(Side A is , a) 7. Output(Side B is , b) 12 8. Output(Side C is , c) #Step 2: Is A Triangle? 13 9. If (a<b+c) AND (b<a+c) AND (c<a+b) 10. Then IsATriangle = True 21 14 11. Else IsAtriangle = False 12.EndIf 15 16 #Step 3: Determine Triangle Type 13.If IsATriangle 18 17 14. Then If (a=b) AND (b=c) 15. Then Output(Equilateral) 19 16. Else If (a<>b) AND (a<>c) AND (b<>c) 17. Then Outpput(Scalene) 20 18. Else Output(Isosceles) 19. EndIf 20. EndIf 22 21. Else Output(Not a Triangle) 22.EndIf 23 23.End Triangle

Teste Estrutural
Teste de Comandos
O critrio que todos os comandos do programa sejam executados pelo menos uma vez Em outras palavras, deve-se percorrer todos os ns do grafo pelo menos uma vez

Teste Estrutural
Teste de Ramos
O critrio de teste exercitar todas as sadas verdadeiro e falso de todas as decises Em outras palavras, deve-se percorrer todos os arcos do grafo pelo menos uma vez Cobre o Teste de Comandos

Teste Estrutural
Teste de Condio
O critrio de teste que todas as condies de uma deciso requeiram os valores verdadeiro e falso pelo menos uma vez (se possvel)

Teste Estrutural
Teste de Fluxo de Dados
Estabelece requisitos de teste que seguem o modelo de dados usados dentro do programa Requerem que sejam testadas as interaes que envolvam definies de variveis e subseqentes referncias a estas definies Torna os casos de teste mais rigorosos

Teste Estrutural
Teste de Fluxo de Dados
Cada ocorrncia de uma varivel dentro de um programa pode ser classificada como sendo uma das seguintes: def: definio c-use: uso-computacional p-use: uso-predicativo

Teste Estrutural
Teste de Fluxo de Dados
Definio: quando uma varivel definida atravs de uma leitura ou quando ela aparece do lado esquerdo de um comando de atribuio, isto , dado um valor varivel Uso-computacional: quando a varivel usada na avaliao de uma expresso ou em um comando de sada Uso-predicativo: quando a varivel ocorre em um predicado e portanto, afeta o fluxo de controle do programa

Teste Estrutural
Critrios do Teste de Fluxo de Dados:
Todas-Definies: requer que cada definio de varivel seja exercitada pelo menos um vez, seja por c-uso ou por p-uso Todos-Usos: requer que todas as associaes entre uma definio de varivel e seus subseqentes usos (c-usos e p-usos) sejam exercitadas pelos casos de teste, atravs de pelo menos um caminho livre de definio, ou seja, um caminho onde a varivel no redefinida

Consideraes
uma tcnica mais propensa a automao Um problema a impossibilidade, em geral, de determinar se um caminho executvel e quais valores para faz-lo Problemas triviais podem no ser detectados por critrios de fluxo de controle Teste Estruturais devem ser usados com Testes Funcionais

Consideraes
Analisadores de cobertura podem ser usados para unir as duas abordagens de teste Essas ferramentas geram mtricas de cobertura dos casos de teste Quando deveramos parar de testar?
Quando o tempo esgotar-se Quando os testes no encontram mais faltas Quando no se consegue identificar mais casos de teste Quando a mtrica de cobertura escolhida for alcanada

Introduo
EMMA uma ferramenta open source usada para medir e gerar relatrios de cobertura de cdigo Java Verifica quais partes da aplicao esto sendo exercitadas pelo seu conjunto de testes Desenvolvida por Vlad Roubtsov

Caractersticas
EMMA instrumenta classes de maneira offline e on the fly Tipos de cobertura suportados:
Classe Mtodo Linha Bloco

EMMA detecta se uma linha de cdigo foi coberta parcialmente

Caractersticas
Tipos de relatrio:
Texto simples HTML XML

EMMA no precisa acessar o cdigo fonte A instrumentao pode ser realizada em um .class individual ou em um .jar inteiro Pode ser integrada ao ANT

Como usar EMMA?


H duas formas de funcionamento:
Instrumentao on the fly: comando emmarun Instrumentao offline: comando emma

Onde obter a ferramenta EMMA?


http://emma.sourceforge.net

Como instalar?
Incluir o arquivo emma.jar no classpath

Usando EMMA on the fly


Assumindo que estamos no diretrio examples da distribuio do EMMA, vamos comear compilando o cdigo:
>mkdir out >javac -d out src/*.java src/search/*.java

Agora podemos executar o exemplo:


>java -cp out Main main(): running doSearch()... main(): done

Usando EMMA on the fly


Para executar o mesmo programa com a coleta de informaes de cobertura de cdigo, basta acrescentar emmarun depois do comando java:
>java emmarun -cp out Main main(): running doSearch()... main(): done EMMA: writing [txt] report to [...coverage.txt] ...

Usando EMMA on the fly


[EMMA report, generated Sun Jan 11 -----------------------------------------------OVERALL COVERAGE SUMMARY: [method, %] [block, %] [name] 100% (7/7) 95% (116/122) all classes OVERALL STATS SUMMARY:

total classes: total methods:

3 7

COVERAGE BREAKDOWN BY PACKAGE: [method, %] [block, %] [name] 100% (4/4) 91% (64/70) search 100% (3/3) 100% (52/52) default package --------------------------------------------------

Usando EMMA on the fly


Quando h a dependncia de bibliotecas de terceiros e no queremos inclu-las na anlise de cobertura temos duas opes:
Colocar a biblioteca no classpath da JVM:
>java -cp somelib.jar emmarun -cp out Main

Usar filtros
>java emmarun -cp out;somelib.jar -ix +Main,+search.*
Main

Como funciona o EMMA on the fly?

Como funciona o EMMA on the fly?


EMMA utiliza um classloader para instrumentar as classes Java no momento em que elas so carregadas pela JVM O classpath no completamente verificado antes do incio da execuo da aplicao A anlise realizada somente nas classes que foram carregadas pela aplicao O comando f permite analisar a cobertura de todas as classes do classpath

Usando EMMA offline


Em alguns casos no conseguimos usar o EMMA on the fly
Quando queremos excluir classes de teste que esto no mesmo pacote da aplicao e seus nomes no esto padronizados Executar um container J2EE atravs de um classloader de instrumentao praticamente impossvel No desenvolvimento em larga escala h a necessidade de se coletar dados de mltiplas execues e processos

Usando EMMA offline


As fases de instrumentao, execuo e gerao de relatrios so separadas Usamos o EMMA offline atravs do comando emma
Assumindo que estamos no diretrio examples da distribuio do EMMA, o primeiro passo compilar o cdigo:
>mkdir out >javac -d out src/*.java src/search/*.java

Usando EMMA offline


Agora vamos instrumentar as classes geradas pelo javac criando um diretrio separado para o cdigo instrumentado:
>mkdir outinstr >java emma instr -d outinstr -ip out EMMA: EMMA: EMMA: EMMA: processing instrumentation path ... instrumentation path processed in 116 ms [3 classes instrumented] metadata merged into [...coverage.em]

Usando EMMA offline


Neste momento, a aplicao instrumentada pode ser executada:
>java -cp outinstr;out Main EMMA: collecting runtime coverage data ... main(): running doSearch()... main(): done EMMA: runtime coverage data merged into [...coverage.ec] {in 32 ms}

Usando EMMA offline


Finalmente combinamos as informaes geradas para a produo do relatrio:
>java emma report -r txt,html -in coverage.em -in coverage.ec
EMMA: 2 file(s) read and merged in 43 ms EMMA: writing [txt] report to [...coverage.txt] EMMA: writing [html] report to [...coverage/index.html]

Usando EMMA offline


Podemos utilizar inmeras fases de instrumentaes e execues Com isso, teremos uma quantidade grande de arquivos com informaes das instrumentaes e execues O comando report coloca tudo na memria para, s depois, gerar o relatrio com as mtricas de cobertura

Usando EMMA offline


Com o comando merge podemos juntar todas as informaes geradas e salvar em um s arquivo no disco:
>java emma merge -in coverage.em -in coverage.ec -out coverage.es
EMMA: processing input files ... EMMA: 2 file(s) read and merged in 42 ms EMMA: merged/compacted data written to [...coverage.es] {in 58 ms}

Usando EMMA com JUnit


Para o exemplo do problema do tringulo usamos o seguinte script:
java cp lib\emma.jar emmarun -cp .;lib\junit.jar;build -report html -sp src -filter org.junit* -filter -junit* -filter -*Test -filter -*Tests org.junit.runner.JUnitCore AllTests

Das könnte Ihnen auch gefallen