Академический Документы
Профессиональный Документы
Культура Документы
1 Introduo
1.1. Motivao
2 Trabalhos Relacionados
12
12
2.2.2. A study on the current state of the art in tool-supported UML-based static
reverse engineering (Kollmann, 2004)
14
15
17
18
19
19
2.3.2. Graphviz
21
22
22
25
3.1. O Metamodelo
25
27
27
31
35
3.4. Modelo
36
37
3.4.2. Subversion
37
38
3.4.4. Maven
38
39
3.5. Funcionalidades
40
42
1
Introduo
1.1.
Motivao
Um sistema de software est sempre evoluindo para se adequar a
modificaes em prticas de negcio organizacionais. Aps diversas evolues e
modificaes, tanto o software quanto a sua documentao tornam-se difceis de
entender. Quanto mais difcil entender um sistema, mais os desenvolvedores
se focam na modificao do software, diminuindo a confiabilidade de
documentao existente, dificultando mais ainda a tarefa de manuteno. Alm
da manuteno, a evoluo torna-se uma tarefa complexa. Isso acarreta, no
final, em um aumento de custo em qualquer artefato produzido a partir do
software original, seja este aumento proveniente de um atraso, ou mesmo da
necessidade de adicionar mais recursos humanos ao projeto, devido alta
complexidade que acarreta a baixa produtividade do grupo.
Para se efetuar uma manuteno em um software, importante que o
desenvolvedor faa uma anlise de impacto da mudana [Sommerville 2007].
Anlise de impacto se entende como a identificao das potenciais
conseqncias de uma alterao e a ao de estimar o que se deve ser alterado
para realizar esta modificao. Uma anlise de impacto envolve verificar se
outras partes do software devem ser modificadas por conta de uma manuteno,
buscando minimizar os efeitos colaterais de uma mudana [Wilde and Huitt
1992; Queille et al. 1994].
Para se fazer uma anlise de impacto necessrio ter uma
representao da estrutura do sistema [Queille et al. 1994]. Porm, a
documentao existente sobre um sistema legado tende a perder a
confiabilidade ao longo do tempo. Para contornar este problema, pode-se
recuperar a estrutura do sistema utilizando engenharia reversa, que se preocupa
em recuperar a representao arquitetural do sistema a partir do cdigo fonte,
permitindo seu entendimento e modernizao [Chikosfky and Cross 1990].
Ser que fcil encontrar uma ferramenta para realizar tal tarefa?
Imaginando que se trata de uma linguagem antiga, ou de um sistema com pelo
menos cinco anos de existncia e em evoluo constante, e que teve uma alta
rotatividade de desenvolvedores. Como fazer uma anlise de impacto confivel?
Alm disso, como gerar automaticamente modelos coerentes com o que est
implementado? Esta dissertao visa abordar um pedao deste problema.
1.2.
Definio do Problema
O Laboratrio de Engenharia de Software da PUC-Rio (LES) conduz vrios
projetos na rea de engenharia reversa. Um, em especial, foi o motivador do
trabalho proposto neste documento. O projeto envolve a documentao e testes
de um software (produzido por uma organizao externa ao LES) controlador de
estoque para os produtos produzidos pela Petrobrs, como leos e Gs Natural
Veicular (GNV). Alm de um aplicativo, ele pode ser considerado um ambiente
de integrao para diversos outros artefatos, pois possibilita uma interface de
comunicao que permite a outros produtos, produzidos por qualquer fbrica de
software, consultar e alterar dados de sua base.
Como este software foi iniciado h mais de sete anos, no existia a
facilidade atual para criao de servios distribudos, como a tecnologia de
webservice. A soluo adotada foi o uso de procedures no SGBD Oracle. Toda a
inteligncia do modelo de negcios ficou implementada no banco de dados. Na
interface foi definida uma camada simples, que chama as procedures e
apresenta o resultado retornado.
A meta principal do projeto desenvolvido pelo LES era gerar
documentaes e casos de testes para essas procedures, utilizando tcnicas de
engenharia reversa. O objetivo primrio desta documentao era facilitar o
entendimento do banco de dados para fins de manuteno. Ento, duas frentes
de trabalho foram iniciadas: de criao de testes e de documentao.
No caso dos testes, tecnologicamente no houve problemas para o seu
desenvolvimento. Foram utilizados frameworks em Java que possibilitaram a
criao de testes de unidades para as procedures. O grande problema
encontrado era o entendimento do ambiente necessrio para a execuo das
procedures. Elas possuem uma rvore de chamadas complexa, alm de usar
constantemente tabelas temporrias como meio de comunicao entre si. Isto
adicionou um grau extra de complexidade, pois, para cada procedure a ser
por
exemplo:
Popula
com
parmetros:
temp_cenarios_rel,
1.3.
Objetivo e Organizao do Trabalho
O objetivo inicial desta dissertao era produzir um artefato que
conseguisse gerar uma documentao que satisfizesse as necessidades
expostas na sesso 1.2. So elas: Anlise de impacto para fins de manuteno,
e o entendimento do workflow de chamadas das procedures para auxiliar o
desenvolvimento de testes, manuteno e evoluo do sistema.
Com a evoluo dos estudos sobre o problema exposto na sesso anterior,
o objetivo desta dissertao tambm evoluiu, pois foi percebida a possibilidade
de fazer mais do que simplesmente atender o problema apresentado. O objetivo
se
transformou
em:
Prover
uma
base
para
gerao
de
diagramas
como ele fez uso dos artefatos desenvolvidos por ela. Alm disso, feito uma
avaliao do resultado produzido em comparao com as necessidades prticas
do estudo de caso. Por ultimo, no captulo 6, vem a concluso da dissertao,
com o comentrio final e os trabalhos futuros.
2
Trabalhos Relacionados
do
programa
em
blocos.
Cada
pedao
pode
ser
compilado
2.1.
Rational Data Architecture
A motivao inicial do trabalho foi gerar um diagrama de comportamento
de uma procedure escrita na linguagem SQL. Pensando nisto, foi feito um
estudo para verificar em que nvel esto as ferramentas para manipulao e
desenvolvimento de banco de dados. No foi encontrada nenhuma capaz de
produzir o diagrama esperado. Procurando em fruns de internet e em
referncias encontradas no site de busca Google, o Rational Data Architect (IBM,
2008) estava sempre muito bem cotado, citado constantemente como um dos
melhores ambientes existentes para este tipo de desenvolvimento. Como era
necessria uma anlise profunda de uma ferramenta com esta finalidade, a
escolha foi natural. O estudo foi realizado em uma verso temporria fornecida
pela IBM.
O Rational Data Architect, RDA, um software pertencente plataforma
de desenvolvimento da IBM. Ele parte do conjunto de produtos para
gerenciamento de informaes da empresa. O RDA compatvel com vrios
sistemas de gerenciamento de banco de dados (SGBD), como o DB2, Sybase,
Oracle, SQL Server, entre outros. Ele se integra com os outros produtos da
marca Rational, como o Rational RequisitePro, para controle de requisitos, e o
ClearCase, para controle de verso. O propsito principal do produto prover
um ambiente de desenvolvimento para tarefas relacionadas a banco de dados,
como criao de tabelas e procedures entre outros. A sua principal caracterstica
fornecer um meio de transformar um modelo UML (Unified Modeling
Language) em um modelo lgico e vice-versa. Alm disto, representa uma
ferramenta importante no trabalho de documentao e engenharia reversa de
banco de dados.
Como dito anteriormente, o RDA compatvel com outros produtos da
Rational. Como exemplo de ganho derivado disto, pode-se citar a tarefa de
gerenciamento de requisitos e gerencia de configurao. Toda funcionalidade
mapeada no RequisitePro poder ser associada a um elemento do modelo
lgico, que por sua vez est relacionado por um mapeamento de transformao
a um diagrama UML. No final da ponta, este ainda poder estar associado com o
arquivo que representa determinada Classe na linguagem utilizada. Alm disto,
todos estes modelos e diagramas esto versionados no ClearCase. O cenrio
anterior apenas uma demonstrao da capacidade que este ambiente Rational
oferece.
Partindo do tradicional problema da existncia de sistemas legados ou sem
documentao, ele prov um gerador de modelos fsicos a partir de uma simples
conexo JDBC com um banco de dados. Alm deste tradicional modelo, outras
trs variaes so apresentadas, como: Modelo de domnio, Modelo de glossrio
e Modelo lgico. Basicamente, em cada um destes diferentes modelos, existe
uma alterao nos elementos grficos apresentados. O modelo lgico, por
exemplo, se aproxima muito de um MER. Vale lembrar que a qualquer momento
pode-se gerar um script para alterar ou criar o banco de dados a partir de um
modelo, ou faz-lo diretamente usando a conexo da prpria ferramenta.
2.2.
Artigos Diversos
2.2.1.
Towards The Reverse Engineering of UML Sequence Diagrams
(Briand, 2004)
So
comuns,
hoje
em
dia,
ferramentas
que
analisam
cdigo,
2.2.2.
A study on the current state of the art in tool-supported UML-based
static reverse engineering (Kollmann, 2004)
Como citado no artigo da sesso 2.2.1, a UML surgiu e rapidamente se
tornou padro para representao e especificao de sistemas orientados a
objetos.
1
www.togethersoft.com
respeito
funcionalidades
bsicas,
todas
as
ferramentas
www.rational.com
http://idea-uml.qarchive.org/
www.fujaba.de
www.jetbrains.com/idea/
2.2.3.
A reverse engineering methodology to reconstruct hierarchical data
flow diagrams for software maintenance
O artigo (Benedusi, 1989) descreve a metodologia utilizada para gerar um
diagrama de fluxo de dados a partir de um cdigo escrito na linguagem Pascal.
Dos artigos encontrados, o que se aproxima mais do objetivo final deste
documento.
Na primeira metade do artigo so discutidos conceitos genricos da rea
de engenharia reversa. Ele apresenta quais so as estruturas da linguagem que
podem ser extradas para o diagrama automaticamente, porm sem entrar em
detalhes ou dar exemplos. Fica restrito ao campo conceitual. Ele comenta, por
exemplo,
que
nem
todo
conhecimento,
decises
experincias
2.2.4.
Extracting Entity Relationship Diagram from a Table-based Legacy
Database
Este artigo (Yeh et al., 2005) relata um trabalho sobre extrao de um
modelo de entidades e relacionamentos (MER) a partir da leitura das
informaes presentes no banco de dados.
Ele descreve sucintamente, sem entrar em detalhes prticos, um processo
genrico para Engenharia Reversa de Banco de Dados (ERBD). Este processo
2.2.5.
Inverse Transformation of Software from Code to Specification
Como transcrito do prprio artigo (Sneedm, 1988): Este documento
descreve o esquema suportado por ferramentas automticas para transformao
reversa do cdigo para especificao pelo processo de engenharia reversa.
Na prtica, ele no apresenta nenhuma tcnica ou metodologia para fazer
a transformao e sim conceitos bsicos, porm essenciais para quem quer
realizar um trabalho nesta rea, principalmente com linguagens estruturadas, j
que ele foi escrito para este tipo de tecnologia. Pelo fato de ter sido produzido no
final da dcada de 80, so usados muitos termos e situaes que esto em
desuso atualmente, com exceo de desenvolvedores que do manuteno, ou
programam mdulos, para sistemas antigos. Um exemplo disto o uso de
arquivos fsicos para armazenarem dados e informaes ao invs de
gerenciadores de banco de dados.
Um software apresentado como contendo trs nveis de abstrao com
objetivos distintos: Conceitual, Lgica e Fsica. O primeiro a viso da rede de
entidade com seus atributos e seus relacionamentos. O segundo a viso da
organizao dos dados e o terceiro uma viso mais baixo nvel, perto da
implementao, chegando perto de um pseudocdigo.
So apresentados alguns conceitos bsicos, como motivos para se realizar
a engenharia reversa, afirmaes, como a que diz que mais fcil alterar
programas com modelos conceituais existentes, e regras para se ter uma boa
especificao. A especificao dividida em duas categorias: especificao de
dados e do programa. Estas categorias so subdivididas em outras
subcategorias. O cdigo ento partilhado em grupos de elementos, como
2.3.
Frameworks para gerao de diagramas
Existem alguns produtos que possuem objetivos semelhantes parte
deste documento que objetiva a criao de um framework para diagramao de
grficos. Segue abaixo os principais.
2.3.1.
Eclipse Modeling Framework (EMF)
EMF (Eclipse Foundation, 2008) um framework Java para tratar
aplicaes que fazem uso de modelo, como digramas de classes, diagramas de
estados, entre outros. Basicamente, o foco do projeto so linguagens orientadas
a objeto e modelos definidos na UML. Com isso fcil criar um editor ou um
diagrama com opes de arrasto de elementos e outras funcionalidades tpicas
de ferramentas case, como gerao de cdigo.
A entrada para a criao dos modelos pode ser feita de vrias formas,
desde arquivos XML at classes escritas na linguagem Java. Isto permite que
outras aplicaes consigam se integrar facilmente a ela. Na prtica basta entrar
com os dados do diagrama em um editor bsico fornecido pelo framework que
possvel obter facilmente algo parecido com a figura abaixo.
2.3.2.
Graphviz
Graphviz (AT&T, 2008) um projeto de cdigo aberto para visualizao de
grafos. Na figura abaixo possvel ver um exemplo de um diagrama produzido
pelo produto.
2.4.
Ferramentas Utilizadas
2.4.1.Visual Library
Para exibio do diagrama no Framework apresentado no captulo 4, foi
usada a API de desenho Visual Library (Netbeans, 2008). Visual Library a
prxima gerao de bibliotecas para manipulao grfica. Esta frase, exposta
no site principal do projeto, mostra bem o quo poderosa . Ela foi concebida
inicialmente como parte da IDE de desenvolvimento Netbeans. A sua criao foi
motivada pelos diversos mdulos que exigiam manipulao de diagramas e
grficos. Seguem como exemplo duas telas da IDE que usa a biblioteca grfica.
complexidade maior. Por ser mais antiga, muito das suas dificuldades de uso
foram retiradas pela Visual Library, que possui em sua API elementos similares
aos do GEF, alm de outras referncias que deixam ntido de onde veio a
inspirao do projeto. O desenvolvimento deve ser feito usado a API Grfica
SWT, que menos conhecida que o Swing. Alm disto, mesmo sendo cdigo
aberto, difcil de baixar e compilar. Perde-se muito tempo ao tentar fazer isto. A
Visual Library, com o cdigo na mo, instantnea. Esta caracterstica dificulta
no momento de entender como ela funciona internamente, exerccio fundamental
no uso de recursos avanados.
3
A Ferramenta Dependencies Viewer
3.1.
O Metamodelo
Na prtica, a tarefa de produzir um diagrama comportamental para
softwares escritos em qualquer linguagem muito difcil, seno impossvel, visto
que impraticvel a implementao de um analisador sinttico genrico o
suficiente para conseguir interpretar todas as idiossincrasias existentes num
conjunto finito, porm grande, de linguagens.
Para solucionar este problema, a ferramenta Depedencies Viewer segue o
modelo elaborado mostrado abaixo:
Como pode ser visto acima, a ferramenta tem como ponto de extenso um
meta-modelo que representa a rvore de chamadas e as informaes
necessrias para exibir o diagrama. Para flexibilizar este ponto, o usurio da
ferramenta deve complement-la com a implementao de um analisador
especfico para a linguagem escolhida. Na prtica esta complementao no
algo complexo, visto no ser necessria a produo de um parser para toda a
gramtica da linguagem em questo, mas somente para alguns pontos chaves,
como chamadas de mtodos, que podem ser feitas atravs de um simples
programa usando expresso regular, por exemplo. No estudo de caso discutido
no captulo 5 mostrado um exemplo deste processo ocorrendo.
Ao ser completada com as informaes provenientes do parser
implementado pelo usurio, a ferramenta est pronta para ser usada. Ela
fornece uma interface completa para sua utilizao e o usurio interage com ela
configurando como deve ser o diagrama final produzido pela ferramenta, Estas
funcionalidades sero detalhadas melhor na sesso 3.5.
Os metadados fornecidos pelo usurio podem ser divididos em duas
categorias: Dados de modelo e Dados de configurao:
Os dados de modelo informam a composio da rvore de chamadas, ou
seja, indica a referncia entre os elementos, e comentrios que porventura se
desejam exibir na ferramenta. Um exemplo disto, que no estudo de caso,
existiam comentrios no estilo Java doc6 no incio de cada procedure que eram
de fundamental importncia para o entendimento do funcionamento do sistema.
Alm disso, era necessrio exibir os parmetros de entrada e sada, pois
auxiliavam na compreenso da procedure pelos desenvolvedores.
Os dados de configurao servem para auxiliar a ferramenta no modo
como ela deve se apresentar ao usurio. Caso no queira usar o diagrama
padro, possvel, por exemplo, alterar a forma como exibido na tela o
diagrama final. Isso prov uma flexibilidade grande ferramenta. Alm disso,
possvel modificar a existncia, ou no, de alguns menus e funcionalidades.
Estas configuraes podem ser suficientes para produzir duas ferramentas
diferentes entre si, tendo como nico ponto divergente o arquivo de
configurao.
Os arquivos de metadados so na verdade o corao da ferramenta. Eles
so lidos por ela atravs do formato de arquivos textuais escritos numa
6
Java Doc uma ferramenta desenvolvida pela SUN Microsystems para gerar
3.2.
A linguagem de Representao
Para o funcionamento da ferramenta, existem dois tipos de dados que
precisam ser configurados: Os metadados de configurao, e os metadados de
modelo. Embora estas informaes pudessem ser passadas para a ferramenta
atravs de uma API de programao, foi decidido que, para tanto, seriam
utilizados arquivos de configurao. O motivo desta escolha est no fato de
facilitar a integrao com outras ferramentas que no esto necessariamente
escritas em Java. Estas ferramentas poderiam ter como sada direta os arquivos
de configurao prontos, o que simplificaria o seu uso. Um exemplo disto pode
ser encontrado no captulo 5, que relata um estudo experimental.
3.2.1.
Metadados de configurao
Abaixo segue uma gramtica abstrata definindo a linguagem de
configurao. Terminais esto em negrito e no terminais esto em itlico.
Caracteres literais so apresentados entre aspas simples, Parnteses, ( e ),
indica um grupo necessrio. Colchetes, [ e ], indicam grupos opcionais. Barra
vertical, | , separa alternativa.
3.2.1.1.
Node
Um n representa um tipo de objeto do modelo de negcio que a aplicao
est inserida. Por exemplo, num diagrama de classe, um n poderia ser a
representao de uma classe. Na linguagem proposta, possvel identificar um
Node quando o nome do elemento no for uma das palavras reservadas e/ou
estiver escrito entre aspas duplas. No exemplo dado, classe.
Na linguagem possvel configurar atributos de visualizao do n, regras
de formao, e quais so as informaes de detalhes. Abaixo segue uma tabela
com trs colunas: Nome do atributo, composio e descrio. A coluna
composio indica se o atributo multivalorado ou no. Caso positivo, na coluna
de descrio tem o detalhamento do significado destes vrios valores.
Nome
id
Label
Shape
Detail
Composio
Sim
Descrio
Indica a lei de formao do identificador do
objeto. No exemplo do diagrama de classes,
uma classe no indexada apenas pelo seu
nome, pois podem existir duas classes
homnimas, porm em pacotes diferentes. O
que as diferenciam e as tornam nicas a
composio do nome do pacote com o nome
da classe. Tem que haver, porm, uma
contraposio no arquivo de modelo, que
deve seguir, sempre que referenciar um
objeto deste tipo, a lei de formao
configurada aqui.
Exemplo:
Arquivo de configurao: id={package,
nome)
Arquivo
de
modelo:
br.pucrio.les.NomeClasse
No
Indica qual a String que representa o nome
deste tipo na tela.
No
Indica como ser a apresentao visual
deste elemento. Pode ser umas das formas
padro da ferramenta (table, process) ou
uma
classe
que
especialize
IInstanceShapeEnum (Sesso 4.1.1)
No
Indica quais so as informaes de
detalhes do elemento. No exemplo do
diagrama de classes, poderia ser um
Javadoc. Nos arquivos de modelo, por
exemplo, quando for dada entrada de um
detalhe
deste
objeto,
dever
estar
especificado como sendo uma informao de
Javadoc.
Tabela 1: Atributos do elemento Node.
3.2.1.2.
Edge
Este elemento serve para configurar como ser a representao visual da
relao de dois ns. A configurao default uma linha reta cheia direcionada.
Nome
Source
Target
LineStyle
LineSize
SourceTerminato
r
Composio
No
No
No
Descrio
Elemento de origem
Elemento de destino
Indica o estilo da linha que representa o
relacionamento. Os valores possveis so:
TRACED: Para linhas pontilhadas
DRASHED: Linhas que possuem um ponto
seguido de um trao pequeno reto.
CONTINUOUS: Linha cheia. o valor
default, caso no seja informado nada, ou um
valor invlido
No
No
3.2.1.3.
Menu
Um elemento de menu especifica, na verdade, uma funcionalidade de
busca a partir de um tipo de Node. Mais adiante esta funcionalidade ser
explicada de modo mais claro (Sesso 3.5.1). O importante, agora, saber que
todos os relacionamentos so traduzidos internamente para um grande grafo,
onde cada n do grafo pertence a um tipo especfico, configurado pelo elemento
Node. Esta funcionalidade, ento, abre uma busca por um objeto a partir de um
tipo especfico, para que seja apresentado na tela um subgrafo do grafo maior.
Nome
Title
Node
Columns
Elements
Invisible
Visible
Composio
No
No
Descrio
Ttulo da janela principal da funcionalidade.
Especifica qual o tipo de objeto que ser buscado
nesta funcionalidade. Tem que estar configurado um
elemento Node, onde o ID_NODE deste elemento
igual ao valor desta propriedade.
Sim
um par de valores, especifica as colunas que
sero
exibidas,
que
obrigatoriamente
so
identificadores do n em questo, sendo o primeiro
valor o identificador, e o segundo a Label de
visualizao. Por exemplo, no caso do diagrama de
classes, ter uma entrada no arquivo com
columns={package, Pacote} e outra com
columns={name, Nome da Classe}. Este atributo
poder ser repetido quantas vezes forem os
identificadores do n, sendo apenas uma vez para
cada identificador. A ordem de escrita no arquivo a
ordem de ordenao das colunas na tabela de
busca.
Sim
Um objeto de um tipo pode referenciar um objeto de
outro tipo. Num DFD, por exemplo, um processo
pode ter uma ligao com uma entidade externa.
Este atributo serve para que na interface aparea
um checkbox que desliga e liga, no diagrama final
apresentado, a opo de visualizar estes outros
tipos relacionados com o Node configurado. Os
valores deste atributo so ID_NODE dos outros tipos
de ns.
Sim
ID_NODE dos outros tipos de Node que vem
desligado por padro. Com o atributo acima,
possvel reverter essa configurao, habilitando o
checkbox do n invisvel, que neste caso, vem
desabilitado.
Sim
Atributo anlogo ao de cima, diferenciando-se pelo
fato de vir ligado, e no desligado, por padro.
Tabela 3: Atributos do elemento Menu.
3.2.1.4.
Application
Este elemento serve para configurar atributos da aplicao como um todo.
Nome
Title
Files
Composio
No
Sim
Descrio
Ttulo da janela principal do programa
Nome dos arquivos de modelo. Sero lidos apenas
os arquivos que estiverem o nome como valor deste
atributo.
Tabela 4: Atributos do elemento Application
3.2.2.
Metadados de modelo
Basicamente, so duas as informaes passadas pela configurao de
modelo: a cadeia de relacionamentos, informando quem se relaciona com quem,
3.2.2.1.
Relacionamentos
O modo de informar a ferramenta quais so os objetos de determinados
tipos e como eles se relacionam atravs de um arquivo de configurao escrito
na linguagem acima.
3.2.2.2.
Detalhes
Um detalhe pode ser qualquer informao. Um elemento pode conter
diversos tipos de detalhes diferentes, que so separados e exibidos
categorizados na interface da ferramenta. O Cdigo 5 um exemplo de dado
que passado para a ferramenta gera a informao exibida na Figura 7.
3.3.
Instalao e uso da ferramenta
O primeiro passo colocar os arquivos de configurao na mesma pasta
do
JAR
ProcedureDependency-1.0.jar
http://code.google.com/p/meta-designer/),
ou
adicionar
(localizado
a
pasta
em:
onde
se
3.4.
Modelo
3.4.1.
O processo de desenvolvimento
Apesar de possuir apenas um nico recurso humano alocado para o
desenvolvimento da ferramenta, algumas precaues foram tomadas para dar
um mnimo de qualidade ao produto final gerado. Estas medidas foram
essenciais para que, no final, uma ferramenta estvel e garantidamente testada
fosse disponibilizada para qualquer usurio interessado. A inteno era no
produzir um software apenas para o estudo de caso desta dissertao, e sim um
artefato que pudesse ser utilizado fora do mbito acadmico. Nas prximas
sesses seguem algumas prticas adotadas no desenvolvimento.
3.4.2.
Subversion
Trabalho em equipe no um problema de diviso e conquista apenas.
um problema de diviso, conquista e integrao (Beck & Andres, 2004). Apesar
de, como dito anteriormente, ser desenvolvido por um nico programador, foi
tomada a precauo de utilizao de uma ferramenta que possibilita o trabalho
em grupo. Isto garante que, ao precisar da entrada de mais pessoas no projeto,
o processo de desenvolvimento no ser alterado. Alm disso, as ferramentas
que fazem este tipo de controle de integrao realizam tambm o controle de
verso dos artefatos desenvolvidos. Isto vital para garantir certa liberdade e
organizao ao desenvolvedor. O programador sabe que ao fazer determinada
alterao, e esta se propagar negativamente para o restante da aplicao, ele
pode, por exemplo, recuperar a verso que no continha este problema,
comparar e identificar aonde ocorreram as alteraes que incluram o bug7. Foi
usado, para esta finalidade, o Subversion.
Subversion uma aplicao open source para controle de verses.
Tambm conhecido como SVN, o Subversion foi feito especificamente para ser
um substituto moderno para o CVS 8. Isso significa que o Subversion trata
problemas que no so resolvidos pelo CVS e possui conceitos mais
7
3.4.3.
Issue tracker
Como ser visto no captulo que fala sobre o estudo de caso, o processo
de anlise de requisito foi iterativo e incremental. Primeiro foi desenvolvida uma
verso da ferramenta especfica para os interesses do projeto do LES. Ao final,
ela foi evoluda para a sua atual fase. Na primeira fase, os bugs e as
necessidades de evolues foram cadastradas num sistema controlador de
tarefas, fornecido gratuitamente pelo Google, chamado Google Code9. Isto deu
agilidade ao processo, visto que o usurio, ou a pessoa que estava querendo
uma alterao na ferramenta, no precisa ficar se comunicando por email e
esperando uma resposta. Bastava abrir ferramenta, cadastrar o seu pedido e
acompanhar a evoluo do estado da tarefa.
O Google Code tambm permite que o desenvolvedor cadastre o tempo
estimado de cada tarefa, e o tempo real de desenvolvimento. Isso permite o
controle fino sobre as tarefas e o andamento do projeto. Como o projeto foi
desenvolvido sem um compromisso comercial, e com certa liberdade de
requisitos e prazos, este processo no foi utilizado no desenvolvimento desta
ferramenta.
3.4.4.
Maven10
O Maven uma ferramenta que est ganhando constantemente espao no
ambiente de desenvolvimento Java. Alm de controlar o processo de construo
de um software, o Maven oferece uma abordagem abrangente para gerenciar
projetos de software. Desde a compilao at a distribuio, incluindo
documentao e colaborao entre a equipe, o Maven oferece as abstraes
necessrias para encorajar o reuso e diminuir muito do trabalho para fazer os
builds de um projeto (Massol & Van Zyl, 2006).
No projeto, o Maven foi importante para automatizar a compilao e o
controle de dependncias do aplicativo. Isso foi de extrema relevncia, pois
como o projeto no usa o conceito de integrao contnua, era possvel, ao final
9
http://code.google.com
10
http://maven.apache.org/
de cada dia de trabalho, rodar o build que compila, executa os testes e gera o
instalador. Ele garante que o instalador s disponibilizado, se todos os testes
unitrios escritos estiverem rodando e passando. Isso fornece um mnimo de
qualidade ao processo.
Alem de automatizar o build, no projeto, o Maven responsvel por gerar a
documentao da API e um relatrio de cobertura de cdigo.
3.4.5.
Test Driven Development
Todo cdigo produzido sem testes, , por natureza, um cdigo legado
(FOWLER, 99). Esta afirmativa foi a diretriz bsica para todo o desenvolvimento
do projeto. O teste uma ferramenta til para garantir uma boa qualidade do
cdigo, e dar conforto ao desenvolvedor para realizar as devidas evolues,
correes e refatoraes. Existem vrias tcnicas de testes, e neste trabalho foi
usado Test Driven Development (TDD).
Tambm conhecida como programao ou desenvolvimento em que se
escreve um teste primeiro, TDD uma abordagem incremental que envolve a
criao de um caso de teste anteriormente implementao do cdigo
necessrio para que este passe. Depois disso, o teste executado para provar
que este realmente falha. Usando o conceito de design simples (do ingls simple
design11) o mtodo implementado de forma a fazer com que o teste de unidade
passe. Uma vez que isso acontea, o programador usa o refactoring para limpar
o cdigo e mant-lo sob as regras de design simples. Esses passos so feitos
sucessivamente, at que cada funcionalidade esteja pronta.
Ao final do desenvolvimento, verificou-se atravs de relatrios de
coberturas de cdigo (Sesso 3.4.4) que em mdia 80% do cdigo se encontram
11
classe ou sistema deve ser o mais simples possvel. Por exemplo, se um cliente
concordar que na primeira verso apenas o usurio "teste" com a senha "123" vai ter
acesso a todo o sistema, somente o cdigo exato para que esta funcionalidade seja
implementada deve ser escrito. Preocupaes com sistemas de autenticao e
restries de acesso no importam neste momento. Um erro comum, no entanto, por
parte dos programadores confundir cdigo simples com cdigo fcil de escrever.
Cdigo fcil de escrever todo aquele que escrito sem preocupaes de design. Nem
sempre este tipo de cdigo levar soluo mais simples de design. Esse entendimento
fundamental para o bom andamento de XP. Por isso, todo cdigo fcil de escrever
deve ser identificado e substitudo atravs de refactoring por cdigo simples.
3.5.
Funcionalidades
O objetivo principal do aplicativo gerar visualmente diagramas de
dependncias para as informaes fornecidas pelos metadados de modelo. Para
isso, a ferramenta possui uma srie de outras funcionalidades que servem como
meio para se alcanar o objetivo final.
3.5.1.
Escolher uma entidade
F
D
E
3.5.2.
Navegao
Na funo explicada na sesso anterior, o usurio define como ser
apresentado visualmente o diagrama final. Para isso, ele escolhe um elemento
da tabela e no diagrama exibido ele destacado, para indicar que ele o ponto
de partida para o grafo gerado. Aps a gerao do diagrama, comum o usurio
querer navegar por um dos ns relacionados, seja para fazer uma anlise de
impacto, seja para verificar quais elementos sero alterados. Esta funcionalidade
pode ser vista atravs da opo exibida na figura abaixo.
Para acess-la basta clicar com o boto direito do mouse no elemento que
ser a base do novo diagrama gerado. Este herdar todas as configuraes
feitas para o diagrama original. Na verdade, como se o diagrama atual fosse
originado do boto disponvel na interface do programa, do mesmo modo que o
diagrama anterior, tendo como nica diferena o n base do grafo.
Com as constantes navegaes, o usurio pode, atravs da opo 4 da
Figura 11, voltar para o diagrama anterior ou, caso j tenha feito isso, prosseguir
para o diagrama que se apresentava na tela.
Esta funcionalidade fornece muita agilidade ao processo de entendimento
do modelo gerado e a anlise de impacto que a ferramenta proporciona, visto
que dado a complexidade da rvore de chamadas, nem sempre possvel exibir
todos os nveis numa nica imagem.
3.5.3.
Detalhamento
As funcionalidades de escolha de entidade e navegao so muito teis
para a anlise de impacto. A funcionalidade de exibio de detalhamento
vantajosa para a manuteno do sistema, pois auxilia facilita no entendimento do
mesmo.
Assim como a busca por entidade, esta funcionalidade precisa ser inserida
no arquivo de configurao do sistema, como visto na sesso 3.2.1. Alm disso,
precisa ter entrada nos metadados de modelo, visto na sesso 3.2.2. Com tudo
corretamente configurado, basta ir ao n escolhido e clicar com o boto direito,
como pode ser visto na figura abaixo.
3.6.
O diagrama gerado
Como pode ser visto anteriormente, possvel desenvolver uma
ferramenta que faz um desenho customizado dos elementos, e integr-la junto
ao Dependencies Viewer via metaconfiguraces. Isto permite customizaes.
Porm, ele fornece dois shapes bsicos baseados no Diagrama de Fluxo de
Dados, ou DFD. O diagrama final produzido parecido com o exibido na Figura
abaixo.
4
O framework Grfico
4.1.
O metamodelo
Surgiu ento, inspirado no Talisman [Staa, 2002], a idia de desenvolver
um framework prprio.
4.1.1.
Modelagem da base de descrio
Imaginando
um
diagrama
como
um
grafo,
uma
instncia
RelationshipDescriptor
descreve
uma
classe
de
12
Adaptado de: Staa, A.v.; Software and knowledge base specification for
descritor
de
instncia
Classe
os
descritores
de
relacionamentos
cor
da
borda,
cor
de
fundo,
tamanho
da
borda
um
com
TerminatorDescriptor
no
diagrama
de
classe
4.1.2.
Modelagem da base de instncia
do
relacionamento.
Recebe
no
seu
construtor
uma
classe
4.2.
API de Uso
Para usar o framework, a aplicao precisa definir primeiro a base de
descrio, a partir deste ponto criar as instncias concretas.
implementao, porm o modelo permite evolues para que seja possvel uma
expanso mais adiante.
Abaixo segue cdigo referente criao das instncias reais.
4.3.
Renderizao
A seguir, so apresentados alguns diagramas de seqncia que mostram
como implementada a renderizao.
View est completamente dependente dela sendo, inclusive, uma classe que
herda de outra da VisualLibrary. Entre as vantagens de utilizar esta tcnica, est
o fato de facilitar a troca da API grfica, caso tenha necessidade disto em algum
momento.
Aps ser criado e receber um diagrama, o DelegateView gera uma View e
nela adiciona os relacionamentos e instncias do diagrama recebido.
Posteriormente, chama mtodos responsveis por desenhar as instncias e os
relacionamentos. Estes mtodos so detalhados abaixo:
O mtodo
uma
arquitetura
parecida
com
IShapeEnum.
Existe
um
4.4.
Modelagem de Interao
Como dito anteriormente, o framework tem que estar pronto para atender
as necessidades de um software desenvolvido para engenharia reversa. Um
requisito fundamental permitir que haja interao do usurio com o diagrama
exibido. Para isso, o framework precisa possuir algum meio de comportar esta
funcionalidade.
Uma das premissas principais do framework ser de simples utilizao.
Para isso, o modelo de interao deveria ser algo natural ao desenvolvedor. A
Visual Library (API de apoio utilizada) possui uma interface para programao
rica. Isso se d pela quantidade de funes que ela predispe. Para obter a
coordenada de um simples clique do mouse, por exemplo, necessrio fazer
uma conta que leva em conta a escala de visualizao do diagrama.
Visando facilitar esse processo, foi criada a classe abstrata ActionAdapter.
Esta classe prov mtodos que facilitam a usabilidade da API. Alm disto, os
nomes dos mtodos foram mudados para se equiparar com a API grfica swing,
padro do Java, j que os originais eram diferentes.
Para interagir com o grfico, ento, basta o desenvolvedor especializar a
classe ActionAdapter, estender o mtodo de interao desejado, como
mousePressed() ou keyPressed(), e adicionar a nova classe no objeto da classe
Instance (sesso 4.1.2) que deve reagir a ao do usurio.
As funcionalidades de visualizao de detalhes (sesso 3.5.3) e
navegao (sesso 3.5.2) fazem uso deste modelo.
4.5.
O Processo de desenvolvimento e Instalao
A ferramenta foi desenvolvida nos mesmos moldes que o Dependencies
Viewer (Sesso 3.4.1). Foi usado test driven development em todos os pacotes
em que fosse possvel ser aplicado. Apenas as classes especificadamente
desenvolvidas para desenhar no tiveram cobertura de testes, pois precisariam
de outras tcnicas de testes, no abordada neste processo.
13
http://code.google.com/p/meta-designer/
5
Avaliao experimental
5.1.
Cenrio
No captulo 1, sesso 1.2, foi apresentado o cenrio deste estudo de caso
que motivou esta dissertao. Fazendo uma recapitulao, tudo se iniciou numa
parceria entre o LES e o TecGraf, outro laboratrio da PUC-Rio, que desenvolvia
e dava manuteno a um software com cinco anos de existncia. Este sistema
possua toda a sua lgica de negcio escrita na linguagem PL/SQL do SGBD
Oracle. Havia 150.000 linhas de cdigo espalhadas em 340 procedures. A
interface de acesso era feita em Java, sendo esta uma camada muito fina,
apenas para exibir o retorno das procedures chamadas em cada funcionalidade
acessvel pelo usurio. Neste contexto, o LES teria basicamente duas funes
com esta parceria: desenvolver testes unitrios e documentar o sistema.
Com relao ao desenvolvimento de testes, no houve problemas
tcnicos. A grande dificuldade era o entendimento de como as procedures se
comunicavam e como funcionava o fluxo de chamadas.
A nica documentao existente era a exibida na Figura 1, que se tratava
de um documento Word com o cdigo copiado e caixas de textos com
explicaes
sobre
rvore
de
chamadas
daquela
procedure.
Esta
5.2.
Processo
Como explicado anteriormente, a ferramenta necessita da entrada de
arquivos de metadados para funcionar plenamente
5.2.1.
Padres
Um padro deve buscar uma caracterstica no cdigo e deve ter um
objetivo especfico no processo de recuperao da estrutura. Neste trabalho, a
gerao de padres buscou encontrar os relacionamentos estruturais do
sistema, se baseando em um exame da sintaxe da linguagem PL/SQL, num
estilo de programao, e nos comandos SQL padro. Assim, foram criados cinco
padres:
Extrao de comentrios
nos padres. Desta forma, com base no cdigo (passado para um arquivo .txt) e
nos padres estabelecidos criaram-se programas em AWK que fizeram a
engenharia reversa, recuperando os dados necessrios. Os programas AWK
geram arquivos com os dados necessrios para se recuperar os modelos do
sistema. Estes arquivos so organizados um parser para que a ferramenta
Dependencies Viewer (Captulo 3) possa ler e apresentar toda a informao na
forma grfica.
Este arquivo
foi extrado
do Oracle
atravs
do aplicativo
5.2.1.1.
Relacionamento entre procedures (I)
Para
reconhecimento
desses
relacionamentos
foi
necessrio
quanto com --; (ii) a busca de dados atravs dos seguintes padres:
PACKAGE/package, procedure e function, e; (iii) formatao dos dados
recuperados para que a lista de sada tivesse os pacotes e as suas
respectivas procedures. Aps a identificao dos pacotes e procedures, devese procurar os relacionamentos entre procedures, que so caracterizados
pelas seguintes expresses:
5.2.1.2.
Relacionamento entre procedures e tabelas (II)
O padro definido para extrair estes relacionamentos verifica os
comandos que contm as expresses update, delete, from, join e insert.
5.2.1.3.
Relacionamento entre tabelas (III)
O padro para extrair estes relacionamentos verifica os comandos que
iniciam com alter table ou create table e que contm as expresses foreign key e
references.
5.2.1.4.
Comentrios das procedures (IV)
O padro para extrair os comentrios busca os caracteres de incio e fim
de comentrio dentro do PL/SQL (/* e */).
5.2.1.5.
Parmetros de entradas e as sadas das procedures (V)
O padro para mostrar as entradas e sadas busca por: (i) sentenas
PACKAGE/package;
(ii)
comandos
iniciados
com
as
palavras-chaves
5.2.1.6.
Prova de conceito
Para mostrar a aplicabilidade da abordagem, a ferramenta foi utilizada para
extrair o modelo da estrutura de um sistema legado de mdio porte, escrito em
PL/SQL. Nesta seo, ser mostrada a extrao de relacionamentos entre
procedures e entre procedures e tabelas e a gerao do grafo.
O Cdigo 8 mostra um trecho do cdigo da procedure update_scenarium
que possui um relacionamento com uma tabela cenrio.
procedure UPDATE_SCENARIUM
(...) is ...
begin
select ce.cena_nr_numero_cenario, ce.cena_dt_criacao
into scena_cd_id, creation_date
from cenario ce
where ce.cena_nr_numero_cenario = to_number(scenarium_id.identifier);
...
end;
Cdigo
mostra
um
trecho
do
cdigo
da
procedure
5.3.
Avaliao
Aps todo o processo e definies mostrados neste captulo, a ferramenta
Dependency Viewer ficou pronta para ser usada no projeto do LES. Uma
mudana na parceria levou o LES a assumir novas responsabilidades no projeto.
O laboratrio ficou responsvel no apenas pelo desenvolvimento de testes e
documentao, mas tambm pela manuteno das procedures. Isto ocorreu
num momento em que a pessoa responsvel por esta atividade, e a que mais
conhecia o domnio e o cdigo da aplicao, se desligou do projeto e da
empresa parceira. Neste contexto, o benefcio que a ferramenta Dependency
Viewer traria ganhou mais importncia e notoriedade, como pode ser visto pelo
depoimento de Alexandre Almeida, desenvolvedor do LES.
A anlise de impacto de mudanas em um sistema um fator delicado e
que deve ser bem mensurado. Nesse quesito a "ferramenta" foi de suma
importncia para nos ajudar na analise do impacto das mudanas com
segurana e rapidez. (Alexandre Almeida)
A ferramenta est sendo usada pela equipe de testes e manuteno do
sistema faz seis meses. Abaixo segue um resumo de alguns benefcios que ela
comprovadamente trouxe, e exemplos de cenrio de uso.
5.3.1.
Anlise de impacto de um procedure
A ferramenta Dependencies Viewer auxilia o desenvolvedor a fazer uma
anlise de impacto de um pedido de mudana. A figura Figura 40 mostra um
cenrio de uso da ferramenta. Imagine que um desenvolvedor, atendendo a um
pedido de mudana, saiba que ser necessrio modificar uma determinada
procedure (neste exemplo, chamada de get_scenarium). O desenvolvedor usa a
ferramenta para saber se existem outras procedures que chamam a procedure
em questo, encontrando a procedure open_scenarium (Figura 40.1). Neste
ponto, o desenvolvedor pode recuperar as procedures diretamente relacionadas
procedure open_scenarium (Figura 40.2).
Caso seja necessrio, o desenvolvedor pode verificar se existem outras
chamadas indiretas para a procedure. possvel, assim, visualizar toda a
hierarquia de chamadas opo Todos os nveis para open_scenarium
(Figura 40.3). Esta verificao apresenta diversos relacionamentos. O retngulo
cinza representa a procedure utilizada para a busca (na parte superior se tem o
nome do pacote e na parte inferior o nome da procedure). Alm da anlise dos
relacionamentos entre procedures, poder-se-ia analisar as tabelas associadas a
cada procedure impactada. Estes diagramas mostram um mapa da
implementao. Em alguns casos, tm-se muitos caminhos e, quando se tem
pouco conhecimento sobre o software, o esforo para a anlise bem maior.
Informaes associadas a cada procedure/tabela (semelhante a um Java.doc)
ajudam no entendimento das funes de cada um destes elementos.
Figura 40: Navegando para realizar a anlise de impacto para mudana numa procedure
5.3.2.
Anlise de impacto por tabela
Na sesso acima, foi mostrada a anlise de impacto a partir da viso de
uma procedure. comum tambm usar esta anlise a partir da viso de uma
tabela, e a ferramenta auxilia nisso. A Figura 41 mostra um cenrio de uso.
Imaginando ser preciso uma mudana na funo de permisso. Para isso, seria
necessrio alterar a tabela Permisso. Usando a ferramenta, descobrem-se
quais so as procedures que removem e inserem dados nesta tabela (Figura
41.1). Neste caso a procedure remove_folder remove dados, e a procedure
save_other_user_permissions insere dados. Apesar do nome das procedures
remeter s suas funes, estas informaes foram retiradas atravs do
esteretipo da ligao das procedures com as tabelas. O desenvolvedor pode,
tambm, ter uma viso de todas as procedures, ou outras tabelas, diretamente
relacionadas com a tabela Permisso (Figura 41.2).
Figura 41: Navegando para realizar a anlise de impacto para mudana numa tabela
5.3.3.
Anlise de tabelas temporrias
Como dito anteriormente, toda a regra de negcio estava espalhada em
340 procedures. Um meio comum de comunicao entre elas, atravs de
passagem de parmetros por tabelas temporrias. Observe a Figura abaixo,
retirada da ferramenta Dependency Viewer. A tabela temp_cenarios um
exemplo
deste
caso.
initialize_stock_query,
Ela
que
criada
populada
chamada
pela
pela
outra
procedure
procedure
que
desenvolvedor
esteja
alterando
procedure
5.3.4.
Entendimento do Sistema
Imaginando um cenrio em que o desenvolvedor tenha que dar
manuteno na procedure create_view, porm no faz idia da razo da
existncia desta. Ele pode ir ferramenta Dependency Viewer e gerar o
diagrama da Figura 43.
5.3.5.
A meta-ferramenta
O estudo experimental focou em resolver o problema apresentado na
motivao desta dissertao. Para isso, foi preciso apenas realizar uma nica
customizao da ferramenta DependencyViewer. Toda a avaliao foi baseada
nesta instncia nica. Vale ressaltar, porm, que a ferramenta pode ser adaptada
para diversos outros domnios. Ela foi concebida para servir como metaambiente de visualizao para outros projetos voltados para a rea de
engenharia reversa.
Para poder provar a sua capacidade metamrfica e a sua versatilidade, foi
criada outra instncia de uso, com exatamente a mesma verso da ferramenta
usada no estudo de caso. A nica diferena entre as duas so os metadados de
configurao e as informaes de modelo.
Foi concebido um novo domnio de negcio baseado na avaliao
experimental existente. A ferramenta agora deve exibir apenas o modelo
relacional do banco de dados estudado, e toda a interface deve orientar o
usurio para deixa claro isto.
Fazendo um passo a passo de como customizar a ferramenta, a primeira
tarefa refazer o arquivo dependenciesViewer.config.
Este caso prova que possvel gerar aplicaes funcionais para diferentes
domnios mudando apenas os arquivos de metadados.
6
Concluso
6.1.
Trabalhos Futuros
No captulo 4, foi apresentado o framework grfico desenvolvido para
atender a ferramenta Dependency Viewer (Captulo 3). Para sua utilizao,
necessrio
configurar
metadados
que
guardam
todas
as
regras
7
Referencias Bibliogrficas
of
em:
MASSOL, V.; VAN ZYL, J. Better Builds With Maven: How-to Guide
for Maven 2.0. Mergere Library Press, 2006.
NETBEANS
FOUNDATION,
Visual
Library,
Disponvel
http://graph.netbeans.org/. Acessado em: 18 jun 2008
em:
Oracle
(2009).
Oracle
SQL
Developer.
Disponvel
em:
http://www.oracle.com/ technology/products/database/sql_developer/.
Acessado em: 30 Mar 2009.
Queille, J., Voidrot, J., Wilde, N. and Munro, M. (1994). The impact
analysis task in software maintenance: a model and a case
study. In: Proceedings of the International Conference on Software
Maintenance, p. 234-242.
SNEEDM H.H; JANDRASICS, G., Inverse Transformation of software
from Code to Specification, Proceedings of Conference on Software
Maintenance, Austin, Texas, IEEE, 1988
Sommerville, I. (2007). Engenharia de Software, Pearson Education,
8th edition.
Wilde, N. and Huitt, R. (1992). Maintenance support for object
oriented programs. In: Proceedings of the International Conference
on Software Maintenance, p. 162-170.
YEH, D.; LI, Y., Extracting Entity Relationship Diagram from a
Table-Based Legacy Database, Software Maintenance and
Reengineering, 2005. CSMR 2005. Ninth European Conference , March
2005