: : : :

Tamanho: px
Começar a partir da página:

Download ": : www.mundoj.com.br : :"

Transcrição

1 : : : : Marcelo Zeferino formado em análise de sistemas, atua com TI desde 1999 e já participou de projetos de software para grandes organizações como Fundação BioRio/Johns Hopkins School of Medicine, Oi, Sul América e Fundação Roberto Marinho. Já atuou pela IBM Brasil e atualmente é líder técnico na Lumis Tecnologia, consultor e instrutor Java em cursos de extensão oferecidos pela UERJ. Mantem o blog com ideias sobre desenvolvimento de software. 30

2 As práticas de teste antecipado têm ganhado cada vez mais adeptos nos últimos anos com a crescente utilização de Test-Driven Development (TDD), sendo encorajada pelo extreme Programming e outros métodos ágeis. Como evolução ao TDD, Behaviour-Driven Development (BDD) nos permite criar, junto aos clientes, especificações que poderão ser executadas (e automatizadas), utilizando textos simples, em linguagem natural. Neste artigo, será apresentado o framework JBehave e trabalharemos um exemplo prático de especificação de cenário. Ao final, iremos configurar a ferramenta para utilizar o português como língua padrão nas especificações, facilitando ainda mais a compreensão. Behaviour-Driven Development em Java na prática, com JBehave Criando especificações executáveis utilizando BDD, em nossa língua! magine o seguinte problema: precisamos desenvolver um módulo de nossa aplicação que possui regras de negócio complicadas que estão apenas na cabeça de nosso cliente ou em um daqueles bons e velhos documentos estáticos e, provavelmente, desatualizados. Começamos entendendo e documentando as regras, modelando etc., até que arregaçamos as mangas e vamos para o desenvolvimento. Ao longo do desenvolvimento vamos criando testes e codificando, seguindo os ciclos do TDD. Após algumas repetições, executamos nossa suíte de teste e temos a certeza de que está tudo funcionando, até que o cliente verifica o funcionamento e nos informa que desenvolvemos a funcionalidade baseados em regras que na realidade estavam erradas (aquela velha história do não foi bem isso o que quis dizer ). Agora, digamos que, ao invés da abordagem anterior, escrevemos especificações junto à área cliente/de negócio, em nossa própria língua, a partir das necessidades relatadas para aquela funcionalidade, com exemplos de valores de entrada e saída de sucesso e falha para a execução de nosso módulo, mapeando e nos guiando pelo comportamento esperado. Passamos pelo ciclo de desenvolvimento 31

3 : : : : (executando testes aos poucos) e, ao final, executamos a nossa especificação (que foi escrita em texto puro) tendo como feedback as falhas e sucessos de acordo com os valores que especificamos. Isso mesmo, estamos falando de algo como uma especificação executável! Com a segunda abordagem, temos algumas vantagens: participação mais ativa do cliente; nosso código não está diretamente acoplado aos testes (o que acontece bastante com TDD) e está mais íntimo ao comportamento final; ao invés de testes escritos em Java, temos especificações em texto puro e em nossa língua que servirão como documentação da funcionalidade, facilitando o entendimento das necessidades e expectativas. Estas são apenas algumas vantagens do BDD. Ao longo deste artigo, será apresentado um pouco do conceito por trás do BDD e utilizaremos um exemplo prático, com o JBehave, para nos auxiliar neste processo. Ao final, será apresentado como podemos estender a ferramenta para que possamos escrever nossas especificações em português, facilitando ainda mais o entendimento. Primeiramente, um pouco de conceito O BDD segue a mesma linha de pensamento de outros métodos baseados em test-first, em que iniciamos o desenvolvimento de uma funcionalidade com escrita de testes antes de escrevermos qualquer linha de código de produção e, como sugere o TDD, seguimos ciclos de 1) criação de um teste que falhe; 2) implementação de código que faça o teste passar (e nada além disso); e 3) refatoração do código criado no passo anterior visando melhorá-lo. Dessa forma, além de termos a garantia de testes automatizados (já que os criamos antes mesmo de criar código de produção), não cairemos na velha armadilha de deixar os testes para depois, quando tivermos mais folga no cronograma geralmente, nunca! Apesar de apresentar grandes vantagens, principalmente no design, TDD possui algumas desvantagens, como o forte acoplamento entre testes e classes e baixa expressividade do código de testes, tendo em vista que, mesmo utilizando padrões na escrita dos métodos de teste, ainda estamos falando de código Java. Por mais expressivo que este seja, ainda será código em uma linguagem de programação, o que é algo geralmente distante de pessoas mais voltadas para o negócio. Neste contexto, a principal ideia do BDD é facilitar a comunicação sobre os requisitos entre pessoas de negócio (analistas de negócio, patrocinadores etc.) e o time de desenvolvimento. Apesar de dar ênfase na comunicação, também é esperado que os comportamentos/requerimentos levantados nestas comunicações possam ser verificados de forma automática (inclusive com integração contínua). A ideia é que o desenvolvimento seja guiado através do comportamento esperado para a funcionalidade, encorajando os envolvidos a trabalharem juntos na definição de especificações que poderão ser executadas automaticamente, comprovando o funcionamento conforme o que foi definido. Segundo texto publicado em seu blog, Dan North iniciou em 2003 o desenvolvimento do primeiro framework para trabalho com BDD: o JBehave. A intenção era sobrescrever o JUnit fazendo com que referências a teste fossem substituídas por comportamento. Seguindo 32 este raciocínio, são desenvolvidos cenários como o apresentado na Listagem 1 (retirado do site do projeto JBehave). Listagem 1. Exemplo básico de cenário. Given I am not logged in When I log in as Liz with a password JBehaver Then I should see a message, Welcome, Liz! A partir daí, o JBehave utiliza classes Java para mapear os fragmentos dos cenários, fazendo o parse das informações e executando os testes no formato JUnit, com exibição de resultados aproveitando a estrutura disponibilizada por ele. O relacionamento entre BDD e Domain-Driven Design (DDD) Mais ou menos na mesma época, Eric Evans publicou seu livro Domain-Driven Design: Tackling Complexity in the Heart of Software que falava sobre o desenvolvimento de softwares tomando como base os conceitos envolvidos no domínio do negócio, fazendo com que seja utilizada uma linguagem única (ubíqua), melhorando a comunicação entre a equipe técnica e de negócio. Neste sentido, BDD torna-se ainda mais útil sendo utilizado na análise do problema, identificando cenários e critérios de aceitação com user stories que serão executadas (com o JBehave, por exemplo) para validar o funcionamento. A aproximação entre equipe técnica e de negócio, utilizando uma linguagem única que é perfeitamente entendida pelos dois grupos, conforme pregou Evans, ganha mais força quando os dois grupos podem trabalhar juntos na elaboração de especificações funcionais baseadas em pequenas especificações executáveis. BDD vs TDD Em alguns momentos pode parecer que há algum tipo de disputa ou concorrência entre BDD e TDD, mas é importante entender que as duas metodologias possuem focos de atuação diferentes e podem ser utilizadas de forma complementar. Na edição 43 da MundoJ, há um artigo do Rodrigo Yoshima com mais informações sobre TDD e BDD, suas origens e o relacionamento entre estas duas abordagens. No site do JBehave, podemos encontrar uma breve comparação entre as duas metodologias que é bastante interessante e traduzi livremente aqui (o quadro de referências no final do artigo contém o link para o texto original): É importante entender a diferença entre BDD e TDD. Essas duas práticas são igualmente importantes, mas possuem focos diferentes e devem ser complementares no uso das melhores práticas de desenvolvimento. BDD está preocupado principalmente com a especificação do comportamento do sistema sendo testado como um todo, portanto, é particularmente adequado para testes de aceitação e regressão. TDD está preocupado principalmente com o teste de um componente como unidade, mantendo-o isolado de outras dependências, que normalmente são "mockadas". BDD deve falar a linguagem do domínio de negócio e não a linguagem da tecnologia do desenvolvimento, que, por outro lado, é "falada" pelo TDD.

