Você está na página 1de 56

FUNDAO DE ENSINO EURPIDES SOARES DA ROCHA

CENTRO UNIVERSITRIO EURPIDES DE MARLIA UNIVEM


BACHARELADO EM CINCIA DA COMPUTAO

EVERTON SIMES DA MOTTA

APRIMORAMENTO, VALIDAO DE UM
PROCESSO DE DESENVOLVIMENTO DE SOFTWARE
ORIENTADO A ASPECTOS PROFT/PU
E CRIAO DE UMA FERRAMENTA DE APOIO

MARLIA
2008

EVERTON SIMES DA MOTTA

APRIMORAMENTO, VALIDAO DE UM
PROCESSO DE DESENVOLVIMENTO DE SOFTWARE
ORIENTADO A ASPECTOS PROFT/PU
E CRIAO DE UMA FERRAMENTA DE APOIO

Trabalho de Curso apresentado ao Curso de


Bacharelado em Cincia da Computao da
Fundao de Ensino Eurpides Soares da
Rocha,
mantenedora
do
Centro
Universitrio Eurpides de Marlia
UNIVEM, como requisito parcial para
obteno do grau de Bacharel em Cincia
da Computao (rea de Concentrao:
Engenharia de Software).

Orientador: Prof. Dr. VALTER VIEIRA DE CAMARGO

MARLIA
2008

MOTTA, Everton Simes


Aprimoramento,
validao
de
um
processo
de
desenvolvimento de software orientado a aspectos ProFT/PU e
criao de uma ferramenta de apoio / Everton Simes da Motta;
orientador: Valter Vieira de Camargo. Marlia, SP: [s.n.], 2008.
53 f.
Trabalho de Curso (Graduao em Cincia da Computao) Fundao de Ensino Eurpides Soares da Rocha, mantenedora do
Centro Universitrio Eurpides de Marlia UNIVEM.
1. Programao Orientado a Aspectos 2. Engenharia de
Software 3. Processos de Desenvolvimento
CDD: 005.1

EVERTON SIMES DA MOTTA

APRIMORAMENTO, VALIDAO DE UM
PROCESSO DE DESENVOLVIMENTO DE SOFTWARE
ORIENTADO A ASPECTOS PROFT/PU
E CRIAO DE UMA FERRAMENTA DE APOIO

Banca Examinadora da monografia apresentada ao Curso de Bacharelado em Cincia


da computao do UNIVEM/F.E.E.S.R, para obteno do Grau de Bacharel em Cincia
da Computao.

Resultado:
ORIENTADOR: __________________________________
Prof. Dr. Valter Vieira de Camargo

1 EXAMINADOR: _______________________________

2 EXAMINADOR: _______________________________

Marlia, ____ de ______________________ de 2008.

minha famlia

AGRADECIMENTOS

Em primeiro lugar a Deus por me dar fora e coragem para superar


os desafios.
meu orientador Valter por sempre me incentivar quando eu
estava desanimando e acreditou em mim mesmo nas horas que nem eu
acreditava.
toda minha famlia, pela confiana que depositaram em mim,
pois sem ela no estaria aqui hoje, principalmente a meus pais que com
seus ensinamentos me passaram valores importantes que levarei por toda
minha vida.
todos os meus amigos; e no posso esquecer da minha namorada
Flvia que teve pacincia e me suportou todo esse tempo.

A alegria est na luta, na tentativa, no sofrimento envolvido


e no na vitria propriamente dita.

Mahatma Gandhi

MOTTA, Everton Simes. Aprimoramento, validao de um processo de


desenvolvimento de software orientado a aspectos ProFT/PU e criao de uma
ferramenta de apoio. 2008. 53 f. Trabalho de Curso (Graduao em Cincia da
Computao) - Centro Universitrio Eurpides de Marlia, Fundao de Ensino
Eurpides Soares da Rocha, Marlia, 2008.

RESUMO
A presente monografia tem como objetivo o estudo da programao orientada a
aspectos e de processos de desenvolvimento de software orientado a aspectos existentes
na literatura, conseqentemente identificar suas qualidades e imperfeies, assim
adquirindo conhecimento para aprimorar e validar o processo de desenvolvimento de
software orientado a aspectos ProFT/PU. Tambm criar uma ferramenta para auxiliar
os desenvolvedores que utilizaro este processo. O ProFT/PU um processo que visa
orientar o desenvolvedor por todo o desenvolvimento, desde a fase inicial at o trmino
do projeto. O principal objetivo do trabalho facilitar a aplicao deste processo, visto
que suas atividades, atualmente devem ser realizadas de forma manual. O fornecimento
de uma ferramenta de apoio, alm de agilizar o desenvolvimento tambm diminuir erros
na insero de dados nas tabelas sugeridas em fases do processo.

Palavras-chaves: Programao Orientado a Aspectos. Engenharia de Software.


Processos de Desenvolvimento

LISTA DE FIGURAS
Figura 1 Diagrama de Classes de um Editor Grfico ............................................. 15
Figura 2 Implementao Orientado a Objetos do Interesse de Atualizao
do Display .................................................................................................. 16
Figura 3 Implementao Orientado a Aspectos do Interesse de Atualizao
do Display .................................................................................................. 17
Figura 4 As Fases do PU ........................................................................................ 25
Figura 5 Viso Geral do ProFT/PU ........................................................................ 26
Figura 6 Tela do MagcDraw de gerao de relatrios ............................................ 30
Figura 7 Tela inicial da Ferramenta FRIT Tool ..................................................... 31
Figura 8 Janela usada para abrir o arquivo XML gerado pelo MagicDraw ............ 32
Figura 9 Tela do FRIT Tool abrindo e percorrendo todo o arquivo XML
como o modelo de caso de uso e classificando os casos de uso
candidatos a aspectos .................................................................................. 32
Figura 10 Tela do FRIT Tool com a tabela dos candidatos a aspectos
classificados ............................................................................................... 33

LISTA DE QUADROS
Quadro 1 Implementao do Mecanismo de Atualizao do Display ..................
Quadro 2 Aspecto Abstrato ...................................................................................
Quadro 3 Aspecto Concreto ..................................................................................
Quadro 4 Atividades do ProFT/PU ........................................................................
Quadro 5 Exemplo de Bloco Escrito em XML ......................................................

18
19
19
27
29

SUMRIO

RESUMO ................................................................................................................

06

LISTA DE FIGURAS ...........................................................................................

07

LISTA DE QUADROS ..........................................................................................

08

INTRODUO ......................................................................................................

10

CAPTULO 1 PROGRAMAO ORIENTADA A ASPECTOS


1.1 Separao de interesses ...................................................................................
1.2 Paradigma de Programao Orientado a Aspectos ..........................................
1.3 Linguagem de Programao Orientada a Aspectos ..........................................

12
13
18

CAPTULO 2 PROCESSO DE DESENVOLVIMENTO DE SOFTWARE


ORIENTADOS A ASPECTOS
2.1 Processos ............................................................................................................
2.2 O processo ProFT/PU.........................................................................................

21
24

CAPTULO 3 FERRAMENTA DE APOIO AO PROCESSO PROT/PU


3.1 Linguagem XML .............................................................................................. 28
3.2 Ferramenta Magic Draw .................................................................................. 29
3.3 Ferramenta FRIT Tool.......................................................................................... 31
CONSIDERAES FINAIS .................................................................................

34

REFERNCIAS .....................................................................................................

35

APNDICES ...........................................................................................................

39

10

INTRODUO
Contextualizao
A Engenharia de Software vem evoluindo a cada dia, tendo como um de seus
velhos objetivos a separao adequada de interesses existentes no cdigo-fonte de um
sistema (DIJKSTRA, 1976). Contribuindo com a separao de interesses transversais
sugiram a Programao Orientada a Aspectos (POA) (KICZALES et al., 1997) e
consequentemente novas linguagens de programao, como exemplo a linguagem
AspectJ (KICZALES et al., 2001), tornando possvel a implementao separando os
interesses-base dos transversais, organizando-os em mdulos independentes, o que era
difcil usando apenas as tcnicas tradicionais como as oferecidas pela Programao
Orientada a Objetos que mantinham os interesses espalhados e misturados por todo o
cdigo-fonte do sistema.
Com esse avano, surgiu a necessidade de revisar os processos, mtodos e
tcnicas utilizadas at o momento, tendo que adapt-las a essa nova maneira de
pensar. Ento se inicio um novo processo de evoluo na Engenharia de Software,
trazendo novos conceitos, tcnicas de modelagem de requisito (BANIASSAD et al.,
2006; CLARKE e BANIASSAD, 2005; JACOBSON e Ng, 2004; ARAJO e
MOREIRA, 2003; RASHID et al., 2002; ARAJO et al., 2002; GRUNDY, 1999),
linguagens de modelagem para projeto (BERG et al., 2006; CLARKE e BANIASSAD,
2005; ALDAWUD et al., 2003; KATARA e KATZ, 2003; ZAKARIA et al., 2002;
STEIN et al., 2002; PAWLAK et al., 2002; GRUNDY, 2000; SUZUKI e
YAMAMOTO, 1999), tcnicas de teste (ZHOU et al., 2004; ZHAO, 2003; LEMOS et
al, 2004a; LEMOS et al., 2004b; ZHAO, 2002) e o processo de desenvolvimento de
software orientado a aspectos chamado ProFT/PU (CARMARGO, 2006), que
estudado mais a fundo por este trabalho, esse processo visa conduzir o desenvolvedor
de sistemas desde as fases iniciais at o trmino do projeto.

