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

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

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

Transcrição

1 c a p a Lucas Souza é 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 e instrutor pela Caelum. Entusiasta de metodologias ágeis e editor-chefe do InfoQ Brasil. Paulo Silveira é bacharel e mestre em Ciência da Computação pela USP, trabalha com Java há 10 anos, sendo 6 anos com consultoria, desenvolvimento e treinamento na Caelum. Evolução do Design através de Testes e o TDD Como os testes de unidade impactam diretamente no design da sua aplicação Os testes de unidade já são obrigatórios em muitas empresas e ganham cada vez mais importância no mercado. Ainda é considerado por muitos apenas como uma forma de demonstrar a corretude do seu sistema, mas os testes de unidade vão muito além: são uma forma de validar o design de sua aplicação, garantindo a possibilidade de evoluir, mudar e refatorar o seu código. Veremos, através de um exemplo, como os testes, aliados ao Test Driven Development, possuem o potencial de manter seu design com um baixo acoplamento. Testes de unidade têm se tornado cada vez mais imprescindíveis no atual mercado de desenvolvimento de software. Além de ser uma maneira de diminuirmos a possível quantidade de problemas que o software pode ter, a principal característica dos testes de unidade sem dúvida é aumentar a qualidade do código, diminuindo o acoplamento e obtendo assim um software de fácil manutenção e extensão. Devido a sua existência, a equipe se sente tranquila para efetuar refatorações, manutenções ou até mesmo fazer a adição de novas funcionalidades. Porém obter um código com baixo acoplamento e que seja de fácil manutenção não é uma tarefa trivial de ser alcançada. O que ocorre, muitas vezes, é que ao desenvolver alguma funcionalidade, tomamos decisões que podem tornar o código difícil de ser testado. O Test Driven Development (TDD) é uma técnica de desenvolvimento que pode ser utilizada para evitar esse tipo de problema. O TDD nos questiona frequentemente sobre questões como o Princípio da Responsabilidade Única (SRP) e Não Se Repita (DRY), e esses questionamentos surgem quando sentimos alguma dificuldade para criar o teste. Utilizando TDD o design das classes emerge de forma poderosa (pela facilidade de extensão) e simples (pela fácil manutenabilidade). TDD não substituirá seus princípios e decisões sobre o design ou mesmo seus diagramas UML, a ideia é validar e melhorar suas decisões de design. TDD é uma técnica que ajuda na criação e evolução do design, mas não é a única maneira de fazê-lo. Nosso objetivo aqui é demonstrar na prática como o TDD vai acelerar essa evolução de design. 32