4 A criação e evolução do JBehave Como já falamos e segundo o blog do próprio Dan North (vide quadro de referências), o JBehave foi iniciado em 2003 e no começo algumas coisas não saíram muito bem. A maioria das características que o faz uma boa escolha hoje em dia foram baseadas em outros frameworks, particularmente o RSpec. Para mais informações, os artigos Automação de Testes de Aceitação com Cucumber e JRuby, Ed. 39 e Aplicações Desktop a jato com JRuby e Netbeans, Ed. 36 abordaram a utilização de RSpec e Cucumber (ver quadro de referências, no final do artigo). A partir daí, ao longo dos anos, a ferramenta sofreu fortes modificações (North fala que foi completamente reescrito, em seu blog na nota de lançamento da versão 2.0), inclusive para tirar proveito das facilidades de Java 5 e JUnit 4. A versão 2.0 é considerada um marco, pois já disponibiliza algumas ótimas características como integração com Maven, cenários em texto puro, entre outras. a classe Steps) e outra para definir o cenário (estendendo a classe Scenario). A classe que representa o cenário será executada como um teste JUnit e apresentará os resultados com as famosas barras verdes ou vermelhas (como um JUnit Test mesmo). Para isso, esta classe precisa, em seu construtor, adicionar cada Step criado para o cenário. Outro ponto importante é que o nome da classe deve ter relacionamento direto com o nome do arquivo que contém a descrição do cenário. Exemplo: para um cenário user_logs_in_successfully a classe que o representará deve ser UserLogsInSuccessfully, trocando os _ por camel casing; Criando nosso primeiro exemplo Entendendo os cenários e vocabulário No exemplo que iremos criar, implementaremos parte de uma funcionalidade para alteração de senha de acesso ao sistema. Neste ponto faremos apenas uma rápida verificação para identificar se é ou não uma senha segura. O BDD possui um vocabulário próprio que tenta ser bastante simples para facilitar sua utilização como linguagem ubíqua e seus principais componentes são Given, When e Then. Após criar um projeto novo e configurar as dependências (ver seção Dependências Necessárias), criaremos o arquivo de texto validacao_nova_senha.scenario, com o conteúdo da Listagem 3. Colocando a mão na massa! Tendo User Stories definidas, podemos criar o que chamamos de cenários para representá-las, podendo definir diversos cenários para cada uma delas, garantindo que trabalhamos todas as variações que formam o critério de aceite da User Story. Seguindo o padrão de Stories As a <type of user>, I want..., sugerido por Mike Cohn em seu blog (ver quadro de referências), poderíamos ter uma story como a apresentada na Legenda 2 (retirada do blog de Dan North). Listagem 2. Exemplo de story seguindo o padrão de Mike Cohn. As a customer, I want to withdraw cash from an ATM, So that I don t have to wait in line at the bank. E um possível cenários seria: Scenario 1: Account is in credit Given the account is in credit And the card is valid And the dispenser contains cash When the customer requests cash Then ensure the account is debited And ensure cash is dispensed And ensure the card is returned Há os que defendam abordagens mais completas, mencionando critérios de aceite mais detalhados e tabelas de dados. Como os cenários serão executados? Os cenários são salvos em um arquivo-texto e, para cada cenário, precisaremos de uma classe Java que defina os passos (estendendo Dependências necessárias Para o funcionamento correto da versão (utilizada em nosso projeto) do framework, é necessário configurar as seguintes dependências no classpath do projeto: jbehave-core jar (download direto do site do JBehave: hamcrest-all-1.1.jar (http://hamcrest.org/); commons-lang-2.5.jar (http://commons.apache.org/lang/ download_lang.cgi); commons-collections.jar Além do JUnit4 (em Listagem 3. Código do cenário Validação de Nova Senha. Title Recadastramento de Senha Narrative: As a Usuario I want recadastrar minha senha So that continue tenasso ao sistema, com outra senha Scenario: Validar nova senha Given Um usuário de nome Marcelo Zeferino e login zeferino e a senha é 1234 When verifico se a senha é segura Then Deve retornar a mensagem A senha deve conter ao menos 5 caracteres. Feito isso, temos nossa especificação pronta e precisamos criar uma classe que execute nosso cenário. Para tanto, criaremos a classe ValidacaoNovaSenha.java, seguindo as convenções do JBehave, com o conteúdo da Listagem 4. 33

5 : : : : Listagem 4. Implementação da classe responsável por rodar o cenário. Listagem 5. Implementação da classe responsável pelos passos de teste dos cenários. public class ValidacaoNovaSenha extends JUnitScenario { public class ValidacaoNovaSenhaSteps extends Steps { private Usuario usuario = new Usuario(); public ValidacaoNovaSenha() { private String mensagemerro; super(new MostUsefulConfiguration() usuário de nome $nomeusuario e login $loginusuario e a senha é $novasenha") public void setup(string nomeusuario, String loginusuario, String novasenha) { public ScenarioDefiner fordefiningscenarios() { return new ClasspathScenarioDefiner( new UnderscoredCamelCaseResolver(.scenario ), new PatternScenarioParser(keywords())); mensagemerro = ""; usuario.setnome(nomeusuario); usuario.setlogin(loginusuario); public ScenarioReporter forreportingscenarios() { return new se a senha é segura") public void checksenha() { ); try{ usuario.validarnovasenha(); catch (Exception e) { mensagemerro = e.getmessage(); Feito isso, já podemos executar nosso teste e verificar o resultado. Rodando a nossa classe como um JUnit Test temos o resultado apresentado na figura 1, mostrando que a implementação dos passos de nosso cenário ainda estão retornar a mensagem \"$mensagem\"") public void checkmessagem(string mensagem) { ensurethat(mensagemerro.equalsignorecase(mensagem)); O JBehave utiliza para codificar algum comportamento para cada um destes passos do cenário descrito no arquivo de texto. Figura 1. Execução com passos ainda pendentes. O próximo passo é criar a classe que implementará os passos necessários para testar nossa especificação. Criaremos uma classe chamada ValidacaoNovaSenhaSteps.java, estendendo a classe Steps do JBehave, com o conteúdo da Listagem Podemos utilizar o conteúdo do arquivo de texto e fazer parsing das Strings a fim de compará-las com os resultados esperados. No nosso caso, queremos comparar se o conteúdo da variável mensagemerro, que está sendo recuperado de acordo com a Exception lançada pelo método validarnovasenha da classe Usuário, é equivalente à mensagem apresentada na descrição do cenário. Poderíamos neste ponto validar diversas entradas e saídas, de acordo com nossas necessidades, não estando limitados a apenas tipos String. O conteúdo da classe Usuário.java está descrito na Listagem 6.

6 Listagem 6. Implementação da classe de negócio Usuário, com o comportamento para verificação da senha. Listagem 7. Alteração na classe ValidacaoNovaSenha para executar o TestStep criado. package main.java.usuario; public class ValidacaoNovaSenha extends JUnitScenario { public ValidacaoNovaSenha() { public class Usuario { super(new MostUsefulConfiguration() { public Usuario(){ private String nome; private String login; private String senha; public ScenarioDefiner fordefiningscenarios() { return new ClasspathScenarioDefiner( new UnderscoredCamelCaseResolver(".scenario"), new PatternScenarioParser(keywords())); public String getnome() { return nome; public void setnome(string nome) { this.nome = nome; public String getlogin() { return login; public void setlogin(string login) { this.login = login; public String getsenha() { return senha; public void setsenha(string senha) { this.senha = public ScenarioReporter forreportingscenarios() { return new PrintStreamScenarioReporter(); ); addsteps(new ValidacaoNovaSenhaSteps()); public void validarnovasenha() throws Exception{ if (this.getsenha().length() < 5){ throw new Exception("A senha deve conter ao menos 5 caracteres."); Neste ponto, estamos aptos para inserir nosso TestStep no construtor da classe ValidacaoNovaSenha.java para que o runner chame a classe ValidacaoNovaSenhaSteps.java e execute os passos que predefinimos. Figura 2. Resultado de execução com sucesso. Para isso, incluiremos a linha addsteps(new ValidacaoNovaSenhaSteps()); após a chamada a super na classe ValidacaoNovaSenha.java, para ficar da forma apresentada na Listagem 7 e executaremos novamente esta classe como um JUnitTest. Se tudo correr bem, o resultado será apresentado como na figura 2, apresentando o sucesso do teste. Para testar o caso de falha, podemos alterar a mensagem da especificação e rodar novamente, verificando que o JUnit irá apresentar a barra vermelha, indicando que ocorreu uma falha, como na figura 3. Figura 3. Falha na execução do teste, indicando que uma condição não foi satisfeita, após alterarmos a mensagem. 35

7 : : : : Criando cenários com Tabela de Dados de Exemplo Uma ótima opção para trabalhar com mais dados de entrada para os testes é a utilização do recurso Table Examples. Este recurso permite que seja definida uma tabela com valores de entrada e/ou saída para o(s) cenário(s) de uma especificação, sem a necessidade de criar diversos cenários (um para cada entrada de dados, por exemplo). A sintaxe para a criação de Table Examples é apresentada na Listagem 8, já com uma aplicação prática no nosso exemplo. Listagem 9. Alterações na classe ValidacaoNovaSenhaSteps. java para compatibilizar com a utilização da tabela de exemplos. public class ValidacaoNovaSenhaSteps extends Steps { private Usuario usuario = new Usuario(); private String usuário de nome: <nome> e login: <login> e a senha: <senha>") public void String String String novasenha) { Note que retiramos os valores anteriormente passados manualmente para os passos e adicionamos <> nos campos nome, login, senha e mensagem para que estes dados sejam recuperados da tabela de exemplos, no final da story. mensagemerro = ""; usuario.setnome(nomeusuario); usuario.setlogin(loginusuario); usuario.setsenha(novasenha); Foi necessário, também, alterar a classe ValidacaoNovaSenhaSteps.java para que os passos do cenário considerem as alterações feitas na especificação. A Listagem 9 apresenta o código alterado desta classe, utilizando a NomeDoCampo ), para identificar os valores recebidos da se a senha é segura") public void checksenha() { Note que a utilização deste tipo de anotação é bastante útil, pois é possível utilizar diretamente os atributos com seus tipos reais, ao invés de trabalhar com o parsing de Strings. try{ usuario.validarnovasenha(); catch (Exception e) { mensagemerro = e.getmessage(); A figura 4 apresenta o log geral de execução das entradas na tabela de exemplos, impresso no console. Listagem 8. Alterações em nossa especificação para utilização de Table Examples. Title Recadastramento de Senha Narrative: As a Usuario I want recadastrar minha senha So that continue tendo acesso ao sistema, com outra retornar a mensagem: <mensagem>") public void String mensagem) { ensurethat(mensagemerro.trim().equalsignorecase(mensagem)); Title Recadastramento de Senha Narrative: As a Usuario I want recadastrar minha senha So that continue tendo acesso ao sistema, com outra senha Scenario: Validar nova senha Given Um usuário de nome: <nome> e login: <login> e a senha: <senha> When verifico se a senha é segura Then Deve retornar a mensagem: <mensagem> Examples: nome login senha mensagem Marcelo Zeferino zeferino 1234 A senha deve conter ao menos 5 caracteres. Kurt Cobain kurt Figura 4. Console apresentando resultado de execução de especificação utilizando Table Examples. 36

8 Mas estamos escrevendo em inglês e português ao mesmo tempo! Neste ponto, criei uma nova classe genérica para os cenários e steps em português, fazendo com que as classes anteriores agora herdem destas novas classes. Estendendo o JBehave para utilizar Português-BR nos cenários As Listagens 11 e 12, respectivamente, apresentam o código das classes genéricas para os cenários e steps, incluindo alguns comentários relevantes. Agora que já passamos por alguns conceitos básicos sobre o framework, percebemos que a utilização de inglês (devido ao padrão Given, When, Then) e português no mesmo documento não soa muito bem. Inclusive, pode ser um empecilho para o objetivo de alcançar maior participação dos envolvidos. Listagem 11. Classe genérica, com configurações para utilizar língua personalizada pelo arquivo keywords_pt. public class ScenarioPtBR extends JUnitScenario { O JBehave nos reserva a possibilidade de estendê-lo para utilizar outros dialetos, permitindo configurar o vocabulário para a forma que melhor atenda aos usuários. Criaremos novas classes e especificação, agora utilizando apenas nossa linguagem na descrição das especificações. Manteremos a mesma funcionalidade para permitir um comparativo. public ScenarioPtBR() { this(thread.currentthread().getcontextclassloader()); public ScenarioPtBR(final ClassLoader classloader) { super(new PropertyBasedConfiguration() public ScenarioDefiner fordefiningscenarios() { Criando o arquivo de redefinição do vocabulário (keywords_ pt.properties) // Repare que aqui estamos utilizando a extensão.cenario e não //.scenario, como antes return new ClasspathScenarioDefiner( new UnderscoredCamelCaseResolver(".cenario"), new PatternScenarioParser(this), classloader); Para que o JBehave possa trabalhar com nosso vocabulário, precisamos definir um arquivo de palavras-chave, traduzindo tais palavras para o nosso idioma. A Listagem 10 apresenta o conteúdo deste arquivo (salvo como keywords_pt.properties). Listagem 10. Arquivo de mapeamento de palavras-chaves e suas traduções. Scenario=Cenário: Narrative=Narrativa: InOrderTo=Para que AsA=Como um IWantTo=Eu desejo GivenScenarios=DadoCenários: ExamplesTable=Exemplos: ExamplesTableRow=LinhaTabelaExemplo: Given=Dado When=Quando Then=Então And="E" Pending=PENDENTE NotPerformed=N\u00E3o Executado Failed=FALHA Ignorable=Ignoravel DryRun=DryRun Um alerta para a linha que contém o mapeamento do keyword And (ainda na Listagem 10). Neste caso, utilizamos E, entre aspas, devido a problemas na biblioteca utilizada pelo JBehave para fazer o match das strings. Caso não tivéssemos usado as aspas o And seria convertido para qualquer palavra que iniciasse com a letra E. Outra solução seria envolver todas as palavras em public ScenarioReporter forreportingscenarios() { //definição do Locale "pt", utilizado na exibição dos resultados return new PrintStreamScenarioReporter(keywordsFor( new Locale("pt"), classloader)); //Definição do Locale utilizado na obtenção dos public KeyWords keywords() { return keywordsfor(new Locale("pt"), classloader); ); //Aqui está sendo definido o pacote onde está inserido o arquivo properties com //mapeamento das palavras chaves traduzidas para o Português protected static KeyWords keywordsfor(locale locale, ClassLoader classloader) { return new I18nKeyWords(locale, new StringEncoder(), "test/resources/keywords", classloader); Além de criar o arquivo keywords_pt_properties da Listagem 10, precisaremos definir algumas configurações em nossas classes (tanto a que funciona como runner dos cenários quanto a que define o comportamento dos passos de execução) para que as novas configurações sejam utilizadas. 37

9 : : : : Listagem 12. Classe genérica para Steps com configurações para utilizar língua personalizada pelo arquivo keywords_pt. Cont. Listagem 14. Classe para execução dos steps, agora herdando comportamentos de configuração de linguagem. public class StepPtBR extends Steps { try{ usuario.validarnovasenha(); public StepPtBR(){ this(thread.currentthread().getcontextclassloader()); catch (Exception e) { mensagemerro = e.getmessage(); //Definindo que serão utilizados os keywords traduzidos public StepPtBR(ClassLoader classloader) { super(new StepsConfiguration(keywordsFor(new Locale("pt"), classloader))); //Aqui está sendo definido o pacote onde está inserido o arquivo properties com //mapeamento das palavras chaves traduzidas para o Português protected static KeyWords keywordsfor(locale locale, ClassLoader classloader) { return new I18nKeyWords(locale, new StringEncoder(), "test/resources/keywords", retornar a <mensagem>") public void String mensagem) { ensurethat(mensagemerro.trim().equalsignorecase(mensagem)); Listagem 15. Especificação, agora escrita em nossa língua. Título Recadastramento de Senha As Listagens 13 e 14 apresentam o código das novas classes para runner de cenários e steps, que agora herdam as características de configuração das classes genéricas. Na Listagem 15, temos o novo texto de nossa especificação, agora em português. Listagem 13. Classe para execução do cenário, simplificada pela herança de comportamentos de configuração de linguagem. Narrativa: Como a Usuario Eu desejo recadastrar minha senha Para que continue tendo acesso ao sistema, com outra senha Cenário: Validar nova senha Dado Um usuário de <nome> e <login> e a <senha> Quando verifico se a senha é segura Então Deve retornar a <mensagem> public class ValidacaoNovaSenhaPtBr extends ScenarioPtBR { public ValidacaoNovaSenhaPtBr(){ addsteps(new ValidacaoNovaSenhaStepsPtBr()); Exemplos: nome login senha mensagem Marcelo Zeferino zeferino 1234 A senha deve conter ao menos 5 caracteres. Kurt Cobain kurt Por fim, a figura 5 contém o resultado da execução, já utilizando nossa língua e a figura 6 contém a estrutura final de nossa aplicação. Listagem 14. Classe para execução dos steps, agora herdando comportamentos de configuração de linguagem. public class ValidacaoNovaSenhaStepsPtBr extends StepPtBR { private Usuario usuario = new Usuario(); private String usuário de <nome> e <login> e a <senha>") public void String String String novasenha) { mensagemerro = ""; usuario.setnome(nomeusuario); usuario.setlogin(loginusuario); se a senha é segura") public void checksenha() { 38 Figura 5. Console com a execução, após configuração da língua para português.

10 Utilizar uma prática baseada em TestFirst é importante para garantir que testes automatizados existirão (e não ficarão para quando a equipe tiver tempo nunca!) e que o design da aplicação será orientado para facilitar testes. Existem diversas ferramentas que habilitam a utilização de BDD em Java, como EasyB, JBee, EasySpec e o famoso Cucumber (com JRuby). No entanto, JBehave se posiciona no mercado como uma ótima opção e, em minha opinião, é a melhor dentre outros frameworks, pois podemos criar especificações de maneira bastante simples e utilizando puramente Java (e não JRuby ou Groovy, por exemplo, como no caso de Cucumber e EasyB, respectivamente). A ferramenta ainda permite uma série de outras habilidades não apresentadas neste artigo, como a integração com outros frameworks, como HTMLUnit e Selenium, por exemplo. É possível encontrar uma implementação de exemplo utilizando JBehave sobre WebDriver (HTMLUnit) no GitHub profile do Rodrigo Yoshima (da Aspercom e colunista da MundoJ), descrito na seção de referências no final do artigo. Outra capacidade interessante é a integração com Ant e Maven, facilitando a execução automática dos testes de acordo com o ponto no ciclo de vida da aplicação, mas este é um assunto para um novo artigo Figura 6. Estrutura final da aplicação, no Eclipse. Considerações finais São diversos os benefícios na utilização de BDD, como a possibilidade de escrever especificações junto aos usuários finais garantindo melhor entendimento do problema. Tais especificações servirão como documentação e poderão ser executadas automaticamente para validação e verificação dos cenários, o que aumenta consideravelmente a chance de se tornar uma documentação útil e constantemente atualizada. Referências blog de Dan North. post no blog de Dan North com detalhes sobre a evolução do JBehave e sua versão post no blog de Dan North sobre a filosofia do framework e breve, porém excelente e esclarecedora, comparação entre BDD e TDD. Automação de Testes de Aceitação com Cucumber e JRuby Ed 39 da MundoJ, Aplicações Desktop a jato com JRuby e Netbeans Ed 36 da MundoJ. site de referência para o RSpec. Domain-Driven Design: Tackling Complexity in the Heart of Software, Eric Evans. blog oficial do framework. link do GitHub profile de Rodrigo Yoshima, com exemplo prático utilizando JBehave sobre WebDriver. post em blog de Mike Cohn com template para User Stories. Para aplicações nas quais utilizamos Domain-Driven Design, a utilização de BDD aparece com grande utilidade, facilitando a criação e manutenção da Ubiquitous Language, entre desenvolvedores e pessoas de negócio. 39

Evolução do Design através de Testes e o TDD

Evolução do Design através de Testes e o TDD c a p a Lucas Souza (lucas.souza@caelum.com.br): é bacharel em Engenharia da Computação pela Universidade de Ribeirão Preto, possui a certificação SCJP e trabalha com Java há 4 anos. Atualmente é desenvolvedor

Leia mais

Guia de Fatores de Qualidade de OO e Java

Guia de Fatores de Qualidade de OO e Java Qualiti Software Processes Guia de Fatores de Qualidade de OO e Java Versã o 1.0 Este documento só pode ser utilizado para fins educacionais, no Centro de Informática da Universidade Federal de Pernambuco.

Leia mais

Mini-Curso Agile Testing

Mini-Curso Agile Testing Mini-Curso Agile Testing Como funciona na prática? contato@qualister.com.br (48) 3285-5615 twitter.com/qualister facebook.com/qualister linkedin.com/company/qualister Instrutor Elias Nogueira

Leia mais

DOMAIN-DRIVEN DESIGN E TEST-DRIVEN DEVELOPMENT

DOMAIN-DRIVEN DESIGN E TEST-DRIVEN DEVELOPMENT DOMAIN-DRIVEN DESIGN E TEST-DRIVEN DEVELOPMENT Jaqueline Rissá Franco email: jaquerifr@gmail.com Karla Marturelli Mattos Luciano Mathias Doll João Almeida Resumo: Este artigo mostra novas abordagens na

Leia mais

ProgramaTchê programatche.net Programação OO com PHP

ProgramaTchê programatche.net Programação OO com PHP Roteiro 2 Objetivos: * Apresentar a sintaxe básica para utilização de Orientação a Objetos em PHP. Ferramentas necessárias Navegador, NetBeans, Servidor Apache. 1 Orientação a Objetos em PHP PHP é uma

Leia mais

Lidando de Forma Eficiente com Validações Locais de Objetos

Lidando de Forma Eficiente com Validações Locais de Objetos Lidando de Forma Eficiente com Validações Locais de Objetos Aprenda a construir um mini-framework para validar objetos locais sem afetar a complexidade do código. Autor Paulo César M. N. A. Coutinho (pcmnac@gmail.com):

Leia mais

Especificação e Automação Colaborativas de Testes utilizando a técnica BDD

Especificação e Automação Colaborativas de Testes utilizando a técnica BDD Especificação e Automação Colaborativas de Testes utilizando a técnica BDD Rafael Chiavegatto¹, Vanilton Pinheiro¹, Andréia Freitas Vieira¹, João Clineu¹, Erbett Hinton Oliveira¹, Ellen Barroso¹, Alexandre

Leia mais

Desenvolvimento Orientado a Comportamento com Testes Automatizados utilizando JBehave e Selenium

Desenvolvimento Orientado a Comportamento com Testes Automatizados utilizando JBehave e Selenium Desenvolvimento Orientado a Comportamento com Testes Automatizados utilizando JBehave e Selenium Rafael B. Chiavegatto¹, Lidiane V. da Silva², Andréia Vieira², William R. Malvezzi¹ ¹Centro de Pós-Graduação

Leia mais

Requisitos Executáveis: O modelo FIT / FitNesse

Requisitos Executáveis: O modelo FIT / FitNesse Requisitos Executáveis: O modelo FIT / FitNesse Jorge Diz Globalcode 57 Encontro do SPIN-SP Slide 1 Instrutor Jorge Alberto Diz ( 95 Mestre em Eng. Elétrica (UNICAMP ( 89 Bach. em Ciência da Computação

Leia mais

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil renazariorln@gmail.com, ricardo@unipar.br Resumo. Este artigo

Leia mais

NOVIDADES DO JAVA PARA PROGRAMADORES C

NOVIDADES DO JAVA PARA PROGRAMADORES C PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB NOVIDADES DO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o Conceito de Classes e Objetos Capacitar para a criação de objetos simples

Leia mais

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC .business @BusinessController TurmaBC TurmaBC TurmaBC

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC .business @BusinessController TurmaBC TurmaBC TurmaBC Módulo 5 No módulo anterior adaptamos nosso projeto para persistir as informações no banco de dados utilizando as facilidades da extensão demoiselle-jpa. Experimentamos o controle transacional do Framework

Leia mais

Interface para Regras de Negócios em Multi-Banco

Interface para Regras de Negócios em Multi-Banco 1 Interface para Regras de Negócios em Multi-Banco MARCELO JALOTO (marcelo@jaloto.net) é graduado no curso superior Projetos e Gestão de Redes de Computadores e formado no curso Técnico em Processamento

Leia mais

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse Como criar um EJB Criando um projeto EJB com um cliente WEB no Eclipse Gabriel Novais Amorim Abril/2014 Este tutorial apresenta o passo a passo para se criar um projeto EJB no Eclipse com um cliente web

Leia mais

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Tutorial RMI (Remote Method Invocation) por Alabê Duarte Tutorial RMI (Remote Method Invocation) por Alabê Duarte Este tutorial explica basicamente como se implementa a API chamada RMI (Remote Method Invocation). O RMI nada mais é que a Invocação de Métodos

Leia mais

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/ Aula 09 Introdução à Java Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/ Agenda da Aula Java: Sintaxe; Tipos de Dados; Variáveis; Impressão de Dados.

Leia mais

MOCKITO - - Alexandre Gazola (alexandregazola@gmail.com / Twitter: @alexandregazola)

MOCKITO - - Alexandre Gazola (alexandregazola@gmail.com / Twitter: @alexandregazola) cinto de utilidades mocks_ CRIAÇÃO DE MOCKS COM MOCKITO No último artigo desta coluna, falamos de uma forma geral sobre diversas ferramentas para suporte a testes automatizados. Dentre as ferramentas mencionadas,

Leia mais

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Curso - Padrões de Projeto Módulo 2: Padrões de Criação Vítor E. Silva Souza vitorsouza@gmail.com http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net Sobre o Instrutor Formação: Java: Graduação

Leia mais

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this. Aula 2 Objetivos Encapsulamento na linguagem Java; Utilizando a referência this. Encapsulamento, data hiding é um conceito bastante importante em orientação a objetos. É utilizado para restringir o acesso

Leia mais

Teste de software. Definição

Teste de software. Definição Definição O teste é destinado a mostrar que um programa faz o que é proposto a fazer e para descobrir os defeitos do programa antes do uso. Quando se testa o software, o programa é executado usando dados

Leia mais

Objetivos: Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único

Objetivos: Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único Pacotes e Encapsulamento Prof. Bruno Gomes bruno.gomes@ifrn.edu.br Programação Orientada a Objetos Introdução Permite o agrupamento de classes em uma coleção chamada pacote Um pacote é uma coleção de classes

Leia mais

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

Novas Ferramentas de Teste na plataforma Java Jorge Diz Workshop de testes para aplicativos web Slide 1 Just Java 2009 Novas Ferramentas de Teste na plataforma Java Jorge Diz Workshop de testes para aplicativos web Slide 1 Quem sou eu? Jorge Alberto Diz ( 95 Mestre em Eng. Elétrica (UNICAMP ( 89 Bach. em

Leia mais

TESTES AUTOMATIZADOS COM JUNITE MOCKITO

TESTES AUTOMATIZADOS COM JUNITE MOCKITO TESTES AUTOMATIZADOS COM JUNITE MOCKITO Jaime William Dias 12, Dener Barranco 1, Douglas Delapria 1 1 Universidade Paranaense (Unipar) 2 Universidade Estadual de Maringá (UEM) Paranavaí PR Brasil dener_barranco@hotmail.com,

Leia mais

Java Básico. Matrícula de Alunos. Marco Antonio, Arquiteto de Software TJDF ma@marcoreis.eti.br. Novembro/2005

Java Básico. Matrícula de Alunos. Marco Antonio, Arquiteto de Software TJDF ma@marcoreis.eti.br. Novembro/2005 Java Básico Matrícula de Alunos Marco Antonio, Arquiteto de Software TJDF ma@marcoreis.eti.br Novembro/2005 Objetivos OO: trocar mensagens entre os objetos Exception: tratar exceções Análise: implementar

Leia mais

Testes Automatizados. : : COLUNA Cinto de Utilidades: :

Testes Automatizados. : : COLUNA Cinto de Utilidades: : : : COLUNA Cinto de Utilidades: : Alexandre Gazola (alexandregazola@gmail.com / Twitter: @alexandregazola): é bacharel em Ciência da Computação pela Universidade Federal de Viçosa (UFV) e mestre em Informática

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 05 PROFª BRUNO CALEGARO

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 05 PROFª BRUNO CALEGARO UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 05 PROFª BRUNO CALEGARO Santa Maria, 24 de Setembro de 2013. Revisão aula anterior Processos de Software Engenharia de Requisitos, Projeto,

Leia mais

Criando documentação com javadoc

Criando documentação com javadoc H Criando documentação com javadoc H.1 Introdução Neste apêndice, fornecemos uma introdução a javadoc ferramenta utilizada para criar arquivos HTML que documentam o código Java. Essa ferramenta é usada

Leia mais

Testes de Software. Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB. Anne Caroline O. Rocha Tester Certified BSTQB NTI UFPB

Testes de Software. Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB. Anne Caroline O. Rocha Tester Certified BSTQB NTI UFPB Testes de Software 1 AULA 04 FERRAMENTAS DE AUTOMAÇÃO DE TESTES FUNCIONAIS Anne Caroline O. Rocha TesterCertified BSTQB NTI UFPB Conteúdo Programático Aula 04 Automação de testes funcionais Ferramentas

Leia mais

Nome N Série: Ferramentas

Nome N Série: Ferramentas Nome N Série: Ferramentas Competências: Identificar e utilizar técnicas de modelagem de dados; Habilidades: Utilizar ferramentas de apoio ao desenvolvimento de software; Bases Tecnológicas: Metodologias

Leia mais

Persistência de Classes em Tabelas de Banco de Dados

Persistência de Classes em Tabelas de Banco de Dados UTFPR DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). 1 Persistência de Classes em Tabelas de Banco de Dados 1) Introdução! Em algumas situações, pode ser necessário preservar os objetos

Leia mais

Google Web Toolkit* Clério Damasceno Soares, Daniel da Silva Filgueiras e Fábio Figueiredo da Silva

Google Web Toolkit* Clério Damasceno Soares, Daniel da Silva Filgueiras e Fábio Figueiredo da Silva Google Web Toolkit* Clério Damasceno Soares, Daniel da Silva Filgueiras e Fábio Figueiredo da Silva Universidade Federal de Juiz de Fora UFJF-MG Campo Universitário Bairro Marmelos Juiz de Fora MG Brasil

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel As 52 Palavras Reservadas O que são palavras reservadas São palavras que já existem na linguagem Java, e tem sua função já definida. NÃO podem

Leia mais

Reuso com Herança a e Composiçã

Reuso com Herança a e Composiçã Java 2 Standard Edition Reuso com Herança a e Composiçã ção Helder da Rocha www.argonavis.com.br 1 Como aumentar as chances de reuso Separar as partes que podem mudar das partes que não mudam. Exemplo:

Leia mais

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB) Uma Introdução à Arquitetura Francisco C. R. Reverbel 1 Copyright 1998-2006 Francisco Reverbel O Object Request Broker (ORB) Via de comunicação entre objetos (object bus), na arquitetura do OMG Definido

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel Ambiente de Desenvolvimento Orientação a Objetos É uma técnica de desenvolvimento de softwares que consiste em representar os elementos do mundo

Leia mais

Pratica JFlex. Prática criando o primeiro analisador léxico

Pratica JFlex. Prática criando o primeiro analisador léxico UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE CURSO: CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMPILADORES PROFESSOR: JOHNI DOUGLAS MARANGON Pratica JFlex JFlex é uma ferramenta que permite

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais são as palavras que podem

Leia mais

Drive MySql de conexão para Eclipse

Drive MySql de conexão para Eclipse Drive MySql de conexão para Eclipse de Setembro de 0 Olá, neste artigo iremos focar em como utilizar o drive de conexão do Mysql na IDE eclipse. Veremos passo-a-passo como instalar, o que é uma coisa muito

Leia mais

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código } Este documento tem o objetivo de demonstrar os comandos e sintaxes básicas da linguagem Java. 1. Alguns passos para criar programas em Java As primeiras coisas que devem ser abordadas para começar a desenvolver

Leia mais

FERRAMENTAS PARA DESENVOLVIMENTO EM C#

FERRAMENTAS PARA DESENVOLVIMENTO EM C# FERRAMENTAS PARA DESENVOLVIMENTO EM C# Camila Sanches Navarro 1,2, Wyllian Fressatti 2 ¹Universidade paranaense (Unipar) Paranavaí PR Brasil sanchesnavarro@gmail.com wyllian@unipar.br Resumo. Este artigo

Leia mais

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE Aluno: Roberto Reinert Orientador: Everaldo A. Grahl Roteiro de apresentação Introdução Objetivos Fundamentação Teórica Workflow Processo

Leia mais

Estratégias para testes: a metáfora da pirâmide alimentar

Estratégias para testes: a metáfora da pirâmide alimentar Estratégias para testes: a metáfora da pirâmide alimentar Jorge Diz Instrutor Globalcode Kleber Xavier Instrutor Globalcode 1 Agenda > O que são testes? > Tipos de testes > A pirâmide de testes (Huggins)

Leia mais

User. Stories. Por que e como escrever requisitos de forma ágil? RAFAEL HELM e DANIEL WILDT. Wildtech start wild, keep wild

User. Stories. Por que e como escrever requisitos de forma ágil? RAFAEL HELM e DANIEL WILDT. Wildtech start wild, keep wild User Stories Por que e como escrever requisitos de forma ágil? RAFAEL HELM e DANIEL WILDT Wildtech start wild, keep wild Qualidade de software começa na especificação. Rafael Helm. 2 Sobre os autores Rafael

Leia mais

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO INTRODUÇÃO 12. DOCUMENTAÇÃO Na plataforma Java SE 7, há cerca de 4000 classes e interfaces disponíveis para utilizarmos em nossas aplicações Podemos visualizar a documentação dessas classes e interfaces

Leia mais

Java Programação para Fábrica de Software. Fernando Lozano Consultor 4Linux lozano@4linux.com.br

Java Programação para Fábrica de Software. Fernando Lozano Consultor 4Linux lozano@4linux.com.br Java Programação para Fábrica de Software Fernando Lozano Consultor 4Linux lozano@4linux.com.br Quem É o Lozano? Atua há mais de 15 anos em TI Consultoria para Amsterdam Sauer, Banco Bovorantim, Bob's,

Leia mais

Engenharia de Software I

Engenharia de Software I Engenharia de Software I Rogério Eduardo Garcia (rogerio@fct.unesp.br) Bacharelado em Ciência da Computação Aula 05 Material preparado por Fernanda Madeiral Delfim Tópicos Aula 5 Contextualização UML Astah

Leia mais

Recursos avançados e Orientação a Objetos no PHP

Recursos avançados e Orientação a Objetos no PHP Recursos avançados e Orientação a Objetos no PHP Edgar Rodrigues Sandi edgar@season.com.br Gerente de projetos Desenvolvedor PHP e Java Ministra os treinamentos: Linguagens de Programação PHP I Fundamentos

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

DEFINIÇÃO DE MÉTODOS

DEFINIÇÃO DE MÉTODOS Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 2 DEFINIÇÃO DE MÉTODOS Todo o processamento que um programa Java faz está definido dentro dos

Leia mais

Automatização de testes de persistência com FIT, DBUnit e HSQLDB

Automatização de testes de persistência com FIT, DBUnit e HSQLDB a r t i g o Alexandre Gazola (alexandregazola@gmail.com): é bacharel em Ciência da Computação pela Universidade Federal de Viçosa (UFV) e mestre em Informática pela PUC-Rio. Trabalha como analista de Sistemas

Leia mais

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC Arquitetura de Aplicações JSP/Web Padrão Arquitetural MVC Arquitetura de Aplicações JSP/Web Ao projetar uma aplicação Web, é importante considerála como sendo formada por três componentes lógicos: camada

Leia mais

Autenticação e Autorização

Autenticação e Autorização Autenticação e Autorização Introdução A segurança em aplicações corporativas está relacionada a diversos aspectos, tais como: autenticação, autorização e auditoria. A autenticação identifica quem acessa

Leia mais

SGB_REL_RelatorioSonar Versão 1.1

SGB_REL_RelatorioSonar Versão 1.1 SGB_REL_RelatorioSonar Versão 1.1 Histórico de Revisões Nome Alterações Data Versão Gabriel Vieira Criação do Documento 14/11/2012 1.0 Bruno Marquete Formatação do Documento e ajustes de conteúdo 27/11/2012

Leia mais

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado ARQUITETURA SISGRAD Manual de Utilização Versão: 2.0 Criação: 05 de julho de 2007 Autor: André Penteado Última Revisão: 09 de outubro de 2009 Autor: Alessandro Moraes Controle Acadêmico - Arquitetura SISGRAD

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 01 Orientação a Objetos Edirlei Soares de Lima Paradigmas de Programação Um paradigma de programação consiste na filosofia adotada na

Leia mais

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Curso Adonai QUESTÕES Disciplina Linguagem JAVA 1) Qual será o valor da string c, caso o programa rode com a seguinte linha de comando? > java Teste um dois tres public class Teste { public static void main(string[] args) { String a = args[0]; String

Leia mais

Instalando e configurando o Java Development Kit (JDK)

Instalando e configurando o Java Development Kit (JDK) Tutorial elaborado pelo professor José Gonçalo dos Santos Contato: jose.goncalo.santos@gmail.com Instalando e configurando o Java Development Kit (JDK) 1.1 Obtendo o JDK + JRE Para obter o JDK e o JRE

Leia mais

Rational Quality Manager. Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831

Rational Quality Manager. Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831 Rational Quality Manager Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831 1 Informações Gerais Informações Gerais sobre o RQM http://www-01.ibm.com/software/awdtools/rqm/ Link para o RQM https://rqmtreina.mvrec.local:9443/jazz/web/console

Leia mais

JAVA COM BANCO DE DADOS PROFESSORA DANIELA PIRES

JAVA COM BANCO DE DADOS PROFESSORA DANIELA PIRES Conteúdo O Projeto... 2 Criação de Pacotes... 4 Factory:... 6 DAO:... 15 GUI (Graphical User Interface ou Interface Gráfica de Cadastro)... 18 Evento SAIR... 23 Evento CADASTRAR... 24 1 O Projeto Arquivo

Leia mais

Classes de Entidades Persistentes JDB

Classes de Entidades Persistentes JDB Classes de Entidades Persistentes JDB Brasil, Natal-RN, 07 de setembro de 2011 Welbson Siqueira Costa www.jdbframework.com Nota de Retificação: em 11/12/2011 a Listagem 3 desse tutorial sofreu uma pequena

Leia mais

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java.

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java. Exceções em Java Miguel Jonathan DCC/IM/UFRJ (rev. abril de 2011) Resumo dos conceitos e regras gerais do uso de exceções em Java O uso de exceções permite separar a detecção da ocorrência de uma situação

Leia mais

Aplicações desktop a jato com JRuby e Netbeans

Aplicações desktop a jato com JRuby e Netbeans c a p a Aplicações desktop a jato com JRuby e Netbeans Construindo aplicações Swing combinando as melhores técnicas e ferramentas de Java e Ruby Demetrius Nunes (me@demetriusnunes.com): formado em Engenharia

Leia mais

Manual de Integração SMS

Manual de Integração SMS NG Sistemas Manual de Integração SMS Integração SMS TI 2015 w w w. n g s i s t e m a s. c o m. b r Índice Sumário executivo... 2 Integrações... 3 Desenho da solução.... 6 NG Sistemas 1 Sumário executivo

Leia mais

Introdução ao OpenUP (Open Unified Process)

Introdução ao OpenUP (Open Unified Process) Introdução ao OpenUP (Open Unified Process) Diferentes projetos têm diferentes necessidades de processos. Fatores típicos ditam as necessidades de um processo mais formal ou ágil, como o tamanho da equipe

Leia mais

Gerenciamento de Projetos de Software

Gerenciamento de Projetos de Software Gerenciamento de Projetos de Software Framework Ágil, Scrum Prof. Júlio Cesar da Silva Msc. 2º Encontro Ementa & Atividades Aula 1: Fundamentos do Gerenciamento de Projetos (p. 4) 30/abr (VISTO) Aula 2:

Leia mais

3.5. Cuidado com o modelo anêmico

3.5. Cuidado com o modelo anêmico 3.5. Cuidado com o modelo anêmico public Periodo adiaumasemana() { Calendar novofim = (Calendar) this.fim.clone(); novofim.add(calendar.day_of_month, 7); return new Periodo(inicio, novofim); E, com uma

Leia mais

Parte I. Demoiselle Vaadin

Parte I. Demoiselle Vaadin Parte I. Demoiselle Vaadin O Vaadin é um framework para construção de interfaces web que aplica ideias inovadoras. Apesar de usar o GWT como mecanismo para a exibição de seus componentes, eles tem características

Leia mais

Processo de Desenvolvimento de Software. Unidade V Modelagem de PDS. Luiz Leão luizleao@gmail.com http://www.luizleao.com

Processo de Desenvolvimento de Software. Unidade V Modelagem de PDS. Luiz Leão luizleao@gmail.com http://www.luizleao.com Processo de Desenvolvimento de Software Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático desta aula Modelo Cascata (Waterfall) ou TOP DOWN. Modelo Iterativo. Metodologia Ágil.

Leia mais

Demoiselle Report Guide. Demoiselle Report. Marlon Carvalho. Rodrigo Hjort. Robson Ximenes

Demoiselle Report Guide. Demoiselle Report. Marlon Carvalho. <marlon.carvalho@gmail.com> Rodrigo Hjort. <rodrigo.hjort@gmail.com> Robson Ximenes Demoiselle Report Guide Demoiselle Report Marlon Carvalho Rodrigo Hjort Robson Ximenes Demoiselle Report... v 1. Configuração

Leia mais

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5.

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5. Desenvolvendo aplicações em camadas com PHP 5. Talvez a primeira vista você ache estranha a palavra Camada em programação, mas o que vem a ser Camada? Segundo o dicionário: Camada 1 - Qualquer matéria

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: PROGRAMAÇÃO ORIENTADA A OBJETOS PROFESSOR: REINALDO GOMES ASSUNTO: REVISÃO DA INTRODUÇÃO A ORIENTAÇÃO

Leia mais

PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof. Marcelo da Silveira Siedler siedler@gmail.com

PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof. Marcelo da Silveira Siedler siedler@gmail.com PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof. Marcelo da Silveira Siedler siedler@gmail.com SERVIÇO NACIONAL DE APRENDIZAGEM COMERCIAL FACULDADE DE TECNOLOGIA SENAC PELOTAS Introdução

Leia mais

http://aden.psl.gov.ao/wiki/environmentdevelpt

http://aden.psl.gov.ao/wiki/environmentdevelpt Página 1 de 20 Wiki Histórico Cronograma Ver Código Visualizar Tickets Pesquisa Tags Discussion Blog Desenvolvimento ambiente Eclipse Desenvolvimento existem em muitos ambientes Linux, mas a nossa escolha

Leia mais

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Especialização em desenvolvimento para web com interfaces ricas Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Objetivos Conceito de exceções Tratar exceções pelo uso de try, catch e

Leia mais

LOGGING DE EVENTOS COM LOG4J

LOGGING DE EVENTOS COM LOG4J LOGGING DE EVENTOS COM LOG4J por Luiz Gustavo Stábile de Souza O que é logging? Fazer o logging de uma aplicação é uma das possíveis maneiras de debugá-la, registrando em algum meio (arquivo, enviando

Leia mais

No artigo anterior explicamos. Desenvolvimento de Software Dirigido por Caso de Uso. Parte II: Especificando Caso de Uso

No artigo anterior explicamos. Desenvolvimento de Software Dirigido por Caso de Uso. Parte II: Especificando Caso de Uso Desenvolvimento de Software Dirigido por Caso de Uso Parte II: Especificando Caso de Uso Vinicius Lourenço de Sousa viniciuslsousa@gmail.com Atua no ramo de desenvolvimento de software há mais de 10 anos,

Leia mais

Documentação Usando o Javadoc

Documentação Usando o Javadoc Documentação Usando o Javadoc Prof. MSc. João Carlos Pinheiro jcpinheiro@cefet-ma.br Versão 2.1 Última Atualização: 04/2005 1 Comentários e Documentação Comentários em Java Existem três tipos de comentários

Leia mais

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS João Gabriel Ganem Barbosa Sumário Motivação História Linha do Tempo Divisão Conceitos Paradigmas Geração Tipos de Dados Operadores Estruturada vs

Leia mais

Especialização em Arquitetura e Engenharia de Software

Especialização em Arquitetura e Engenharia de Software Especialização em Arquitetura e Engenharia de Software O curso vai propiciar que você seja um especialista para atua atuar na área de Arquitetura de Software em diferentes organizações, estando apto a:

Leia mais

SOA Introdução. SOA Visão Departamental das Organizações

SOA Introdução. SOA Visão Departamental das Organizações 1 Introdução A Organização é a forma pela qual nós coordenamos nossos recursos de todos os tipos para realizar o trabalho que nos propusemos a fazer. A estrutura de nossas organizações manteve-se basicamente

Leia mais

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013 Introdução à orientação a objetos João Tito Almeida Vianna 25/05/2013 Roteiro Aula 2 Motivação Revisão dos conceitos da aula 1 Preparação para os exercícios Exercícios propostos 2 Motivação A orientação

Leia mais

Projeto de Software Orientado a Objeto

Projeto de Software Orientado a Objeto Projeto de Software Orientado a Objeto Ciclo de Vida de Produto de Software (PLC) Analisando um problema e modelando uma solução Prof. Gilberto B. Oliveira Estágios do Ciclo de Vida de Produto de Software

Leia mais

JPA: Persistência padronizada em Java

JPA: Persistência padronizada em Java JPA: Persistência padronizada em Java FLÁVIO HENRIQUE CURTE Bacharel em Engenharia de Computação flaviocurte.java@gmail.com Programação Orientada a Objetos X Banco de Dados Relacionais = Paradigmas diferentes

Leia mais

UMA ABORDAGEM SOBRE TESTES AUTOMATIZADO DE SOFTWARES EM AMBIENTES DE DESENVOLVIMENTO

UMA ABORDAGEM SOBRE TESTES AUTOMATIZADO DE SOFTWARES EM AMBIENTES DE DESENVOLVIMENTO UMA ABORDAGEM SOBRE TESTES AUTOMATIZADO DE SOFTWARES EM AMBIENTES DE DESENVOLVIMENTO Robson L. Nascimento 1, Késsia R. C. Marchi¹ 1 Universidade Paranaense (UNIPAR) Paranavaí-PR-Brasil robsonluisn@yahoo.com.br,

Leia mais

Estudo de caso de solução integrada ao AutoCAD através da API.NET para conversão de desenhos

Estudo de caso de solução integrada ao AutoCAD através da API.NET para conversão de desenhos Estudo de caso de solução integrada ao AutoCAD através da API.NET para conversão de desenhos Augusto Cesar Silva Brighenti Álamo Soluções em TI A sessão será um estudo de caso de uma solução de integração

Leia mais

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas Programação com Objectos Processamento de Dados I 4. Classes Abstractas 1 Conceito de classe abstracta Declaração de uma classe abstracta Implicações e características das classes abstractas Utilização

Leia mais

Livro de Receitas. Modelação Engenharia de Software Sistemas Distribuídos. 2009-04-17 Versão 1.1. Framework de aplicações com Web Services

Livro de Receitas. Modelação Engenharia de Software Sistemas Distribuídos. 2009-04-17 Versão 1.1. Framework de aplicações com Web Services Modelação Engenharia de Software Sistemas Distribuídos Departamento Engenharia Informática Livro de Receitas Framework de aplicações com Web Services 2009-04-17 Versão 1.1 Índice Índice... 2 Nota prévia...

Leia mais

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 1. Conceitos de Orientação a Objetos Introdução O paradigma da POO Classes

Leia mais

WebWork 2. João Carlos Pinheiro. jcpinheiro@cefet-ma.br

WebWork 2. João Carlos Pinheiro. jcpinheiro@cefet-ma.br WebWork 2 João Carlos Pinheiro jcpinheiro@cefet-ma.br Versão: 0.5 Última Atualização: Agosto/2005 1 Agenda Introdução WebWork 2 & XWork Actions Views Interceptadores Validação Inversão de Controle (IoC)

Leia mais

Criando uma agenda simples com NetBeans 6.5

Criando uma agenda simples com NetBeans 6.5 Criando uma agenda simples com NetBeans 6.5 (Swing application framework e Beansbinding) Já faz algum tempo que escrevi uma agenda simples usando o Eclipse com o Visual Class Editor. Demorei em torno de

Leia mais

Estudo Dirigido - Parte 1

Estudo Dirigido - Parte 1 Linguagem Java para Web - JSP Professora Lucélia Estudo Dirigido - Parte 1 Na primeira parte deste tutorial, vamos receber os dados de um formulário e verificar se os dados foram ou não preenchidos. Se

Leia mais

JavaScript 2.0X 1.0 3.0X 1.1 4.0 4.05 1.2 4.06 4.61 1.3 5.0 1.4 6.0 1.5

JavaScript 2.0X 1.0 3.0X 1.1 4.0 4.05 1.2 4.06 4.61 1.3 5.0 1.4 6.0 1.5 JavaScript Diego R. Frank, Leonardo Seibt FIT Faculdades de Informática de Taquara Fundação Educacional Encosta Inferior do Nordeste Av. Oscar Martins Rangel, 4500 Taquara RS Brasil difrank@terra.com.br,

Leia mais

Processamento de dados XML

Processamento de dados XML Processamento de dados XML César Vittori cvittori@inf.ufrgs.br Outubro de 2000 Resumo Considerações no desenvolvimento de software para processar dados XML. Processamento de uma DTD para interpretar marcação

Leia mais

Nos artigos anteriores apresentamos. Desenvolvimento de Software Dirigido por Caso de Uso Parte III: Caso de Uso de Negócio

Nos artigos anteriores apresentamos. Desenvolvimento de Software Dirigido por Caso de Uso Parte III: Caso de Uso de Negócio Desenvolvimento de Software Dirigido por Caso de Uso Parte III: Caso de Uso de Negócio Vinicius Lourenço de Sousa vinicius.lourenco.sousa@gmail.com Atua no ramo de desenvolvimento de software há mais de

Leia mais

Java Exemplo MDI. Tela Principal

Java Exemplo MDI. Tela Principal Java Exemplo MDI Nesta aula criaremos uma aplicação simples de cadastro para avaliar o nível de dificuldade/facilidade que é desenvolver softwares com a tecnologia Java. No NetBeans, crie um novo projeto

Leia mais

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans. 1 - Criando uma classe em Java Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans. Antes de criarmos a(s) classe(s) é necessário criar o projeto

Leia mais