Motivao
H uma carncia na literatura de um processo de desenvolvimento de software
orientado a aspectos maduro que auxilia o desenvolvedor por todo seu projeto. Alm de

11

ser um campo atual tambm um campo promissor para novas pesquisas. Destaca-se
tambm a dificuldade em se conduzir um processo iterativo e incremental como o
ProFT/PU, realizando as atividades manualmente, pois com a construo de uma
ferramenta, no s agilizar a realizao dessas atividades mas tambm diminuir a
probabilidade de ocorrer erros, que normalmente so cometidos quando tais atividades
so realizadas de forma manual.

Objetivo
Este trabalho de pesquisa tem como objetivo principal a construo de uma
ferramenta que apia as fases iniciais do processo de desenvolvimento de software
orientado a aspectos denominado ProFT/PU, permitindo facilitar e agilizar o conduo
desse processo e estudar alguns processos de desenvolvimento que abordam a
programao orientada a aspectos, afim de validar e aprimorar o ProFT/PU.

12

CAPTULO 1 PROGRAMAO ORIENTADA A ASPECTOS

1.1 Separao de Interesses


A separao de interesses (separation of concerns) na engenharia de software,
refere-se limitao da cognio humana em lidar com a complexidade de um software
(DIJKSTRA, 1976). A proposta sugerida teve uma ampla aceitao pelas comunidades
de Cincia da Computao e de Engenharia de Software, para resolver problemas
complexos de desenvolvimento de sistemas mesmo Dijkstra no sendo um pesquisador
de Cincia Cognitiva. O principal foco da proposta dar maior ateno em uma poro
ou interesse isoladamente, tendo-se cincia que est ignorando outras partes do
problema temporariamente.
Existem constantes pesquisas na rea de engenharia de software em relao
separao de interesses, desde a sua criao. Novas construes sintticas eram
fornecidas a cada novo paradigma de programao, buscando uma modularizao mais
adequada dos interesses com o objetivo de decompor grandes e complexos sistemas em
mdulos bem definidos altamente coesos. Assim gerando software com maior qualidade
em relao ao entendimento e reuso de cdigos e as inevitveis futuras manutenes.
Os interesses foram basicamente divididos em interesses bases e interesses
transversais: o que diz respeito funcionalidade principal do sistema chamado de
interesse base, como exemplo de um sistema que realiza determinado clculo, tem a
funcionalidade principal o clculo em si e no quem esta operando o sistema, onde ser
armazenado o resultado da operao entre outros. J os interesses transversais podem
ser tanto funcionais, como regras de negcio, quanto no-funcionais, como alguns
exemplos clssicos encontrado na literatura: persistncia, sincronizao, interao de
componentes, distribuio, gerenciamento de registros (logging) e controle de acesso
(KICZALES et al., 1997). Foi adotado o termo interesse transversal fazendo analogia
com a implementao com tcnicas convencionais de programao que entrecorta
transversalmente os mdulos, afetando vrios outros, causando o entrelaamento
(tangling) e espalhamento (spreading) de cdigo de diferentes interesses. Quando se
encontra em um mesmo mdulo o cdigo de um determinado interesse misturado com o
cdigo de um diferente interesse, ocorre o entrelaamento. Quando se encontra em
vrios mdulos do sistema cdigo de um determinado interesse ocorre o espalhamento.

13

Na prxima sesso apresentado um paradigma de programao criado com a


evoluo da engenharia de software, buscando uma separao de interesses mais
adequada.

1.2 Paradigma de Programao Orientado a Aspectos


Em um artigo publicado por Kiczales em 1997 foi apresentada a Programao
Orientada a Aspectos, com a idia principal de melhorar o desenvolvimento de sistemas
projetados de maneira convencional que causam problemas de entrelaamento e
espalhamento de cdigo por todo o sistema, distinguindo os interesses transversais
dos interesses bases, que em paradigmas de desenvolvimento de software, como o da
programao orientado a objeto consiste na existncia de apenas um tipo de mdulo ou
construo sinttica que encapsula vrios tipos de interesses (TARR et al., 2001), as
classes da programao orientada a objeto so um exemplo, fazendo com que interesses
que envolvem restries no sejam adequadamente encapsulados e fiquem misturados
ao interesses base. A POA foi criada como uma extenso da programao orientada a
objetos, utilizando todos os seus conceitos e adicionando novas abstraes que
contribuem para a separao de interesses (separation of concerns), por exemplo:
aspectos (aspects), adendos (advices), pontos de juno (join points), conjunto de
juno (pointcut) e declaraes inter-tipos (inter-type declarations/introductions),
possibilitando a implementao de interesses transversais em mdulos aspectuais e os
interesses base de forma convencional em classes normais.
O termo aspecto usado para denotar a abstrao da POA, uma unidade
modular que encapsula o interesse transversal isolando-o dos interesses base, projetada
para afetar outros mdulos do sistema.
Pontos de juno so locais bem definidos no programa onde os aspectos iro
atuar, as chamadas e execues de mtodos so exemplos destes pontos. Assim
estabelecendo o relacionamento entre os aspectos e as classes. Tais pontos tambm
podem ser especficos em uma determinada linguagem orientada a aspectos, atravs de
um conjunto de juno, que o mecanismo que especifica os pontos de juno.
Adendo um construtor semelhante ao mtodo de uma classe, onde definido
o comportamento do aspecto, que ser executado sempre que um ponto de juno
associado alcanado. Os trs tipos de adendos existentes so: adendos anteriores

14

(before) que sua execuo acontece antes do prosseguimento da computao; adendos


posteriores (after) que sua execuo acontece aps a execuo do ponto de juno e
antes do retorno do controle para o chamador; adendos de substituio (around) podem
tomar o controle do cdigo base, podendo ou no devolve-lo.
Podem ser utilizadas as declaraes de inter-tipos quando existe a necessidade
de inserir novos mtodos e atributos em classes base do sistema.
Os inter-tipos operam de forma esttica, diferente dos adendos e conjuntos de
juno, que operam de forma dinmica. Assim possibilitando o aspecto afetar a
estrutura esttica ou dinmica de classes e objetos. Tambm podem ser inseridos nos
aspectos mtodos e atributos internos, como classes O.O. e no somente especificaes
de elementos que entrecortam classes de um sistema.
A POA contm trs propriedades bsicas (KICZALES et al., 1997;
ELRAD et al., 2001):
a-) dicotomia aspectos-base: refere-se adoo de uma distino clara entre
classes e aspectos. Os sistemas orientados a aspectos so decompostos em classes e
aspectos, onde so modularizados os interesses transversais nos aspectos e os interesses
base nas classes;
b-) inconscincia: propriedade desejvel da programao orientada a aspectos.
a idia de que, para serem entrecortados por aspectos os componentes no precisam
ser preparados (ELRAD et al., 2001). Por esta propriedade, os componentes no
percebem quando podero ser afetados pelos aspectos. Mas pesquisas atuais comeam a
apontar vantagens quando existe consistncia da existncia dos aspectos pelo cdigobase (KICZALES e MEZINI, 2005; GRISWOLD, et al., 2006);
c-) quantificao: a capacidade de escrever declaraes unitrias, que possam
afetar vrios pontos de um sistema (ELRAD et al., 2001). Por esta propriedade
possvel fazer tipos de declaraes como: uma ao executada sempre que
determinada condio for verdadeira em um sistema.
Na Figura 1 ilustrado um diagrama de editor de grfico, onde existe um
interesse transversal ELRAD et al. (2001), que consiste na exibio da imagem (classe
Display); ser demonstrado um exemplo de implementao usando programao
orientada a objeto, de maneira convencional, onde os interesses transversais no so
devidamente separados do cdigo base; e um outro exemplo de implementao usando
programao orientada a aspecto demonstrando como dever ser a separao dos
interesses.

15

Figura 1 Diagrama de Classes de um Editor Grfico

Na Figura 2 mostrado um exemplo usando programao orientada a objetos,


resulta em inserir uma chamada ao mtodo updating() da classe Display em todos os
mtodos que alteram o posicionamento de um ponto ou de uma linha (mtodos set*()).
Note que o cdigo desse interesse ficou entrelaado com o cdigo de cada um dos
mtodos e espalhado por vrios mtodos do sistema.

16

Figura 2 Implementao Orientada a Objetos do Interesse de Atualizao do Display

class Line
{
private

Point p1, p2;

Point getP1() {return p1;}


Point getP2() {return p2;}
void setP1(Point p1)
{
this.p1 = p1;
Display.updating();
}
void setP2(Point p2)
{
this.p2 = p2;
Display.updating();
}
}

