• Nenhum resultado encontrado

Novas Ferramentas de Teste na plataforma Java Jorge Diz Workshop de testes para aplicativos web Slide 1

N/A
N/A
Protected

Academic year: 2021

Share "Novas Ferramentas de Teste na plataforma Java Jorge Diz Workshop de testes para aplicativos web Slide 1"

Copied!
40
0
0

Texto

(1)

Novas Ferramentas de Teste na

plataforma Java

Just Java 2009

(2)

Quem sou eu ?

Jorge Alberto Diz

•Mestre em Eng. Elétrica (UNICAMP ´95)‏

•Bach. em Ciência da Computação (UNICAMP ´89)‏ •Programando desde ´84, em Java desde ´99

•Automação de testes desde ´94

•Ensinando desde ´01, na Globalcode desde ´06 •Consultoria em testes e métodos ágeis

(3)

Apresentação da agenda

•Novos modelos de testes: pirâmides e quadrantes •Apoio ao desenvolvimento: unitários/dublês

•Apoio à comunicação: prosa/planilhas/convergência Teste de interface usuário

Testes difíceis •Futuro

(4)

Quadrantes de Marick

Q2: GUI, regras de negócio Q3: Exploratório, usabilidade, aceitação funcional Q1: Unitários, componentes Q4: Desempenho / segurança Testes voltados ao Negócio S sup orte ao t ime crít ica S crít ica ao pro du to

(5)

Pirâmide de testes: frágil

Interface Usuário

Regras de

Negócio

Unidades

(6)

Pirâmide de testes: ágil (Mike Cohn)

Interface

Usuário

Regras de

Negócio

Unidades

(7)

A pirâmide de testes (Huggins*)‏

(*) Jason Huggins, autor do Selenium

(8)
(9)

Consensos (poucos)‏

•Não é possível testar tudo

•Quem testa deve ter atitude crítica •Testes têm custo

•Testes informam sobre riscos

•Áreas concentram defeitos (bug clusters):

se uma técnica de teste encontra problemas, outra técnica encontrará problemas na mesma área.

(10)

Testes Unitários

(Q1) Voltados à tecnologia, apoiam a equipe O problema:

isolamento das partes sendo testadas A solução:

projetar para o teste (testabilidade) projetar através dos testes (TDD) dublés de teste

(11)

(teste unitário centrado no desenvolvedor)

•Resultado independente da ordem de execução •Independência entre métodos de teste

•A suite executa em alguns segundos

•Todo recurso está sob controle do programador •Não é testada a integração

•Testes na mesma linguagem que o código sob teste •Resultado não sujeito a interpretação

(Guru checks output)‏

(12)

Testar estado X testar interação

Modalidade Estado Interação (comporta mento)‏ comportamento Ferramentas setup play verify setup (record)‏ play (verify)‏ Ciclo da lógica de teste Verifica o estado da classe-alvo depois de exercitar uma funcionalidade Verifica se as interações da classe-alvo com seus colaboradores seguem um roteiro JUnit JUnit + dublês de teste

(13)

Dublês de teste (s. Meszaros)‏

Papel Dummy (laranja)‏ Fake (brinquedo)‏ Stub (sec. eletrônica)‏ Mock (impostor)‏

Substitui O que ele faz

Define previamente o comportamento esperado das interações da

classe-alvo com o colaborador Está ai apenas para

cumprir tabela

Retorna uma resposta pré-definida

Objeto

Serviço, Objeto Método

Substitui um serviço por uma implementação mais

apropriada para o teste. Registra comportamento para verificação posterior

Método, Objeto Spy (grampo)‏ Variantes Responder, Saboteur Objeto Nice, Strict, Partial

(14)

Dublês de teste

Colaboradores: objetos/classes/serviços dos quais o

código sendo testado depende.

Dublês de Teste

== Colaboradores substitutos para efeito de teste •Verificam o comportamento da classe-alvo: teste baseado em interação (mocks, spies)‏

•Amenizam efeitos da dependência no teste (fakes,

stubs, dummies)

•Injetam falhas a serem detectadas (saboteurs)‏

(15)

Dublês de teste

Ferramentas genéricas: • Jmock • EasyMock • Mockito • PowerMock • JMockit • Específicas de APIs • Mockrunner • EJBMock • SpringUnit • Fakes

• Web containers leves, BDs / ORMs em memória,

(16)

Teste de interação: Spy X Mock

Tipo de dublê Spy (grampo)‏ Mock (impostor)‏ Verificação do comportamento Vantagens Depois do teste Antes do teste Especificação do comportamento esperado Depois do teste Durante o teste Simplicidade de especificação / implementação

Falhas são detectadas antes (fail-fast)‏ Pilha de execução é

(17)

Teste Contínuo

• Testes são executados automaticamente toda vez que o

fonte é alterado

• Infinitest

• JUnitMax (comercial) • Autotest (JRuby)

(18)

Testes de Interface Usuário

• Ferramentas: • Selenium • WebDriver  Selenium 2 • Canoo WebTest Interaction Design: CubicTest

(19)

Família Selenium

****

Selenium Core JavaScript

Browser: IE, Firefox, Safari, ... DOM (X)HTML Selenium RC Client API (Ruby)‏ Selenium RC Server Java Selenium IDE (só Firefox)‏ StoryTest IQ Eclipse IDE CubicTest plugin Selenium RC Client API (Java)‏ Selenium On Rails CubicTest

