Escolar Documentos
Profissional Documentos
Cultura Documentos
PS- GRADUAO
Engenharia de Software:
Desenvolvimento Java
Engenharia de Software:
Desenvolvimento .NET
GRADUAO
Engenharia de Computao
Anlise e Desenv. de Sistemas
F ORMAES
Desenvolvedor Java
Desenv. Java: Sist. Distribudos
Gestor de TI
Desenvolvedor Web .NET 2008
MCITP Server Administrator
SQL Server 2008
r/esti
Acesse nosso site e conhea todos os nossos programas: www.infnet.edu.br/esti
TURMAS
NO RIO DE
JANEIRO
www.infnet.edu.br - cursos@infnet.edu.br - Central de Atendimento: (21) 2122-8800
EDITORIAL
nidas, alm das suas atividades, as funes e responsabilidades de cada membro da equipe, e
como produto resultante, os artefatos. O que diferencia um processo de software do outro a
ordem em que as fases vo ocorrer, o tempo e a nfase dados a cada fase, as atividades presentes,
Impresso no Brasil
e os produtos entregues.
Com o crescimento do mercado de software, houve uma tendncia a repetirem-se os passos e
as prticas que deram certo. A etapa seguinte foi a formalizao em modelos de ciclo de vida. Em
outras palavras, os modelos de ciclo de vida so o esqueleto, ou as estruturas pr-definidas nas
Corpo Editorial
quais encaixamos as fases do processo. De acordo com a NBR ISO/IEC 12207:1998, o ciclo de vida
a Estrutura contendo processos, atividades e tarefas envolvidas no desenvolvimento, operao
Colaboradores
Rodrigo Oliveira Spnola
Marco Antnio Pereira Arajo
Eduardo Oliveira Spnola
Capa
Romulo Araujo - romulo@devmedia.com.br
at quando e como o cliente receber sua primeira verso operacional do sistema. No existe
um modelo ideal. O perfil e complexidade do negcio do cliente, o tempo disponvel, o custo, a
Diagramao
Janete Feitosa
Coordenao Geral
Daniella Costa - daniella@devmedia.com.br
dos casos, v-se a presena de mais de um ciclo de vida no processo. Neste contexto, a Engenha-
Revisor
Gregory Monteiro - gregory@clubedelphi.net
Caroline Velozo - carolinelopes@devmedia.com.br
os Bastidores. Neste artigo sero apresentados alguns dos modelos de ciclo de vida mais comu-
Jornalista Responsvel
Kaline Dolabella - JP24185
Na Web
www.devmedia.com.br/esmag
Atendimento ao Leitor
A DevMedia conta com um departamento exclusivo para o atendimento ao leitor.
Se voc tiver algum problema no recebimento do seu exemplar ou precisar de
algum esclarecimento sobre assinaturas, exemplares anteriores, endereo de
bancas de jornal, entre outros, entre em contato com:
Isabelle Macedo e Uellen Goulart Atendimento ao Leitor
www.devmedia.com.br/mancad
(21) 2220-5338
Kaline Dolabella
Gerente de Marketing e Atendimento
kalined@terra.com.br
(21) 2220-5338
Publicidade
Para informaes sobre veiculao de anncio na revista ou no site entre em
contato com:
Cristiany Queiroz
publicidade@devmedia.com.br
Caro Leitor,
NDICE
Por trs do bvio
06 Gesto do bom humor
Glnio Cabral
Agilidade
07 - Agilidade na Prtica
Jacimar Fernandes Tavares e Marco Antnio Pereira Arajo
Engenharia
15 - Aprimorando a Escrita de Casos de Uso
Fabrcio Cardim, Iuri Mendes e Rodrigo Oliveira Spnola
Tipo: Processo
Ttulo: Especificao de casos de uso na prtica Partes 26 a 30
Autor: Rodrigo Oliveira Spnola
Mini-Resumo: Definir requisitos no uma atividade trivial. Uma das
formas de realizar esta atividade atravs da especificao de casos de
uso. Neste sentido, nesta srie de vdeo aulas apresentaremos um conjunto
de especificaes de casos de uso. Os cenrios sero especificados passo
a passo considerando tpicos como fluxo principal, fluxo alternativo e
regras de negcios.
Desenvolvimento
51 - Refatorao para Padres Parte 9
Jacimar Fernandes Tavares e Marco Antnio Pereira Arajo
Administrador de Empresas, ps-graduado em Gesto de Pessoas e msico. Idealizador do site de educao infantil www.novainfancia.com.br.
D
s
Feedback
eu
sobre e
s
edio
ta
oc j ouviu falar em um artigo de luxo chamado sorriso? Isso mesmo, sorriso... aquele hbito descontrado de
elastecer as bochechas e expor a arcada superior numa
exploso de felicidade. Recentes pesquisas revelaram que as
pessoas de um modo geral esto sorrindo cada vez menos. As
razes para tal fenmeno? Empregos escassos, competitividade
acirrada, engarrafamentos, sobrecarga de trabalho e estresse,
alm de uma srie de fatores que juntos representam o lado
sombrio da chamada vida moderna.
Se o mau humor segue uma trajetria ascendente, ento todos
ns estamos expostos aos seus efeitos. Um deles, por exemplo,
a queda dos ndices de produtividade nas organizaes. Est
mais do que provado que um ambiente de trabalho leve e descontrado estimula a criatividade e viabiliza a existncia de relaes interpessoais mais saudveis. O problema que muitas
vezes o senso de humor visto como um inimigo da seriedade
com que os negcios devem ser geridos. E assim, para alguns
gestores, manter uma carranca corporativa ainda sinnimo
de compromisso e competncia na gesto empresarial.
Uma coisa certa: no precisamos de humoristas nas
empresas, e sim de gestores bem humorados. Humorismo
piadismo, anedota, gozao. Senso de humor uma
postura de leveza e energia diante da vida. No Brasil, ser
um piadista praticamente uma obrigao nacional. No
a toa que programas televisivos como Pnico na TV e CQC
alavancam os ndices de audincia de suas emissoras, tornando seus protagonistas verdadeiros heris nacionais. Mas
quando a conhecida comicidade brasileira se apresenta de
forma preconceituosa e vexatria, a linha tnue que separa o
engraado do inconveniente comea a ser desrespeitada.
E a, o humor perde a graa.
Agilidade
Nesta seo voc encontra artigos voltados para as prticas e mtodos geis.
Agilidade na Prtica
Utilizando a ferramenta Sprintometer para apoiar a utilizao de
mtodos geis
De que se trata o artigo?
Este artigo aborda o tema gerncia de projetos utilizando metodologias geis e apresenta a ferramenta
Sprintometer utilizada para apoiar a utilizao de
mtodos geis.
A ferramenta Sprintometer
M etodologias geis
10
M etodologias geis
do sprint, Conversa com o administrador da empresa, aparecer do lado direito uma tabela, abaixo do groupbox Work Type.
A Figura 13 mostra como devem ser definidas as horas para
a primeira tarefa no cronograma.
11
Para obter uma tabela igual da Figura 13, algumas informaes devem ser entendidas. Na tabela, as colunas da segunda
em diante indicam os dias que o sprint ir durar, como definido no incio do projeto. Work Day a contagem dos dias que
o sprint ir durar, do primeiro ao dcimo dia, no caso deste
projeto. Done % a porcentagem de trabalho concludo relativo
para aquela tarefa. Isto permite saber se a tarefa foi feita pela
metade ou j est finalizada. Done today/to do so as horas trabalhadas da tarefa em questo, e as horas da estimativa inicial
12
M etodologias geis
13
14
Feedback
eu
sobre e
s
Links
Concluso
D
s
edio
ta
Engenharia
Nesta seo voc encontra artigos voltados para testes, processo,
modelos, documentao, entre outros
Fabrcio Cardim
ffcardim@gmail.com
Iuri Mendes
Imendes2kx@gmail.com
Rodrigo Spnola
rodrigo@sqlmagazine.com.br
15
Casos de uso
Casos de Uso so documentos importantes para construo
de sistemas. Eles descrevem o comportamento que este sistema
dever ter sob diversas condies. Os casos de uso so documentos geralmente criados na forma de texto e servem como
meio de comunicao entre partes envolvidas no projeto.
Um caso de uso bem escrito fcil de ler. Ele consiste de sentenas
escritas em uma nica forma gramatical um passo de ao simples
na qual um ator alcana um resultado ou transmite informao
para outro ator. Aprender a ler um caso de uso no deve tomar mais
do que uns poucos minutos. (Cockburn, 2001)
A utilizao de casos de uso na especificao de requisitos
deve levar em considerao os interesses das partes envolvidas
(stakeholders). Veremos como a especificao importante na
execuo das atividades dos stakeholders.
Existem diversas situaes onde casos de uso so utilizados e
por esse motivo preciso que sua forma de escrita seja variada.
Essa variao no estilo da escrita dos casos de uso pode tornar
a leitura um tanto confusa. Isso faz com que alguns problemas
acabem surgindo na etapa de especificao de requisitos e veremos alguns fatores que devem ser levados em considerao
para tentar diminuir a ocorrncia desses problemas.
No existe regra para escrever casos de uso, mas existem
alguns modelos que so padres de mercado e so comumente utilizados. Neste artigo vamos comentar sobre dois
desses modelos.
Para isto, este artigo foi divido nas seguintes sees: Especificao de requisitos atravs de Casos de Uso, Stakeholders e seus
interesses, Estilos de escrita de casos de uso, Modelos de casos
de uso, Problemas comuns, Fatores de Melhoria, Concluso.
16
17
1. Fluxos de Eventos:
1.1. Fluxo Bsico
1. Este caso de uso se inicia quando o ator do sistema seleciona no menu a opo Equipamento;
2. O sistema exibe a tela Pesquisar Equipamento;
3. O sistema apresenta os parmetros de filtros; [INF01]
4. O sistema exibe uma listagem com todos os Equipamentos j cadastrados; [INF02] [RN1]
5. O ator escolhe uma das opes disponveis:
5.1. Voltar ao menu principal [A1]
5.2. Alterar Equipamento [A2]
5.3. Incluir Equipamento [A3]
5.4. Pesquisar Equipamento [A4]
6. O caso de uso finalizado.
1.2. Fluxo Alternativo
[A1] Voltar ao menu principal
1. O sistema volta para a tela principal;
2. O caso de uso finalizado.
[A2] Alterar Equipamento
1. O sistema exibe a tela Equipamento;
2. O sistema disponibiliza os dados para alterao; [INF03]
3. O ator preenche os dados do Equipamento;
4. O ator seleciona a opo Salvar; [A5] [E1] [E2]
5. O sistema registra todos os dados de Equipamento informados; [E2]
6. O sistema apresenta mensagem de finalizao,Alterao realizada com sucesso.;
7. O fluxo alternativo finalizado.
[A3] Incluir Equipamento
1. O sistema exibe a tela Equipamento;
2. O sistema apresenta os parmetros para incluso do novo Equipamento; [INF03]
3. O ator preenche os dados de Equipamento;
4. O ator seleciona a opo Salvar; [A5] [E1] [E2]
5. O sistema grava as informaes preenchidas;
6. O sistema apresenta mensagem de finalizao;Incluso realizada com sucesso;
7. O fluxo alternativo finalizado.
[A4] Pesquisar Equipamento
1. O ator preenche pelo menos uma das informaes; [INF01]
2. O ator seleciona a opo Pesquisar; [E2] [E3]
3. O sistema exibe a lista de Equipamento, a partir dos parmetros informados; [INF02]
4. O caso de uso finalizado.
[A5] Voltar
1. O ator seleciona a opo Voltar;
2. O sistema desconsidera os dados informados pelo ator;
3. O sistema volta para o fluxo bsico.
1.3. Fluxo de Exceo
[E1] Campos obrigatrios
1. O sistema verifica o preenchimento dos campos obrigatrios;
2. Para campo obrigatrio no preenchido, o sistema exibe a mensagem [nome do campo] obrigatrio!;
3. O sistema retorna ao fluxo que o originou.
[E2] Falha de acesso aos dados
1.O sistema exibe a mensagem de notificao No foi possvel realizar esta operao. Falha de acesso aos dados.;
2. O sistema retorna para o fluxo bsico.
[E3] Pesquisa sem resultados
1. O sistema identifica que nenhuma informao foi localizada para os parmetros informados;
2. O sistema exibe a mensagem;Nenhum dado foi localizado para os parmetros informados;
3. O sistema retorna para o fluxo bsico.
Tabela 1. Modelo de Passos enumerados
18
Inconsistncia
A tarefa de escrever casos de uso, por vezes,
repetitiva, pode levar o autor a repetir requisitos de outros casos de uso. Uma vez que isto
ocorre, este requisito herdado pode vir a
conflitar com os requisitos nativos ao caso
de uso em construo, gerando inconsistncia.
Para o leitor, muitas vezes, no h como saber
qual o correto. Se a falha percebida mais cedo,
o leitor pode anotar como dvida e, uma vez
respondida essa dvida, vir a implementar o
requisito correto. Caso a falha seja descoberta
mais tarde e o requisito errado tenha sido
implementado, haver retrabalho.
Fato Incorreto
Um problema grave que pode ocorrer na escrita do caso de uso adicionar ao documento
um requisito descrevendo um comportamento
do sistema diferente do que foi especificado.
uma falha, geralmente, difcil de ser notada
pelo leitor. O leitor l o requisito, encara como
verdade e o implementa. Muito provavelmente, esse comportamento errado do sistema vai
passar pela equipe de teste, que, geralmente,
cria os casos de teste com base nos casos de
uso, e s ser notado quando homologado
pelo cliente. A depender da falha, o custo para
corrigi-la pode vir a ser muito caro para a contratada, tanto em tempo, quanto em recurso.
Informao Estranha
Encontrar informaes desnecessrias,
que no sero, de forma alguma, teis para
a construo do sistema, no vem a ser um
problema grave. algo que prejudica a legibilidade, e que exige, s vezes, um esforo
maior para ler um caso de uso que poderia
ser mais enxuto e menos cansativo. Este tipo
de informao alm de poder tornar o texto
mais confuso, pode gerar dvidas que tero
que ser esclarecidas e desprender tempo do
processo de construo do sistema.
Fatores de melhoria
Apontar problemas na escrita dos casos
de uso no to complicado. No entanto,
levantar melhorias para solucionar esses
problemas no uma tarefa to simples.
Fatores de melhoria so itens que devem ser
levados em considerao durante a escrita de
casos de uso. Algumas sugestes de pontos
que podemos considerar durante a escrita
de casos de uso com objetivo de aprimorar
sua escrita so:
Ao do ator
Resposta do sistema
Ao do ator
Resposta do sistema
Preenche a lista de Equipamentos. Sero exibidos os campos definidos no item 5.1. das Tabelas de Atributos.
Os registros retornados sero filtrados de acordo com os dados especificados na busca padro.
Na tela Pesquisar Equipamento, Usurio preenche campo Busca Vide fluxo de exceo: [FE003].
Padro e seleciona ao Pesquisar.
Exibir a ao Alterar.
Vide fluxo alternativo [FA002] para executar ao Voltar e [FA003] para executar a ao Alterar.
FA002 Voltar
Seq
Ao do ator
Resposta do sistema
Ao do ator
Resposta do sistema
Navegao
importante que os fluxos de uso sejam bem definidos e
numerados. importante que um fluxo bsico seja explicitado,
enumerando os passos que o usurio leva para executar o requisito principal de um caso de uso. A partir desse fluxo bsico,
necessrio que toda ao do usurio que cause um desvio do
fluxo principal seja mapeada, passo a passo, em fluxos alternativos que devem ser referenciados no exato passo onde pode
haver essa mudana de comportamento do sistema. Claro que
19
Ao do ator
Resposta do sistema
Selecionar ao Salvar.
O sistema verifica se todos os campos obrigatrios foram preenchidos. Se existir campo obrigatrio sem preenchimento o sistema exibe mensagem
[nome do campo] obrigatrio!;
Ao do ator
Resposta do sistema
Selecionar ao Salvar.
O sistema exibe a mensagem de notificao No foi possvel realizar esta operao. Falha de acesso aos dados.;
Ao do ator
Resposta do sistema
O sistema identifica que nenhuma informao foi localizada para os parmetros informados;
O sistema exibe a mensagem;Nenhum dado foi localizado para os parmetros informados;
O sistema retorna para o fluxo bsico;
Ritmo de escrita
Administre sua energia. No escreva todos os detalhes num
primeiro momento. Se para comear, voc escrever apenas
20
Concluso
Na construo de um software, a forma como os casos de
uso so escritos pode impactar de forma positiva ou negativa
no processo. interessante evitar cometer os erros e usar os
fatores de melhoria como referncia. No existe uma regra
para um modelo de escrita de casos de uso, mas deve ser algo
confortvel tanto para o cliente como para o desenvolvedor.
Aprimorar a escrita de casos de uso traz grandes benefcios
para o processo de desenvolvimento de um software e aumenta
a probabilidade de gerar produtos de qualidade.
Referncias
Cockburn, Alistair. Escrevendo Casos de Usos Eficazes. Porto Alegre: Bookman, 2001.
Sommerville, Ian. Engenharia de Software So Paulo: Addison-Wesley,
8 Edio, 2007.
Links
D
s
Regras de Negcio
As regras devem estar especificadas de forma clara e objetiva
para no permitir dvidas durante o desenvolvimento. Nos
casos onde a regra muito complexa e apenas uma descrio no
suficiente, interessante explicar atravs de exemplos reais.
edio
ta
Campo
essencial que seja explicitado uma srie de informaes. Para
um arquiteto de sistemas, que realiza a modelagem de dados,
importante saber, por exemplo, qual o tipo do campo, tamanho e
obrigatoriedade. A depender das informaes que forem definidas a respeito dos campos, um arquiteto poder especificar que
uma tabela de determinado tipo, possui determinado nmero
de caracteres, not null, ou no.
Para um codificador, a finalidade destas informaes pode ser
um pouco diferente, mas a relevncia a mesma. O codificador
precisar representar as tabelas do banco de dados, atravs de
classes no projeto tcnico, onde devero ser definidos os tipos dos
atributos. Nas classes de negcio devero ser feitas validaes de
obrigatoriedade dos atributos. No entanto, nas telas, na apresentao do sistema para o usurio, que, talvez, as informaes a respeito dos campos sejam mais importantes. Nos formulrios onde
usurios entram com informaes para o sistema que estaro
definidos: quais tipos de caracteres determinado campo aceita,
se so s numricos, ou se letras so aceitas; quantos caracteres
podem ser digitados em determinado campo; qual a mscara,
modelo, de data que dever ser inserido; no caso do usurio estar
editando uma informao j cadastrada, quais campos permitido para edio e quais so bloqueados, somente leitura; quais so
os valores pr-definidos para campos como, estado-civil.
Para que todos esses comportamentos que enriquecem a interface do sistema com o usurio sejam corretamente implementados,
fundamental que todas suas caractersticas sejam bem definidas
nos documentos de caso de uso.
Engenharia
Nesta seo voc encontra artigos voltados para testes, processo,
modelos, documentao, entre outros
Rodrigo Spnola
rodrigo@sqlmagazine.com.br
21
Modelo em Cascata
Formalizado por Royce em 1970, o modelo mais antigo. Suas
atividades fundamentais so:
anlise e definio de requisitos;
projeto;
implementao;
teste;
integrao.
Modelo em V
22
Ges to de Conhecimento
23
Prototipagem
Figura 5. Ciclo de vida RAD
24
Ges to de Conhecimento
Modelo Espiral
O modelo proposto por Boehm em 1988 trata de uma abordagem cclica das fases do processo, onde a cada volta ou
iterao temos verses evolucionrias do sistema.
Este um modelo guiado por risco, suporta sistemas complexos e/ou de grande porte, onde falhas no so tolerveis. Para
isso, a cada iterao h uma atividade dedicada anlise de
riscos e apoiada atravs de gerao de prottipos, no necessariamente operacionais (desenhos de tela, por exemplo) para
que haja um envolvimento constante do cliente nas decises.
Cada iterao ou volta dedicada a uma fase do processo
de vida de um software (viabilidade do projeto, definio de
requisitos, desenvolvimento e teste,...). Ao mesmo tempo, cada
volta seccionada em 4 setores, da seguinte forma:
1 Iterao: Viabilidade do projeto:
1.1. Definio de objetivos;
1.2. Avaliao e reduo de riscos;
25
26
Ges to de Conhecimento
27
Modelo
Foco
Requisitos
Cascata
Documento e artefato
Bem conhecido/congelado
Fim do ciclo
Gerenciamento
(1=mais simples)
1
Planejamento de testes
Bem conhecido/congelado
Fim do ciclo
Simples
Incremental
Incrementos operacionais
Prottipos operacionais
Mdio
Evolutivo
Pouco conhecidos
Prottipos operacionais
Mdio
RAD
Rapidez
Prottipos operacionais
Mdio
Prototipagem
Mdio
Espiral
Anlise de risco
Complexos
RUP
Frameworks e boas
prticas
Prottipos
no
operacionais
Prottipos operacionais
ou no operacionais
Prottipos operacionais
ou no operacionais
Complexos
1 verso p/ cliente
Sistemas
(tamanho complexidade mximos)
Simples
Vale ressaltar que, conforme j mencionado anteriormente, no existe um modelo ideal e na maioria dos softwares
desenvolvidos so utilizados mais de um modelo de ciclo
de vida.
Referncias
28
www.devmedia.com.br/esmag/feedback
D
s
Feedback
eu
sobre e
s
Consideraes Finais
edio
ta
Engenharia
Nesta seo voc encontra artigos voltados para testes, processo,
modelos, documentao, entre outros
D
Waldemar Pires Ferreira Neto
waldemar.neto@gmail.com
29
templates de teste. Inicialmente, apresentaremos como adotamos templates para a verificao das classes do diagrama de
classe. Em seguida, apontaremos os demais tipos dos artefatos
do diagrama de classe e suas caractersticas que so cobertas
pelo nosso trabalho. Mostraremos ainda alguns artefatos que
no podem ser verificados, e o porqu desse feito. Depois disso,
ilustraremos a aplicao da abordagem para verificao das
caractersticas referentes a um trecho do diagrama de classe
de um sistema Web. Por fim, discutiremos como essa abordagem alcana todos os artefatos tratados, e como ela pode ser
estendida para tratar outros artefatos.
30
Classe
Inicialmente, ilustraremos a nossa tcnica de criao de
testes de design baseados em templates, mostrando como ela
usada para a verificao do artefato classe. O template para
classe verifica as caractersticas de classe: nome, visibilidade,
superClasse, escopo e interfaces realizadas. O template est
organizado da seguinte forma:
Assinatura do teste. A Listagem 1 exibe o trecho do mtodo
de teste que cria a assinatura do teste de design, identificando
que se trata de um teste de design para a classe a qual o template est sendo aplicado.
Existncia da Classe. A Listagem 2 exibe o mtodo de teste
que substitui o tag <NomeDaClasse> pelo nome completo da
classe. A verificao da existncia da classe testada se d com a
invocao do mtodo getClass da biblioteca DesignWizard. Esse
mtodo retorna uma representao da classe (um ClassNode)
presente no cdigo-fonte que possui o mesmo nome passado
por parmetro. Se no existir nenhuma classe com esse nome
no cdigo, a exceo InexistentEntityException ser lanada,
informando que a classe com o nome indicado no existe.
Classe Abstrata. Se a classe no diagrama de classe for abstrata,
a Listagem 3 substitui a tag <TrueFalse> pelo termo True,
caso contrrio, deve substituir por False. Na mensagem
1 ...
2 ClassNode aClass = dw.getClass(<NomeDaClasse>);
3 ...
Listagem 3. Trecho do Template do Teste de Design para Classe referente a
verificao se a classe abstrata.
1 ...
2 assert<TrueFalse>(The class <NomeDaClasse> must <not> be
3 + abstract ,
4 aClass.isAbstract()) ;
5 ...
Listagem 4. Trecho do Template do Teste de Design para Classe referente a
verificao da hierarquia de classes.
1 ...
2 ClassNode superClass = dw.getClass(<NomeDaSuperClasse> );
3 assertEquals(The class <NomeDaClasse> must extend the class
4 +<NomeDaSuperClasse>, superClass,
5 aClass.getSuperClass());
6 ...
Listagem 5. Trecho do Template do Teste de Design para Classe referente a
verificao da visibilidade da classe.
1 ...
2 Collection<Modifier> modifs = aClass.getModifiers();
3 assertTrue(The visibility of class <NomeDaClasse> must be
4 + <visibility>,
5 modifs.contains(Modifier.<visibility>));
6 ...
Listagem 6. Trecho do Template do Teste de Design para Classe referente a
verificao da realizao de interfaces.
01 ...
02 String[] superInterfaces =
03 {<NomeDaInterface1\>, <NomeDaInterface2> , ...};
04 for (String superInterface : superInterfaces) {
05 ClassNode classnodeInterface = dw.getClass(superInterface) ;
06 Set<ClassNode> interfacesExtend =
07 aClass.getImplementedInterfaces();
08 assertTrue(The class <NomeDaClasse> must realize the
09 + interface + superInterface,
10 interfacesExtend.contains(classnodeInterface));
11 }
Operao
O template para os testes de operaes so capazes de criar
testes para verificar todas as operaes do diagrama. Ele no se
restringe somente a operaes de classes, alcana tambm operaes de interfaces, dentre outras. O template para operaes
31
1 ...
2 ClassNode aClass = dw.getClass(\<ClassName>);
3 MethodNode methodClass = aClass.getMethod(<MethodName>);
4 ...
Listagem 9. Trecho do Template do Teste de Design para Operaes referente
a verificao do tipo do retorno.
1 ...
2 assertEquals(The return of the method <MethodName> +
3 from the class <ClassName>must be<TypeName>,
4 <TypeName>, methodClass.getReturnType().getName());
5 ...
Listagem 10. Trecho do Template do Teste de Design para Operaes
referente a verificao se a operao abstrata.
1 ...
2 assert<TrueFalse>(The method <MethodName> from +
3 the class <ClassName> must <not> be abstract,
4 methodClass.isAbstract());
5 ...
Listagem 11. Trecho do Template do Teste de Design para Operaes
referente a verificao se a operao esttica.
1 ...
2 assert<TrueFalse>(The method<MethodName> from the +
3 class <ClassName> must <not> be static,
4 methodClass.isStatic());
5 ...
Listagem 12. Trecho do Template do Teste de Design para Operaes
referente a verificao da visibilidade da operao.
1 ...
2 Collection<Modifier> modifs = methodClass.getModifiers();
3 assertTrue(The visibility of The method<MethodName> from +
4 the class <ClassName> must be +
5 <visibility>, modifs.contains(Modifier.<visibility>));
6}
32
Atributo
Nossos testes de design contemplam ainda os atributos dos
elementos do diagrama de classes. O template para atributo
verifica as caractersticas: nome, tipo de retorno, visibilidade e
escopo. Este template est organizado da seguinte forma:
Assinatura do teste. A Listagem 13 exibe o trecho do mtodo
de teste que cria a assinatura do teste de design, identificando
que se trata de um teste de design para o atributo o qual o
template est sendo aplicado.
Existncia do Atributo. A Listagem 14 exibe o trecho do mtodo de teste que verifica se existe uma classe com um atributo
com os mesmos nomes das respectivas entidades testadas do
1 ...
2 ClassNode aClass = dw.getClass(<NomeDaClasse>);
3 FieldNode attrClass = aClass.getField(<NomeDoAtributo>);
4 ...
Listagem 15. Trecho do Template do Teste de Design para Atributos referente
a verificao se o atributo esttico.
1 ...
2 assertTrue(The attribute <NomeDoAtributo> of the class
3 + <NomeDaClasse> must <not> be static,
4 attrClass.isStatic());
5 ...
Listagem 16. Trecho do Template do Teste de Design para Atributos referente
a verificao da visibilidade do atributo.
1 ...
2 Collection<Modifier> modifs = attrClass.getModifiers();
3 assertTrue(The attribute <NomeDoAtributo> of the class+
4 <NomeDaClasse> must be <visibilidade>
5 , modifs.contains(Modifier.<visibilidade>));
6 ...
Listagem 17. Trecho do Template do Teste de Design para Atributos referente
a verificao do tipo do atributo.
Associao
Associaes so verificadas no cdigo seguindo uma abordagem que considera que todos os membros de uma associao
devem possuir um atributo representando cada memberEnd
navegvel dessa associao. Esses membros devem possuir
ainda mtodos get e set para manipular esses atributos.
Entretanto, nem todas as caractersticas abordadas podem
ser verificadas, pois a anlise esttica do cdigo no fornece
informao suficiente. Por exemplo, o mximo e mnimo de
elementos na associao no podem ser tratados, pois esse tipo
de informao s poderia ser extrada monitorando o nmero
de instncias de uma classe em tempo de execuo.
O template para associao deve ser aplicado para a criao de
testes de design para cada MemberEnd navegvel pertencente
associao. Para cada membro da associao gerado um
teste de design com as seguintes caractersticas:
Assinatura do teste. A Listagem 18 exibe o trecho do mtodo
de teste que cria a assinatura do teste de design, identificando
que se trata de um teste de design para o cada membro da
associao o qual o template est sendo aplicado;
Papel na associao. A Listagem 19 exibe o trecho do mtodo
de teste que verifica se a classe que membro da associao
possui um atributo com o mesmo nome do papel dos outros
membros navegveis da associao. Esse teste ainda verifica
se essa classe possui os mtodos get e set para esse atributo
1 ...
2 assertEquals(The attribute <NomeDoAtributo> of the class
3 + <NomeDaClasse> must return the type +
4 <TipoDoAtributo> , <TipoDoAtributo> ,
5 attrClass.getDeclaredType().getName());
6}
Listagem 18. Trecho do Template do Teste de Design para cada Membro da
Associao referente assinatura do mtodo de teste.
1 ...
2 ClassNode c1 = dw.getClass(<NomeTipoFonte>);
3 FieldNode f1 = c1.getField(<papel>);
4 MethodNode getAssoc1 = c1.getMethod(get<papel>());
5 MethodNode setAssoc1 = c1.getMethod(set<papel>());
6 ...
(linhas 4 e 5, respectivamente). Nesse teste, a tag <NomeTipoFonte> deve ser substituda pelo nome completo da classe
membro da associao que est sendo testada. A tag <papel>
deve ser substituda pelo nome do papel dos outros member
End navegveis dessa associao;
33
01
02
03
04
05
06
07
08
09
10
11
12
13
...
assertEquals(the method get<papel> of the class +
<NomeTipoFonte> must return the type +
<NomeTipoAlvo>, <NomeTipoAlvo>,
getAssoc1.getReturnType().getName());
assertEquals(the method set<papel> of the class +
<NomeTipoFonte> must return the type void,
void, setAssoc1.getReturnType().getName());
assertEquals(the attribute <papel> of the class +
<NomeTipoFonte> must return the type +
<NomeTipoAlvo>, <NomeTipoAlvo>,
f1.getDeclaredType().getName());
...
01 ...
02 Collection<Modifier> modifs = f1.getModifiers();
03 assertTrue(the attribute <papel> of the class +
04 <NomeTipoFonte> must be private
05 , modifs.contains(Modifier.PRIVATE));
06 modifs = getAssoc1.getModifiers();
07 assertTrue(the method get<papel> of the class +
08 <NomeTipoFonte> must be <visibilidade>
09 , modifs.contains(Modifier.<visibilidade>));
10 modifs = setAssoc1.getModifiers();
11 assertTrue(the method set<papel> of the class +
12 <NomeTipoFonte> must be <visibilidade>
13 , modifs.contains(Modifier.<visibilidade>));
14 ...
Listagem 22. Trecho do Template do Teste de Design para cada Membro da
Associao referente a verificao dos membros de somente leitura.
1 ...
2 Collection<MethodNode> methodsGetAssoc =
3 getAssoc1.getCalledMethods();
4 boolean isReadOnly = false;
5 for(MethodNode method : methodsGetAssoc) {
6 if(method.getName().equals
7 (java.util.Collections.unmodifiable)) {
8 isReadOnly = true;
9 break;
10 }
11 }
12 assertTrue(The method set<papel> must returns a +
13 java.util.Collections.unmodifiable,
14 isReadOnly);
15 }
Listagem 23. Trecho do Template do Teste de Design para Interface referente
assinatura do mtodo de teste.
34
Interface
Outro artefato que nossa soluo tambm testa interface.
O template de Interface verifica as caractersticas: nome e
hierarquia de interfaces. O template est organizado da seguinte forma:
Assinatura do teste. A Listagem 23 exibe o trecho do mtodo
de teste que cria a assinatura do teste de design, identificando
que se trata de um teste de design para a interface a qual o
template est sendo aplicado.
Existncia da interface. A Listagem 24 exibe o trecho do
mtodo de teste que verifica se existe uma interface na implementao com o mesmo nome da interface especificada
no diagrama de classe. O nome que verificado o nome
completo da interface, ou seja, o nome da interface seguindo a
hierarquia de entidades do projeto. Diferente das verificaes
anteriores, onde a verificao da existncia da entidade se d
quando a entidade extrada do DesignWizard (getClass,
getAttribute, dentre outras.). Para realizar a verificao de
interface necessria uma assertiva a mais, pois uma interface
extrada do cdigo pelo DesignWizard como um ClassNode
comum. A assertiva adicional (linhas 3-4) verifica se o ClassNode extrado realmente representa uma interface, atravs
do mtodo isInterface;
Pacote
Por fim, nossa abordagem capaz de criar testes de design
para verificar os pacotes do diagrama de classe. O template
para pacote verifica as caractersticas: nome, hierarquia de
pacote e relacionamentos entre pacote. O template est organizado da seguinte forma:
Nome do teste. A Listagem 26 exibe o trecho do mtodo de
teste que cria a assinatura do teste de design, identificando que
se trata de um teste de design para o pacote o qual o template
est sendo aplicado.
Existncia do pacote. O teste de design gerado verifica se
existe um pacote na implementao com o mesmo nome do
pacote no diagrama de classe. A Listagem 27 exibe o trecho do
mtodo de teste responsvel por verificar essa caracterstica.
Nesse trecho a tag <NomeDoPacote> deve ser substituda pelo
nome completo do pacote, ou seja, o nome do pacote seguindo
a hierarquia de entidades do projeto, da mesma forma como foi
explicado para a verificao do nome de classes. Dessa forma,
esse trecho alm de testar a existncia do pacote ainda verifica
se a hierarquia de pacotes no cdigo condiz com a hierarquia
especificada no diagrama de classe;
Relacionamento entre pacote (Access e Import). A
Listagem 28 exibe o trecho do mtodo de teste responsvel
por verificar se os elementos dos pacotes se relacionam de
acordo com as diretrizes do relacionamento import e access.
As linhas 2-3 especificam quais outros pacotes esse pacote
se relaciona (de acordo com as diretrizes de relacionamento
entre pacotes). A linha 4 cria uma coleo com todas as entidades do pacote testado. As linhas 5-9 criam um coleo com
todas as classes que podem ser extensveis pelas classes do
pacote testado (ou seja, as classe internas ao prprio pacote
e as classes dos pacotes apontados na linha 3). Por fim, as
linhas 10-18 verificam se todos os elementos do pacote testado (internalEntyties) estendem (herana de classe linhas
11-13, realizao de interface - linhas 14-17) dos elementos do
prprio pacote ou dos pacotes acessados.
1 ...
2 ClassNode aClass = dw.getClass(<NomeDaInterface>);
3 assertTrue(The class <NomeDaInterface> must be a interface,
4 aClass.isInterface());
5 ...
Listagem 25. Trecho do Template do Teste de Design para Interface referente
verificao da hierarquia da Interface.
01 ...
02 String[] superInterfaces =
03 {<superInterface1>, <superInterface2>, ,...};
04 for(String superInterface : superInterfaces) {
05 ClassNode cnInterface = dw.getClass(superInterface);
06 Set<ClassNode> interfacesExtend =
07 aClass.getImplementedInterfaces();
08 assertTrue(The interface <NomeDaInterface>+
09 must extends from + superInterface,
10 interfacesExtend.contains(cnInterface));
11 }
12 }
Listagem 26. Trecho do Template do Teste de Design para Pacote referente
assinatura do mtodo de teste.
1 ...
2 PackageNode thePackage = dw.getPackage(<NomeDoPacote>);
3 ...
Listagem 28. Trecho do Template do Teste de Design para Pacote referente
verificao dos relacionamentos entre os pacotes.
01 ...
02 String[] importedPackages =
03 {<PackageImp1>, <PackageImp2>, ...};
04 Set<ClassNode> internalEntyties = thePackage.getAllClasses();
05 Set<ClassNode> extentableEntiites = internalEntyties;
06 for(StringaPackage : importedPackages) {
07 extentableEntiites.addAll(dw.getPackage(aPackage)
08 .getAllClasses());
09 }
10 for(ClassNode aEntity : internalEntyties) {
11 assertTrue(aEntity + cannot extends the class +
12 aEntity.getSuperClass(),
13 extentables.contains(aEntity.getSuperClass()));
14 for(ClassNodeaInterface : aEntity.getImplementedInterfaces()) {
15 assertTrue(aEntity + cannot implements the interface
16 + aInterface, extentableEntiites.contains(aInterface));
17 }
18 }
19 }
35
Nesta seo vamos mostrar como os testes de design funcionam para identificar erros na implementao de um sistema.
Inicialmente, considere a classe mostrada na seo anterior,
DataHandler, e os testes gerados para esta classe. Considere
agora que esta classe foi implementada de uma maneira simplificada, como pode ser vista na Listagem 33. Implementada
assim, essa classe quebra completamente a deciso estratgica
de que o acesso aos dados seja realizado atravs de um Singleton, pelo fato de possuir um construtor pblico.
A Figura 3 mostra os erros no design apontados pelos testes
de design, quando executados sobre a classe DataHandler
mostrada na Listagem 33. Abaixo do label Failure Trace so
mostrados os traces resultantes da execuo de cada um dos
mtodos de teste de design mostrado anteriormente. O primeiro trace referente verificao do mtodo construtor.
Perceba que ele falha, indicando que a visibilidade do mtodo
construtor deve ser privada: The visibility of The method
<init>() from the class DataHandler must be private. E o segundo e terceiro traces so referentes verificao do mtodo
getInstance e do atributo self, respectivamente. Alm disso,
eles falham apontando que o mtodo e o atributo no existem
na implementao do DataHandler.
01
02
03
04
05
06
07
08
09
10
11
12
01
02
03
04
05
06
07
08
09
10
11
12
36
Consideraes parciais
At este ponto apresentamos uma abordagem para verificao de conformidade entre o design de um sistema especificado atravs de digramas de classes UML e o seu cdigo fonte
implementado em Java. A abordagem consiste basicamente de
templates de testes de design para cada artefato da especificao de diagrama de classes proposto pela OMG.
Os templates de testes de design que foram mostrados podem ser aplicados para verificar caractersticas dos seguintes
artefatos do diagrama de classe de UML: classe, atributo,
operao, associao, interface e pacote. Esses artefatos foram
selecionados, pois se mostram como os mais usuais para a
1 ...
2 public class DataHandler {
3 public DataHandler() {
4 ...
5 }
6 ...
7}
37
Mdulo de Pr-processamento
Nesse mdulo esto todas as aes necessrias para a configurao do ambiente de gerao dos testes de design. As aes
default do sistema so:
1. Verificao dos arquivos de entrada: ela verifica se os parmetros inseridos como entrada para a ferramenta realmente
existem, se o arquivo XMI (padro da OMG para persistir em
arquivo diagramas UML) est bem formado, e se o software
testado corresponde a um JAR;
2. Criao de um diretrio temporrio: ela cria o diretrio
onde todos os arquivos auxiliares, criados durante a gerao
dos testes, sero criados (sand box);
38
Dado que esse mdulo responsvel por gerar os modelos dos testes
de design a partir dos diagramas de
classe UML e que adotamos o framework MDA para a gerao desses
testes, esse mdulo responsvel por
Transformaes em ATL
Os testes de design so gerados seguindo os templates de
testes de design. Contudo, esses templates s existem conceitualmente no UDT. Na ferramenta as transformaes de
PIM para PSM so a realizao da aplicao dos templates,
ou seja, so essas transformaes que capturam as informaes relevantes do diagrama de classe e geram os modelos
do cdigo de teste para cada artefato.
Para a realizao das transformaes nesse nvel utilizamos
a linguagem ATL. Apesar do padro proposto pela OMG
para esse tipo de transformao ser QVT. Decidimos usar
ATL, pois, diferente de QVT, essa linguagem possui um
framework de criao e execuo amplamente utilizado. E
ainda, assim como QVT, estas transformaes esto completamente alinhadas com os atuais padres da OMG.
As transformaes para a gerao dos testes de design
foram organizadas hierarquicamente para facilitar a compreenso, identificao e extenso dessas transformaes.
Dividimos essa hierarquia de regras em 4 nveis. A Figura 7
mostra a aplicao de cada um desses nveis para gerar uma
linha de cdigo que verifica se uma classe abstrata.
39
01 module TestClassJava;
02 create OUT : JavaAbstractSyntax from IN : uml2;
03 ...
04 rule CreateClassTest {
05 from class : uml 2 ! Class
06 toblockMethod : JavaAbstractSyntax ! Block (
07 statements <- Sequence {} )
08 do {
09 self.initializingClassTest(blockMethod, class);
10 self.verifyIsAbstract(blockMethod, class);
11 self.verifySuperType(blockMethod, class);
12 self.verifyClassModifiers(blockMethod, class);
13 self.verifyClassInterfaces(blockMethod, class);
14 self.CreateGeneralTestMethod (testClass+
15 self.classesCounter.toString() +
16 _ + class.methodName, blockMethod);
17 }
18 }
19 ...
40
Transformaes em MOFScript
Diferente das transformaes mostrados anteriormente,
responsveis por gerar os modelos do cdigo de teste, as
transformaes desse mdulo possuem outro objetivo. A partir dos modelos de cdigo, gerar cdigo em sintaxe concreta,
com expresses bem formadas de acordo com a gramtica da
linguagem Java.
A OMG props um padro especfico para tratar as transformaes de Modelos para texto, dentre as linguagens que
seguem esse padro decidimos usar a MOFScript. As vantagens dessa linguagem que nos motivou a sua escolha foram:
i) ela possui um ambiente de criao e execuo para suas
transformaes; ii) ela possui caractersticas de orientao
a objetos, como herana e polimorfismo; iii) o ambiente de
41
Modificadores: identificam quais as caractersticas da declarao desse atributo. Por exemplo, a visibilidade (public,
private, etc.), se esttico (static), etc.;
Tipo: identifica qual o nome do tipo do atributo que est
sendo declarado;
Fragmentos: identificam as informaes referentes como o
atributo est sendo declarado. Por exemplo, o nome do atributo,
a forma como esse atributo est sendo inicializado, etc.
O elemento comando de declarao de uma varivel (VariableDeclarationStatement), como o prprio nome sugere,
pertence ao agrupamento de Comando (Statement). A Listagem
35 exibe um trecho da transformao TT para Comandos responsvel por recuperar as informaes do modelo referentes
ao comando de declarao de uma varivel. J o cdigo da
Listagem 36 exibe o trecho transformao ST para Comandos
responsvel por formatar comando de declarao de uma
varivel de acordo com a sintaxe da gramtica de Java.
Para escrever a expresso referente declarao de varivel
em sintaxe concreta tem-se que recuperar essas informaes e
escrev-las de acordo com a gramtica da linguagem Java. Na
Listagem 35 podemos observar o cdigo que recupera essas
informaes do modelo.
01 import ExpressionTT.m2t
02 import NameTT.m2t
03 import TypeTT.m2t
04 import ASTNodeTT.m2t
05 import VariableDeclarationTT.m2t
06 import StatementTemplates.m2t
07 texttransformation StatementTT (injas : JavaAbstractSyntax) {
08 jas.Statement :: getStatementCode() : String {
09 if(self.oclIsTypeOf(jast.VariableDeclarationStatement))
10 result = self.getVariableDeclarationStatementCode()
11 ...
12 }
13 ...
14 jas.VariableDeclarationStatement
15 :: getVariableDeclarationStatementCode() : String {
16 var modifiers : String= getModifiers(self.modifiers)
17 var type : String = self.type.getTypeCode()
18 var fragments : String =getVariableDeclaration
FragmentsCode(19self.fragments)
20 result = variableDeclarationStatementTemplate(21modifiers, type,
fragments)
22 }
23 }
24 ...
Listagem 36. Transformao para a formatao da declarao de Varivel.
42
Mdulo de Ps-Processamento
Nesse mdulo esto todas as aes necessrias para a finalizao correta da ferramenta. A ao default do sistema
excluir todos os artefatos intermedirios para a gerao do
teste de design final.
Outras aes podem ser incorporadas ao sistema. Para tanto, essas novas aes devem estender da interface java.lang.
Concluso
D
s
Feedback
eu
edio
ta
www.devmedia.com.br/esmag/feedback
Referncias
1.The peer-review process. Learned Publishing, 15:247258, Outubro 2002.
20. Frdric Jouault e Jean Bzivin. KM3: a DSL for metamodel specification. Em IFIP Int. Conf. on Formal
Methods for Open Object-Based Distributed Systems, LNCS 4037, pginas 171185. Springer, 2006.
21. Gail C. Murphy, David Notkin e Kevin Sullivan. Software re exion models: Bridging the gap between
source and high-level models. Em G. Kaiser, editor, Proc. 3rd ACM SIGSOFT Symp. on the Foundations
of Software Engineering, volume 20:4 of ACM SIGSOFT Software Engineering Notes, pginas 1828,
Washington, DC, Outubro 1995.
22. Object Management Group. Meta object facility (MOF) specification. Technical Report ad/97-08-14,
Object Management Group, 1997.
23. Object Management Group. Mof model to text transformation language. Technical Report ad/200404-07, Object Management Group, 2004.
24. JAS-metamodel. http://www.eclipse.org/gmt/am3/zoos/atlanticZoo.
25. Jesse E.Tilly e Eric M. Burke. Ant:The Definitive Guide. OReilly & Associates, Inc., pub-ORA:adr, 2002.
11. Clint Morgan, Kris De Volder e Eric Wohlstadter. A static aspect language for checking design rules. Em
Brian M. Barry e Oege de Moor, editors, AOSD, volume 208 of ACM International Conference Proceeding
Series, pginas 6372. ACM, 2007.
27.Jilles van Gurp e Jan Bosch.Design erosion:problems and causes.The Journal of Systems and Software,
61(2):105119, Maro 2002.
12. James J. Horning e Yang Meng Tan David Evans, John V. Guttag. LCLint: A tool for using specifications to
check code. Em Symposium on the Foundations of Software Engineering, Dezembro 1994.
28.Dalton Guerrero e Jorge Figueiredo Joo Brunet.Design tests: An approach to programmatically check
your code against design rules. Em Proc. 31th International Conference on Software Engineering (ICSE
2009), New Ideas and Emerging Results, Maio 2009.
13. David H. Akehurst, Gareth Howells e Klaus D. McDonald-Maier. Implementing associations: UML 2.0 to
java 5. Software and System Modeling, 6(1):335, 2007.
29. John Robert Taylor. An introduction to error analysis: The study of uncertainties in physical
measurements. pginas 128129. University Science Books, 199.
14. David Lorge Parnas. Software aging. Em Bruno Fadini, editor, Proceedings of the 16th International
Conference on Software Engineering, pginas 279290, Sorrento, Italy, Maio 1994.IEEE Computer Society
Press.
31. Len Bass, Paul Clements e Rick Kazman. Software Architecture in Practice. Addison Wesley, 1998.
32. MagicDraw UML. http://www.magicdraw.com/.
33. Mark Utting e Bruno Legeard. Practical Model-Based Testing: A Tools Approach. Morgan-Kaufmann,
2006.
17. Erich Gamma, Richard Helm, Ralph Johnson e John M.Vlissides. Design Patterns Elements of Reusable
Object-Oriented Software. Addison-Wesley, Massachusetts, 2000.
18. Len Erlikh. Leveraging legacy system dollars for E-business. IT Professional, 2(3):1723, 2000.
43
sobre e
s
Referncias
37. Yann-Gael Gueheneuc e Pierre Leduc Naouel Moha. Automatic generation of detection
algorithms for design defects. Em ASE 06: Proceedings of the 21st IEEE International Conference
on Automated Software Engineering (ASE06), pginas 297300, Washington, DC, USA, 2006. IEEE
Computer Society.
38. Nathaniel Ayewah, William Pugh, J. David Morgenthaler, John Penix e YuQian Zhou. Using
findbugs on production software. Em Richard P. Gabriel, David F. Bacon, Cristina Videira Lopes, e
Guy L. Steele Jr, editors, OOPSLA Companion, pginas 805806. ACM, 2007.
39. Object Management Group. http://www.omg.org/.
48.Stephen Eick, Todd Graves, Alan Karr, J. Marron e Audris Mockus. Does code decay? assessing the
evidence from change management data. IEEE Transactions on Software Engineering, 27(1):112,
2001.
49.Trung T. Dinh-Trong, Nilesh Kawane, Sudipto Ghosh, Robert B. France e Anneliese Amschler
Andrews. A tool-supported approach to testing UML design models. Em ICECCS, pginas 519528.
IEEE Computer Society, 2005.
50.UDT - UML Design Tester. http://www.designwizard.org/index.php/UDT/.
40. Object Management Group, Framingham, Massachusetts. UML 2.0 Superstructure Specification,
Outubro 2004.
51.Victor R. Basili, Gianluigi Caldiera e H. Dieter Rombach. Goal Question Metric Paradigm. Em John
J. Marciniak, editor, Encyclopedia of Software Engineering, volume 1, pginas 528532. John Wiley
& Sons, 1994.
53.Franklin Ramalho e Dalton Serey Waldemar Pires, Jo/ ao Brunet. Uml-based design test
generation. Em SAC 08: Proceedings of the 2008 ACM symposium on Applied computing, pginas
735740, New York, NY, USA, 2008. ACM.
54.William Wesley Peterson. Introduction to Programming Languages. Prentice Hall, Englewood
Cliffs, 1974.
44
55.Wolfgang Hesse. RUP - A process model for working with UML. Em Unified Modeling Language:
Systems Analysis, Design and Development Issues, pginas 6174. 2001.
56.Xalan-Java Version 2.7.1. http://xml.apache.org/xalan-j/.
57.XSL Transformations. http://www.w3.org/TR/xslt/.
58.Rmi Douence e Pierre Cointe Yann-Gael Guhneuc, Herv Albin-Amiot. Bridging the gap
between modeling and programming languages.Technical report, Computer Science Department,
cole des Mines de Nantes, 2002.
Engenharia
Nesta seo voc encontra artigos voltados para testes, processo,
modelos, documentao, entre outros
Este artigo dar continuidade srie sobre otimizao de processos de negcio usando BPM, que iniciou
na edio anterior o estudo de uma metodologia para
projetos de BPI (Business Process Improvement). Nesta edio, ser visto quais so as tcnicas e prticas da
fase de anlise, que visa criar o modelo e documentao formal do processo que ser melhorado.
45
46
Melhoria de Processo
47
48
Melhoria de Processo
Concluses
Nesta segunda parte da srie de artigos sobre otimizao de
processos de negcio, vimos quais so as prticas e atividades
para a conduo da fase de anlise de um processo de negcio
elencado na fase de planejamento. Vimos que tipos de detalhes
dos processos devem ser documentados assim como qual a
forma adequada para capturar o fluxo e lgica dos processos
49
50
Feedback
eu
sobre e
s
Livro Good to Great: Why some companies make the leap... and others dont ISSBN 9780066620992
D
s
Referncias
Links
edio
ta
Desenvolvimento
Nesta seo voc encontra artigos voltados para diferentes
abordagens de apoio ao desenvolvimento de projetos de software
o desenvolvimento de uma
aplicao, o desenvolvedor fica
cercado por diversas informaes provenientes do negcio do cliente
e tem a misso de implement-las em
uma soluo que possibilite o cliente
gerir seu negcio. Alm de fornecer uma
soluo que corresponda s expectativas
do cliente, muitas vezes o desenvolvedor
deve faz-las com base em uma srie de
regras que a empresa onde ele trabalha
prope, entre elas, criar estruturas de
cdigo que possam ser reutilizadas,
codificar de forma clara para que outro
desenvolvedor possa entender o negcio
em uma anlise futura, escrever classes
que, caso sofram manuteno posteriormente, no gerem grandes impactos em
outras classes do sistema, entre outras.
Esta ltima, por sua vez, pode levar o
51
ao desenvolvedor criar uma hierarquia de classes de observadores capazes de avisarem quando mudanas em um
objeto ocorrer, sem que para isso tenham que ser escritas
grandes estruturas de cdigo acopladas ao objeto que se
deseja observar.
Quando j existe grande quantidade de cdigo escrita para
notificar mudanas ocorridas em um objeto, a soluo refatorar para o padro Observer. Neste artigo, uma das refatoraes
para padres apresentadas Substituir Notificaes Hard-coded
por Observer, que fornece uma soluo para refatorar para o
padro de projeto Observer.
A segunda refatorao para padres que este artigo aborda, Substituir Distino Um/Muitos por Composite, mais
uma forma de implementar o padro Composite (ver Nota
do DevMan 1), como as demais formas j apresentadas em
outros artigos desta srie sobre refatorao para padres. Sua
diferena, no entanto, consiste no problema de cdigo que ela
atua. O cenrio a ser estudado consiste em um pilar bsico:
cdigo duplicado.
comum o desenvolvedor em determinados momentos
precisar manipular um nico objeto ou manipular diversos
objetos desta mesma classe. Com isso ele implementa trechos
de cdigo semelhantes para manipular um objeto e outro
para manipular vrios objetos. Esta prtica faz com que muito
cdigo duplicado seja escrito na mesma classe, com intuito de
resolver os dois problemas citados.
Com o padro de projeto Composite, atravs de Substituir Distino Um/Muitos por Composite, o desenvolvedor consegue
criar estruturas capazes de manipular um ou vrios objetos em
um mesmo Composite, eliminando o cdigo duplicado.
As refatoraes para padres descritas neste artigo tm
como pr-requisito um conjunto de tcnicas de refatorao
que incluem Extrair Mtodo, Mover Mtodo, Extrair Interface,
Internalizar Mtodo, Encapsular Coleo e Subir Mtodo na
Hierarquia (ver Nota do DevMan 2).
Nota do DevMan 1
Relembrando conceitos
Uma breve descrio do padro de projeto Composite foi apresentada em artigo
da edio 30 da Engenharia de Software Magazine, e relembrada na edio de
nmero 34.
Nota do DevMan 2
Refatoraes apresentadas em outros artigos
As tcnicas de refatorao Extrair Mtodo, Mover Mtodo, Extrair Interface e Subir Mtodo na Hierarquia j foram apresentadas em outras edies da Engenharia
de Software Magazine, mais precisamente nas edies de nmero 29, 30, 33 e 34.
52
Desen volvimento
53
54
que manipula uma lista, e depois ele deve ser movido para
o composite.
3. O mtodo que recebe uma lista deve se tornar igual ao
mtodo de um objeto. Para isso, algumas mudanas talvez
sejam necessrias.
4. Modifica-se o mtodo que recebe a lista para conter uma
instncia do composite, cujo retorno ser a chamada ao mtodo
movido para o composite. Talvez seja preciso usar a refatorao
Extrair Interface, dependendo do contexto do problema.
5. O mtodo que recebe a lista de objetos agora poder ser
removido, usando a refatorao Internalizar Mtodo.
6. Crie uma forma de limitar a lista contida no composite para
se tornar somente leitura. A refatorao Encapsular Coleo
ajudar neste sentido.
Exemplo: O exemplo a seguir mostra dois mtodos da classe Venda que so responsveis por realizar verificaes. A
diferena entre eles est no fato de que um recebe uma lista
de objetos venda e outro recebe apenas um objeto venda.
Aplicando esta refatorao para padres, cria-se uma classe
composite cujo construtor retornar uma lista de objetos.
Alm disso, essa classe ter a definio de um mtodo
que retornar a lista criada. A Listagem 7 mostra a classe
Composite.
No mtodo que recebe a lista sero aplicadas as refatoraes Extrair Mtodo e Mover mtodo, levando o mtodo
extrado para o composite. A Listagem 8 mostra a classe
Venda e os dois mtodos: o que recebe um objeto e o que
recebe uma lista, e que sero alvos das refatoraes.
O mtodo extrado e movido para o composite se chama
Verificar (Listagem 9). Os mtodos da classe Venda agora
esto como pode ser visto na Listagem 10.
Os mtodos da classe Venda (Listagem 10) executam a
mesma tarefa, portanto o mtodo que recebe uma lista como
parmetro dever ser removido com a refatorao Internalizar Mtodo. O cdigo cliente que invocava o mtodo que
recebe uma lista agora poder ser atualizado para chamar
o mtodo que recebe apenas um objeto, que o tratar da
mesma forma, visto que o objeto passado ser adicionado
a uma lista.
Para finalizar esta refatorao para padres, aplica-se a
refatorao Encapsular Coleo, na lista retornada pela
classe Composite.
Desen volvimento
55
56
Concluso
Mais uma vez o padro de projeto composite foi apresentado
de uma forma diferente, pois atua em diversos problemas de
cdigo, mostrando que no h uma nica forma e momento
Desen volvimento
Referncias
GAMMA, Erich, 2000. Padres de Projeto: solues reutilizveis de software orientado a objetos,
1ed. Porto Alegre: Bookman, 2000.
KERIEVSKY, Joshua. Refatorao para Padres, 1ed. Porto Alegre: Bookman, 2008.
Feedback
eu
edio
ta
D
s
FOWLER, Martin. Refatorao: aperfeioando o projeto de cdigo existente, 1ed. Porto Alegre:
Bookman, 2004.
www.devmedia.com.br/esmag/feedback
57
sobre e
s
Planejamento e Gerncia
Nesta seo voc encontra artigos voltados para o planejamento
e gerncia de seus projetos de software.
58
agilidade
59