class Point
{
int x, int y;

So inseridas as chamadas para


atualizao o display, criando o
cenrio de dependncia acima.

int getX() { return x};


int getY() { return y}
void setX(int x)
{
this.x = x;
Display.updating();
}
void setY(int y)
{
this.y = y;
Display.updating()
}
}

Na Figura 3 mostrado um exemplo onde foram retiradas todas as chamadas


do mtodo updating() das classes Line e Point como havia no exemplo anterior,
deixando o cdigo base limpo, mantendo somente o que diz respeito a sua
funcionalidade e criado um aspecto que entrecortar o cdigo base no mesmo ponto
onde foram retirados as chamadas do mtodo,
comportamento de atualizao do display.

assim executando o mesmo

17

Figura 3 Implementao Orientada a Aspectos do Interesse de Atualizao do Display

class Line
{
private

Point p1, p2;

Point getP1() {return p1;}


Point getP2() {return p2;}
void setP1(Point p1)
{
this.p1 = p1;
}
void setP2(Point p2)
{
this.p2 = p2;
}
}
class Point
{
int x, int y;

<<crosscuts>>

<<aspect>>
DisplayUpdatingg()

int getX() { return x};


int getY() { return y}
void setX(int
{
this.x =
}
void setY(int
{
this.y =
}
}

x)
x;
y)
y;

aspect DisplayUpdating
{
pointcut move():

Foi criado um aspecto que


entrecortar o cdigo base nos
mesmos pontos onde existia as
chamadas do mtodo updating()
no exemplo anterior e mantendo o
interesse transversal separado do
cdigo base; criando um novo
cenrio de dependncia
demonstrado na imagem acima.

call(void Line.set*(Point))
||
call(void Point.set*(int))
after() returning: move() {
Display.updating();
}
}

Na prxima seo so apresentados linguagens de programao, que apiam o


paradigma de programao orientado a aspectos, pois no basta ter um novo paradigma,
tambm interessante tem uma linguagem onde seja possvel implementar as abstraes
que esse paradigma oferece.

18

1.3 Linguagem de Programao Orientada a Aspectos


Para a implementao de um sistema orientado a aspecto existem vrias
linguagens como: AspectC usadas para as linguagens C, AspectC# usadas para as
linguagens C# e AspectJ usadas para as linguagens Java. Por adotar uma abordagem
assimtrica, AspectJ (KICZALES et al., 2001) foi escolhida para ser utilizada em
estudos deste trabalho.
Todos os conceitos da programao orientado a aspectos so implementadas
com AspectJ, so modularizados com aspectos somente os interesses transversais
existentes no sistema e as classes so usadas para a implementao do interesses-base.
No Quadro 1 mostrada um exemplo da implementao de um aspecto que
possui um conjunto de juno chamado move(), onde dois pontos de juno esto
definidos; ambos so chamados do tipo (call), sendo o primeiro todos os mtodos que
comeam com a palavra set e esto na classe Line e o segundo somente com a
diferena de que os mtodos tm que estar na classe Point. Sempre que existir uma
chamada a algum mtodo set* das classes Line ou Point, o adendo do tipo after chama o
mtodo updating() da classe Display aps a execuo dos mtodos definidos (set*). A
declarao returning assegura que a execuo do adendo after ser efetuada somente se
os pontos de juno, do conjunto de juno move(), retornarem de sua execuo com
sucesso. Dessa maneira, as chamadas ao mtodo updating() da classe Display no
existiriam nos mtodos set*() das classes Line e Point.

Quadro 1 Implementao do Mecanismo de Atualizao do Display


aspect DisplayUpdating
{
pointcut move():
call(void Line.set*(Point)) || call(void Point.set*(int));
after() returning: () {
Display.updating();
}
}

(CAMARGO, 2006)

Em AspectJ possvel criar aspectos abstratos, esses aspectos so


semelhantemente as classes abstratas em Java, tambm podem ser criados conjuntos de
juno abstratos onde pode-se implementar antecipadamente o comportamento

19

transversal de um aspecto abstrato sem ter conhecimento em quais pontos de juno e


em qual cdigo base ir atuar, a idia usada no desenvolvimento de frameworks
orientados a aspectos, pensando no reuso de cdigo. Um adendo pode ser definido sobre
uma conjunto de pontos de juno abstratos, tais pontos so informados em um aspect
concreto que especializa o abstrato.
No Quadro 2 apresentado um aspecto abstrato que tem funo de estabelecer
conexes com o banco de dados, definido um conjunto de juno abstrato nomeado
doConnection() e um adendo do tipo after() que atua sobre ele. Sempre ser chamado o
mtodo ConnectDB() quando algum ponto de juno informados no aspecto concreto
que especializar o abstrato for alcanado. Assim, deve ser criado um aspecto concreto
para especializar o aspecto abstrato criar algum ponto de juno onde a conexo ser
estabelecida, assim concretizando o conjunto de juno doConnection(), como mostra o
Quadro 3, o aspecto concreto est indicando que em toda execuo de um mtodo
init()a conexo deve ser estabelecida.

Quadro 2 Aspecto Abstrato


public abstract aspect AbstractAspectConnection
{
...
abstract pointcut doConnection();
after() : doConnection()
{
ConnectDB();
}
}

(CAMARGO, 2006)

Quadro 3 Aspecto Concreto


public aspect AspectConnection extends AbstractAspectConnection
{
pointcut doConnection(): execution (void *.init(..));
}

(CAMARGO, 2006)

Foram criadas diretrizes para a implementao de interfaces de entrecorte em


AspectJ, fazendo com que sejam criadas separadas do comportamento transversal que
iro ter atuao sobre elas (GRISWOLD et al., 2005). uma maneira de reorganizar o

20

cdigo, criando aspectos que contm apenas conjuntos de juno e aspectos que contm
apenas adendos que atuam nos conjuntos de juno definidos.
A interface de um sistema um ponto importante em relao a seus mdulos,
interface so descries ou receitas de como os mdulos interagem com o resto do
sistema (MEYER, 1997 apud (CHAVEZ et al., 2005)), (MEZINI e OSTERMANN,
2003 apud (CHAVEZ et al., 2005)). Existe um construtor especfico na linguagem de
programao Java para a implementao de interfaces, criando a possibilidade de expor
um sub conjunto do comportamento de um mdulo para outro. Para mtodos aspectuais
aplicado o conceito de interface de entrecorte (crosscutting interface), que se
resume em um conjunto conhecido como detalhes de entrecorte (crosscutting
features) (CHAVEZ et al., 2005) que so comportamentos que podem afetar o cdigo
base de forma dinmica ou esttica(CHAVEZ, 2004).
J na linguagem de programao AspectJ, no existe um construtor especfico
para a implementao de interfaces de entrecorte, desta forma as implementaes deste
tipo de interface so feitas no mesmo mdulo do comportamento transversal (aspecto),
como podemos observar na Quadro 1.
A interface de entrecorte consiste em um conjunto de juno move() com seus
respectivos pontos de juno que devem ser expostos do cdigo-base. A implementao
dessa interface de entrecorte est no mesmo modulo que possui o comportamento
transversal que atua sobre ela.
Existem propostas que sugerem diretrizes de como implementar interfaces de
entrecorte em na linguagem AspectJ e o comportamento transversal que deve atuar
sobre elas em mdulos separados (GRISWOLD et al., 2005). Consiste em uma maneira
reaorganizao do cdigo, encapsulando os conjuntos de juno em determinados
aspectos e em outro encapsulado somente os adendos que atuam naqueles conjuntos de
juno.
No prximo captulo so apresentados processos que auxiliam no
desenvolvimento de software orientados a aspectos, visando fornecer parmetros e
diretrizes que guiam os desenvolvedores.

21

CAPTULO 2 PROCESSOS DE DESENVOLVIMENTO DE


SOFTWARE

ORIENTADO A ASPECTOS

2.1 Processos

Com a criao do paradigma POA, vrios pesquisadores se dedicam aos