2 Exemplo: enviando um ao cadastrar um novo usuário Para nossa demonstração, considere que em um sistema precisamos que, ao adicionar um novo usuário, um seja enviado dando boas-vindas a esse cliente. Em um pensamento rápido, podemos criar um método estático envia dentro de uma classe EnviadorDe . Invocaremos esse método de dentro do nosso NovoUsuarioController, que será responsável por adicionar o novo usuário no banco de dados e enviar o de boas-vindas, como nas Listagens 1 e 2. Para isso, considere que também temos uma classe DaoFactory, responsável por retornar as classes do sistema responsáveis pela persistência de dados. Listagem 1. Classe NovoUsuarioController. EnviadorDe .envia (usuario.get ()); Listagem 2. Classe EnviadorDe . import org.apache.commons.mail. exception; import org.apache.commons.mail.simple ; public class EnviadorDe { public static void envia (string para) { try { Simple = new Simple (); .sethostname( smtp.server.com ); .addto(para).setfrom( Lucas Souza ).setsubject( Confirmação de cadastro ).setmsg( Seja bem-vindo ).send(); catch ( Exception e) { e.printstacktrace(); É um código que parece funcionar, mas será que possui um bom design? Está desacoplado o suficiente? Para garantir o funcionamento desse método de adição de novo usuário, será criado um teste de unidade, que verifica se o foi enviado corretamente. A Listagem 3 mostra como podemos preparar o teste de unidade. Listagem 3. Cenário do teste de unidade da classe NovoUsuarioController. Com o usuário e o controller criados, estaríamos prontos para fazer as asserções e assim garantir que o método adiciona() está funcionando como esperado. Mas como verificar se um está sendo enviado para o usuário? Se mantivermos o teste com o código assim, um de verdade será disparado para esse cliente cada vez que o executarmos! Uma alternativa seria, antes de iniciar os testes, levantar um servidor SMTP que apenas simulasse o envio do . Poderíamos até fazer isso via Java no setup do teste, programaticamente, ao usar um servidor como o Apache James. Porém, com isso, começamos a nos complicar com um teste de unidade que deveria ser bastante simples. Dessa forma, ele estaria se tornando um teste de integração. O problema neste caso é que não temos como verificar de uma maneira fácil se o foi enviado, afinal, dentro do método adiciona() mantemos um acoplamento muito forte com a classe EnviadorDe . Isso ocorre devido a ela ser uma dependência que não podemos mudar com facilidade. Outra maneira um tanto complicada de evitar que o método de envio de fosse realmente invocado (para não enviar o e apenas testá-lo) seria, através de um classloader customizado e manipulação de bytecode, os quais trocariam a implementação desse método. Alguns frameworks de mock (se não sabe o que é mock, aguarde que será explicado mais a frente) possibilitam isso, mas esse é um forte indício de alto acoplamento. Para testar esse método de uma forma mais elegante, em vez de usar essas opções apresentadas, será necessário refatorar o nosso controller: em vez de procurarmos o que queremos, vamos inverter isso e receber a dependência no construtor. Isso é, vamos aplicar o princípio de inversão de controle através da injeção de dependências, como na Listagem 4. Para essa mudança ser possível, o método envia () da classe EnviadorDe apresentada na Listagem 2 precisará deixar de ser estático. Será que agora podemos testar facilmente nossa classe? NovoUsuarioController novousuario = new NovoUsuarioController(); // que verificações faço aqui? Listagem 4. Removendo acoplamento com EnviadorDe . private EnviadorDe enviadorde ; public NovoUsuarioController(EnviadorDe enviadorde ) { this.enviadorde = enviadorde ; enviadorde .envia (usuario.get ()); 33

3 Utilizando Mocks Uma solução eficaz para o teste dessa nova versão da classe é o uso de mock objects, que nos permite isolar os testes das classes de um sistema de forma simples. Como muitos já conhecem, um mock object é um objeto falso criado com base em uma estrutura definida, que pode simular comportamentos de dependências e verificar a corretude na interação da classe testada com a mesma. No caso do exemplo, a classe NovoUsuarioController depende diretamente da classe EnviadorDe para cumprir suas responsabilidades. Ao invés de utilizarmos a classe EnviadorDe , usaremos outra, que finge fazer o que essa dependência deveria fazer, porém é mais simples e fácil de ser usada no ambiente de testes, por termos controle sobre ela. O código atual da classe NovoUsuarioController já está com um design bem melhor, que nos possibilita injetar um mock no lugar da dependência. Para fazer isso, precisaríamos estender a classe EnviadorDe e reescrever o método envia (), de tal forma que ele apenas fingisse enviar um . Essa invocação do método também seria registrada para depois ser usada na asserção do teste. Sendo assim, essa nova classe-filha seria utilizada para os testes. Apesar dessa solução funcionar, podemos usar algo mais elegante para evoluir o design da aplicação. Devemos refatorar: agora a classe NovoUsuarioController passará a receber como dependência (Listagem 6) uma referência para alguém que implemente uma nova interface chamada Enviador (Listagem 5) que possui um único método envia () declarado (o que pode ser feito através de uma IDE como o Eclipse, que oferece a refatoração automatizada Extract Interface ). Agora, durante o teste (Listagem 8), passaríamos um objeto especial, da classe Enviador Dummy, que implementa a interface Enviador e simula um envio de (Listagem 7). Esse dummy é um mock menos inteligente, já que não verifica e nem realiza nenhuma operação. No teste, basta fazer uma asserção para verificar se o destinatário do que foi utilizado dentro do mock é igual ao do usuário que está sendo cadastrado. Listagem 5. Interface Enviador. public interface Enviador { void envia (string para); Listagem 6. Troca da dependência da classe Enviador para a interface Enviador. private Enviador enviadorde ; public NovoUsuarioController(Enviador enviadorde ) { this.enviadorde = enviadorde ; enviadorde .envia (usuario.get ()); Listagem 7. Criação do EnviadorDe Dummy. public class EnviadorDe Dummy implements Enviador { private String enviadopara; public void envia (string para) { // simulação de envio de this.enviadopara = para; public String getenviadopara() { return this.enviadopara; Listagem 8. Teste usando um mock object. EnviadorDe Dummy mock = new EnviadorDe Dummy(); NovoUsuario novousuario = new NovoUsuario(mock); Assert.assertEquals(usuario.get (), mock.getenviadopara()); Apesar de ter sido fácil criar o mock para a interface Enviador como um objeto bobo (dummy object), muitas vezes a dependência pode ter métodos que são difíceis de serem simulados, pois retornam outros objetos, por exemplo. Outra dificuldade que podemos enfrentar é quando a unidade que estamos testando possui muitas dependências, o que acarretaria na criação de mocks para cada uma delas. Ao enfrentarmos estas situações uma boa opção seria a utilização de ferramentas que criam em tempo de execução objetos mockados para serem utilizados e nos testes de unidade. Criação automatizada de mocks Um dos frameworks que vem se destacando no mercado é o Mockito (http://mockito.org), por ser simples e de fácil entendimento, considerado uma evolução em relação às outras alternativas. Utilizaremos ele para mockar nossa dependências, mas, como visto na edição 31 da Mundoj, o Jmock é uma outra excelente opção Para utilizarmos o mockito, basta fazer o download no site (ver referências) e colocar o mockito-all-x.x.x.jar no classpath da aplicação. O código de teste com o uso do Mockito está apresentado na Listagem

4 Listagem 9. Mock de dependências com mockito. Criar mocks utilizando frameworks do tipo Mockito torna-se uma tarefa muito simples e que pode nos levar a acreditar que nosso design está simples e extensível. Porém, na maioria das vezes, isso indica um cenário em que o código está muito acoplado e ruim, um sinal de que a unidade que estamos testando talvez esteja fazendo mais do que deveria por ter muitas dependências. No caso de encontrar esse tipo de problema, o melhor a se fazer é refatorar essa classe de forma a diminuir suas dependências, separando as responsabilidades e testando cada uma das novas classes individualmente. Enviador mock = Mockito.mock(Enviador.class); NovoUsuarioController novousuario = new NovoUsuarioController(mock); Mockito.verify(mock).envia (usuario.get ()); E se usássemos TDD? Como sabemos, Test-Driven Development é o nome dado a prática de criar os testes antes mesmo de escrevermos o código que queremos que seja testado. Muitos citam que sua grande vantagem é que dessa forma não teremos código que não possua teste, mas essa realmente não é a única vantagem. O primeiro passo para utilizar o Mockito é pedir para que ele crie através do seu método principal, o método mock(), um objeto mockado a partir de uma interface ou classe. Em nossos testes precisamos de um mock da interface Enviador, que é obtida invocando Mockito.mock(Enviador.class). Uma das principais características do Mockito é que quando criamos algum mock não precisamos definir antecipadamente quais métodos serão invocados nele, como seria feito se utilizásemos um stub. Em seguida, basta passarmos a dependência para a classe NovoUsuarioController e depois da execução do método fazemos a verificação para saber quais métodos do mock foram chamados no método adiciona(), comprovando que o método realmente invoca a funcionalidade para envio de quando o cadastro é finalizado. Isso é feito utilizando o método verify() da classe Mockito. No teste da Listagem 9 verificamos se o método envia () foi invocado recebendo como parâmetro a propriedade do objeto Usuario que está sendo cadastrado. O Mockito pode ajudar em muitas tarefas durante o desenvolvimento de testes de unidade. Considere que o cenário de teste em que método envia- () deve retornar uma exceção quando o de destino indicado for inválido. Um teste utilizando Mockito que verifica esse comportamento está representado na Listagem 10. No exemplo, o comportamento esperado para a classe NovoUsuarioController seria enviar uma exceção do tipo IllegalArgumentException Listagem 10. Teste mais avançado utilizando mockito. (expected = IllegalArgumentException.class) public void retornaexcecaoquando forinvalido() { usuario.set ( lucas.souza#caelum.com.br ); usuario.setusuario( lucas.souza ); usuario.setsenha( ); Enviador mock = Mockito.mock(Enviador.class); Mockito.doThrow(new IllegalArgumentException()).when(mock).envia (usuario.get ()); NovoUsuarioController novousuario = new NovoUsuarioController(mock); A vantagem de fazer os testes primeiro é que não precisaríamos repensar todo o design da nossa aplicação como exemplificado no exemplo deste artigo. Se tivéssemos guiado nosso desenvolvimento a partir dos testes, terminaríamos com um design mais simples, abstrações mais bem definidas e códigos mais reutilizáveis. E por consequência ganharíamos a confiança no código implementado a partir dos próprios testes. No artigo, para obter um design elegante e simples, várias vezes tivemos que refatorar o código e o teste. Utilizando TDD também faríamos refatorações, que é uma ótima prática, mas com certeza chegaríamos no design ideal bem mais facilmente do que fazendo os testes depois. Por que esse design melhorado já apareceria desde cedo? Vamos ilustrar isso escrevendo o teste para a classe NovoUsuarioController, considerando que ainda não implementamos nem essa classe, nem o enviador de . A Listagem 11 esboça o início dessa situação. Listagem 11. Mock de dependências com mockito. NovoUsuarioController novousuario = new NovoUsuarioController(); // aqui preciso testar se o foi enviado. Como? Escrevendo o teste dessa Listagem 11, logo perceberíamos duas coisas: precisamos criar a classe NovoUsuarioController e necessitamos que ela tenha um método que adiciona um usuário. Isso já mostra como o teste guia também a criação de como a classe interage com seus clientes. Depois disso, como verificar se o foi enviado? De alguma forma precisamos de um objeto (um mock?) que vá dizer se foi tentado enviar um para o Esse objeto de alguma forma tem de estar relacionado com o NovoUsuarioController. Para fazer isso, passaremos esse objeto via construtor (poderia ser de outra forma, 35

5 como usando um método setter) para o controller. A fim de tornar mais fácil o processo de criar um mock para esse objeto, será criada uma interface para abstrair seu comportamento. Dado esse raciocínio, cairíamos diretamente num código muito semelhante ao da Listagem 9. Outra prova de como o TDD auxilia no design é que dificilmente teríamos usado o DaoFactory com métodos estáticos, pois perceberíamos que seria complicado conseguir simular essa parte na hora de criar um teste que verificasse se o DAO foi acionado ao adicionar um novo usuário. Normalmente percebe-se que é importante tornar o código mais desacoplado, por exemplo, recebendo no construtor o UsuarioDAO. Ou talvez outra solução, como recebê-lo através de um setter ou ainda utilizando uma busca em um registro. Porém, a injeção via construtor acaba sendo uma alternativa muito popular e demonstra vantagens em relação a outras abordagens de inversão de controle, já que isso impede que o objeto seja instanciado e fique num estado inconsistente, sem ter suas dependências preparadas. São por esses motivos que algumas pessoas chegam até a se referir ao TDD como Test-Driven Design. TDD e injeção de dependências Injeção de dependências é uma maneira de diminuir acoplamento, na qual a classe recebe suas dependências externamente, através de métodos ou construtores, ao invés de criá-las de forma interna. Evitar que classes busquem suas dependências torna possível construirmos testes de unidade que foquem apenas no comportamento da classe que está sendo testada, ou seja, qualquer mudança que ocorra em alguma dependência da classe testada não deveria impactar no teste. Com TDD alcançamos isso de maneira mais fácil, porque quando vamos escrever os testes percebemos a necessidade de torná-los de fato um teste de unidade. Por exemplo, no caso do teste da adição de um novo usuário perceberíamos prematuramente que o envio de não deveria ser um envio real que utiliza um SMTP de verdade. No exemplo de teste apresentado, a classe NovoUsuarioController deve ser independente do comportamento da classe EnviadorDe . Isso nos levaria a perceber a necessidade de desacoplar o código através da injeção da dependência. Considerações finais O teste de unidade já se provou essencial, mas sabemos como é difícil criar esses testes se o código já está pronto: ele pode estar (e provavelmente está) muito acoplado, sendo difícil evitar que os testes de unidade se tornem de integração. Muitos desistem de criar testes por essa dificuldade inicial, ao tentar criar testes para código já existente. O uso do TDD, além de trazer o benefício de garantir que você vai ter uma boa cobertura de testes e só vai escrever o que realmente é necessário, implica em um design mais desacoplado. Isso pode ser explicado por um motivo muito simples: sem design desacoplado, criar um teste de unidade é bastante difícil. Logo, o TDD de certa maneira o força a ir em direção a inversão de controle, muitas vezes através de injeção de dependências, de uma maneira clara e natural. Referências Independentemente se usamos algum framework de injeção de dependências (Spring, Guice, Pico etc.) no ambiente de produção, nos testes é importante utilizarmos essa práticaa para que os objetos mockados possam substituir as dependências, isolando assim a unidade que estamos testando. 36

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

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

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

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

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

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

Fixture-Factory. Criando objetos para seus testes. Como criar objetos através de templates para serem utilizados como massa de dados em seus testes.

Fixture-Factory. Criando objetos para seus testes. Como criar objetos através de templates para serem utilizados como massa de dados em seus testes. fixture-factory_ Fixture-Factory Criando objetos para seus testes Como criar objetos através de templates para serem utilizados como massa de dados em seus testes. Começamos testando métodos simples, mas

Leia mais

Prototype, um Design Patterns de Criação

Prototype, um Design Patterns de Criação Prototype, um Design Patterns de Criação José Anízio Pantoja Maia Este artigo tem como finalidade compreender o funcionamento do padrão de projeto prototype, serão abordados os participantes que compõe

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

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

Parte I. Demoiselle Mail

Parte I. Demoiselle Mail Parte I. Demoiselle Mail Para o envio e recebimento de e-s em aplicativos Java, a solução mais natural é usar a API JavaMail [http:// www.oracle.com/technetwork/java/java/index.html]. Ela provê um framework

Leia mais

Há várias práticas e abordagens que facilitam a separação de responsabilidades, como veremos nos próximos tópicos.

Há várias práticas e abordagens que facilitam a separação de responsabilidades, como veremos nos próximos tópicos. Há várias práticas e abordagens que facilitam a separação de responsabilidades, como veremos nos próximos tópicos. 4.2. Gerencie suas dependências através de injeção Mesmo com o baixo acoplamento haverá

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

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

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

VRAPTOR: O FRAMEWORK DE APRENDIZADO JAVA WEB AUGUSTO BEVILAQUA RAFAEL CIRINO LACERDA SAULO ALMEIDA LIMA

VRAPTOR: O FRAMEWORK DE APRENDIZADO JAVA WEB AUGUSTO BEVILAQUA RAFAEL CIRINO LACERDA SAULO ALMEIDA LIMA VRAPTOR: O FRAMEWORK DE APRENDIZADO JAVA WEB AUGUSTO BEVILAQUA RAFAEL CIRINO LACERDA SAULO ALMEIDA LIMA RESUMO Framework MVC Java voltado para facilitar o desenvolvimento de aplicações web, o VRaptor é

Leia mais

Casa do Código Livros para o programador Rua Vergueiro, 3185-8º andar 04101-300 Vila Mariana São Paulo SP Brasil

Casa do Código Livros para o programador Rua Vergueiro, 3185-8º andar 04101-300 Vila Mariana São Paulo SP Brasil 2012, Casa do Código Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998. Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem autorização prévia por escrito da

Leia mais

Facebook. Java com o. Integrando Aplicações. Descubra como é fácil criar uma aplicação para rodar no Facebook. _capa

Facebook. Java com o. Integrando Aplicações. Descubra como é fácil criar uma aplicação para rodar no Facebook. _capa _capa Integrando Aplicações Java com o Facebook Descubra como é fácil criar uma aplicação para rodar no Facebook Desde o lançamento oficial do Facebook, em 2004, o número de usuários vem aumentando a cada

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 5. Tratamento de Exceções Introdução e conceitos Capturando exceção usando

Leia mais

4 O Workflow e a Máquina de Regras

4 O Workflow e a Máquina de Regras 4 O Workflow e a Máquina de Regras O objetivo do workflow e da máquina de regras é definir um conjunto de passos e regras configuráveis. Ao longo de sua execução, um usuário consegue simplificar o seu

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

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

Universidade Federal Rural de Pernambuco. Bacharelado em Sistemas de Informação. Disciplina: Análise e Projeto de Sistemas de Informação

Universidade Federal Rural de Pernambuco. Bacharelado em Sistemas de Informação. Disciplina: Análise e Projeto de Sistemas de Informação Universidade Federal Rural de Pernambuco Bacharelado em Sistemas de Informação Disciplina: Análise e Projeto de Sistemas de Informação Docente: Rodrigo Aluna: Thays Melo de Moraes Diagramas do Projeto

Leia mais

Invocação de Métodos Remotos

Invocação de Métodos Remotos Invocação de Métodos Remotos Java RMI (Remote Method Invocation) Tópicos Tecnologia RMI Introdução Modelo de camadas do RMI Arquitetura Fluxo de operação do RMI Passos para implementação Estudo de caso

Leia mais

Desenvolvimento Guiado por Testes

Desenvolvimento Guiado por Testes Desenvolvimento Guiado por Testes Test-Driven Development (TDD) Guilherme Chapiewski http://gc.blog.br gc@mandic.com.br O que é TDD? Regras fundamentais do TDD: Escreva o teste da implementação ANTES de

Leia mais

MAC-0462 Padrões arquiteturais para sistemas baseados em componentes reconfiguráveis

MAC-0462 Padrões arquiteturais para sistemas baseados em componentes reconfiguráveis MAC-0462 Padrões arquiteturais para sistemas baseados em componentes reconfiguráveis Microkernel Service Locator Dependency Injection Exemplo Classe Auditor Salva registros de eventos no banco de dados

Leia mais

Geração e execução de scripts de teste em aplicações web a partir de casos de uso direcionados por comportamento 64

Geração e execução de scripts de teste em aplicações web a partir de casos de uso direcionados por comportamento 64 direcionados por comportamento 64 5 Estudo de caso Neste capítulo serão apresentadas as aplicações web utilizadas na aplicação da abordagem proposta, bem como a tecnologia em que foram desenvolvidas, o

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

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

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

Tópicos de Orientação a Objetos

Tópicos de Orientação a Objetos Capítulo 3 Tópicos de Orientação a Objetos Um bom design de software visa a uma arquitetura flexível que permita futuras alterações, facilite a produção de código organizado e legível, maximizando seu

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

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

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 06 PROFª BRUNO CALEGARO UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 06 PROFª BRUNO CALEGARO Santa Maria, 27 de Setembro de 2013. Revisão aula anterior Desenvolvimento Ágil de Software Desenvolvimento e entrega

Leia mais

Aspectos para Leigos. Programação Orientada a. Aprenda a dar os primeiros passos no paradigma orientado a aspectos usando o AspectJ com anotações.

Aspectos para Leigos. Programação Orientada a. Aprenda a dar os primeiros passos no paradigma orientado a aspectos usando o AspectJ com anotações. Eduardo Guerra (guerra@mundoj.com.br / Twitter @emguerra) é desenvolvedor de frameworks, pesquisador em design de software, editor-chefe da revista MundoJ e professor do ITA, onde concluiu sua graduação,

Leia mais

Threads e Sockets em Java. Threads em Java. Programas e Processos

Threads e Sockets em Java. Threads em Java. Programas e Processos Threads em Java Programas e Processos Um programa é um conceito estático, isto é, um programa é um arquivo em disco que contém um código executável por uma CPU. Quando este programa é executado dizemos

Leia mais

: : www.mundoj.com.br : :

: : www.mundoj.com.br : : : : www.mundoj.com.br : : Marcelo Zeferino (marceloczeferino@gmail.com): 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

Leia mais

CS-14. Algoritmos e Estrutura de Dados em Java

CS-14. Algoritmos e Estrutura de Dados em Java CS-14 Algoritmos e Estrutura de Dados em Java A Caelum atua no mercado com consultoria, desenvolvimento e ensino em computação. Sua equipe participou do desenvolvimento de projetos em vários clientes e,

Leia mais

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio 32 3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio Este capítulo apresenta o framework orientado a aspectos para monitoramento e análise de processos de negócio

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

Pós Graduação Engenharia de Software

Pós Graduação Engenharia de Software Pós Graduação Engenharia de Software Ana Candida Natali COPPE/UFRJ Programa de Engenharia de Sistemas e Computação FAPEC / FAT Estrutura do Módulo Parte 1 QUALIDADE DE SOFTWARE PROCESSO Introdução: desenvolvimento

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

Criando Frameworks Inteligentes com PHP. Uma abordagem prática: vantagens, aplicações e procedimentos.

Criando Frameworks Inteligentes com PHP. Uma abordagem prática: vantagens, aplicações e procedimentos. Criando Frameworks Inteligentes com PHP Uma abordagem prática: vantagens, aplicações e procedimentos. Apresentação Equipes ao redor do mundo utilizam diferentes padrões de projeto, de acordo com suas necessidades

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Marcelo Lobosco DCC/UFJF Comunicação em Sistemas Distribuídos Aula 06 Agenda Modelo Cliente-Servidor (cont.) Invocação Remota de Método (Remote Method Invocation RMI) Visão Geral

Leia mais

Enterprise Java Beans

Enterprise Java Beans Enterprise Java Beans Prof. Pasteur Ottoni de Miranda Junior DCC PUC Minas Disponível em www.pasteurjr.blogspot.com 1-O que é um Enterprise Java Bean? O Entertprise Java Bean (EJB) é um componente server-side

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

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma: 1 Introdução A utilização de frameworks como base para a construção de aplicativos tem sido adotada pelos desenvolvedores com três objetivos básicos. Primeiramente para adotar um padrão de projeto que

Leia mais

REFLEXÃO EM JAVA. INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III

REFLEXÃO EM JAVA. INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III REFLEXÃO EM JAVA INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III ARQUITECTURAS DE SOFTWARE F. Mário Martins 2011 CLASS A partir de JAVA5 a classe java.lang.class

Leia mais

Programação Orientada a Objetos - 3º semestre AULA 08 Prof. André Moraes

Programação Orientada a Objetos - 3º semestre AULA 08 Prof. André Moraes Pág 50 Programação Orientada a Objetos - 3º semestre AULA 08 Prof. André Moraes 10 CORREÇÃO DE QUESTÕES DE AVALIAÇÃO 1 PARTE I - AVALIAÇÃO TEÓRICA 11 RESPONDA AS QUESTÕES ABAIXO: A) Qual a diferença entre

Leia mais

PROJETO DA DISCIPLINA. PES II Processo de Engenharia de Software II

PROJETO DA DISCIPLINA. PES II Processo de Engenharia de Software II UNIOESTE - Universidade Estadual do Oeste do Paraná CCET - Centro de Ciências Exatas e Tecnológicas Colegiado de Informática Curso de Bacharelado em Informática PROJETO DA DISCIPLINA PES II Processo de

Leia mais

Trilha Agile TDD e 20 coisas que você precisa saber

Trilha Agile TDD e 20 coisas que você precisa saber Trilha Agile TDD e 20 coisas que você precisa saber Camilo Lopes Quem sou eu?! Trabalha com desenvolvimento de software desde 2003. Atualmente Desenvolvedor de Software na ADP Labs, escritor do livro "Guia

Leia mais

7HVW'ULYHQ'HYHORSPHQW

7HVW'ULYHQ'HYHORSPHQW 81,9(56,'$'()('(5$/'25,2*5$1'('268/,167,7872'(,1)250È7,&$ 7HVW'ULYHQ'HYHORSPHQW Otávio Gaspareto REJDVSDUHWR#LQIXIUJVEU,QWURGXomR 7HVWGULYHQGHYHORSPHQW, ou TDD, também conhecido por WHVWILUVWGHYHORSPHQW,

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA CURSO DE GRADUAÇÃO EM SISTEMAS DE INFORMAÇÃO. Contribuições do MDA para o desenvolvimento de software

UNIVERSIDADE FEDERAL DE SANTA CATARINA CURSO DE GRADUAÇÃO EM SISTEMAS DE INFORMAÇÃO. Contribuições do MDA para o desenvolvimento de software UNIVERSIDADE FEDERAL DE SANTA CATARINA CURSO DE GRADUAÇÃO EM SISTEMAS DE INFORMAÇÃO Contribuições do MDA para o desenvolvimento de software Anna Carla Mohr Verner Helder Eugenio dos Santos Puia Florianópolis,

Leia mais

Laravel: De Aprendiz a Artesão (Brazilian Portuguese)

Laravel: De Aprendiz a Artesão (Brazilian Portuguese) Laravel: De Aprendiz a Artesão (Brazilian Portuguese) Taylor Otwell and Pedro Borges This book is for sale at http://leanpub.com/laravel-pt-br This version was published on 2013-10-01 This is a Leanpub

Leia mais

Tópicos abordados. Testes de Software (Capítulo 8 Sommerville) 2/2/2015. Testes de desenvolvimento. Desenvolvimento dirigido a testes

Tópicos abordados. Testes de Software (Capítulo 8 Sommerville) 2/2/2015. Testes de desenvolvimento. Desenvolvimento dirigido a testes Testes de Software (Capítulo 8 Sommerville) slide 569 2011 Pearson Prentice Hall. Todos os direitos reservados. Tópicos abordados Testes de desenvolvimento Desenvolvimento dirigido a testes Testes de release

Leia mais

Padrão Arquitetura em Camadas

Padrão Arquitetura em Camadas Padrão Arquitetura em Camadas Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Definição Estimula a organização

Leia mais

Transaction Scripts: Uma Forma mais Simples de Organizar Lógica de Domínio

Transaction Scripts: Uma Forma mais Simples de Organizar Lógica de Domínio Roberto Perillo (jrcperillo@yahoo.com.br) é bacharel em Ciência da Computação e está atualmente cursando mestrado no ITA, onde já concluiu o curso de especialização em Engenharia de Software. Trabalha

Leia mais

1 UML (UNIFIED MODELING LANGUAGE)

1 UML (UNIFIED MODELING LANGUAGE) 1 UML (UNIFIED MODELING LANGUAGE) Segundo Tonsig (2003), para conseguir desenvolver um software capaz de satisfazer as necessidades de seus usuários, com qualidade, por intermédio de uma arquitetura sólida

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

Modelos de processos de desenvolvimento de software

Modelos de processos de desenvolvimento de software Definição Um modelo de processo de software é uma representação abstrata de um processo. Os modelos de processo podem ser desenvolvidos a partir de várias perspectivas e podem mostrar as atividades envolvidas

Leia mais

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Modelagem e Implementação de Aquário de Peixes- por Jorge Fernandes - Página 1 Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Jorge Fernandes Natal, Agosto de

Leia mais

NFe Nota Fiscal Eletronica

NFe Nota Fiscal Eletronica 1 NFe Nota Fiscal Eletronica Introdução O NFe Tron, apesar de ser um sistema complexo, possui um método simples de instalação, configurando todos os elementos necessários para o funcionamento básico do

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

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

Aula 10: Análise Dinâmica - 1a. Parte

Aula 10: Análise Dinâmica - 1a. Parte Aula 10: Análise Dinâmica - 1a. Parte A melhor forma de garantir a qualidade do software que você constrói é projetando-o cuidadosamente desde o início. Desta forma, as partes se encaixarão mais perfeitamente,

Leia mais

Curso Java Starter. www.t2ti.com 1

Curso Java Starter. www.t2ti.com 1 1 Apresentação O Curso Java Starter foi projetado com o objetivo de ajudar àquelas pessoas que têm uma base de lógica de programação e desejam entrar no mercado de trabalho sabendo Java, A estrutura do

Leia mais

Criando sua primeira aplicação JAVA com o Eclipse

Criando sua primeira aplicação JAVA com o Eclipse Criando sua primeira aplicação JAVA com o Eclipse Fernando Boaglio Instalou o Eclipse mas não sabia por onde começar? Aqui você encontra uma breve explicação de como criar sua primeira aplicação JAVA no

Leia mais

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Ciência da Computação. alyssonfm@lcc.ufcg.edu.br

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Ciência da Computação. alyssonfm@lcc.ufcg.edu.br Universidade Federal de Campina Grande Departamento de Sistemas e Computação Ciência da Computação alyssonfm@lcc.ufcg.edu.br Maio - 2010 Agenda GWT Vantagens Desvantagens Exemplificação de códigos GWT

Leia mais

APLICATIVO WEB PARA O SETOR DE EXTENSÃO IFC VIDEIRA

APLICATIVO WEB PARA O SETOR DE EXTENSÃO IFC VIDEIRA APLICATIVO WEB PARA O SETOR DE EXTENSÃO IFC VIDEIRA Autores: Claudiléia Gaio BANDT; Tiago HEINECK; Patrick KOCHAN; Leila Lisiane ROSSI; Angela Maria Crotti da ROSA Identificação autores: Aluna do Curso

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

Programação Orientada por Objetos

Programação Orientada por Objetos PPROG Paradigmas da Programação Programação Orientada por Objetos Relações entre Dependência Agregação Composição Associação (Livro Big Java, Late Objects Capítulo 12) Nelson Freire (ISEP DEI-PPROG 2014/15)

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

[MANUAL DE INTEGRAÇÃO PARA SITES DE MEMBROS]

[MANUAL DE INTEGRAÇÃO PARA SITES DE MEMBROS] 2011 [MANUAL DE INTEGRAÇÃO PARA SITES DE MEMBROS] Destinado a usuários que desejam vender conteúdo premium, disponível em sites de membros, através da plataforma Hotmart. Versão do documento: 1.0, 11/04/2011.

Leia mais

INDICE 3.APLICAÇÕES QUE PODEM SER DESENVOLVIDAS COM O USO DO SAXES

INDICE 3.APLICAÇÕES QUE PODEM SER DESENVOLVIDAS COM O USO DO SAXES w w w. i d e a l o g i c. c o m. b r INDICE 1.APRESENTAÇÃO 2.ESPECIFICAÇÃO DOS RECURSOS DO SOFTWARE SAXES 2.1. Funcionalidades comuns a outras ferramentas similares 2.2. Funcionalidades próprias do software

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 02 Análise e Projeto OO Edirlei Soares de Lima Análise A análise modela o problema e consiste das atividades necessárias para entender

Leia mais

METODOLOGIAS ÁGEIS - SCRUM -

METODOLOGIAS ÁGEIS - SCRUM - METODOLOGIAS ÁGEIS - SCRUM - André Roberto Ortoncelli ar_ortoncelli@hotmail.com 2010 Organização da Apresentação Introdução as Metodologias Ágeis Scrum Conceitos Básicos Artefatos Papeis Cerimônias Estórias

Leia mais

1/26/2009. Baseadas em http://www.voelter.de/services/mdsdtutorial.html. Experiência pessoal/profissional/acadêmica

1/26/2009. Baseadas em http://www.voelter.de/services/mdsdtutorial.html. Experiência pessoal/profissional/acadêmica Baseadas em http://www.voelter.de/services/mdsdtutorial.html Experiência pessoal/profissional/acadêmica 1 Metamodelo UML Meu Metamodelo Meu processo de negócios Meu processo de negócios Stereotypes Perfis

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

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

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

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

Se observarmos nos diferentes livros. Planejamento de Testes a partir de Casos de Uso

Se observarmos nos diferentes livros. Planejamento de Testes a partir de Casos de Uso Planejamento de Testes a partir de Casos de Uso Arilo Cláudio Dias Neto ariloclaudio@gmail.com É Bacharel em Ciência da Computação formado na Universidade Federal do Amazonas, Mestre em Engenharia de Sistemas

Leia mais

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados:

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados: O Paradigma Orientado a Objetos Paradigma e Programação Orientada a Objetos Prof. João Carlos Pinheiro jcpinheiro@ifma.edu.br 1 Não é um paradigma no sentido estrito: é uma subclassificacão do imperativo

Leia mais

AJAX no GASweb. Mas e afinal, para que usamos o AJAX?

AJAX no GASweb. Mas e afinal, para que usamos o AJAX? Nível - Avançado AJAX no GASweb Por: Pablo Hadler AJAX (Asynchronous Javascript and XML) foi criado com o princípio de ser uma maneira rápida e otimizada de podermos fazer requisições Web, sendo esta totalmente

Leia mais

Auditoria Avançada de Persistência com Hibernate, JPA e Envers

Auditoria Avançada de Persistência com Hibernate, JPA e Envers a r t i g o José Yoshiriro Ajisaka Ramos (jyoshiriro@gmail.com): bacharel em Sistema de Informação (IESAM). Mestrando em Ciência da Computação (UFPA). Instrutor na Equilibrium Web e na UAB. Engenheiro

Leia mais

Curso Java Starter. www.t2ti.com 1

Curso Java Starter. www.t2ti.com 1 1 Apresentação O Curso Java Starter foi projetado com o objetivo de ajudar àquelas pessoas que têm uma base de lógica de programação e desejam entrar no mercado de trabalho sabendo Java, A estrutura do

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

TDD-Test Driven Development

TDD-Test Driven Development CENTRO UNIVERSITÁRIO UNA TDD-Test Driven Development Desenvolvimento guiado por testes Pós-graduação em Engenharia de Software Centrada em Métodos Ágeis TIME CAVE!RA Bruno Eustáquio Andrade Juliana Villas

Leia mais

Conformação Arquitetural. com DCLcheck. Defina as dependências aceitáveis e inaceitáveis de acordo com a arquitetura planejada de seu sistema

Conformação Arquitetural. com DCLcheck. Defina as dependências aceitáveis e inaceitáveis de acordo com a arquitetura planejada de seu sistema dclcheck_ Conformação Arquitetural com DCLcheck Defina as dependências aceitáveis e inaceitáveis de acordo com a arquitetura planejada de seu sistema Arquitetura de software é geralmente definida como

Leia mais

Introdução. Olá! Seja bem-vindo ao emailmanager. O melhor sistema de email marketing do mercado.

Introdução. Olá! Seja bem-vindo ao emailmanager. O melhor sistema de email marketing do mercado. 1 Introdução Olá! Seja bem-vindo ao emailmanager. O melhor sistema de email marketing do mercado. Esta guia disponibiliza as principais etapas para sua iniciação ao uso do emailmanager. Nesta guia você

Leia mais

Margem% Mark-up% Qual a diferença? Pricing Consultoria, Treinamento e Auditoria. Ebook: Margem% ou Mark-up%, qual a diferença?

Margem% Mark-up% Qual a diferença? Pricing Consultoria, Treinamento e Auditoria. Ebook: Margem% ou Mark-up%, qual a diferença? Margem% OU Mark-up% Qual a diferença? Pricing Consultoria, Treinamento e Auditoria Introdução A maioria dos leigos e até mesmo profissionais ficam em dúvida quando se fala em Margem e Mark-up. Muitos acreditam

Leia mais

Aula 30 - Sockets em Java

Aula 30 - Sockets em Java Aula 30 - Sockets em Java Sockets Sockets são estruturas que permitem que funções de software se interconectem. O conceito é o mesmo de um soquete (elétrico, telefônico, etc...), que serve para interconectar

Leia mais

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP AULA 4 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.

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

HIBERNATE EM APLICAÇÃO JAVA WEB

HIBERNATE EM APLICAÇÃO JAVA WEB HIBERNATE EM APLICAÇÃO JAVA WEB Raul Victtor Barbosa Claudino¹, Ricardo Ribeiro Rufino¹ ¹Universidade Paranaense (Unipar) Paranavaí PR Brasil victtor.claudino@gmail.com, ricardo@unipar.br Resumo: Este

Leia mais

Diamond Powder - um framework Java ME para coleta de dados

Diamond Powder - um framework Java ME para coleta de dados Artigo GUJ.com.br Diamond Powder - um framework Java ME para coleta de dados Autor Renato Bellia: é formado em Engenharia de Computadores, trabalha com Java EE a mais de 08 anos, e atualmente está utilizando

Leia mais

Herança. Alberto Costa Neto DComp - UFS

Herança. Alberto Costa Neto DComp - UFS Herança Alberto Costa Neto DComp - UFS 1 Motivação Vimos como se faz encapsulamento e a importância de fazê-lo... Contudo, também é possível fazer encapsulamento em algumas linguagens não OO O que mais

Leia mais

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this. Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.x = x; this.y = y; public String tostring(){ return "(" + x + "," +

Leia mais

Integrando Eclipse e Websphere Application Server Community Edition

Integrando Eclipse e Websphere Application Server Community Edition 1 Integrando Eclipse e Websphere Application Server Community Edition Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado em Desenvolvimento

Leia mais

Linguagem de Programação Visual

Linguagem de Programação Visual Linguagem de Programação Visual Unidade 1 Ambiente de desenvolvimento Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 SOBRE O JAVA... 3 AMBIENTE DE DESENVOLVIMENTO... 5 RECURSOS DA FERRAMENTA NETBEANS...

Leia mais

Factory Method. Edeyson Andrade Gomes www.edeyson.com.br

Factory Method. Edeyson Andrade Gomes www.edeyson.com.br Factory Method Edeyson Andrade Gomes www.edeyson.com.br Agenda Resumo Quando Usar Participantes Colaborações Conseqüências Exemplo Estrutura Genérica Exercício 2 Resumo Ao invés do cliente instanciar objetos

Leia mais