(20)
(21)
(22)
(23)
(24)

Teste de regras de negócio

Não passa pela interface usuário Mais rápido

Entendível por especialistas no domínio Ferramenta FitNesse (planilha)

> ferramenta Wiki que pode ser utilizada por analistas de teste e

de negócios

> especificação de requisitos em planilhas

> codificação de fixtures pode ser feita por programadores

> Base para outros tipos de teste (GUI, unitários, banco de dados)

Outras Ferramentas:

(25)
(26)
(27)
(28)

FitNesse – fixture

package br.com.globalcode.aceitacao;

import fit.ColumnFixture;

import br.com.globalcode.impostos.RendaNaFonte;

public class ImpostoDeRendaNaFonteFixture extends ColumnFixture{

public double salarioBruto;

public int dependentes;

public double impostoRetido() {

return RendaNaFonte.desconto(salarioBruto); }

public double salarioLiquido() {

return RendaNaFonte.liquido(salarioBruto); }

(29)

FitNesse – classe de negócio

package br.com.globalcode.impostos;

public class RendaNaFonte {

public static double desconto(double bruto) {

return bruto * 0.2; }

public static double liquido(double bruto) {

return bruto * 0.8; }

(30)
(31)

DSLs em planilhas FIT

DSL‏=‏“domain-specific‏language”

Linguagens específicas para um determinado

domínio de aplicação. Ex: teste de GUI, seguro

de automóvel

Criadas caso-a-caso, aproveitam o motor do FIT

Podem ser implementadas utilizando fixtures

(32)

Behavior Driven Development

Especificação das funcionalidades em prosa.

Sendo um

 <role> 

Eu Quero:

 <funcionalidade> 

Para que:

 <benefício>

(33)

Behavior Driven Development

Detalhamento da funcionalidade:

Dado que:

 <precondições> 

Quando:

 <ação> 

Então:

 <verificação>

(34)

Behavior Driven Development

Ferramentas:

 JBehave  EasyB (Groovy)  Cucumber + JRuby  Fitnesse DoFixture

(35)

Teste de componentes JavaEE

Fora do container utilizando objetos que

simulam os componentes gerenciados (mock

objects)‏

 Não é necessário executar o servidor de aplicações  Não é testada a interação do componente com o

servidor no qual ele será instalado

Dentro do container

 são necessárias ferramentas específicas  configuração mais complexa

 os ambientes são testados num ambiente mais próximo

(36)

Cactus - arquitetura

setUp testXYZ tearDown beginXYZ setUp* testXYZ* tearDown* endXYZ (*) no servidor

A classe de caso de teste é instanciada duas vezes pelo test runner Os métodos setUp, testX e tearDown executam dentro do container

Container JEE

(Ex: Jetty Web Container)‏

MeuTestCase <<Servlet>> Proxy MeuTestCase 1b <<new> > 1:beginX 5: endX 2: setUp()‏ 3: testX()‏ 4: tearDown()‏

(37)

Testes difíceis

Banco de dados

 Bungee-jump

 Pequenas massas de dados com DB Fit

 Especificar dados esperados interceptando chamadas

ao banco com Mockrunner JDBC

 Geração de massa com Benerator

Web Services

(38)

Novas Ferramentas

Build, gestão de dependências

 Maven, Ant+Ivy

Integração Contínua

 Hudson, Continuum, Twist

Dashboard

 Sonar, XRadar 

Sensores + Mineração

 Hackystat 

Diagnóstico

 TestabilityExplorer, Yslow!

(39)

Novas ferramentas

Análise estática de código

 PMD, FindBugs, Checkstyle

Cobertura de testes

 Cobertura, JMockit Coverage

Mutantes

 Jester

Geração de massa de dados:

 Benerator

Desempenho / Carga

(40)

Futuro ?

• > comunicação, feedback, aviso rápido • > nuvem como desafio e oportunidade

• serviços especializados para teste de configuração/volume/ desempenho

• profissional de testes como embaixador da qualidade • > uso de linguagens dinâmicas

• ciclos de implantação + curtos / contínuos (Agile operations) • framework XYZ ==> XYZ test. Frameworks sem um ambiente

Referências

Documentos relacionados

O planejamento de um projeto de contratação envolve atividades de análise e priorização, exclusivamente para identificação dos esforços e dos recursos necessários para

servidores, software, equipamento de rede, etc, clientes da IaaS essencialmente alugam estes recursos como um serviço terceirizado completo...

Define critérios para obtenção da Suficiência em Língua Estrangeira no Mestrado Profissional em Rede Nacional em Gestão e Regulação de Recursos Hídricos – Prof-Água,

Do imaginário ao real : a criação e a produção do livro infantil na visão do ilustrador / Pedro Shalders Porto ; orientador: Luiz Antonio Luzio Coelho.. Processo

Alguns meninos pousavam uma pontinha da sua nuvem num dos muitos bicos da montanha.. Aproveitavam o verde da relva e faziam um

Alguns danos provocaram perdas significativas de rigidez à tração, de até 25%, comparando-se valores obtidos em ensaios de tração confinada de geotêxteis danificados com

 Buscar nos manuais pedagógicos, orientações para tentar solucionar o problema de pesquisa do presente trabalho. Ou seja, elucidar que propostas de ensino em

While Africa’s combined GDP has increased by almost 40 percent over the past decade, average progress has been almost null for Africa’s citizens in Sustainable Economic