estudos da influncia deste paradigma em fases especficas de um processo de
desenvolvimento.
Alguns destes pesquisadores foram estudados neste trabalho, na fase de projeto
(BERG et al., 2006; CLARKE e BANIASSAD, 2005), AOCE (Aspect-Oriented
Component Engineering), (GRUNDY, 2000; (Architectural View of Aspects) KATARA
e KATZ, 2003; SUZUKI e YAMAMOTO, 1999; PAWLAK et al., 2002; STEIN et al.,
2002; ZAKARIA et al., 2002; ALDAWUD et al., 2003), na fase de implementao
(SOARES, 2004), na fase de anlise e engenharia de requisitos (GRUNDY, 1999;
CLARKE e BANIASSAD, 2005; RASHID et al., 2002; BANIASSAD et al., 2006) e
tambm existem poucos que abordam todo o ciclo de vida (CLARKE e BANIASSAD,
2005; JACOBSON e NG, 2004).
Grundy (1999) tem seus estudos voltados para o desenvolvimento de software
baseado em componentes utilizando mtodos de engenharia de requisitos orientados a
aspectos. Uma categorizao de diversos aspectos de um sistema que um componente
prov para os usurios finais ou para outros componentes.
Clarke e Baniassad (2005) focam a fase de anlise da abordagem Tema, a partir
de requisitos so identificados os temas. Antes definida uma relao de um tema a
cada requisito ou conjunto de requisito. Tambm so definidos critrios para a
identificao de temas nos trabalhos de Clarke e Baniassad (2005), os temas
encapsulam interesses transversais que so candidatos a aspectos assim denominados
como temas transversais que em geral tm relacionamento com mais de um requisito,
temas que encapsulam o interesse base, chamados de temas base, em geral tm
relacionamento com apenas um requisito.
A proposta de Arajo e Moreira (2003) tem como objetivo identificar casos de
uso aspectuais, sendo estes, funcionais ou no-funcionais. A realizao dessa
identificao inicia de um documento de requisitos, em que elaborado um modelo
inicial dos casos de uso, analisa-se esse modelo com o objetivo de fatorar as

22

funcionalidades, Isso representado por relacionamentos com os esteretipos


<<includes>>, <<extend>> e <<constrain>>, assim so identificados os requisitos no
funcionais e modelados como casos de uso com esterotipo <<NF>>, que so
integrados com os casos de uso funcionais j modelados. O esteretipo <<constrain>>
usado na representao do relacionamento entre casos de uso no funcionais e
funcionais. Por fim, os casos de uso que restringem mais de um caso de uso ou os que
so includos ou estendidos por mais de um caso de uso, devem ser identificados como
casos de uso candidatos a aspectos.
Rashid et al. (2002) props o modelo AORE, (Aspect-Oriented Requirements
Engineering), que relaciona os requisitos a interesses com o objetivo de identificar os
interesses candidatos a aspectos, que so os que entrecortam os requisitos. Este modelo
tambm permite separar a especificao dos requisitos aspectuais, requisitos normais e
regras de composio em mdulos que seguem gabaritos bem definidos.
Muitos dos trabalhos que focam a fase de projeto visam estender tcnicas de
projeto orientado a objetos e UML, assim incluindo especialidades para permitir a
modularizao de interesses transversais.
O Tema/UML AOCE (GRUNDY, 2000) que um destes trabalhos que focam
a fase de projetos, tem como base a idia de que cada componente de um sistema
baseado em componentes prov ou usa servios para/de outros componentes. So
empregadas extenses da UML para tornar explcitos os detalhes aspectuais.
O Tema/UML (CLARKE E BANIASSAD, 2005) combina gabaritos da UML
com o modelo de projeto orientado a assunto. So usadas algumas regras de composio
para compor os projetos. Aps serem identificados os temas transversais e bases.
Tambm

so seguidos gabaritos que representam genericamente as operaes

entrecortadas, em diagramas de interao onde mostrado o comportamento padro do


tema quando combinado com algum tema base e so substitudas pelas operaes dos
temas bases na composio. Essa abordagem tem como ponto inicial, que padres de
comportamentos transversais existem conforme eles entrecortam os projetos base.
Assim permitindo que o comportamento transversal seja projetado sem conscincia do
cdigo base.
Katara e Katz (2003) abordam a representao dos aspectos como pacotes
estereotipados tendo artefatos da UML pertencente a um determinado interesse. A
relao dos elementos existente em cada diagrama pode ser, defines ou uses, podendo
ser mapeados para outros elementos em aspectos diferentes. introduzida a notao de

23

diagrama de interesse (concern diagram), tambm permitida a visualizao de


sobreposies de interesses.
O modelo de projeto aSide (CHAVEZ, 2004), composta por trs facetas, a
estrutural, a dinmica e a de composio. A faceta estrutural tem a funo de modelar a
estrutura dos aspectos e componentes e como se relacionam atravs de interceptaes e
mecanismos de composio tradicionais. A faceta dinmica tem a funo de modelar as
interaes das instncias dos aspectos em relao aos componentes afetados por esses
mesmos aspectos, por fim a faceta de composio busca facilitar a compreenso em um
nvel mais alto de abstrao da combinao dos aspectos com os componentes.
Foi apresentado por Soares (2004) um mtodo de implementao orientado a
aspectos integrado com o (Rational Unified Process - RUP) (JACOBSON et al., 1999).
Algumas modificaes na estrutura esttica (disciplinas e atividades) e na estrutura
dinmica (fases) do RUP foram propostas pelo autor, para a utilizao do mtodo. Na
parte dinmica foi feita a principal modificao, para requisitos no funcionais so
realizadas iteraes especficas, deste modo, casos de uso que eram implementados em
apenas uma iterao so implementados em iteraes funcionais onde existe apenas
requisitos funcionais como: gerenciamento de dados no persistentes e interfaces com o
usurio, e somente aps a validao dessas implementaes, os requisitos no
funcionais como o de persistncia, distribuio e concorrncia so incorporados em trs
iteraes no funcionais.
A abordagem proposta por Jacobson e Ng (2004) apresenta o desenvolvimento
de software orientado a aspectos baseado em casos de uso, visando identificar interesses
transversais a partir dos casos de uso de um sistema, implementando-o em mdulos
separados. So identificados os casos de uso que implementam interesses transversais,
principalmente pelos tipos de relacionamentos com outros casos de uso (include ou
extend), para isso, critrios foram definidos afim de orientar os desenvolvedores na
tomada de deciso dos tipos de relacionamentos estabelecidos entre os casos de uso.
Um sistema composto por casos de uso base e transversais, pois um caso de uso
representa um interesse do sistema, ao implementar um caso de uso pode ser criada
mais de uma classe com seus mtodos e atributos relacionados ao interesse desejado.
Tambm foi proposto pelo autor que a composio para a produo de um sistema seja
feita atravs de entidades vazias criadas previamente, de declaraes intertipo e em
relao a codificao do sistema seja utilizado linguagem de programao orientada a
aspectos.

24

Na prxima sesso apresentado um novo processo chamado ProFT/PU que


tem o objetivo de auxiliar o desenvolvedor de sistemas baseado em aspectos por todo o
perodo do desenvolvimento.

2.2 O Processo ProFT/PU


O processo de desenvolvimento de software orientado a aspecto denominado
ProFT/PU foi criado em um trabalho apresentada ao Instituto de Cincias Matemticas
e de Computao - ICMC-USP So Carlos/SP, como parte dos requisitos para
obteno do ttulo de Doutor em Cincias - Cincias de Computao e Matemtica
Computacional (CAMARGO, 2006). O ProFT/PU visa auxiliar o desenvolvedor de
sistema de software orientado a aspectos por meio de diretrizes e disciplinas por todo o
perodo de desenvolvimento; em relao aos outros processos existentes como o de
(CLARKE e BANIASSAD, 2005) e Jacobson e Ng, (2004) so destacados quatro
pontos, sendo o primeiro que ele foi gerado da unio dos conceitos, critrios e tcnicas
de modelagem de trabalhos consagrados da literatura e modelados em fases especficas.
(CLARKE e BANIASSAD, 2005; JACOBSON e NG, 2004; BANIASSAD et al., 2006;
KRECHETOV et al., 2006; ARAJO e MOREIRA, 2003; ARAJO et al., 2002). O
segundo que ele baseado na identificao e acompanhamento de interesses
Transversais durante todo o decorrer do processo. O terceiro que ele apoiado por
Framworks transversais em determinadas atividades e o quarto que ele um processo
iterativo e incremental.
O processo ProFT/PU acompanha a estrutura de fases e disciplinas do Processo
Unificado (PU) (JACOBSON et al., 1999) apresentado por (LARMAN 2004),
seguindo o conceito de ser iterativo e incremental, assim o desenvolvimento de um
sistema realizado em iteraes, em que cada iterao concentrada no
desenvolvimento de um subconjunto de casos de uso, at que a implementao de todo
o sistema seja finalizada. O ProFT/PU ligeiramente influenciado pelos frameworks
transversais, onde a existncia de frameworks transversais que possam ser usados para
facilitar a implementao de um interesse transversal so levadas em considerao em
algumas atividades como a identificao de aspectos. Entretanto a implementao
independente dos frameworks transversais, assim possibilitando ser feita de forma
convencional sem utilizar frameworks.

25

Como o PU, o ProFT/PU iterativo e orientado pelos riscos. So acomodadas


