No workshop de XP que participei descobri essa maravilhosa Ferramenta open source, o Selenium.
http://www.openqa.org/selenium/
Selenium é uma ferramenta de testes para aplicações WEB, que roda testes diretamente do seu Browser, perfeito !! Era o que precisavamos :)
E digamos que ela é independente de plataforma e plataformas, roda no IE, Mozilla. Em ambiente Linux, Macintosh e Windows.
É a melhor forma de automatizar os testes de aceitação, assim os testes de regressão vai ficar moleza com os testes funcionais das iterações passadas todas automatizadas.
Também possui a vantagem de gerar código para teste em várias linguagens como Ruby e claro JAVA.
Como funciona ?
O Selinium é constituído por duas ferramentas:
* Selenium IDE
* Selenium RC
O Selenium IDE é um extensão(plugin) do browser mozilla
download: http://www.openqa.org/selenium-ide/download.action
Lá você consegue grava os passos para realização de um caso de teste.
No próprio plugin você consegui reproduzir a navegação, clicks de botões, preenchimento de campos e etc.
Dai após seu caso de teste estar bem reproduzido você pode gerar código para a linguagem Java.
é agora que entra em acão o Selenium RC
O Selenium Remote Control é um servidor que consegui controlar um browser como se fosse um controle remoto :) , ele comunica-se com o browser utilizando AJAX (no lugar do infra-vermelho) .
A classe Java gerada pelo SeleniumIDE solicita comando como click de botão, e o servidor atende o chamado executando o comando diretamente no browser.
Logo você possui nas mãos uma ferramenta capaz de automatizar seus testes funcionais, de sistemas, aceitação ou regressão, como vc queira chamar :)
Vale a pena dar uma parada na implementação daquele Caso de uso (estória no XP) e conferia a ferramenta
http://www.openqa.org/selenium/
Segue um link de um tutorial fantástico sobre a ferramenta
http://blog.caelum.com.br/2007/02/28/testes-de-aceitacao-com-o-selenium/
Abraços,
Friday, May 11, 2007
Sunday, May 06, 2007
Desenvolvimento Ágil
Na última sexta e no sábado (04 e 05 maio) participei de um workshop sobre desenvolvimento Ágil, mais especificamente conheci e me convenci sobre os benefícios do extreme Programming (XP). O workshop foi ministrado (muito bem ministrado!!) pelo Vinícius Manhães ( O cara ), o objetivo do curso era apresentar os valores, princípios e práticas que compõem o Extreme Programming, mas o Vinícius conseguiu mais que isso, praticamente ele abriu nossa mente em relação a como desenvolvemos software e convenceu não somente eu mas 100% da turma que participou do workshop. Fazia muito tempo que não participava de um curso tão proveitoso. Antes de participar do workshop já havia lido alguns livros/artigos sobre XP, achava legal mas não acreditava que aquilo ali poderia funcionar na prática. O que achei fantástico foi que o Vinicius foi bombardeado de perguntas minuciosas complicadas de sair, mas de forma mágica ele não só respondia como nos evangelizava sobre o XP. Foi isso mesmo que acorreu uma evangelização :)
Agora que aprendemos na sala de aula, chega a hora de colocar em prática todos os ensinamentos, dicas e truques do XP !!
Espero postar brevemente nosso sucesso com a adoção do XP !!
Abraços,
Agora que aprendemos na sala de aula, chega a hora de colocar em prática todos os ensinamentos, dicas e truques do XP !!
Espero postar brevemente nosso sucesso com a adoção do XP !!
Abraços,
Friday, April 27, 2007
DBUnit – Integrando Junit e Banco de dados
Pessoal, o texto abaixo eu retirei de uma apresentação que realizei sobre o DBUnit, esta com cara de texto de apresentação !! :)
Sobre DBunit:
DbUnit é uma extensão do Junit
Destinado a projetos que utilizam banco de dados
Deixa sua Base em um estado conhecido entre a execução dos testes unitários
È uma solução para os problema que podem ocorrer quando casos de teste corrompem a Base, causando falhas nos testes subsequentes
Tem habilidade de exportar e importar os dados da Base em XML
The Problem is ...
Você tem uma Banco de dados SQL
Algumas stored procedures, ou não : )
Camada de código situada entre sua aplicação e o Banco de dados.
The Question is ...
Como ter certeza que seus testes unitários estão lendo e escrevendo dados corretamente.
Alguns pontos
Um bom conjunto de teste é aquele que é auto-suficiente e cria todo os dados necessários ( o que fazemos hoje ! )
Os testes podem ser simplificados se você conhecer o estado da Base antes de executar os testes
Deletar e Inserir dados em todos os testes gasta muito tempo. Concordam ???
Provável solução
Preciso mais de um Banco de dados:
Banco de dados do desenvolvedor
Banco de dados dos testes unitários
Banco de dados dos testes de integração
Provável problema
Com múltiplos bancos, você precisa garantir o sincronismo da estrutura
Caso altere uma tabela, terá que replicar a alteração nas outras bases
Solução DBunit
Solução elegante para controlar a dependência entre o banco e sua aplicação
Permite desenvolvedores gerenciar o estado do banco sobre os testes
O banco pode ser populado com dados antes dos testes unitário serem executados
O banco pode retorna para o estado pre – teste unitário
Instalação
Download do framework no site
http://dbunit.sourceforge.net
Importa o .jar para sua IDE
DataSet
Os testes unitário precisam de dados no banco para trabalharem
Você precisa de um dataset (Coleção de dados)
Criar manualmente um xml dataset
Exportar dados existentes do Banco
DatabaseTestCase
Criar um classe que extenda DatabaseTestCase
Criar metodos:
getConnection()
getDataSet()
setUp() and tearDown()
Momento para garantir um estado no banco
Pré teste
Pós teste
protected void setUp() throws Exception {
DatabaseOperation.REFRESH.execute(getConnection(), getDataSet());
}
protected void tearDown() throws Exception {
DatabaseOperation.REFRESH.execute(getConnection(), getDataSet());
}
Database Operation
Conclusão
DbUnti possui habilidade para gerência o estado do banco sobre o ciclo de vida do teste unitário
Permite abstrair o estado do banco, assim tornando rápido e fácil a criação de testes unitários
Sobre DBunit:
DbUnit é uma extensão do Junit
Destinado a projetos que utilizam banco de dados
Deixa sua Base em um estado conhecido entre a execução dos testes unitários
È uma solução para os problema que podem ocorrer quando casos de teste corrompem a Base, causando falhas nos testes subsequentes
Tem habilidade de exportar e importar os dados da Base em XML
The Problem is ...
Você tem uma Banco de dados SQL
Algumas stored procedures, ou não : )
Camada de código situada entre sua aplicação e o Banco de dados.
The Question is ...
Como ter certeza que seus testes unitários estão lendo e escrevendo dados corretamente.
Alguns pontos
Um bom conjunto de teste é aquele que é auto-suficiente e cria todo os dados necessários ( o que fazemos hoje ! )
Os testes podem ser simplificados se você conhecer o estado da Base antes de executar os testes
Deletar e Inserir dados em todos os testes gasta muito tempo. Concordam ???
Provável solução
Preciso mais de um Banco de dados:
Banco de dados do desenvolvedor
Banco de dados dos testes unitários
Banco de dados dos testes de integração
Provável problema
Com múltiplos bancos, você precisa garantir o sincronismo da estrutura
Caso altere uma tabela, terá que replicar a alteração nas outras bases
Solução DBunit
Solução elegante para controlar a dependência entre o banco e sua aplicação
Permite desenvolvedores gerenciar o estado do banco sobre os testes
O banco pode ser populado com dados antes dos testes unitário serem executados
O banco pode retorna para o estado pre – teste unitário
Instalação
Download do framework no site
http://dbunit.sourceforge.net
Importa o .jar para sua IDE
DataSet
Os testes unitário precisam de dados no banco para trabalharem
Você precisa de um dataset (Coleção de dados)
Criar manualmente um xml dataset
Exportar dados existentes do Banco
DatabaseTestCase
Criar um classe que extenda DatabaseTestCase
Criar metodos:
getConnection()
getDataSet()
setUp() and tearDown()
Momento para garantir um estado no banco
Pré teste
Pós teste
protected void setUp() throws Exception {
DatabaseOperation.REFRESH.execute(getConnection(), getDataSet());
}
protected void tearDown() throws Exception {
DatabaseOperation.REFRESH.execute(getConnection(), getDataSet());
}
Database Operation
Operação | Decrição |
DatabaseOperation.UPDATE | Atualiza o banco com o conteúdo do dataset. Assume que os dados a serem atualizados existam no banco, caso contrário ocorrerá erro. |
DatabaseOperation.INSERT | Insere no banco o conteúdo do dataset. Assume que os dados a serem insereridos não existam no banco, caso contrário ocorrerá erro. |
DatabaseOperation.DELETE | Deleta do banco somente o conteúdo do dataset. |
DatabaseOperation.DELETE_ALL | Deleta do banco todo conteúdo |
DatabaseOperation.TRUNCATE | Truncate tables present in the specified dataset. If the dataset does not contains a particular table, but that table exists in the database, the database table is not affected. Table are truncated in reverse sequence. |
DatabaseOperation.REFRESH | Atualiza ou insere no banco o conteúdo do dataset. Caso o dado foi modificado ele faz um update, caso o dado não exista ele faz um insert. |
DatabaseOperation.CLEAN_INSERT | Faz um DELETE_ALL e depois um INSERT. |
DatabaseOperation.NONE | Não faz absolutamente nada |
Conclusão
DbUnti possui habilidade para gerência o estado do banco sobre o ciclo de vida do teste unitário
Permite abstrair o estado do banco, assim tornando rápido e fácil a criação de testes unitários
Tuesday, April 24, 2007
Utilizando WebServices para buscar cotação de moeda - Currency Exchange
Imaginem uma aplicação para compor o custo de um veículo. Todos sabem que dentro de um veículo existem centenas de peças e essas peças podem ser compradas em diferentes países. Por exemplo, podemos comprar o motor 2.0 do veículo na Inglaterra, os pneus no Brasil, os vidros no Japão e etc. No final o preço do carro custa 2.000 libras + 500 reais + 300 ienes + etc ...
Como todos sabemos o ($) dollar americano é uma moeda de uso internacional, válida em qualquer lugar do mundo.
Na aplicação preciso converter todos os preços para a moeda dollar($), logo para composição do preço do meu carro terei que pesquisar a cotação atual das moeda em relação ao dollar e inserir manualmente cada valor, assim convergendo o preço para a moeda americana.
Para facilitar a vida do usuário, posso sugerir na aplicação o valor da cotação da moeda feita em tempo real. Como ? Utilizando um webservices.
Pesquisando na internet descobri um serviço que nos fornece esse serviço de câmbio, a descrição do serviço segue abaixo:
http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl?
Para que utiliza Java, mais especificamente a IDE eclipse, segue um simples tutorial
OBS: Você deve possuir no eclipse o plugin WTP que fornece suporte a web services.
http://www.eclipse.org/webtools/
1) Crie um projeto simples no Eclipse
2) Crie um Web Service Client
File --> New --> Others --> Web Services --> Web Service Client
3)Adicione o endereço do wsdl em Service Definition: http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl?
Clica em Ok.
Verifique se o eclipse gerou o pacote net.xmethods.www.sd.CurrencyExchangeService_wsdl
Com as classes:
CurrencyExchangeBindingStub
CurrencyExchangePortType
CurrencyExchangePortTypeProxy
CurrencyExchangeService
CurrencyExchangeServiceLocator
Como o eclipse gerou o stub, proxy, locator e interfaces de serviço, ficou bem fácil.
4) Crie um classe simples com um método main
public static void main(String[] args) throws ServiceException, RemoteException{
// instancia o service locator
CurrencyExchangeServiceLocator currencyExchangeServiceLocator = new CurrencyExchangeServiceLocator();
// pega a interface de servico
CurrencyExchangePortType portType = currencyExchangeServiceLocator.getCurrencyExchangePort();
// chama o serviço de conversão
System.out.println("Hoje o 1 dollar custa " + portType.getRate("united states", "brazil") + " reais");
System.out.println("Hoje o 1 euro custa " + portType.getRate("Euro", "brazil") + " reais");
}
Saída no console:
Hoje o 1 dollar custa 2.0401 reais
Hoje o 1 euro custa 2.778 reais
Com uma solução bem simples você consegue criar um cliente para um serviço que certamente irá agregar algum valor ao software.
Segue a lista de países que vc poderá utilizar a conversão das moedas:
Como todos sabemos o ($) dollar americano é uma moeda de uso internacional, válida em qualquer lugar do mundo.
Na aplicação preciso converter todos os preços para a moeda dollar($), logo para composição do preço do meu carro terei que pesquisar a cotação atual das moeda em relação ao dollar e inserir manualmente cada valor, assim convergendo o preço para a moeda americana.
Para facilitar a vida do usuário, posso sugerir na aplicação o valor da cotação da moeda feita em tempo real. Como ? Utilizando um webservices.
Pesquisando na internet descobri um serviço que nos fornece esse serviço de câmbio, a descrição do serviço segue abaixo:
http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl?
Para que utiliza Java, mais especificamente a IDE eclipse, segue um simples tutorial
OBS: Você deve possuir no eclipse o plugin WTP que fornece suporte a web services.
http://www.eclipse.org/webtools/
1) Crie um projeto simples no Eclipse
2) Crie um Web Service Client
File --> New --> Others --> Web Services --> Web Service Client
3)Adicione o endereço do wsdl em Service Definition: http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl?
Clica em Ok.
Verifique se o eclipse gerou o pacote net.xmethods.www.sd.CurrencyExchangeService_wsdl
Com as classes:
CurrencyExchangeBindingStub
CurrencyExchangePortType
CurrencyExchangePortTypeProxy
CurrencyExchangeService
CurrencyExchangeServiceLocator
Como o eclipse gerou o stub, proxy, locator e interfaces de serviço, ficou bem fácil.
4) Crie um classe simples com um método main
public static void main(String[] args) throws ServiceException, RemoteException{
// instancia o service locator
CurrencyExchangeServiceLocator currencyExchangeServiceLocator = new CurrencyExchangeServiceLocator();
// pega a interface de servico
CurrencyExchangePortType portType = currencyExchangeServiceLocator.getCurrencyExchangePort();
// chama o serviço de conversão
System.out.println("Hoje o 1 dollar custa " + portType.getRate("united states", "brazil") + " reais");
System.out.println("Hoje o 1 euro custa " + portType.getRate("Euro", "brazil") + " reais");
}
Saída no console:
Hoje o 1 dollar custa 2.0401 reais
Hoje o 1 euro custa 2.778 reais
Com uma solução bem simples você consegue criar um cliente para um serviço que certamente irá agregar algum valor ao software.
Segue a lista de países que vc poderá utilizar a conversão das moedas:
afghanistan albania algeria andorra andorra angola argentina aruba australia austria
bahrain bangladesh barbados belgium belize bermuda bhutan bolivian botswana brazil
england united kingdom uk great britain brunei burundi cambodia canada cape verde
cayman islands chile china colombia comoros costa rica croatia cuba cyprus czech republic
denmark dijibouti dominican republic netherlands east caribbean ecuador egypt el salvador
estonia ethiopia euro falkland islands fiji finland france gambia germany ghana
gibraltar greece guatemala guinea guyana haiti honduras hong kong hungary iceland
india indonesia iraq ireland israel italy jamaica japan jordan kazakhstan kenya
korea kuwait laos latvia lebanon lesotho liberia libya lithuania luxembourg
macau macedonia malaga malawi kwacha malaysia maldives malta mauritania mauritius
mexico moldova mongolia morocco mozambique myanmar namibia nepal new Zealand nicaragua
nigeria north korea norway oman pakistan panama papua new guinea paraguay peru
philippines poland portugal qatar romania russia samoa sao tome saudi arabia seychelles
sierra leone singapore slovakia slovenia solomon islands somalia south africa spain
sri lanka st helena sudan suriname swaziland sweden switzerland syria taiwan tanzania
thailand tonga trinidad tunisia turkey united states us usa uae united arib emirates uganda
ukraine uzbekistan vanuatu venezuela vietnam yemen yugoslavua zambia zimbabwe
Monday, April 23, 2007
ECHO2: A missão !
Fui incubido de analisar a curva de apreendizagem para o Framework Echo2, no pouco tempo que realizei a prospecção encontrei coisas interessante no framework.
Deixa eu falar um pouco sobre esse framework ..
Bem o ECHO2 é uma evoluçaõ do ECHO framework, ele voltado para WEB e baseado no conceito RCP (Rich Client Application) com a utilização massiva de Ajax. Com ECHO2, conhecimento de HTML, css, javascript pode ser deixado de lado, pois você estará programando interfaces muito parecido com aplicações Desktop, utilizando Swing. Então é JAVA puro :) que legal !!!
É nesse ponto que achei interessante o framework, quando o cidadão começa a apreender Java para Web, ele depara-se com um monte de acessórios, como CSS, Javascript, Html, blá blá blá ...
Então o que ele menos programa é em Java, já com o ECHO2 vc precisa saber somente de Java.
Segue um link com um exemplo de um WebMail feito com ECHO2
http://demo.nextapp.com/Email/app
Como estou na fase inicial da prospecção, então brevemente estarei postando detalhes mais tecnicos sobre o framework, aqui foi somente para despertar o interesse sobre o assunto.
Deixa eu falar um pouco sobre esse framework ..
Bem o ECHO2 é uma evoluçaõ do ECHO framework, ele voltado para WEB e baseado no conceito RCP (Rich Client Application) com a utilização massiva de Ajax. Com ECHO2, conhecimento de HTML, css, javascript pode ser deixado de lado, pois você estará programando interfaces muito parecido com aplicações Desktop, utilizando Swing. Então é JAVA puro :) que legal !!!
É nesse ponto que achei interessante o framework, quando o cidadão começa a apreender Java para Web, ele depara-se com um monte de acessórios, como CSS, Javascript, Html, blá blá blá ...
Então o que ele menos programa é em Java, já com o ECHO2 vc precisa saber somente de Java.
Segue um link com um exemplo de um WebMail feito com ECHO2
http://demo.nextapp.com/Email/app
Como estou na fase inicial da prospecção, então brevemente estarei postando detalhes mais tecnicos sobre o framework, aqui foi somente para despertar o interesse sobre o assunto.
Sunday, April 22, 2007
Ta na hora de dar uma chance para o NetBeans
Semana passada, dia 19, ocorreu o CEJUG Tech Days, evento baseado no Sun Tech Days que ocorreu em São Paulo. Na versão cearence do evento podemos assistir alguns webcats transmitidos diretamente de São Paulo. Em alguns webcast, mostrou-se as potencialidade do NetBeans 5.5.
Como sou usuário do Eclipse há 4 anos, fica um pouco difícil pensar em uma nova ferramenta para desenvolver com Java. Mas como meu papel e dar produtividade para a equipe ta na hora de dar uma chance para o NetBeans.
Vendo com bons olhos e pesquisando bastante no site http://www.netbeans.org/
pude constatar que o netbenas não deve nada para o eclipse.
Para desenvolvimento WEB, o Netbeans possui editores maravilhosos para jsp, html, css, xml. Recurso para debug e gerencia do servidor de aplicação. Sem contar que para desenvolvimento mobile ele é indiscutível melhor que qualquer plugin eclipse.
Na apresentação do webcast, fiquei impressionado com o SVG, suporte a gráfico para J2ME.
Sinceramente irei dar uma nova oportunidade ao NetBeans !!!
Como sou usuário do Eclipse há 4 anos, fica um pouco difícil pensar em uma nova ferramenta para desenvolver com Java. Mas como meu papel e dar produtividade para a equipe ta na hora de dar uma chance para o NetBeans.
Vendo com bons olhos e pesquisando bastante no site http://www.netbeans.org/
pude constatar que o netbenas não deve nada para o eclipse.
Para desenvolvimento WEB, o Netbeans possui editores maravilhosos para jsp, html, css, xml. Recurso para debug e gerencia do servidor de aplicação. Sem contar que para desenvolvimento mobile ele é indiscutível melhor que qualquer plugin eclipse.
Na apresentação do webcast, fiquei impressionado com o SVG, suporte a gráfico para J2ME.
Sinceramente irei dar uma nova oportunidade ao NetBeans !!!
Saturday, October 14, 2006
Implantando o processo de integração contínua
Esse artigo é baseado na prospecção feita para implantar o processo de integração contínua em projetos de desenvolvimento de software. Utilizando um pouco a definição de Martins Fowler, temos abaixo.
" Integração Contínua é uma boa prática no desenvolvimento de software onde os membros da equipe, no caso, os desenvolvedores, integram frequentemente seu código produzido, no mínimo uma vez por dia. Cada integração é feita verificação para detectar erros o mais rápido possível, quem faz essa verificação é uma build automatizada, que inclui a execução de testes unitários. Essa prática reduz significamente problemas que ocorrem no cliclo de vida do desenvolvimento, permitindo um desenvolvimento coêso e mais rápido"
O que geralmente é feito na verificação da build ?
Dentre as principais atividade, compilação, execução dos testes unitário, checagem com o PMD, cobertura dos testes unitário, verificação de código duplicado, empacotamento da aplicação e deploy da build gerada.
Para execução das atividades duas ferramentas se destacam:
MAVEN
ANT
[Continua em breve]
" Integração Contínua é uma boa prática no desenvolvimento de software onde os membros da equipe, no caso, os desenvolvedores, integram frequentemente seu código produzido, no mínimo uma vez por dia. Cada integração é feita verificação para detectar erros o mais rápido possível, quem faz essa verificação é uma build automatizada, que inclui a execução de testes unitários. Essa prática reduz significamente problemas que ocorrem no cliclo de vida do desenvolvimento, permitindo um desenvolvimento coêso e mais rápido"
O que geralmente é feito na verificação da build ?
Dentre as principais atividade, compilação, execução dos testes unitário, checagem com o PMD, cobertura dos testes unitário, verificação de código duplicado, empacotamento da aplicação e deploy da build gerada.
Para execução das atividades duas ferramentas se destacam:
MAVEN
ANT
[Continua em breve]
Subscribe to:
Posts (Atom)