no interior das fases do PU as atividades que sero realizadas, que esto sendo
mostradas na Figura 4. Na fase de concepo gerada uma viso aproximada do
sistema, casos de uso funcionais e no funcionais simples so definidos e algumas
estimativas so esboadas. Na fase de elaborao, so identificados os primeiros
interesses transversais; refinada a viso do sistema; a arquitetura central
implementada iterativamente, identificado a maior parte dos requisitos do sistema e
so selecionados os casos de uso que sero implementados como aspectos. Em cada
uma das iteraes desta fase, os casos de uso escolhidos para a iterao atual so
implementados e inseridos aos casos de uso j desenvolvidos, assim obtendo uma
verso executvel. Na fase de construo so implementados de maneira iterativa os
elementos restantes de baixo risco. Na fase de transio so feitas as implementaes
propriamente ditas e conduzidos os testes.
O PU e o ProFT/PU tem como base um conjunto de disciplinas que devem ser
seguidas, como exemplo, requisitos, anlise, projeto e implementao. So repetidas
essas disciplinas em todas as fases, mas com nfases diferentes conforme a progresso
do processo, em cada fase a nfase em determinada disciplina pode ser maior ou menor.
Por exemplo, dada uma nfase maior na disciplina de requisitos na fase de concepo
do que na fase de construo. Nas fases de elaborao e construo que so iterativas,
tem nas primeiras iteraes uma nfase maior nas disciplinas de anlise e projeto, e nas
ltimas iteraes a nfase maior dada na disciplina de implementao. Na Figura 5 as
disciplinas do ProFT/PU so mostradas e a nfase que deve ser aplicada por todo o
desenvolvimento.
Figura 4 As Fases do PU
Concepo

Iterao

Iterao

Elaborao

Construo
Transio

(CAMARGO, 2006)

26

Figura 5 Viso Geral do ProFT/PU

Disciplinas
Requisitos
Anlise
Projeto
Implementao
Teste

Concepo

ProFT/PU
Elaborao

Iterao

Construo

Tempo

(CAMARGO, 2006)

O ProFT/PU trabalha com a mesma estrutura de processo do PU, contudo


foram criadas novas atividades especficas para a manipulao dos interesses
transversais. Esto descritas no Quadro 4 as atividades do ProFT/PU em cada disciplina.
As atividades particulares do ProFT/PU esto representadas em letras negritas, e as
atividades encontradas em qualquer processo de desenvolvimento de software baseado
no PU esto representadas em letras no negritas, mesmo sendo atividades comuns do
PU possuem influncia das novas atividades ou da existncia de frameworks
transversais ou at mesmo alguma alterao.
Em uma determinada fase pode ser executada qualquer atividade, porm mais
comum serem executadas as atividades da disciplina Requisitos na fase de Concepo
do que na fase de Construo.

27

Quadro 4 Atividades do ProFT/PU

Atividades da Disciplina Requisitos


Identificar Atores e Detalhar Casos de Uso Funcionais
Identificar e Especificar Casos de Uso No-Funcionais
Planejar Iteraes
Atividades da Disciplina Anlise
Identificar e Registrar Casos de Uso Colaboradores
Identificar e Registrar Casos de Uso Candidatos a Aspectos
Criar Diagramas de Seqncia do Sistema
Definir Contratos das Operaes do Sistema
Desenvolver Modelo Conceitual
Atividades da Disciplina Projeto
Identificar Aspectos
Selecionar Aspectos para a Iterao Atual
Projetar Aspectos
Acoplar Aspectos com a Base
Desenvolver Diagramas de Interao
Desenvolver Modelo de Classes de Projeto
Projetar Modelo de Dados
Atualizar Regras de Composio
Desenvolver Modelo de Projeto Composto
Desenvolver Viso da Arquitetura
Registrar Pontos de Juno
Atividades da Disciplina Implementao
Implementar Classes de Domnio
Implementar Banco de Dados
Atualizar Regras de Composio
Implementar Aspectos
Implementar Classes Controladoras
Implementar Interfaces
Testar

(CAMARGO, 2006)

Pode ser encontrado no trabalho de doutorado - Camargo (2006), o processo de


desenvolvimento de software orientado a aspectos denominado ProFT/PU com uma
grande riqueza de detalhes, ele esta descrito e demonstrado com um exemplo prtico.
No prximo captulo apresentada com mais detalhes a linguagem XML, que
usada para organizar e armazenar dados gerados pelo FRIT Tool e pela ferramenta de
modelagem MagicDraw.

28

CAPTULO 3 FERRAMENTA DE APOIO AO PROCESSO


PROFT/PU

3.1 Linguagem XML


O XML uma linguagem extensvel de formato, e esta sendo vista como uma
evoluo considervel na internet, desenvolvida pela W3C (World Wide Web
Consortium), criada para exceder as limitaes do HTML, que padro adotado nas
pginas WEB. A linguagem XML foi definida como um formato universal para a
estruturao de dados na Web, ento so estabelecidas regras que permitem escrever
esses arquivos para possibilitar sua identificao e visualizao aos computadores.
Como no HTML tambm so usadas tags (parmetros e palavras-chaves) no
XML, uma tag composta por um marcador de incio de comando e outro de fim, com
a diferena de que em alguns casos, quando declarada uma tag no HTML e no
colocado seu marcador de fim de comando, mesmo assim a pgina pode ser exibida, j
no XML no pode existir esse tipo de erro; no HTML as tags j esto definidas, por
exemplo, para marcar onde inicia e termina um pargrafo usada a tag <p> </p>, no
XML as tags so usadas para demarcar blocos de dado, por exemplo, o programador
pode definir que a tag <p> </p> ir significar o nome, ou idade, ou telefone, enfim ele
define o que determinada tag representar, assim possibilitando o programador criar um
conjunto de tags para ser usada com determinados comandas funes e aplica-las em
documentos Web que desejar.
Quando um programador cria suas prprias tags, atribudo uma espcie de
glossrio no arquivo, como o DTD (Document Type Definition) e o XML Schema,
tornando possvel definir que uma determinada tag tenha em seu interior outras tags. No
Quadro 5 mostrado um exemplo prtico de um bloco de dado escrito em XML, as tags
esto sendo definidas no texto em negrito. Esta imagem ilustra uma pequena parte da
capacidade do XML, pode ser encontrado facilmente muitas obras que abordam esse
assunto com grande riqueza de detalhes.

29

Quadro 5 exemplo de bloco escrito em linguagem XML.

<aluno>
<ra> 35414-7 </ra>
<nome> Everton Simes da Motta </nome>
<curso> Bach. em Cincia da Computao </curso>
<serie> 4 ano </serie>
</aluno>

A extensibilidade do XML foi to bem aceita no mercado, que at mesmo as


grandes corporaes como a Microsoft, Google, IBM, Oracle, Sun, entre outras vm
incluindo mdulos e funes em XML em seus produtos, assim tornando a linguagem
cada vez mais difundida em todo o territrio mundial.
Na prxima seo apresentada uma ferramenta de modelagem UML utilizada
para a criao dos diagramas de caso de uso de um sistema computacional.

3.2 Ferramenta MagicDraw


MagicDraw uma ferramenta de modelagem UML visual criada pela N Magic
Inc, que em 1998 liberou MagicDraw UML Verso 1.0, a primeira aplicao em larga
escala completamente desenvolvida em Java; a ferramenta foi projetada para
desenvolvedores de software; funciona em conjunto com mltiplas linguagens de
programao como (Java, C++, C#, entre outras); prev a independncia em muitos
processos de desenvolvimento de software especficos, conforme a necessidade da
empresa ou instituio. A facilidade de uso uma forte caracterstica do MagicDraw,
com uma interface grfica que permite que os usurios utilizem a ferramenta de maneira
fcil.
MagicDraw iniciar a partir de qualquer ponto em sua arquitetura e processo de
modelagem; no importando se o projeto encontra-se atualmente em uma fase de
requisitos ou manuteno; perfis com UML e diagramas personalizados podem estender
padro UML 2; oferece tambm API aberta, onde pode-se estender funcionalidade para

30

incluir novos padres de design, mtricas, transformaes e outros plugins; possibilita


vrios programadores trabalharem ao mesmo tempo em um mesmo modelo; e inclui
mdulos e funes XML em seus produtos.

Figura 6 Tela do MagicDraw de gerao de relatrio

Na prxima seo apresentada uma ferramenta que apia o processo


ProFT/PU auxiliando o desenvolvedor em sua conduo.

31

3.3 Ferramenta FRIT Tool


A Ferramenta FRIT Tool prope apoiar o desenvolvedor de sistemas de
software orientado a aspectos que utiliza o processo ProFT/PU. Esta verso enfatiza a
atividade Identificar e Registrar Casos de Uso Candidatos a Aspectos da disciplina
Requisitos do processo, aplicando as tcnicas demonstradas no processo ProFT/PU.
A FRIT Tool identifica os candidatos a aspectos a partir de um arquivo XML
que nele est contido o diagrama de caso de uso, gerado pela ferramenta de modelagem
MagicDraw. A FRIT Tool abre e l este arquivo XML, criando um outro arquivo XML
contendo os casos de uso candidatos a aspectos e mostra em uma tabela, possibilitando
o usurio especificar se determinado caso de uso ser realmente implementado com
aspectos e em que iterao ele ser includo ao projeto.
Na Figura 7 mostrada a tela inicial da FRIT Tool onde percebe-se dois
botes; o Gerar Candidatos e o Abrir Candidatos que sero mais bem detalhados no
decorrer dessa sesso.

Figura 7 Tela inicial da Ferramenta FRIT Tool

32

Ao clicar no boto Gerar Candidatos o sistema abrir uma nova janela onde o
usurio dever indicar o arquivo XML que contem o diagrama de caso de uso criado
pela ferramenta de modelagem MagicDraw. Como mostrada na Figura 8.

Figura 8 Janela usada para abrir o arquivo XML gerado pelo MagicDraw.

A FRIT Tool abre e percorre todo o arquivo, afim de localizar todos os casos
de uso existentes em seu interior, logo aps aplica as tcnicas propostas no ProFT/PU
para definir quais destes casos de uso sero candidatos a aspectos. Como mostrada na
Figura 9.
Figura 9 Tela do FRIT Tool abrindo e percorrendo todo cdigo em XML como o modelo de
caso de uso e classificando os casos de uso candidatos a aspectos.

33

Em seguida criado um outro arquivo escrito em XML contendo somente os


casos de uso que foram considerados candidatos a aspectos que so apresentados em
uma tabela ao usurio. A tabela possui quatro colunas, sendo a primeira, os nomes dos
casos de uso; a segunda, os critrios aplicados que fizeram com que esse caso de uso
fosse includo Tabela; a terceira, possibilita o usurio indica quais casos de uso sero
realmente implementados com aspectos; e a quarta e ltima coluna, o usurio indica em
que iterao o caso de uso ser implementado. Como mostra a Figura 10.

Figura 10 Tela do FRIT Tool com a tabela dos candidatos a aspectos classificados.

O boto Abrir Candidatos usado para abrir o arquivo XML com os casos de
uso candidatos a aspectos j gerados anteriormente e suas respectivas configuraes.

34

CONSIDERAES FINAIS
Ao decorrer dos estudos conduzidos no presente trabalho destacou-se a
dificuldade em determinar quais casos de uso deveriam ser realmente implementados
com aspectos, ento as pesquisas foram direcionadas para a identificao desses casos
de uso.
Foi estuda a eficcia de se aplicar ao ProFT/PU uma matriz para organizar os
relacionamentos entre os casos de uso, pois assim possibilita uma melhor visualizao
que no prprio diagrama.
Com o uso da matriz, foi obtida uma melhor visualizao dos relacionamentos
entre os casos de uso, assim facilitando a aplicao dos critrios para a escolha dos
candidatos a aspectos quando realizada manualmente. Mesmo assim so necessrios
mais testes para saber se realmente o uso da matriz quando o processo realizado de
forma manual traria mais benefcios que deficincias.
J com a criao de uma ferramenta em que o desenvolvedor no realizar a
aplicao das tcnicas de identificao dos candidatos de forma manual, a matriz no
faria muito sentido, pois os dados coletados no diagrama para alimentar a matriz seriam
suficiente para identificar os candidatos a aspectos, tambm no usando a matriz o
cdigo-fonte da prpria ferramenta seria mais simples de ser implementados.
Foi criada uma ferramenta que identifica os casos de uso candidatos a aspectos
por meio de um arquivo XML gerado pela ferramenta de modelagem MagicDraw,
assim agilizando o processo e diminuindo a margem de erro na aplicao dos critrios
de identificao dos candidatos.
Trabalhos futuros devero ser realizados buscando ampliar a capacidades da
ferramenta criada, fazendo com que atue tambm em outras fases do ProFT/PU. Mais
teste para o aprimoramento e validao do ProFT/PU devero ser feitos.

35

REFERNCIAS

ALDAWUD, O., ELRAD, T., BADER, A. UML Profile for Aspect-Oriented


Software Development. In: Proceedings of Workshop of Aspect Oriented Modeling
with UML of Aspect Oriented Software Development Conference (AOSD), 2003.

ARAJO, J., MOREIRA, A. M. D. An Aspectual Use-case Driven Approach. In:


JISBD, pp. 463468, 2003.
BANIASSAD, E., CLEMENTS, P.C., MOREIRA, A., ARAJO, J., RASHID, A.,
TEKINERDOGAN, B. Discovering Early Aspects. IEEE Software, pp. 61-70, 2006.

BERG, K. VAN DEN., CONEJERO, J.M., HERNNDEZ, J. Identification of


Crosscutting In Software Design. In: Proceedings of the Aspect-Oriented Modelling
Workshop (AOM06) in conjunction with Aspect-Oriented Software Development
(AOSD06), Bonn, Alemanha, 2006.

CAMARGO, V.V. Frameworks transversais: definies, classificaes, arquitetura


e utilizao em um processo de desenvolvimento de software. Tese de Doutorado.
Instituto de Cincias Matemticas e de Computao, ICMC-USP So Carlos/SP,
Novembro, 2006.

CHAVEZ, C. V. G., GARCIA, A., KULESZA, U.,SANTANNA C., LUCENA, C.


Taming Heterogenerous Aspects with Crosscutting Interfaces. In: Proceedings of
Simpsio Brasileiro de Engenharia de Software (SBES05), pp 216-231, Uberlndia,
MG, Brasil, 2005.

CHAVEZ, C.V.G. A Model-Driven Approach for Aspect-Oriented Design. Tese de


Doutorado. Departamento de Informtica da PUC-Rio, 2004.

CLARKE, S., BANIASSAD, E. Aspect-Oriented Analysis and Design: The Theme


Approach. Addison-Wesley, 2005.

DEITEL, H. M.; DEITEL, P. J.. . Java: como programar. 3 ed. Porto Alegre:
Bookman, 2001. 1201p.

DIJKSTRA, E. W. A Discipline of Programming. Prentice-Hall, 1976

36

ELRAD, T., FILMAN R., BADER A. Aspect-Oriented


Communications of the ACM, vol 44, pp 29-32, 2001.

Programming.

GRISWOLD, W.G., SHONLE, M., SULLIVAN, K., SONG, Y., CAI, Y., RAJAN, H.
Modular Software Design with Crosscutting Interfaces, IEEE Software, pp 51-60,
2006.

GRUNDY, J. Aspect-Oriented Requirements Engineering for Component-Based


Software Systems. In: 4th Symposium on Requirements Engineering, Limerick,
Ireland, IEEE, pp. 84-91, 1999.

GRUNDY, J. Multi-Perspective Specification, Design and Implementation of


Software Components Using Aspects. In: Journal of Software Engineering and
Knowledge Engineering, 20, 6, pp. 713-724, 2000.

JACOBSON, I., BOOCH, G., RUMBAUGH, J. The Unified Software Development


Process. Reading, MA. Addison-Wesley, 1999.

JACOBSON, I., NG, P. Aspect-Oriented Software Development With Use Cases.


Addison-Wesley, 2004.

KATARA, M., KATZ, S. Architectural View of Aspects. In: 2nd Conference on


Aspect-Oriented Software Development (AOSD), Boston, ACM, pp. 1-10, 2003.

KICZALES, G., LAMPING, J., MENDHEKAR, A., MAEDA, C., LOPES, C.,
LOINGTIER, J., IRVING, J. Aspect Oriented Programming. In: Proceedings of 11
ECOOP. pp. 220-242, 1997.

KICZALES, G., HILSDALE, E., HUGUNIN, J., KERSTEN, M., PALM, J.,
GRISWOLD, G. Getting Started With AspectJ, Communications of the ACM, vol 44,
No. 10, pp.59-65, 2001.

KICZALES, G., MEZINI, M. Aspect-Oriented Programming and Modular


Reasoning. In: Proceedings of International Conference on Software Engineering
(ICSE05), St. Louis, Missouri, USA, pp. 49-58, 2005.

KRECHETOV, I., TEKINERDOGAN, B., GARCIA, A., CHAVEZ, C., KULESZA, U.


Towards an Integrated Aspect-Oriented Modeling Approach for Software
Architecture Design. In: Aspect-Oriented Modelling Workshop (AOM06), in

37

conjunction with Aspect-Oriented Software Development Conference (AOSD06),


Bonn, Alemanha, 2006.

LARMAN, Craig. . Utilizando UML e padres : uma introduo anlise e ao


projeto orientado a objetos. Porto Alegre: Bookman, 2002. 492p.
LEMOS, O.A., VINCENZI, A.M.R., MALDONADO, J.C., MASIERO, P.C. Teste de
Unidade de Programas Orientados a Aspectos. In Anais do 18. Simpsio Brasileiro
de Engenharia de Software (SBES04) (indicado para best-paper) Braslia, DF, Brasil,
2004.

LEMOS, O.A.L., MALDONADO, J.C., MASIERO, P.C. Data-Flow Integration


Testing criteria for Aspect-Oriented Programs. In: Anais do 1o. Workshop de
Desenvolvimento de Software Orientado a Aspectos (WASP04) realizado em
conjunto com o SBES04, Braslia, DF, Brasil, 2004a.

MARTIN, James; ODELL, James J.. . Anlise e projeto orientados a objeto. So


Paulo: Makron Books, 1996. 639p.

PAWLAK, R., DUCHIEN, L., FLORIN G., LEGONG-AUBRY, F., SEINTURIER, L,


MARTELLI, L. A UML Notation for Aspect-Oriented Software Design. In:
Proceedings of Workshop of Aspect Oriented Modeling with UML of Proceedings of
Aspect Oriented Software Development Conference (AOSD), 2002.

RASHID, A., SAWYER, P., MOREIRA, A., ARAUJO, J. Early Aspects: A Model for
Aspect-Oriented requirements engineering. In: Joint Intl Conference Requirements
Engineering (RE), Essen, Germany, IEEE, pp 199-202, 2002.

RASHID, A., CHITCHYAN, R. Persistence as an Aspect. In: Proc. of the 2nd


International Conference on Aspect Oriented Software Development (AOSD), Boston
USA, March, 2003.

SOARES, S. An Aspect-Oriented Implementation Method. Dissertao de Mestrado.


Centro de Informtica (CI), Universidade Federal de Pernambuco (UFPe), Setembro,
2004.

SOARES, S., LAUREANO, E., BORBA, P. Implementing Distribution and


Persistence Aspects with AspectJ. In: Proc. the 17th ACM Conference on ObjectOriented Programming, Systems, Languages, and Applications (OOPSLA), pp 174-190,
November, 2002.

38

STEIN, D., HANENBERB, S., UNLAND, R. Designing Aspect-Oriented


Crosscutting in UML. In: Workshop Aspect-Oriented Modeling with UML, AOSD,
Enschede, April, 2002.

SUZUKI, J., YAMAMOTO, Y. Extending UML With Aspects: Aspect Support in


the Design Phase. In: Workshop on Aspect-Oriented Programming (ECOOP), Lisboa,
1999.

TARR, P., OSSHER, H., SUTTON, S. Hyper/JTM : Multi-dimensional Separation of


Concerns for Java. In: Proc. of the 24th International Conference on Software
Engineering. Orlando, Florida, 2002.

ZAKARIA, A.A., HOSNY, H., ZEID, A. A UML Extension for Modelling AspectOriented Systems. In: Proceedings of Workshop of Aspect Oriented Modeling with
UML of Aspect Oriented Software Development Conference (AOSD), 2002.

ZHAO, J. Tool Support for Unit Testing of Aspect-Oriented Software. In: OOPSLA
2002 Workshop on Tools for Aspect-Oriented Software Development, Seatle, WA,
2002.

39

APNDICE A Cdigo-fonte da Ferramenta FRIT Tool

unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
Menus,
ComCtrls, ExtCtrls, StdCtrls, ImgList, ShellApi,
Variants,
LibXmlParser, ToolWin, Buttons, xmldom, DB, DBClient,
Provider,
Xmlxform, Grids, DBGrids, jpeg;
type
TFrmMain = class(TForm)
DlgOpen: TOpenDialog;
ImageTopo: TImage;
PanelCorpoSystem: TPanel;
PageControl: TPageControl;
Aba_Xml_ModeloCasoUso: TTabSheet;
MemoSource: TRichEdit;
Aba_Xml_CasosUsoCandidato: TTabSheet;
MemoContents: TRichEdit;
Bt_sair: TImage;
Bt_abrir: TImage;
Bt_Gerar: TImage;
Timer1: TTimer;
Panel1: TPanel;
Animate1: TAnimate;
Label1: TLabel;
Aba_Frm_CasoUsoCandidato: TTabSheet;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
DBGrid1: TDBGrid;
cds_candidato: TClientDataSet;
cds_candidatoNOME: TStringField;

40

cds_candidatoCRITERIO: TStringField;
cds_candidatoSERAIMPL: TStringField;
cds_candidatoITERACAO: TStringField;
cds_candidatoID: TStringField;
DataSource1: TDataSource;
cds_relacionamento: TClientDataSet;
cds_relacionamentoTIPO: TStringField;
cds_relacionamentoORIGEM: TStringField;
cds_relacionamentoDESTINO: TStringField;
StatusBar1: TStatusBar;
procedure FormShow(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure MemoSourceChange(Sender: TObject);
procedure PageControlChange(Sender: TObject);
procedure Bt_sairClick(Sender: TObject);
procedure Bt_GerarClick(Sender: TObject);
procedure Bt_abrirClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Add_criterios;
procedure Criterio_qtde;
procedure Criterio_extd;
procedure Criterio_nf;
procedure Del_nao_candidatos;
procedure DBGrid1DblClick(Sender: TObject);
private
XmlParser
file_caso_uso,
file_relacionamento

: TXmlParser;

: TEXTFILE;

Nome_caso_uso_candidato,
Nome_relacionamento
: String;
public
Elements
: TObjectList;
CreateTree : BOOLEAN;
Changed
: BOOLEAN;

41

PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
PROCEDURE
end;

FillContent;
FillTree;
FillDtdTree;
ReadFile (Filename : STRING);
ApplySource;

var
FrmMain: TFrmMain;
tempo:integer;
IMPLEMENTATION
uses UFormCandidatos, UFormNumIteracoes;
{$R *.DFM}
TYPE
TElementNode = CLASS
Content : STRING;
Attr
: TStringList;
CONSTRUCTOR Create (TheContent : STRING;
TheAttr : TNvpList);
DESTRUCTOR Destroy; OVERRIDE;
END;
CONSTRUCTOR
TElementNode.Create
(TheContent
:
STRING;
TheAttr : TNvpList);
VAR
I : INTEGER;
BEGIN
INHERITED Create;
Content := TheContent;
Attr
:= TStringList.Create;
IF TheAttr <> NIL THEN
FOR I := 0 TO TheAttr.Count-1 DO
Attr.Add (TNvpNode (TheAttr [I]).Name + '=' +
TNvpNode (TheAttr [I]).Value);
END;

42

DESTRUCTOR TElementNode.Destroy;
BEGIN
Attr.Free;
INHERITED Destroy;
END;
procedure TFrmMain.FormShow(Sender: TObject);
begin
XmlParser := TXmlParser.Create;
Changed := FALSE;
Elements := TObjectList.Create;
PageControl.ActivePage := PageControl.Pages [0];
if ParamCount > 0 then
ReadFile (ParamStr (1));
end;
procedure TFrmMain.FormHide(Sender: TObject);
begin
Elements.Free;
XmlParser.Free;
end;
procedure TFrmMain.FillContent;
var
id_caso_uso : STRING;
begin
Nome_caso_uso_candidato
:=
ExtractFilePath
(Application.ExeName)+'candidatos.xml';
Nome_relacionamento
:=
ExtractFilePath
(Application.ExeName)+'relacionamento.xml';
AssignFile (file_caso_uso, Nome_caso_uso_candidato);
AssignFile (file_relacionamento, Nome_relacionamento);
try
Rewrite (file_caso_uso);
Rewrite (file_relacionamento);

43

Writeln (file_caso_uso,
' <?xml version="1.0" standalone="yes"?> ');
Writeln (file_caso_uso,
' <DATAPACKET Version="2.0">');
Writeln (file_caso_uso,
' <METADATA> <FIELDS> ');
Writeln (file_caso_uso,
'
<FIELD
attrname="ID"
fieldtype="string"
WIDTH="50"/> ');
Writeln (file_caso_uso,
' <FIELD attrname="NOME" fieldtype="string"
WIDTH="50"/> ');
Writeln (file_caso_uso,
' <FIELD attrname="CRITERIO" fieldtype="string"
WIDTH="50"/> ');
Writeln (file_caso_uso,
' <FIELD attrname="SERAIMPL" fieldtype="string"
WIDTH="50"/> ');
Writeln (file_caso_uso,
' <FIELD attrname="ITERACAO" fieldtype="string"
WIDTH="50"/> ');
Writeln (file_caso_uso,
' </FIELDS> </METADATA> ');
Writeln (file_caso_uso,
' <ROWDATA> ');
Writeln (file_relacionamento,
' <?xml version="1.0" standalone="yes"?> ');
Writeln (file_relacionamento,
' <DATAPACKET Version="2.0">');
Writeln (file_relacionamento,
' <METADATA> <FIELDS> ');
Writeln (file_relacionamento,
' <FIELD attrname="TIPO" fieldtype="string"
WIDTH="50"/> ');
Writeln (file_relacionamento,
' <FIELD attrname="ORIGEM" fieldtype="string"
WIDTH="50"/> ');
Writeln (file_relacionamento,

44

' <FIELD attrname="DESTINO" fieldtype="string"


WIDTH="50"/> ');
Writeln (file_relacionamento,
' </FIELDS> </METADATA> ');
Writeln (file_relacionamento,
' <ROWDATA> ');
try
XmlParser.StartScan;
XmlParser.Normalize := FALSE;
id_caso_uso:='';
while XmlParser.Scan do
if (XmlParser.CurPartType = ptContent) then
begin
if (Pos('ownedMember',XmlParser.CurName) > 0 )
then
begin
if
(XmlParser.CurAttr.Value('xmi:type')='uml:UseCase') then
begin
Writeln (file_caso_uso,
'
<ROW
ID="'+XmlParser.CurAttr.Value('xmi:id')+'"'
+
'
NOME="'+XmlParser.CurAttr.Value('name')+'"'
+ ' CRITERIO=""'
+ ' SERAIMPL="Sim'+'"'
+ ' ITERACAO=""'
+ ' />');
id_caso_uso:=XmlParser.CurAttr.Value('xmi:id');
end
else
id_caso_uso:='';
end;
if (Pos('include',XmlParser.CurName) > 0 ) then
begin

45

if
(XmlParser.CurAttr.Value('xmi:type')='uml:Include')
and (id_caso_uso<>'') then
begin
Writeln
(file_relacionamento,
'
TIPO="include"'
+ ' ORIGEM="'+id_caso_uso+'"'
+
DESTINO="'+XmlParser.CurAttr.Value('addition')+'"'
+ ' />');
end;
end;

<ROW

'

if (Pos('extend',XmlParser.CurName) > 0 ) then


begin
if
(XmlParser.CurAttr.Value('xmi:type')='uml:Extend')
and
(id_caso_uso<>'') then
begin
Writeln
(file_relacionamento,
'
<ROW
TIPO="extend"'
+ ' ORIGEM="'+id_caso_uso+'"'
+
'
DESTINO="'+XmlParser.CurAttr.Value('extendedCase')+'"'
+ ' />');
end;
end;
if

(Pos('nf:NF',XmlParser.CurName) > 0 ) then

// rever
begin // (bloco 8)
Writeln
(file_relacionamento,

'

<ROW

TIPO="NF"'
+
ORIGEM="'+XmlParser.CurAttr.Value('base_UseCase')+'"'
+ ' DESTINO=""'
+ ' />');
end;
end;

'

46

Writeln (file_caso_uso, ' </ROWDATA> </DATAPACKET>');


Writeln
(file_relacionamento,
'
</ROWDATA>
</DATAPACKET>');
finally
CloseFile (file_caso_uso);
CloseFile (file_relacionamento);
end;
MemoContents.PlainText := TRUE;
MemoContents.Lines.LoadFromFile
(Nome_caso_uso_candidato);
except
MemoContents.Lines.Clear;
end;
end;
procedure TFrmMain.FillTree;
begin
XmlParser.Normalize := TRUE;
XmlParser.StartScan;
end;
procedure TFrmMain.FillDtdTree;
begin
end;
procedure TFrmMain.ReadFile (Filename : STRING);
begin
Screen.Cursor := crHourGlass;
Elements.Clear;
MemoSource.PlainText := TRUE;
MemoSource.Lines.LoadFromFile (Filename);
ApplySource;
end;
procedure TFrmMain.ApplySource;
begin

47

Screen.Cursor := crHourGlass;
// muda cursor
XmlParser.LoadFromBuffer (MemoSource.Lines.GetText);
FillContent;
Changed
:= FALSE;
Screen.Cursor := crDefault;
end;
procedure TFrmMain.MemoSourceChange(Sender: TObject);
begin
Changed := TRUE;
end;
procedure TFrmMain.PageControlChange(Sender: TObject);
begin
if PageControl.ActivePage <> Aba_Xml_ModeloCasoUso then
if Changed then
ApplySource;
end;
procedure TFrmMain.Bt_sairClick(Sender: TObject);
begin
FrmMain.Close;
end;
procedure TFrmMain.Bt_GerarClick(Sender: TObject);
begin
if DlgOpen.Execute then
begin
tempo:=0;
Timer1.Enabled:=true;
end;
end;
procedure TFrmMain.Bt_abrirClick(Sender: TObject);
begin
Nome_caso_uso_candidato
:=
ExtractFilePath
(Application.ExeName)
+'candidatos.xml';
cds_candidato.FileName:= Nome_caso_uso_candidato;

48

cds_candidato.Open;
end;
procedure TFrmMain.Timer1Timer(Sender: TObject);
var
filename: string;
i: integer;
begin
PageControl.TabIndex:=2;
FrmMain.Enabled:=false;
Screen.Cursor := crHourGlass;
tempo:=tempo+1;
Panel1.Visible:=true;
Animate1.Active:=true;
if tempo>3 then
begin
Timer1.Enabled:=false;
filename:=DlgOpen.Filename;
ReadFile (filename);
FillContent;
i:=Length(filename);
while (filename[i]<>'\') and (i>0) do
i:=i-1;
cds_candidato.FileName:= Nome_caso_uso_candidato;
cds_candidato.Open;
Add_criterios;
Animate1.Active:=false;
Panel1.Visible:=false;
FrmMain.Enabled:=true;
Screen.Cursor := crDefault;
PageControl.TabIndex:=0;
end;
end;
procedure TFrmMain.Criterio_qtde;
var

49

qtde : integer;
begin
qtde:=0;
cds_relacionamento.First;
while (not cds_relacionamento.Eof) do
begin
if
cds_candidatoID.Value=cds_relacionamentoORIGEM.Value then
inc(qtde);
cds_relacionamento.Next;
end;
if qtde>1 then
begin
cds_candidato.Edit;
if Length(cds_candidatoCRITERIO.Value)>0 then
cds_candidatoCRITERIO.Value:=cds_candidatoCRITERIO.Value+',
QTDE'
else
cds_candidatoCRITERIO.Value:='QTDE';
cds_candidato.Post;
end;
end;
procedure TFrmMain.Criterio_extd;
var
extd : boolean;
begin
extd:=false;
cds_relacionamento.First;
while (not cds_relacionamento.Eof) and (not extd) do
begin
if
(cds_candidatoID.Value=cds_relacionamentoORIGEM.Value)
and (cds_relacionamentoTIPO.Value='extend') then
extd:=true;
cds_relacionamento.Next;
end;
if extd then

50

begin
cds_candidato.Edit;
if Length(cds_candidatoCRITERIO.Value)>0 then
cds_candidatoCRITERIO.Value:=cds_candidatoCRITERIO.Value+',
EXTEND'
else
cds_candidatoCRITERIO.Value:='EXTEND';
cds_candidato.Post;
end;
end;
procedure TFrmMain.Criterio_nf;
var
est_nf : boolean;
begin
est_nf:=false;
cds_relacionamento.First;
while (not cds_relacionamento.Eof) and (not est_nf) do
begin
if
(cds_candidatoID.Value=cds_relacionamentoORIGEM.Value)
and (cds_relacionamentoTIPO.Value='NF') then
est_nf:=true;
cds_relacionamento.Next;
end;
if est_nf then
begin
cds_candidato.Edit;
if Length(cds_candidatoCRITERIO.Value)>0 then
cds_candidatoCRITERIO.Value:=cds_candidatoCRITERIO.Value+',
<<NF>>'
else
cds_candidatoCRITERIO.Value:='<<NF>>';
cds_candidato.Post;
end;
end;

51

procedure TFrmMain.Del_nao_candidatos;
begin
cds_candidato.First;
while (not cds_candidato.Eof) do
begin
if cds_candidatoCRITERIO.Value='' then
cds_candidato.Delete;
cds_candidato.Next;
end;
DeleteFile(Nome_relacionamento);
end;
procedure TFrmMain.Add_criterios;
var
extd : integer;
begin
cds_candidato.Close;
cds_candidato.Open;
cds_candidato.First;
while (not cds_candidato.Eof) do
begin
extd:=0;
cds_relacionamento.Close;
cds_relacionamento.FileName:=Nome_relacionamento;
cds_relacionamento.Open;
Criterio_qtde;
Criterio_extd;
Criterio_nf;
cds_candidato.Next;
end;
cds_relacionamento.ApplyRange;
cds_relacionamento.Close;
Del_nao_candidatos;
cds_candidato.First;
end;
procedure TFrmMain.DBGrid1DblClick(Sender: TObject);
begin
if DBGrid1.SelectedIndex=2 then

52

begin
cds_candidato.Edit;
if DBGrid1.SelectedField.AsString='Sim' then
cds_candidatoSERAIMPL.asstring:='No'
else
cds_candidatoSERAIMPL.asstring:='Sim';
cds_candidato.Post;
end
else
if DBGrid1.SelectedIndex=3 then
begin
FrmNumIteracoes.ShowModal;
end;
end;
end.

unit UFormNumIteracoes;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TFrmNumIteracoes = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }

53

public
{ Public declarations }
end;
var
FrmNumIteracoes: TFrmNumIteracoes;
implementation
uses UFormCandidatos, Main;
procedure TFrmNumIteracoes.BitBtn1Click(Sender: TObject);
begin
FrmMain.cds_candidato.Edit;
FrmMain.cds_candidatoITERACAO.Value:=Edit1.Text;
FrmMain.cds_candidato.Post;
FrmNumIteracoes.Close;
end;
procedure TFrmNumIteracoes.BitBtn2Click(Sender: TObject);
begin
FrmNumIteracoes.Close;
end;
procedure TFrmNumIteracoes.FormShow(Sender: TObject);
begin
Edit1.SetFocus;
end;
end.

This document was created with Win2PDF available at http://www.win2pdf.com.


The unregistered version of Win2PDF is for evaluation or non-commercial use only.
This page will not be added after purchasing Win2PDF.