Orientao:
Prof . Dr . Renata Pontin de Mattos Fortes
a
USP - So Carlos
Novembro de 1999
Agradecimentos
Profa. Renata Pontin de Mattos Fortes, minha orientadora, pelo apoio e pela
confiana em mim depositada, e acima de tudo, pela sua amizade.
Ao meu irmo Ricardo, pela confiana e pelo carinho que, de alguma forma, sempre
existiram.
Sumrio
Lista de Figuras
Lista de Quadros
Resumo
Abstract
1 Introduo.........................................................................................................1
1.1 Contexto ........................................................................................................................ 1
1.2 Motivao ...................................................................................................................... 3
1.3 Objetivos........................................................................................................................ 4
1.4 Organizao do Trabalho ............................................................................................... 4
2 Engenharia Reversa..........................................................................................7
2.1 Conceitos de Engenharia Reversa................................................................................... 8
2.2 O Mtodo Fusion-RE/I................................................................................................. 11
2.2.1 O Mtodo Fusion: Uma Viso Introdutria ...................................................................................... 12
2.2.2 Recuperao de Vises Funcionais .................................................................................................. 14
2.2.3 Recuperao de Vises Estruturais .................................................................................................. 18
ii
Lista de Figuras
iii
iv
Lista de Quadros
Resumo
O crescimento do mercado de software a cada dia acarreta o aumento do uso de
tcnicas de desenvolvimento, muitas vezes informais. A manuteno de tais
softwares torna-se problemtica, uma vez que a documentao associada ao
software, na maioria das vezes, no est de acordo com o cdigo implementado.
Dessa forma, quando diante da manuteno do produto, o engenheiro de software
encontra uma documentao informal e incompleta, que no reflete o software
existente. Nesse contexto que se encontra a Engenharia Reversa de Software, com
o propsito de recuperar as informaes de projeto perdidas durante a fase de
desenvolvimento, e de documentar o real estado do software. O principal objetivo
deste trabalho de mestrado foi a investigao de uma estrutura adequada de
hiperdocumento para apoiar a documentao requerida durante o processo de
engenharia reversa de software. A partir de um levantamento dos requisitos
desejveis em um hiperdocumento, para que possua as habilidades de suporte
documentao de engenharia de reversa de software, um conjunto de links e estrutura
de ns foi definido. Os requisitos, para a composio de tal hiperdocumento, foram
investigados por meio de uma experincia: a autodocumentao do sistema
hipermdia denominado SASHE (Sistema de Autoria e Suporte Hipermdia para
Ensino), que j possui suporte ao tratamento de ns aninhados e outras caractersticas
de aplicativo para ensino. A engenharia reversa foi desenvolvida baseando-se no
mtodo de engenharia reversa Fusion-RE/I, e os produtos obtidos foram inseridos em
uma hiperbase no SASHE.
vi
Abstract
The growth of the software market has leading to an increasing use of development
techniques, which are, sometimes, informal ones. The maintenance of such software
is problematic, since its documentation rarely reflects the implemented code. In this
context Reverse Engineering of Software can help by means of recovering the
project information lost during the development phase and documenting the current
software state. The main objective of this work was the investigation of an
appropriate hypertext structure for supporting the documentation required through
the software reverse engineering process. Starting from the survey of the desired
requirements in a hyperdocument that has the abilities to support reverse engineering
documents, we defined a set of links and nodes structures. The requirements for such
hyperdocument were inquired by an experiment: the system SASHEs selfdocumentation that already treats nested contexts and has other educational
characteristics. The reverse engineering process was developed based on the FusionRE/I method, and the resulting products were inserted in a hyperbase in the system
SASHE.
vii
Captulo 1
Introduo
Este captulo apresenta o contexto no qual este trabalho est inserido, bem como as motivaes
que nos levaram ao seu desenvolvimento. Posteriormente tambm so descritos os objetivos do
trabalho, assim como sua organizao.
1.1 Contexto
A Engenharia de Software tipicamente uma das reas da Cincia de Computao que envolve,
alm de um grande volume de documentos, uma grande diversidade de tipos de documentos
(diagramas, textos, cdigos-fonte, executveis, etc.). Tal caracterstica, aliada ao fato de que tais
documentos contm informaes bastante relacionadas, sugere naturalmente a utilizao de
hiperdocumentos (com ns e links) como meio adequado para o armazenamento e recuperao
dessas informaes (Bigelow, 1988), (Garg; Scacchi, 1989), (Meira; Cabral, 1994).
Dentro da engenharia de software, uma fase reconhecidamente problemtica se refere
manuteno de software, responsvel por custos de propores superiores aos das demais fases
do ciclo de vida de sistemas (Schach, 1994). A atividade de manuteno consiste de trs etapas:
entendimento, modificao e revalidao do sistema (Schneidewind, 1987). Notadamente, as
etapas de entendimento e modificao esto muito relacionadas com a disponibilizao das
informaes do software, ou seja, se apiam na existncia, consistncia, completitude e
atualizao correta dos documentos que o compem. A Engenharia Reversa uma tcnica
1
Captulo 1 - Introduo
utilizada para recuperar informaes a partir dos documentos do software relativos ao produto ou
cdigo-fonte, visando a obteno de sua representao em um nvel mais alto de abstrao.
Dessa forma, visa facilitar o entendimento de sistemas de software.
Por sua vez, a tecnologia de hipermdia, servindo como um meio mais flexvel para tornar
disponvel as informaes aos usurios de aplicativos, est evoluindo rapidamente e
possibilitando que novas formas de apresentao das informaes tambm sejam investigadas.
De fato, a base da tecnologia de sistemas hipermdia a rede de informaes que possui
interconexes que devem estar facilmente acessveis pelos usurios2. Essa rede de informaes,
onde os ns correspondem s unidades de informao e os links s interconexes entre eles,
compe um hiperdocumento.
Neste trabalho de mestrado, o principal interesse foi o tratamento de hiperdocumentos para
dar o suporte necessrio ao processo de engenharia reversa de software. Dessa forma, os estudos
neste trabalho tiveram como alvo a construo de um hiperdocumento que possibilitasse a
fidelidade do contedo da documentao com relao ao produto de software sendo
documentado. Alm disso, tivemos como meta obter a consistncia entre as partes do
hiperdocumento e os componentes do software com mais facilidade por meio dos links definidos.
Por exemplo, o cdigo-fonte de um programa um documento que, se espera, tenha as
respectivas documentaes relacionadas ao seu projeto, anlise, testes e outros, sendo, sempre
que possvel, consistentes e possuindo ligaes de fcil acesso, a fim de refletir corretamente
suas informaes nos diversos nveis de abstrao.
Deve-se ressaltar, ainda, que os links entre os diversos tipos de documentos devem ser
representativos para que os mantenedores de software conheam as repercusses das alteraes
realizadas e, principalmente, de forma que essas alteraes sejam, sempre que possvel, de fcil
recuperao. Mas para uma definio desses links, de forma que eles atendam e auxiliem os
mantenedores de software a entend-lo, necessrio um estudo sistemtico, pois, alm de no se
tratar de uma atividade simples, geralmente, muitos dos links e dos contedos de informao dos
ns so estabelecidos conforme as premissas preconizadas pela metodologia utilizada.
Nesse contexto, este trabalho prope um conjunto de links referentes ao domnio de
informaes relacionadas documentao do processo de engenharia reversa de software. Para
tanto, um ambiente de hipermdia, SASHE (Sistema de Autoria e Suporte Hipermdia para
2
Captulo 1 - Introduo
Ensino), foi submetido engenharia reversa, e tal processo foi suportado pela utilizao do
prprio SASHE para registrar o desenvolvimento das etapas envolvidas. Dessa forma, cada
etapa de recuperao dos nveis de abstrao e das relaes entre os componentes de software
implementados no SASHE, corresponde definio de ns e links que o documentam, de forma
hipertextual, no prprio SASHE.
1.2 Motivao
Com o desenvolvimento do ambiente de hipermdia SASHE em um projeto concludo no ICMC,
e a partir dos primeiros experimentos obtidos com a criao de hiperdocumentos para ensino,
pode-se observar que suas caractersticas constituem um recurso potencialmente utilizvel por
outros tipos de aplicao, que no somente as de ensino (Nunes et al., 1997a), (Nunes; Fortes,
1997). Neste sentido, a possvel generalizao para outro domnio de aplicao, o de Engenharia
Reversa de Software, foi nossa principal motivao para o incio deste trabalho, e foi investigada
como contribuio ao projeto anteriormente realizado.
A experincia da utilizao do SASHE para documentar o prprio SASHE, por meio da
elaborao dos documentos referentes ao processo de engenharia reversa a que foi submetido foi,
ento, o exerccio fundamental para o levantamento de requisitos que um engenheiro de software
necessita para utilizar o SASHE como ferramenta de suporte documentao do processo de
engenharia reversa de software.
Outro ponto motivador das pesquisas deste trabalho de mestrado foi o de utilizar o mtodo
Fusion-RE/I (Costa, 1997) desenvolvido tambm no ICMC, que deve-se, principalmente, do fato
de que a experincia prtica conduzida neste projeto se constitui da aplicao da engenharia
reversa a um ambiente de hipermdia, e esta aplicao foi registrada no prprio ambiente
hipermdia. Como a utilizao do Fusion-RE/I inicialmente considera a operacionalidade da
interface usurio-computador do software, foi possvel uma interao representativa para a
prpria autodocumentao realizada.
Alm disso, a escolha do mtodo Fusion-RE/I se orientou pelo fato de que o mesmo leva
produo das vises do sistema, ou seja, auxilia no entendimento e reconhecimento do seu
modelo abstrato, sob o paradigma de Orientao a Objetos (OO). Deve-se ressaltar ainda que,
mesmo com a escolha prvia por se aplicar o mtodo Fusion-RE/I, este projeto o fez com uma
3
Captulo 1 - Introduo
particularidade indita, que foi a de, ao final, produzir o modelos do sistema SASHE, na notao
UML (Unified Modeling Language) (Rational, 1997a). A modelagem em UML possibilita uma
abrangncia de forma a no restringir a utilizao de algum mtodo de OO especfico, como
Fusion (Coleman, 1996) ou OMT (Object Modeling Technique) (Rumbaugh et al., 1991).
1.3 Objetivos
O principal objetivo desta pesquisa de mestrado foi elaborar uma proposta de adequao do
sistema SASHE ao domnio da documentao de engenharia reversa de software, de forma que
os links estabelecidos fossem representativos e proporcionassem agilidade para o acesso da
documentao em questo.
Para tanto, a investigao e os estudos necessrios para essa elaborao resultaram da
anlise de um experimento. Tal experimento consistiu da utilizao e aplicao de engenharia
reversa a um sistema hipermdia prottipo existente: SASHE, que foi desenvolvido no ICMC.
Esse ambiente hipermdia SASHE, particularmente, prov um modelo interno de estruturao de
ns do hiperdocumento que auxilia a organizao dos ns: o MCA (Casanova et al., 1991), o
qual tambm foi estudado de forma a fornecer os subsdios para o processo de entendimento do
SASHE.
Alm disso, para que a documentao atenda ao paradigma OO, a engenharia reversa
orientou-se pela aplicao do mtodo Fusion-RE/I. Finalmente, tambm foram obtidos
conhecimentos sobre uma linguagem padro de modelagem OO, a UML, cuja potencialidade de
ser independente da utilizao de qualquer mtodo sob o paradigma de OO, pde ser
comprovada.
Captulo 1 - Introduo
RE/I. Tambm nesse captulo discutido o porqu do uso da UML e uma breve descrio da sua
notao, seguido da proposta para um mapeamento dos modelos gerados pelo mtodo FusionRE/I para a UML, bem como exemplos de como esse mapeamento foi implementado.
No Captulo 3 abordado o suporte oferecido pelos sistemas hipermdia em vrios domnios
de aplicao, destacando-se a Engenharia de Software e a Engenharia Reversa. Em seguida,
descrito o ambiente hipermdia SASHE, ambiente que foi submetido engenharia reversa, de
forma a dar uma idia geral da sua funcionalidade e das informaes que estavam disponveis no
incio do processo de engenharia reversa. Tambm nesse captulo mostrada a hiperbase
construda com a documentao recuperada durante o processo de engenharia reversa, baseada
em uma modelagem do domnio de engenharia reversa realizada, orientada pelo mtodo
OOHDM. Finalmente, nesse captulo apresentada uma proposta de adequao do sistema
SASHE, a fim de tornar o ambiente mais propcio autoria e navegao de documentos de
software.
Os documentos resultantes da aplicao do Fusion-RE/I ao SASHE so apresentados no
Captulo 4. Essa documentao apresentada de forma resumida, devido ao grande volume de
informaes gerado.
No Captulo 5, tambm como resultado da aplicao do Fusion-RE/I, so abordados os
aspectos gerais que foram avaliados sobre o mtodo. Como esse mtodo ainda no havia sido
aplicado a nenhum sistema com as caractersticas do SASHE, foi possvel avaliar uma srie de
fatores, ressaltando vantagens e pontos crticos da aplicao do mtodo. Encerrando esse
captulo proposto um conjunto de mudanas ao mtodo Fusion-RE/I, visando melhorar o
desempenho do mtodo para sua aplicao a sistemas OO.
Finalmente, as concluses deste trabalho, bem como as possibilidades de trabalhos futuros,
so apresentados no Captulo 6.
Captulo 1 - Introduo
Captulo 2
Engenharia Reversa
Segundo Saleh e Boujarwah (1996), o mercado de software vem crescendo a cada dia e com ele
o uso de tcnicas de desenvolvimento, muitas vezes informais. Como resultado, a manuteno de
tais softwares torna-se problemtica, uma vez que a documentao associada ao software, na
maioria das vezes, no est de acordo com o cdigo implementado. Alm disso, as constantes
modificaes e adies de novas caractersticas ao software acarreta efeitos colaterais
inesperados, que no esto presentes na documentao.
Dessa forma, quando diante da manuteno do produto, o engenheiro de software encontra
uma documentao informal e incompleta, que no reflete o software existente, tornando
impossvel o gerenciamento do processo de manuteno (Saleh; Boujarwah, 1996). Neste
contexto, a Engenharia Reversa de Software, com o propsito de recuperar as informaes de
projeto perdidas durante a fase de desenvolvimento, e de documentar o real estado do software
pode auxiliar o processo de gerenciamento da manuteno.
Rugaber (1992) afirma que a maior parte do esforo de desenvolvimento de software gasto
na manuteno de sistemas existentes e no no desenvolvimento de sistemas novos, e que grande
parte do processo de manuteno dirigido ao entendimento do sistema em manuteno. Sendo
assim, se queremos melhorar o desenvolvimento de software, e necessrio facilitar o processo de
compreenso de sistemas existentes. A engenharia reversa ataca diretamente o problema de
compreender o software.
Neste trabalho, a engenharia reversa foi empregada com o objetivo de recuperar informaes
de anlise do sistema SASHE, no registradas durante o desenvolvimento do software. A
documentao recuperada poder ento facilitar a manuteno do sistema, uma vez que foi
arquivada na forma de um hiperdocumento no prprio SASHE, e apoiar uma posterior
reengenharia.
Na Seo 2.1 so discutidos alguns conceitos bsicos sobre engenharia reversa, sendo
apresentado em seguida, na Seo 2.2, o mtodo de engenharia reversa Fusion-RE/I, utilizado
como base para o desenvolvimento do processo de engenharia reversa. Na Seo 2.3 so
apresentados os motivos pelos quais optamos por utilizar a notao UML neste trabalho, para a
representao das informaes recuperadas atravs da aplicao do Fusion-RE/I, bem como uma
breve descrio da notao UML. Na Seo 2.4 apresentada a proposta de mapeamento dos
elementos de modelagem Fusion para a notao UML, seguida de exemplos de como o
mapeamento dos documentos recuperados do sistema SASHE para a UML foi realizado.
anlise), enquanto diferenas no grau de abstrao ocorrem dentro de uma mesma etapa (pode-se
representar as informaes de uma mesma etapa do desenvolvimento de forma geral ou de forma
mais detalhada) (Chikofsky; Cross II, 1990).
Dessa forma, a engenharia reversa pode ser aplicada em qualquer etapa do ciclo de vida, seja
para recuperar nveis de abstrao ou para fornecer uma nova viso em um grau de abstrao
mais alto ( consenso de que quanto mais alto o grau de abstrao, menos detalhes so
fornecidos).
A engenharia reversa segue o sentido oposto ao da engenharia progressiva. A engenharia
progressiva segue a seqncia que vai desde os requisitos, passa pelo projeto at a
implementao. Na engenharia progressiva, o sistema o resultado do processo de
desenvolvimento. Na engenharia reversa, o sistema geralmente o ponto inicial do processo
(Chikofsky; Cross II, 1990). A Figura 2.1, adaptada de Chikofsky e Cross II (1990), representa
esquematicamente, uma forma comparativa das direes inversas por quais se orientam as
etapas envolvidas em cada uma das engenharias. O processo de engenharia reversa caracteriza-se
pelas atividades retroativas do ciclo de vida, que partem de um baixo nvel de abstrao para um
alto nvel de abstrao.
Requisitos
DOWR
Implementao
Projeto
Eng. Progressiva
Eng. Progressiva
Eng. Reversa
Eng. Reversa
1tYHO GH $EVWUDomR
EDL[R
objetivo de facilitar atividades como: expanso, correo, documentao, re-projeto ou reprogramao em outra linguagem de programao.
Chikofsky e Cross II (1990) tambm identificam duas importantes categorias da Engenharia
Reversa: a redocumentao (visualizao de cdigo) e a recuperao de projeto (entendimento
de programa).
A categoria redocumentao compreende a criao ou reviso de uma representao
semanticamente equivalente dentro de um mesmo nvel de abstrao. Esse processo visa criar
novas vises do sistema atravs da anlise do cdigo fonte, com o objetivo de melhorar a
compreenso do sistema.
A criao dessas vises adicionais do cdigo, geralmente grficas, tem como objetivo recriar
a documentao que j existiu ou que deveria ter existido sobre o sistema (Costa, 1997). No
entanto, as informaes recuperadas com esse tipo de anlise fornecem apenas vises estruturais,
de forma que informaes como a funo e os propsitos do sistema exigem um maior esforo
de entendimento.
A Engenharia Reversa categorizada como recuperao de projeto um subconjunto da
Engenharia Reversa no qual o domnio de conhecimento, informao externa e deduo so
adicionados s observaes sobre o sistema para identificar abstraes de mais alto nvel que
sejam significativas, alm daquelas obtidas diretamente pelo exame do sistema em si
(Biggerstaff, 1989). Esse tipo de processo de entendimento visa recuperar todas as informaes
necessrias para se compreender melhor o que o sistema faz, como ele o faz e porque ele o faz.
Recuperao de projeto a forma mais crtica de Engenharia Reversa porque tenta recuperar
no s a funcionalidade do sistema, mas o processo no qual ele foi desenvolvido (Costa, 1997).
Esse tipo de anlise recupera mais do que vises estruturais, obtendo vises funcionais e at
mesmo de domnio.
Visando a recuperao de projeto, neste trabalho de mestrado, nos apoiamos no mtodo
Fusion-RE/I, que apresentado a seguir (Seo 2.2). O mtodo de Engenharia Reversa FusionRE/I (Fusion Reverse Engineering / Interface) desenvolvido no ICMC-USP (Costa, 1997),
baseia-se nos conceitos e idias da Engenharia Reversa orientada a objetos, e fornece
mecanismos para abstrair vises funcionais (modelos de anlise de sistemas de acordo com o
mtodo Fusion de Coleman e outros (1996)) e vises estruturais partindo, inicialmente, dos
aspectos operacionais e de dados disponveis na interface usurio-computador.
10
Interface
Informaes
existentes sobre
o sistema
1 R Etapa
2 R Etapa
Recuperao de
Vises Funcionais
Recuperao de
Vises Estruturais
Quadro de Chamadas
Quadro ndice de Procedimentos
Quadro de Operaes - Procedimentos
de Implementao
11
onde Nome especifica o nome do sistema, e uma vez que a expresso regular seja composta por
nome-local, so fornecidas na seqncia as expresses de sua formao.
O Modelo de Operaes decorrente do Modelo de Ciclo de Vida. Este modelo especifica o
comportamento de uma operao de forma declarativa em termos das mudanas de estado do
sistema e eventual gerao de eventos de sada (Masiero, 1995).
Cada operao identificada no Modelo de Ciclo de Vida descrita individualmente atravs
de um formulrio textual contendo as seguintes informaes: nome da operao, descrio
informal, dados de entrada, objetos acessados3 e modificados, eventos de sada e os agentes que
3
Embora o termo acessar no seja uma palavra encontrada nos dicionrios da Lngua Portuguesa, amplamente
utilizado pela comunidade da rea de Cincia da Computao.
13
nome
Descrio:
texto
L:
itens
Modifica:
itens
Envia:
agentes e eventos
Assume:
condio
Resultado:
estado
Como o mtodo Fusion-RE/I utiliza apenas os modelos de anlise do mtodo Fusion, neste
trabalho no abordaremos as fases de projeto e implementao que complementam o mtodo.
Assim, nas prximas subsees retomamos a descrio do mtodo Fusion-RE/I.
15
definio clara de que o Modelo de Objetos possa ser construdo atravs da observao da
interface somente. Em Penteado (1996), onde descrito o mtodo Fusion-RE, do qual se origina
o Fusion-RE/I, o Modelo de Objetos recuperado atravs da investigao do cdigo fonte, mas
tambm no so claramente definidas as diretrizes para essa tarefa, ficando a cargo do
engenheiro de software um processo quase que de tentativa e erro para identificar os possveis
objetos do sistema.
19
mais claras. Essa padronizao permitir aos desenvolvedores uma melhor comunicao,
independente do mtodo utilizado e permitir um melhor aproveitamento de ferramentas CASE.
Como esperado que o prprio mtodo Fusion, em sua nova verso, adote a notao UML,
por ser um projeto apoiado por grandes empresas de software (Coleman et al., 1997), e por todos
os motivos acima citados que optamos por nos antecipar e representar as informaes
recuperadas atravs do Fusion-RE/I em UML. Desta forma, a familiarizao e uma melhor
compreenso da nova notao ocorrem no s atravs de estudos, mas de uma aplicao prtica.
A seguir, so apresentados os principais aspectos da notao UML, de forma resumida, com
o objetivo de fundamentar o uso da mesma para a investigao da correspondncia aos modelos
requeridos pelo Fusion-RE/I.
A notao UML est visualmente representada no documento UML Notation Guide
(Rational, 1997b). Este documento apresenta uma explanao dos elementos notacionais e um
breve resumo da semntica desses elementos.
A UML prope nove diagramas e um conjunto de elementos que podem ser utilizados em
quaisquer desses diagramas, chamados de elementos de notao genrica. Entre esses elementos
encontram-se notas, packages, restries, rtulos, strings, esteretipos, nomes, ou seja,
elementos independentes da natureza do diagrama.
Os diagramas encontram-se agrupados em diagramas de estrutura esttica, diagramas
comportamentais (caso de uso, de seqncia, de colaborao, de estado e de atividade) e
diagramas de implementao, e so brevemente descritos abaixo.
a) Diagramas de Estrutura Esttica
Dois diagramas compem os diagramas de estrutura esttica: os diagramas de classes e os
diagramas de objetos.
Um diagrama de classe uma coleo de elementos estticos, tais como classes, tipos e seus
relacionamentos, conectados uns aos outros e aos seus contedos.
Um diagrama de objetos uma instncia de um diagrama de classes. Ele mostra o estado
detalhado do sistema em um ponto no tempo.
20
21
f) Diagramas de Atividade
Um diagrama de atividade um caso especial de diagrama de estado no qual todos (ou pelo
menos a maioria) os estados so estados de ao e no qual todas as transies (ou pelo menos a
maioria) so disparadas pela finalizao das aes nos estados origem.
Todo diagrama de atividade conectado a uma classe, implementao de uma operao ou
a um caso de uso. O propsito desse diagrama focalizar o fluxo direcionado pelo
processamento interno.
g) Diagramas de Implementao
Esses diagramas mostram aspectos de implementao, incluindo estrutura do cdigo fonte e a
estrutura da implementao em tempo de execuo. Existem dois tipos de diagramas de
implementao: diagramas de componentes e diagramas de disponibilidade.
Os diagramas de componentes apresentam a estrutura do cdigo em si, mostrando as
dependncias entre os componentes de software. Isso apresentado atravs de um grafo de
componentes conectado por relacionamentos de dependncia.
Os diagramas de disponibilidade mostram a configurao de elementos processando em
tempo de execuo e os componentes de software, processos, e objetos que vivem sobre eles, ou
seja, mostram a estrutura do sistema em tempo de execuo.
Um diagrama de disponibilidade representado por um grafo de ns conectados por
associaes de comunicao. Um n um tipo de objeto fsico de execuo que representa um
recurso computacional, geralmente tendo no mnimo memria e capacidade de processamento.
22
Modelo de Objetos
A correspondncia do Modelo de Objetos Fusion para a notao UML pde ser feita
diretamente, pois a UML modela os mesmos elementos existentes no Modelo de Objetos Fusion.
Alm disso, tanto o Modelo de Objetos Fusion como o Modelo de Objetos UML adotam a
representao na forma de diagramas, e as diferenas encontram-se apenas na representao
grfica dos elementos de cada diagrama.
Pode-se observar que a UML, por sua vez, mais abrangente que a notao proposta no
Fusion, isto , oferece mais recursos para a modelagem de objetos. Alm dos elementos de
modelagem definidos pelo Fusion, ela permite a incluso da definio dos mtodos pertencentes
s classes como no Fusion, e tambm possibilita a diferenciao entre agregao fraca e
agregao forte (composio), a dependncia entre classes e a definio de interface entre as
classes.
23
Classe 1
Classe 1
Classe 2
Classe 2
Classe 3
Classe 1
Atributo 1: tipo
Classe de
associao
Classe de
associao
atributo
atributo
Operao 1( )
(a) Classe
Classe 1
...
Classe 3
Classe n
Classe 1
Classe
Classe
Classe
Classe
Classe 2
Classe 3
...
Classe 2
Classe n
Classe 3
Classe n
...
<<friend>>
Classe 2
Classe 4
Operao( )
<<call>>
Classe 3
Classe 1
...
Operao( )
Classe 2
Professor
interage
Hiperbase
manipula
Interface de Autoria
N
Elo
Browser
N Contexto
Browser Grfico
N Terminal
Browser Estrutural
Roteiro
T exto
Imagem
Vdeo
udio
Execuo
25
Modelo de Interface
A interface de um sistema o conjunto de operaes permitidas e o conjunto de eventos de sada
desse sistema. O modelo de interface descreve o comportamento do sistema em termos de
eventos e das mudanas de estado que eles causam (Coleman et al., 1996).
O modelo de interface do mtodo Fusion usa dois modelos para a obteno de diferentes
aspectos do comportamento: Modelo de Ciclo de Vida e Modelo de Operaes.
O Modelo de Ciclo de Vida caracteriza a seqncia permitida de operaes do sistema
declarativamente, em termos de mudanas de estado. O Modelo de Operaes especifica os
efeitos de cada operao do sistema de forma declarativa, em termos das mudanas de estado
que eles causam e dos eventos de sada que envia (Coleman et al., 1996).
Por essas definies, o que nos pareceu mais adequado foi a representao desses modelos
por meio de diagramas de estados4, que como j mencionado na Seo 2.2, caracterizam uma
seqncia de estados possveis para um determinado objeto, mapeando tambm suas aes e
sadas.
Um diagrama de estados descreve de forma grfica uma mquina de estados finitos. Por sua
vez, uma mquina de estados finitos descreve o comportamento que especifica as seqncias de
estados que um objeto ou uma interao assume durante sua vida em resposta a eventos, junto
com suas respostas e aes (Rational, 1997b).
Parte dos modelos do mtodo Fusion so descritos utilizando-se recursos grficos
(diagramas), e outra parte utiliza representaes textuais, como expresses regulares e quadros
declarativos. A UML no assume que toda a informao em um modelo deva ser expressa como
um diagrama (Rational, 1997b). No entanto, toda a notao UML possui o suporte de diagramas,
semanticamente definidos por meio de um metamodelo.
A representao tabular das informaes deixada para as ferramentas. A UML no faz esse
tratamento porque toda a informao bsica adequadamente representada no metamodelo UML
(Rational, 1997b).
Sendo objetivo deste trabalho representar as informaes recuperadas de um sistema e
recuperar essas informaes por meio da aplicao do mtodo de Engenharia Reversa Fusion4
Diagramas de Estados ou Diagramas de Transio de Estados (DTEs) so termos utilizados indistintamente nesta
dissertao.
26
RE/I, em UML, um estudo sobre a melhor adequao dos documentos requeridos pelo mtodo
foi realizado. Como no encontramos na notao UML diagramas diretamente correspondentes
ao modelo de interface Fusion, optamos pela representao desse modelo atravs de diagramas
de transio de estados, uma vez que os conceitos de tais diagramas parecem ir de encontro aos
objetivos dos modelos de ciclo de vida e de operaes, que compem o modelo de interface.
De fato, o Modelo de Ciclo de Vida descreve o comportamento do sistema sob a perspectiva
de como ele se comunica com o ambiente desde sua criao at o seu fim. Essa descrio se d
atravs de um conjunto de expresses regulares que definem as seqncias de operaes
permitidas. Essas expresses so decompostas at o nvel de operaes no decomponveis
(Coleman et al., 1996).
A grosso modo, podemos dizer que um Modelo de Ciclo de Vida pode ser visto como uma
linguagem, j que composto por seqncias de expresses regulares. Dessa forma, o Modelo de
Ciclo de Vida pde ser adequadamente representado por um diagrama de estados.
O Modelo de Operaes define o
comportamento
declarativamente, de forma textual. Isto feito atravs de quadros que especificam as operaes
atravs dos seguintes itens:
nome da operao;
lista de eventos que pode ser enviada a agentes (entidades ativas que interagem com o
sistema) pela operao;
pr-condies; e
Uma vez que o Modelo de Ciclo de Vida pde ser mapeado em diagrama de estados, j
temos no prprio diagrama todas as operaes realizadas pelo sistema que deveriam ser descritas
no Modelo de Operaes. Atravs dos recursos notacionais disponveis ao diagrama de estados,
as informaes representadas no Modelo de Operaes puderam ser incorporadas ao diagrama.
Vale ressaltar que os diagramas de transio de estados esto semntica e notacionalmente
descritos nos documentos referentes a UML (Rational, 1997b), (Rational, 1997c), de forma que,
27
por meio de seu uso de forma completa, o modelo de interface do mtodo Fusion pode ser
representado satisfatoriamente.
A maioria dos mtodos de modelagem OO utilizam notao grfica e formalismos baseados
em estados para descrever o comportamento de sistemas. No entanto, na maioria dos casos, falta
uma definio rigorosa da semntica da linguagem utilizada para a descrio comportamental, e
sem essa semntica rigorosa, os mtodos de modelagem no conseguem ser precisos o suficiente
(Harel; Gery, 1997).
Sendo o diagrama de estados um elemento de modelagem poderoso sob o aspecto da
modelagem de seqncias de eventos e de estados de um objeto, e sendo semanticamente bem
definido, era esperado que a representao do aspecto comportamental do sistema atravs de tais
diagramas revelasse aspectos sobre o sistema em anlise, que no so to claramente
evidenciadas nos modelos propostos pelo mtodo Fusion-RE/I. De fato, os diagramas de
transio de estado possibilitaram uma melhor visualizao da seqncia de operaes
representada no Modelo de Ciclo de Vida, permitindo que fossem feitas as devidas correes no
modelo, para que mesmo ficasse consistente com a interface do SASHE.
A seguir mostrado um resumo da notao UML para diagramas de transio de estado,
juntamente com um exemplo de como as sentenas do Modelo de Ciclo de Vida foram
representadas em DTEs (Figura 2.9).
Transio para o
prprio estado
Smbolo
terminal
Smbolo
inicial
Nome do evento
Nome do estado
Transio de estado
Transio de estado
29
Glossrio
Roteiro
Ns
Abrir Hiperbase
clique do
boto
Prof essor
Interf ace de autoria
Salv ar hiperbase
b_criar_hiperbase
clique do
boto Sair
Menu Hiperbase
Hiperbase nov a criada
Menu Ajuda
clique do boto
Estudante
Menu Janelas
escolha da
opo Sair
Estudante
b_Criar_hiperbase
Descrio:
L:
Modifica:
Envia:
Assume:
Resultado:
cada transio entre os estados do DTE. Conforme indicado nas figuras pelas setas, esses
campos permitem que informaes descritas no Modelo de Operaes sejam incorporadas ao
DTE como caractersticas das transies, sem que isso altere a semntica do diagrama. As
informaes que aparecem nas Figuras 2.10 e 2.11 como parte da transio b_criar_hiperbase
foram retiradas do formulrio de descrio da operao, mostrado no Quadro 2.2.
Figura 2.10 - Janela para especificao geral da transio de estado na Rational Rose
Figura 2.11 - Janela para especificao detalhada da transio de estado na Rational Rose
31
UML
Diagrama de Estados
Modelo de Operaes
Quadro de Chamadas
Existe um Quadro de Chamadas para cada arquivo do sistema. Nesse quadro so descritos todos
os procedimentos includos no arquivo, bem como quais so chamados e quais o chamam.
A partir de um estudo sobre quais tipos de notao UML suportariam tal quadro de
chamadas, pudemos verificar duas: packages e diagramas de componentes.
Na UML, um package um agrupamento de elementos de modelagem. Todos os tipos de
elementos de modelagem e diagramas UML podem ser organizados em packages, inclusive
outros packages (Rational, 1997b).
Um diagrama de componente um dos diagramas de implementao disponveis na UML.
Esse diagrama mostra as dependncias entre componentes de software, incluindo componentes
32
real (Eriksson; Magnus, 1998). Na Rational Rose (Rational, 1999) um componente que
representa um subprograma pode ser apresentado como um retngulo, conforme mostrado na
Figura 2.12.
NewSubprogBody
Figura 2.12 - cone utilizado pela Rational Rose para representar o corpo de um subprograma
Um componente mostrado como um retngulo com uma pequena elipse e dois retngulos
menores projetando-se em um de seus lados. Uma instncia de componente tem um nome e um
tipo. O nome do componente e seu tipo pode ser mostrado como uma string sublinhada, seja
dentro do smbolo de componente, acima ou abaixo, com a sintaxe:
component-name : component-type
Componente 1
Interface do Componente 2
Componente 2
Componente 3
A relao de dependncia mostrada como uma seta pontilhada de um elemento para outro
elemento do modelo, onde o primeiro elemento o dependente (na Figura 2.13, Componente 3
depende do Componente 2, que depende do Componente 1). A seta pode ser rotulada
opcionalmente com um esteretipo ou um nome. A UML prov esteretipos padres que se
aplicam a dependncias, de forma a especificar o tipo de dependncia que est sendo modelada.
A Figura 2.14 apresenta o diagrama de componentes construdo para o Quadro de Chamadas
do arquivo ancora.cpp. O Quadro de Chamadas mostrado no Quadro 2.4. Os diagramas de
componentes tambm foram construdos com o auxlio da ferramenta Rational Rose (Rational,
1999). Mesmo possibilitando a representao de subprogramas nos diagramas de componente, a
ferramenta no disponibiliza espao para descrio textual dos mesmos. Dessa forma, parte das
informaes contidas nos Quadros de Chamadas no so incorporadas ao diagrama.
A sintaxe utilizada na Figura 2.14 a mesma apresentada anteriormente. As setas de
dependncia, no caso da figura, explicitam as chamadas entre os subprogramas. Algumas
chamadas esto direcionadas para um arquivo e no para um procedimento. Isso foi feito para
que o diagrama ficasse mais claro e sua leitura fosse facilitada.
Quadro 2.4 - Quadro de Chamadas recuperado do arquivo ancora.cpp
Sistema: SASHE
Arquivo: ancora.cpp
Procedimento:
(12) ancora::ancora(int Ind, int
ide): entidade(Ind)
Diretrio/Arquivo:
hyperprop/ancora.cpp
Descrio:
Construtor da ncora
Chama:
(12) entidade(Ind)
Chamado por:
Anc_aud.cpp\(12) ancora_audio::ancora_audio(int
ind, int ide) : ancora(ind, ide)
Anc_cont.cpp\(12)
ancora_contexto::ancora_contexto(int ind,int
ide,int id_no) : ancora(ind, ide)
Anc_exec.cpp\(12)
ancora_executavel::ancora_executavel(int ind, int
ide) : ancora(ind, ide)
Anc_ima.cpp\(12) ancora_imagem::ancora_imagem(int
ind, int ide) : ancora(ind, ide)
Anc_tab.cpp\(12) ancora_tabela::ancora_tabela(int
ind, int ide) : ancora(ind, ide)
Anc_tex.cpp\(14) ancora_texto::ancora_texto(int
ind, int ide, char *pal, int inicio, int fim) :
ancora(ind, ide)
Anc_tri.cpp\(12) ancora_trilha::ancora_trilha(int
ind,int ide) : ancora(ind, ide)
Anc_vid.cpp\(12) ancora_video::ancora_video(int
ind, int ide) : ancora(ind, ide)
35
Descrio:
Construtor usado quando a ncora recuperada do
arquivo.
Chama:
(20) entidade(Ind)
Chamado por:
Anc_aud.cpp\(19) ancora_audio::ancora_audio(int
ind): ancora(ind)
Anc_cont.cpp\(20) ancora_contexto ::
ancora_contexto(int ind) : ancora(ind)
Anc_exec.cpp\(19)
ancora_executavel::ancora_executavel(int ind):
ancora(ind)
Anc_ima.cpp\(19) ancora_imagem::ancora_imagem(int
ind): ancora(ind)
Anc_tab.cpp\(19) ancora_tabela::ancora_tabela(int
ind): ancora(ind)
Anc_tex.cpp\(24) ancora_texto::ancora_texto(int
ind): ancora(ind)
Anc_tri.cpp\(19) ancora_trilha ::
ancora_trilha(int ind) : ancora(ind)
Anc_vid.cpp\(19) ancora_video::ancora_video(int
ind): ancora(ind)
Procedimento:
Descrio:
(28) int ancora::grava_ancora(FILE Salva os atributos da ncora em arquivo.
*fp)
Diretrio/Arquivo:
Chama:
hyperprop/ancora.cpp
(30) entidade::grava(fp)
Chamado por:
anc_cont.cpp\(38) int
ancora_contexto::grava_ancora(FILE *fp)
anc_text.cpp\(61) int
ancora_texto::grava_ancora(FILE *fp)
list_anc.cpp\(71) int lista_ancoras :: grava(FILE
*fp)
Procedimento:
Descrio:
(38) int
Recupera os atributos da ncora do arquivo.
ancora::recupera_ancora(FILE *fp)
Diretrio/Arquivo:
Chama:
hyperprop/ancora.cpp
(40) fscanf(fp, "%d)\n", &ident)
Chamado por:
anc_cont.cpp\(47) int
ancora_contexto::recupera_ancora(FILE *fp)
anc_text.cpp\(71) int
ancora_texto::recupera_ancora(FILE *fp)
list_anc.cpp\(118) int lista_ancoras ::
recupera(No *n, FILE *fp)
36
Lis t_
anc.cpp
Anc_tri.cpp
ncora.cpp
Anc_
ima.cpp
int ancora::recupera_ancora(FILE *f p)
Anc_
tab.cpp
Anc_
aud.cpp
Anc_
v id.cpp
Anc_
exec.cpp
Anc_
cont.cpp
Quadro de ndice
O quadro de ndice proveniente do Quadro de Chamadas e trata-se de uma lista, em ordem
alfabtica, de todos os procedimentos de implementao do sistema, com suas respectivas
localizaes (arquivo e diretrio).
Esse quadro tem como finalidade agilizar o trabalho de manipulao dos procedimentos. Por
tratar-se apenas de uma lista textual, esse quadro no necessita de uma representao especfica
em UML.
37
Por tratar-se de uma tabela, a UML no fornece uma representao direta. No encontramos
na notao UML um diagrama que relacionasse, diretamente, os procedimentos de
implementao com as operaes da interface com o usurio, como acontece no quadro de
Operaes Procedimentos de Implementao.
Assim, optamos por deixar o mapeamento desse quadro em aberto.
UML
Quadro de Chamadas
Diagrama de Componentes
Quadro de ndice
sistema. O Quadro 2.6 apresenta um resumo das etapas previstas pelo mtodo Fusion-RE/I,
mostrando a ordem de execuo das tarefas.
Quadro 2.6 - Ordem das tarefas prescritas pelo Fusion-RE/I
Etapa 1. Recuperao de Vises Funcionais
Tambm nesse captulo foi discutido o porqu da opo pela utilizao da notao UML
para a representao dos modelos recuperados atravs da aplicao do mtodo Fusion-RE/I e foi
apresentada uma proposta para o mapeamento da representao utilizada pelo Fusion-RE/I para a
notao UML, j que foi objetivo deste trabalho que as informaes recuperadas pela aplicao
do mtodo Fusion-RE/I estivessem de acordo com a notao UML. Tal mapeamento foi
realizado, e foram apresentados exemplos dos resultados.
Orientando-se para utilizar a notao UML, o processo de engenharia reversa segundo o
mtodo Fusion-RE/I foi ento realizado. Entretanto, devido a restrio do SASHE de no
permitir a criao de ncoras e links
40
Captulo 3
42
(1998a) foi feito um estudo de algumas abordagens presentes na literatura que pudessem
satisfazer os nossos objetivos.
Baseada na modelagem conceitual resultante e levando em conta os conceitos do MCA
(Casanova et al., 1991), foi construda uma hiperbase contendo os documentos recuperados do
sistema SASHE, no prprio sistema. Com a hiperbase pronta, a modelagem pde ser validada,
uma vez que o processo realizado foi uma instncia do modelo proposto.
Essa tarefa de inserir os documentos do sistema SASHE no prprio SASHE foi o exerccio
que revelou requisitos necessrios para que o esse sistema se tornasse adequado ao domnio de
engenharia reversa. De fato, foi constatado que para que o SASHE comportasse a documentao
de engenharia reversa e permitisse uma navegao eficiente atravs desses documentos, alguns
pontos precisam ser ajustados. Assim, elaboramos uma proposta de adequao, contendo as
modificaes necessrias para que o sistema se torne adequado ao domnio de engenharia
reversa.
O SASHE, sistema alvo da engenharia reversa realizada, apresentado na Seo 3.1. Na
Seo 3.2 descrito o mtodo utilizado, OOHDM, seguido pelos resultados da modelagem
resultante, que mostrada na Seo 3.3. Na Seo 3.4 mostrada a hiperbase construda para o
sistema SASHE, e na Seo 3.5 apresentada uma proposta de adequao do sistema SASHE
para o domnio de engenharia reversa de software. Finalmente, na Seo 3.6 so apresentadas as
consideraes finais sobre este captulo.
43
Autor Geral
Hip
Confeco
de Roteiros
Autor de Roteiros
Hiperbase
Mdulo de
Navegao
Leitor/Usurio
Mdulo de Autoria
aplicao
ensino:
introduo,
exerccio,
motivao,
definio,
44
se procurar por um n mais fcil ou, com uma funo didtica posterior, no caso de se
procurar por um n mais difcil.
As estratgias de busca por funo didtica associada ao grau de dificuldade um
diferencial importante, o qual reflete um suporte melhor para orientao do usurio/leitor.
O usurio tambm pode avanar ou retroceder dentro do caminho percorrido por ele,
independente se esse caminho coincidente com o roteiro ou no, atravs da funo
Histrico. A funo Onde estou? situa, graficamente, a posio do n atual em relao
ao roteiro programado.
46
47
Mecanismos
Interesses do Projeto
Classes, subsistemas,
relacionamentos,
perspectivas de atributos
Classificao, composio,
generalizao e
especializao
Modelagem da semntica
do domnio de aplicao
Projeto da
Navegao
Projeto da
Interface
Abstrata
Objetos de interface
abstrata, reaes a eventos
externos, transformaes
de interface
Modelagem de objetos
perceptveis, implementa
metforas escolhidas.
Descrio de interface para
objetos navegacionais
Implementao
Aplicao em execuo
Desempenho, completitude
Fases
Modelagem
Conceitual
sendo que nessa atividade observa-se uma maior preocupao com a estrutura dos objetos do que
com seu comportamento. Para o desenvolvimento do modelo empregada a abordagem
orientada a objetos, segundo a notao do mtodo OMT (Rumbaugh et al., 1991), com a adio
de alguns elementos novos, como o conceito de subsistemas e de perspectiva de atributos.
Dessa forma, dizemos que um modelo conceitual definido atravs de classes, subsistemas
e relaes, organizados de acordo com a semntica do domnio.
O modelo de classes do processo de engenharia reversa (PER) foi derivado do estudo desse
processo sob a perspectiva do mtodo de engenharia reversa Fusion-RE/I, segundo demonstrado
na Figura 3.4. Os elementos presentes no modelo podem ser agrupados em duas hierarquias
principais: uma hierarquia de tarefas de engenharia reversa e uma hierarquia de produtos
gerados.
50
51
Procedimento acessada atravs da classe Operao, a classe Procedimento passa a poder ser
navegada no contexto por operao, uma vez que uma operao pode ser implementada por
mais de um procedimento. A partir desse contexto, a classe Procedimento pode ser navegada
tambm nos contextos por data e por arquivo. Dessa forma, o contexto por operao s visvel
quando a classe acessada atravs da classe Operao, e no aparece quando a classe acessada
atravs do ndice.
54
O esquema apresentado na Figura 3.7 foi criado considerando-se apenas a idia de contextos
aninhados, organizando a documentao do SASHE em contextos coerentes, que orientasse a
navegao. Na figura, os retngulos representam contextos, as elipses representam documentos
textuais e a elipse irregular representa documentos grficos. As setas indicam possveis links
entre os documentos, dando uma idia do contexto a que cada link pertence. Quando a ligao
implementada por um link ultrapassa os limites de um contexto (seta pontilhada), esse link deve
ser criado no maior contexto que o contm (no caso da Figura 3.7, o contexto Documentos de
Engenharia Reversa).
'RFXPHQWRV GH (QJHQKDULD 5HYHUVD
9LVmR (VWUXWXUDO
9LVmR )XQFLRQDO
&KDPDGDV GH 3URFHGLPHQWRV
&LFOR GH 9LGD
4XDGUR GH &KDPDGDV
QGLFH GH 3URFHGLPHQWRV
2SHUDo}HV
4XDGUR GH QGLFH
0RGHOR GH 2SHUDo}HV
2SHUDo}HV3URFHGLPHQWRV
&ODVVHV
0RGHOR GH 2EMHWRV
4XDGUR GH 2SHUDo}HV3URFHGLPHQWRV GH
,PSOHPHQWDomR
Figura 3.7 - Projeto dos contextos aninhados da hiperbase para documentar a engenharia reversa
segundo o Fusion-RE/I
Tendo organizado os contextos que seriam criados na hiperbase com os documentos de
engenharia reversa, o esquema contextual do OOHDM foi adaptado para que ficasse consistente
com os contextos criados. A Figura 3.8 apresenta um novo esquema contextual, baseado no
esquema contextual da modelagem OOHDM (Figura 3.6) e no esquema de contextos da Figura
3.7. Nessa figura, os ndices de acesso so apresentados como retngulos pontilhados, como no
OOHDM, porm os documentos ainda so mostrados como elipses para diferenciar ns
documentos de ns de contextos (retngulos). O retngulo N Inicial equivale ao ndice de
acesso principal, fornecendo links para os outros ndices.
55
2SHUDo}HV
QGLFH GH 2SHUDo}HV
2SHUDomR
2EMHWRV
QGLFH GH 7HPDV
9LVmR (VWUXWXUDO
2SHUDo}HV3URFHGLPHQWRV
4XDGUR GH &KDPDGDV
QGLFH GH 3URFHGLPHQWRV
3URFHGLPHQWR
,WHP GH
,PSOHPHQWDomR
56
Figura 3.9 - Parte do ndice principal da hiperbase juntamente com o ndice de operaes
Tambm devido ao fato do sistema no suportar a edio de tabelas, os documentos
tabulares foram descritos como um texto seqencial, conforme mostra a Figura 3.10. Nessa
figura apresentada uma das entradas da tabela que compem o Modelo OperaesProcedimentos de Implementao.
Quadro 3.1 - Parte do Modelo Operaes-Procedimentos de Implementao
Opes da Interface do tema NAVEGAO
Opes
Controles
Operaes
b_Avana_histrico
Procedimentos
To_fo_Controles.o_bu_ProximoClick(Sender: TObject);
To_fo_Principal.Apresentar_No(p_NomeDoNo: Ptochar;
ApresentarNosTerminais: integer);
57
58
60
61
Tendo definidos esses atributos para os ns, elaboramos uma proposta de novos controles de
navegao, mostrados na Figura 3.14. Embora a maior parte da navegao seja feita atravs das
ncoras explicitamente definidas no contedo dos ns, esses controles viriam facilitar a
navegao e reduzir o esforo de criao de ncoras e definio de links.
62
Finalmente, o boto Relacionamentos acionaria uma janela contendo uma lista dos ns que
possuem relacionamento com o n atual. Esse controle de navegao possibilita que sejam
estabelecidos links entre modelos diferentes, sem a insero de novas ncoras para o
estabelecimento do link. Por exemplo, a partir de um n Operao, poder-se-ia navegar para o
Item de Implementao que lista os procedimentos que implementam a operao do n atual.
Um conceito importante para o SASHE o de roteiros de navegao, pois no domnio de
ensino, o roteiro permite que o professor limite o contexto de navegao do estudante com o
objetivo de guia-lo pela hiperbase quando este a estiver navegando. No domnio de engenharia
reversa, o conceito de roteiro deixa de ser necessrio, pois os prprios controles de navegao
propostos (Figura 3.14) j fornecem recursos que guiam o usurio pela hiperbase.
Embora seja definida uma seqncia de etapas a serem seguidas durante desenvolvimento
do processo de engenharia reversa (por exemplo, os passos propostos pelo Fusion-RE/I), aps ter
a documentao resultante inserida na hiperbase, no existe uma seqncia especificada para o
acesso aos documentos. Dessa forma, no h como delimitar o contexto de navegao da
documentao, sendo que o usurio deve ter a possibilidade de navegar em todos os contextos,
guiado pela necessidade de informao que estiver buscando.
Os atributos e controles de navegao propostos nesta seo foram baseados na experincia
adquirida durante a interao com SASHE para sua auto-documentao. Essa proposta foi
elaborada a partir de problemas encontrados na utilizao do SASHE para a manipulao de
documentos que no fossem didticos. Dessa maneira, a proposta apresentada se restringiu aos
aspectos funcionais do sistema, deixando os aspectos de implementao do sistema como
trabalho futuro.
O grande volume de documentao envolvida num processo de engenharia reversa foi um
dos motivadores para a utilizao de um sistema hipermdia neste trabalho. A realizao do
estudo de caso com o sistema SASHE comprovou a necessidade de um meio de acesso s
informaes recuperadas que fosse mais gil e eficiente. Num sistema hipermdia, alm dos links
estabelecidos
facilitarem a
manipulao
dos
documentos,
tambm
explicitam
seus
63
64
Captulo 4
65
SASHE foram manipuladas cerca de dez mil linhas de cdigo C++, que implementam o
gerenciador da hiperbase e as estruturas para o suporte do MCA, e cerca de quatro mil linhas de
cdigo Delphi, implementando a interface do sistema. A interface entre o gerenciador da
hiperbase e a interface usurio/computador se d atravs de uma DLL, a qual exporta as funes
de manipulao da hiperbase para a interface.
No total, foram analisados oitenta e quatro (84) arquivos de cdigo C++ e vinte e um (21)
arquivos de cdigo Delphi.
Na prxima seo so apresentados exemplos tirados do conjunto de documentos
recuperados atravs da aplicao do mtodo Fusion-RE/I ao sistema hipermdia SASHE. A
documentao completa encontra-se em Feltrim e Fortes (1999). Na Seo 4.2 so mostradas
algumas mtricas do processo desenvolvido e na Seo 4.3 so ento citados os problemas
enfrentados durante a realizao da engenharia reversa.
66
descreve o comportamento completo de como o sistema se comunica com o ambiente, desde sua
inicializao at o seu trmino (Masiero, 1995), (Penteado, 1996).
O Modelo de Ciclo de Vida construdo para o SASHE contm cerca de cinqenta e cinco
(55) sentenas compondo as seqncias de operaes permitidas no sistema, incluindo ambos os
mdulos5 que compem o software: o mdulo do Professor e o mdulo do Estudante.
SELECIONAR_N )*
67
SELECIONAR_N )*
HIPERBASE = ( ((Criar | ABRIR) . SALVAR) | Sair )
ABRIR = ( (Nome_do_arquivo . (Pastas | Unidades_de_disco |
Listar_arquivos_do_tipo | Som._Leitura | b_REDE |
b_AJUDA)* . (b_Ok | b_Cancelar) .
(((#msg_no__possvel_encontrar_este_arquivo...). b_Ok .
ABRIR) | ((#msg_este_nome_de_arquivo_tem_muitas_letras) .
b_Ok . ABRIR) )*) | b_Cancelar )
O SASHE utiliza a terminologia mdulo para diferenciar os modos de interao do sistema: um para o Professor
e um para o Estudante.
68
interface como botes, ao passo que os outros so opes de menu. Quando um nome (uma
opo da interface) aparece em letras maisculas, porque existe uma sentena que descreve
com mais detalhes essa opo. Os nomes em letras minsculas so smbolos terminais, que
podem ser uma operao ou uma entrada.
A Figura 4.2 mostra um refinamento em dois nveis, pois alm da sentena refinando a
opo de menu Hiperbase, apresentado o refinamento da operao Abrir, pertencente ao
menu Hiperbase. A Figura 4.2 apresenta tambm a tela para a abertura de uma hiperbase.
Note-se que todas as entradas requeridas na interface esto descritas nas sentenas de ciclo de
vida. Na sentena que descreve especificamente a operao Abrir, existe uma chamada a
prpria operao, caracterizando uma recurso. Isso se deve ao fato da janela para a abertura de
hiperbase continuar ativa caso um erro de abertura do arquivo ocorra. Dessa forma, o usurio s
volta janela anterior quando a operao for bem sucedida ou quando for cancelada atravs do
boto Cancelar.
Abrir Hiperbase
Cliq ue do boto Abrir
Hip erbase
Clique d o boto Ok
Clique d o boto Cancelar
Janela da operao
Pasta escolhida
Clique d o boto Ok
Selecionar
diretrio de
trabalho
Selecionar
unidade de disco
E
Clique do
boto Ok
Erro
69
70
Abrir
Descrio:
L:
Modifica:
Envia:
Assume:
Resultado:
(VWXGDQWH
+LSHUEDVH
&RQWUROHV GH
1DYHJDomR
(ORV
1yV
+LSHUEDVH
1DYHJDGD
5RWHLUR
$XWRULD
72
importante ressaltar que esses modelos foram propostos baseados apenas na viso
funcional do software, conseguida atravs da interao exaustiva com o software. Embora no
conste no mtodo Fusion-RE/I, espervamos que aps a recuperao das informaes estruturais
do software esses modelos de objetos sofressem algumas alteraes, para que se tornassem
consistentes com a estrutura do software, porm esperava-se que essas alteraes fossem
pequenas. De fato, os modelos de objetos sofreram modificaes razoveis em relao ao
Modelo de Objetos recuperado a partir do cdigo do sistema.
A Figura 4.8 apresenta esse modelo recuperado do cdigo fonte, retratando o Modelo de
Objetos Real, isto , o verdadeiramente implementado no sistema. Nessa modelagem no foram
considerados aspectos de interface, direcionando o foco para o sistema Hip/Windows (Nunes et
al., 1996) e o mdulo de navegao do SASHE, isto , no foram includas no modelo classes
que implementam janelas, barras de rolagem, etc. No modelo apresentado na Figura 4.8 tambm
no esto representadas dez (10) classes, utilizadas para a manipulao de som, imagem e vdeo,
e que no esto no modelo por no influenciarem a estrutura geral do sistema. As classes que
aparecem limitadas por uma linha pontilhada, fazem parte da implementao do browser grfico.
Com o trmino da recuperao do Modelo de Ciclo de Vida, do Modelo de Operaes e dos
modelos de objetos, encerra-se a primeira etapa do mtodo Fusion-RE/I, que recupera vises
funcionais do software unicamente atravs da interao com a interface do sistema. Na prxima
etapa so recuperadas informaes estruturais atravs da anlise do cdigo-fonte do software. Os
documentos resultantes dessa nova etapa so apresentados nas prximas subsees.
73
manipula
Hiperbase
nom e
Browser
Abri r hi perbase()
Criar hi perbase()
Sal var hiperbase()
Browser Estrutural
Explorar n()
contm
Browser Grfi co
contm
Elo
nom e
li sta de ncoras
Aj uda Hipgrafo()
Vol tar n()
Zoom i n()
Zoom out()
Visual izar Browser Grfico()
Contexto()
Criar n()
Edi tar n()
Elimi nar n da hi perbase()
Mover()
Copiar()
ori gem
destino
atri butos
Criar el o()
El iminar el o()
Al terar el o()
um
um
N Term inal
N Contexto
funo di dti ca
dificul dade
pal avras-chave
li sta de ns
l ista de elos
Abri r nova j anel a com o contexto seleci onado()
Vi sualizar contexto selecionado()
Vol tar para o contexto anterior()
Reti rar n do contexto()
um
um
Rotei ro
N Texto
l ista de ns l iberdade
Apagar n()
Criar roteiro()
Seleci onar ns()
Inseri r no roteiro()
Limpar roteiro()
Mudar n li berdade()
um
um
um
um
arqui vo txt
N Imagem
N Vdeo
N udio
arqui vo bm p
arquivo avi
arqui vo wav
74
N Execuo
arqui vo txt
Estudante
nome
Estudante()
Cascata()
Lado a lado()
Ativ ar janela n()
Sair()
manipula
Abrir hiperbase()
Criar hiperbase()
Salv ar hiperbase()
contm
contm
contm
lista de ns v isitados
regras de busca
um
Atributo Especf ico
Ajuda()
Bibliograf ia()
Exerccios()
Mais Inf ormaes()
uma
Histrico()
Av ana histrico()
Retrocede histrico()
Onde estou?()
Av ana tpico()
Retrocede tpico()
Estratgia
Est dif cil()
Est f cil()
75
ancora_v ideo
elo
ancora_imagem
ancora
entidade
ancora_tabela
ancoratrilha
no
ancora_executav el
ancora_contexto
composio
ancora_texto
contexto
trilha
no_terminal
contextov erses
basepriv ada
no_imagem
no_texto
no_audio
no_v ideo
contextousuario
no_exec
no_tab
lista
elemento
lista_elos
CScrollView
CGraf oView
lista_ancoras
CWinApp
CGraf oApp
tutor
hipwindow
lista_nos
CDialog
CDocument
CAboutDlg
CGrafoObj
CoordNo
Graf o
Pilha
CoordArco
A construo desse quadro de forma manual requer um esforo muito grande. Dessa
maneira, foi utilizada uma ferramenta de apoio engenharia reversa para cdigo C++, a
Understand for C/C++ (STI, 1999). Atravs de um sistema de busca eficiente proporcionado
pela ferramenta, foi possvel rastrear de forma mais gil as chamadas a procedimentos. Essa
ferramenta tambm auxilia na recuperao do Modelo de Objetos implementado, traando um
grafo de herana para cada classe do sistema.
Nesta etapa, foi necessria a recuperao do Modelo de Objetos implementado, atravs da
anlise do cdigo fonte (Figura 4.8), para a composio do Quadro de Chamadas. Essa
necessidade se deu por uma srie de fatores decorrentes do paradigma de implementao do
sistema, como herana, ponteiros dinmicos, entre outros. Esses fatores so detalhados na Seo
4.3, onde so descritas as principais dificuldades encontradas para a realizao da engenharia
reversa do SASHE.
Foram construdos setenta e nove (79) quadros para os arquivos C++ e vinte e um (21)
quadros para os arquivos Delphi, num total de 100 Quadros de Chamadas. Existem cinco (5)
arquivos C++ que no possuem Quadros de Chamadas, pois so arquivos de definio de
constantes e importao de bibliotecas, no contendo nenhum procedimento. Tambm na
instalao da verso 1.0 do SASHE so encontrados treze (13) arquivos Delphi para os quais no
foram elaborados Quadros de Chamadas. Esses treze arquivos no so de fato utilizados na
interface do SASHE, porm no foram retirados do projeto do sistema. Na nova verso 2.0 esse
problema j foi corrigido.
O Quadro 4.2 mostra um dos Quadros de Chamadas elaborados para os arquivos do sistema
SASHE, referente ao arquivo elo.cpp. Existe um quadro como este para cada arquivo de cdigo
fonte do sistema (Feltrim; Fortes, 1999). Os nmeros que aparecem no quadro entre parnteses
correspondem ao nmero da linha em que aquele cdigo se apresenta. Os nomes de arquivos que
aparecem no incio da linha de cada procedimento da seo Chamado por correspondem aos
arquivos em que cada chamada feita.
77
Procedimento:
(23) elo::elo(int id, No *orig,
char *ani_orig, int ind_or,No
*dest, char *ani_dest, int
ind_dest, int simul, int mostr) :
entidade(id)
Diretrio/Arquivo: elo.cpp
Procedimento:
(41) int elo::grava_elo(FILE *fp)
Diretrio/Arquivo: elo.cpp
Procedimento:
(56) int elo::recupera_elo(FILE
*fp)
Diretrio/Arquivo: elo.cpp
Descrio:
Construtor utilizado apenas quando o elo
carregado do arquivo
Chama:
(15) entidade(id)
Chamado por:
List_elo.cpp\ (61) int lista_elos::recupera(No
*pno,FILE *fp)
Descrio:
Construtor utilizado pela interface
Chama:
(23) entidade(id)
Chamado por:
Trilha.cpp\ (62) int trilha::insere_no(No *pno,
contexto *pno_liberdade)
Trilha.cpp\ (97) int trilha::insere_no(No *pno)
Trilha.cpp\ (131) int trilha::insere_no(No *pno,
contexto *pno_liberdade, int posicao)
Trilha.cpp\ (164) int trilha::insere_no(No *pno,
int posicao)
Hipger.cpp\ (1517) extern "C" int FAR PASCAL
_export cria_elo(char *nome_contexto, int id_elo,
char *origem, int anc_origem, char *destino, int
anc_destino, int simultaneo, int mostra_conteudo)
Descrio:
Grava o identificador do elo, nome do n origem,
identificador da ncora origem, nome do n
destino e o identificador da ncora destino
Chama:
(43)obtem_identificador()
(44)obtem_origem()
(44)obtem_aninhamento_origem()
(45)obtem_destino()
(45)obtem_aninhamento_destino()
Chamado por:
List_elo.cpp\ (51) int lista_elos::grava(FILE
*fp)
Descrio:
O identicador do elo foi recuperada pela lista de
elos. Recupera do arquivo o nome do n origem,
identificador da ncora origem, nome do n
destino e o identificador da ncora destino.
Chama:
(60) fscanf(fp, "\t\tOrigem(%s,\"", pnome)
(61) hb.Retorna(pnome)
(63) fscanf(fp, "%s\",", aninhamento_origem)
(64) fscanf(fp, "%d)\n", &ancora_no_origem)
(65) fscanf(fp, "\t\tDestino(%s,\"", pnome)
(66) hb.Retorna(pnome)
(68) fscanf(fp, "%s\",", aninhamento_destino)
(69) fscanf(fp, "%d)\n", &ancora_no_destino)
(70) fscanf(fp, "\t\tAtributos(%d,", &simultaneo)
(71) fscanf(fp, "%d)\n",
&mostra_conteudo_contexto)
Chamado por:
List_elo.cpp\ (61) int lista_elos::recupera(No
*pno,FILE *fp)
78
79
Diretrio\Arquivo
hyperprop\anc_aud.cpp
hyperprop\anc_aud.cpp
hyperprop\ancora.cpp
hyperprop\ancora.cpp
hyperprop\anc_cont.cpp
hyperprop\anc_cont.cpp
hyperprop\contexto.cpp
hyperprop\contexto.cpp
hyperprop\anc_exec.cpp
hyperprop\anc_exec.cpp
hyperprop\anc_ima.cpp
hyperprop\anc_ima.cpp
hyperprop\No.cpp
hyperprop\No.cpp
hyperprop\No.cpp
hyperprop\No.cpp
hyperprop\anc_tab.cpp
hyperprop\anc_tab.cpp
hyperprop\anc_tex.cpp
hyperprop\anc_tex.cpp
hyperprop\anc_tex.cpp
hyperprop\anc_tri.cpp
hyperprop\anc_tri.cpp
hyperprop\anc_vid.cpp
hyperprop\anc_vid.cpp
Operaes
Procedimentos
Criar
To_fo_Principal.o_bu_CriarHiperbaseClick(Sender: TObject);
To_fo_Principal.Ler_DLL;
extern "C" int FAR PASCAL _export cria_base_privada(char *nome);
Abrir
To_fo_Principal.o_bu_AbrirHiperbaseClick(Sender: TObject);
To_fo_Principal.Ler_DLL;
extern "C" int FAR PASCAL _export recuperar(char *nome);
Salvar
To_fo_Principal.o_bu_GravarHiperbaseClick(Sender: TObject);
extern "C" int FAR PASCAL _export salvar(char *nome);
Sair
To_fo_Principal.o_mn_SairClick(Sender: TObject);
To_fo_Principal.FormCloseQuery(Sender: TObject; var CanClose:
Boolean);
Janelas
Lado_a_lado
...
Totais
55 sentenas
62 operaes
2 modelos (24 classes no total)
Esforo de tempo para recuperao funcional: 2 meses
Quadros
Totais
84 arquivos/ 722
21arquivos/ 165
procedimentos C++
procedimentos Delphi
Quadro de ndice de Procedimentos
887 entradas
Quadro de Operaes-Procedimentos de
2 quadros (Autoria e Navegao) com procedimentos
Implementao
de implementao da interface e chamadas Dll
Esforo de tempo para recuperao estrutural: 2 meses e meio
81
Grande parte do trabalho concentrou-se no cdigo C++, por ser a parte em que est
implementada a hiperbase, sob o modelo MCA (Casanova et. al., 1991). A construo do Quadro
de Chamadas demandou cerca de um ms e meio de trabalho apenas para os arquivos C++. Parte
dessa tarefa foi auxiliada pelo uso da ferramenta Understand for C/C++ (STI, 1999), da qual foi
utilizada uma cpia demo, disponvel via Internet. Cerca de dez dias foi o tempo despendido na
anlise e construo dos Quadros de Chamadas dos arquivos Delphi. Foram necessrios
aproximadamente cinco dias para a construo do Quadro ndice de Procedimentos, incluindo os
procedimentos em C++ e Delphi. Finalmente, a elaborao do Quadro de OperaesProcedimentos de Implementao demandou trs semanas de trabalho para a sua concluso.
Assim, podemos resumir o esforo de recuperao, conforme mostrado no Quadro 4.5, em
aproximadamente dois meses para a viso funcional (modelos) e 2 meses e meio para a viso
estrutural (quadros).
83
informaes recuperadas no prprio SASHE, pois a cada erro corria-se o risco de perder essas
informaes. Assim optamos por elaborar os modelos e quadros em outras ferramentas de apoio
e depois montar o hiperdocumento no sistema SASHE. De fato, essa foi uma das maiores
dificuldades encontradas.
Tambm na anlise do cdigo encontramos dificuldades devido ao fato do software ter sido
desenvolvido em duas linguagens diferentes, e por no existir comentrios descritivos em grande
parte desse cdigo. Assim, sem informaes que nos orientasse, o cdigo tornou-se um
emaranhado de comandos a serem desvendados. Esse fato fez com que a tarefa de descrio
dos procedimentos fosse demorada e bastante custosa (concentrao e lgica de raciocnio).
As prprias caractersticas do cdigo OO foi outro fator que acarretou dificuldade
engenharia reversa. A aplicao de alguns dos conceitos da orientao a objetos traz certas
dificuldades leitura do cdigo, que no so encontradas na manipulao de um cdigo
procedimental.
Pelo cdigo ser orientado a objetos, as chamadas aos procedimentos nem sempre so
explcitas, sendo feitas atravs de troca de mensagens. Isso proporciona uma dinmica ao cdigo
em execuo que dificulta o rastreamento das chamadas. Dessa forma, embora com o auxlio de
uma ferramenta de suporte a engenharia reversa, a Understand for C/C++ (STI, 1999), o
rastreamento dos ponteiros dinmicos foi feito manualmente, para que cada chamada de
procedimento fosse corretamente localizada. De fato, a falta de ferramentas que manipulassem o
cdigo-fonte de modo a auxiliar efetivamente a recuperao de informaes durante todo o
processo de engenharia reversa tambm foi um problema enfrentado neste trabalho.
Outro fator que influencia na identificao das chamadas o fato de objetos diferentes
conterem mtodos com cdigo diferente e com o mesmo prottipo (mesmo nome, mesmos
parmetros). Devido a essa caracterstica, preciso identificar o tipo do ponteiro que est
referenciando o mtodo, para se identificar a qual objeto pertence o mtodo ativado. Alm disso,
existem os mtodos virtuais, que para se identificar a sua chamada, preciso saber o contexto
(escopo) da chamada, em tempo de execuo.
A utilizao de mtodos por herana tambm acarreta um trabalho extra ao rastreamento da
chamada. Principalmente por se ter o conceito de herana, que precisamos do Modelo de
Objetos Real para a construo do Quadro de Chamadas. Somente tendo o conhecimento desse
modelo, torna-se possvel rastrear um mtodo que est sendo utilizado por herana. De fato, se
84
85
86
Captulo 5
87
Classe
Fusion-RE/I
forma uma tarefa concreta, exigido um grande esforo de ateno e concentrao por parte
do engenheiro de software (ou mantenedor), ao investigar quase que exaustivamente todos os
estados da interface do sistema.
Os Modelos de Ciclo de Vida e de Operaes, mesmo exigindo um grande esforo para sua
obteno, fornecem um conhecimento completo da funcionalidade do sistema, revelando as
seqncias de comandos permitidas e a descrio das operaes do sistema de forma clara e
objetiva.
Esses foram alguns pontos positivos que puderam ser evidenciados durante o
desenvolvimento do processo. Entretanto, neste trabalho, o Fusion-RE/I foi aplicado a um
sistema implementado sob o paradigma de orientao a objetos, o sistema SASHE. O
desenvolvimento do processo de engenharia reversa em um sistema com essa caracterstica nos
permitiu algumas concluses sobre o mtodo que no haviam sido abordadas anteriormente.
Os estudos de caso anteriores realizados com o Fusion-RE/I (Costa, 1997), (Quinaia, 1998)
foram aplicados a sistemas originalmente no orientados a objetos, e com um estilo de interface
diferente do utilizado no SASHE. As informaes sobre os estudos de caso realizados com o
mtodo so apresentadas no Quadro 5.1. O fato do sistema SASHE ser orientado a objetos, nos
permitiu analisar uma srie de outros fatores, que so discutidos a seguir.
Quadro 5.1 - Informaes sobre os estudos de caso realizados com o Fusion-RE/I
Documentao Funcional Gerada
Sistema
Domnio
Paradigma
de
programao
Linguagem
No de
linhas de
cdigo
Plataforma
No de
sentenas
do ciclo de
vida
No de
operaes do
modelo de
operaes
No de
modelos de
objetos
SASHE
Autoria e suporte
hipermdia ao
ensino
Orientao a
objetos
C++ e
Delphi
14.000
PC/
Windows
55
62
SAPES
(Quinaia,
1998)
Apoio pesquisa
cientfica
Orientado a
funo
Clipper
4.000
PC/ Dos
46
17
Proteum
V1. 1 C
(Costa,
1997)
Teste de software
Orientado a
funo
C e X-View
27.000
Estaes
SUN/ Unix
No
disponvel
No disponvel
A abstrao conseguida sem influncia do cdigo fonte deixa de ser vantajosa quando o
objetivo da engenharia reversa no mais a recuperao de projeto para a mudana de
paradigma, e passa a existir a necessidade de se recuperar o projeto exatamente como est. Em
90
sistemas cujo cdigo no esteja sob o paradigma OO, faz sentido construir uma abstrao do
mesmo, na forma de Modelos de Objetos, atravs da anlise de suas funcionalidades e do seu
domnio de atuao, sem que o cdigo implementado interfira na modelagem. Entretanto,
quando o software est implementado sob o paradigma OO, a estrutura do Modelo de Objetos j
existe e est instanciada no cdigo do software. Assim, a construo de um Modelo de Objetos
baseado somente nas vises funcionais do sistema deixa de ser vlida. Seguindo-se os passos
prescritos pelo Fusion-RE/I, aps ter recuperado os modelos funcionais, preciso construir um
novo Modelo de Objetos, que realmente reflita a implementao, pois para que a recuperao do
Quadro de Chamadas seja feita, necessrio o Modelo de Objetos realmente implementado.
Sendo assim, um novo esforo de recuperao do Modelo de Objetos requerido.
A recuperao do Modelo de Objetos, sem dvida, uma tarefa fundamental na
documentao do software, no entanto, para sistemas orientados a objetos, a realizao dessa
tarefa nos parece mais adequada em outra etapa do processo de engenharia reversa. De fato, na
experincia com o SASHE, ao se iniciar a segunda etapa, o Modelo de Objetos teve que ser
ajustado s classes implementadas. Um ponto a ser ressaltado que o ganho proporcionado pela
interao com a interface, para a recuperao dos Modelos de Ciclo de Vida e de Operaes,
permanece, independente da ordem em que essas tarefas de recuperao sejam realizadas.
Quadro 5.2 - Vantagens e desvantagens do Fusion-RE/I aplicado a sistemas OO
Incio do Processo de Engenharia Reversa pela Recuperao da Viso Funcional
Vantagens
Desvantagens
Ganho de familiaridade com o domnio da aplicao logo A diviso das funcionalidades em temas pode influenciar a
no incio do processo.
A recuperao dos modelos de anlise atravs da interface Perde-se tempo abstraindo um Modelo de Objetos que
mais facilitada do que pelo cdigo fonte, pois o nvel de
abstrao das interaes mais alto.
91
sistema atravs da interface, sem interao com o cdigo fonte. Algumas vantagens inerentes a
esta caracterstica do mtodo permanecem na sua aplicao a sistemas OO. Porm, a mesma
caracterstica acarreta alguns problemas a serem discutidos (Quadro 5.2).
Uma outra questo a diviso das funcionalidades do sistema em Temas. Os Temas
foram uma abstrao do sistema particionada pelo agrupamento da funcionalidade em
assuntos semelhantes. No caso de um sistema OO, muito provvel que esse particionamento
no exista no modelo implementado. Dessa forma, o engenheiro de software induzido a
recuperar uma abstrao que no estar de acordo com a implementao.
Na verdade, bastante discutvel a validade da definio de Temas quando a engenharia
reversa aplicada a sistemas OO. A partir do momento que o Modelo de Objetos deixa de ser
uma abstrao criada a partir das vises funcionais do software e passa a registrar a sua estrutura
real, a definio de Temas perde o significado. Nesse caso, pode-se discutir a utilidade dos temas
tambm para sistemas OO, mas no da maneira como originalmente proposto pelo FusionRE/I. Uma possvel aplicao da definio de Temas seria a sua utilizao para a organizao do
Modelo de Objetos extrado do cdigo. Sistemas maiores podem exigir que a estrutura
recuperada do cdigo seja dividida em vrios Modelos de Objetos. No entanto, nesse caso, os
Temas deveriam se adequar implementao, j que o modelo implementado no pode ser
mudado para se adequar aos Temas propostos de acordo com as funcionalidades observadas.
Dessa forma, os temas teriam a mesma funo de agrupamento, como proposto no Fusion-RE/I,
porm em um outro nvel de abstrao. Nessa nova proposta, os temas seriam ento definidos
visando o agrupamento de classes e relacionamentos que implementam um determinado aspecto
(assunto) do sistema.
As tarefas para recuperao de vises estruturais, segunda etapa do mtodo Fusion-RE/I,
foram adequadas, porm bastante trabalhosas, como pde ser verificado atravs dos nmeros
apresentados no Captulo 4. Foi constatado que parte dessas tarefas podem ser automatizadas
com sucesso.
De acordo com o Fusion-RE/I, a primeira tarefa de recuperao estrutural a elaborao do
Quadro de Chamadas. Parte da elaborao desse quadro foi feita automaticamente, com o auxilio
da ferramenta Understand for C/C++ (STI, 1999), conforme descrito no Captulo 4. No entanto,
a descrio dos procedimentos teve que ser feita manualmente, o que demandou muito trabalho
para sua concluso. A informao descrita nesse quadro bastante significativa, pois atravs dele
92
93
Fusion-RE/I
ClassA
ClassB
ClassA
b: ClassB
94
sistema. A recuperao da estrutura do software era necessria, j que o SASHE no seria reimplementado, e o objetivo era documentar o software para auxiliar em futuras manutenes.
Nesse ponto surgiram dificuldades, especialmente relacionadas ao fato do SASHE ser um
software OO e do mtodo Fusion-RE/I no estabelecer etapas para a recuperao de projeto OO
(Figura 5.2).
Dessa forma, podemos concluir que algumas premissas do mtodo Fusion-RE/I devem ser
reavaliadas, de acordo com o objetivo do processo de engenharia reversa que se pretende
realizar, antes de se iniciar a engenharia reversa. Alguns fatores determinantes para o sucesso da
aplicao do mtodo e que devem ser avaliados antes do incio do processo so:
quantas etapas do mtodo sero necessrias para se alcanar o objetivo estabelecido para
o processo;
reorganizao das etapas propostas pelo mtodo, caso necessrio, de acordo com a
necessidade de detalhamento da documentao estrutural; (necessidade do Modelo de
Objetos recuperado da estrutura, necessidade da definio de temas, necessidade da
classificao em temas no Quadro Operaes-Procedimentos de Implementao)
Todos esses fatores devem ser levados em conta, antes do incio da aplicao do mtodo de
engenharia reversa propriamente dito, para que se possa garantir um processo eficiente e
resultados consistentes com os objetivos traados.
95
A Figura 5.3a mostra a proposta feita inicialmente para o sistema SASHE. Nessa proposta, o
Autor, que no precisa ser necessariamente o professor, seria o construtor da hiperbase de fato,
ou seja, agruparia todos os documentos desejados dentro do SASHE. Essa hiperbase constituiria
a camada Hipermdia X. Sobre essa camada, o Professor propriamente dito poderia trabalhar,
criando sobre a camada Hipermdia X um roteiro especfico para seu objetivo. Para tal, o
Professor disporia de todos as ferramentas listadas na camada Professor da figura. A hiperbase
limitada pelo roteiro construdo pelo professor seria a camada Hipermdia X, ou seja, uma
instncia da camada Hipermdia X. O Estudante, por sua vez, atuaria sobre essa camada
Hipermdia X, utilizando o navegador.
96
Interface de Autoria
Navegador
Sistema
Hip
Gerenciador da Hiperbase
DLL
Biblioteca de Classes
Hiperbase (MCA)
Dessa forma, a partir do estudo de caso realizado com o SASHE, no foi possvel comparar
a documentao recuperada com a documentao original do sistema, uma vez que esta ltima
no existe. No entanto, as informaes recuperadas atravs da aplicao do mtodo Fusion-RE/I
mostraram-se consistentes com os relatrios existentes, embora a arquitetura proposta
inicialmente para o sistema SASHE (Figura 5.3a), no tenha tido todos os seus componentes
implementados. A arquitetura recuperada, que retrata a real implementao do sistema SASHE
1.0 mostrada na Figura 5.4a. Os documentos recuperados confirmaram a arquitetura proposta
para o sistema Hip (Figura 5.3b), documentada em Nunes et al. (1996) e totalmente
implementada na verso atual. A Figura 5.4b apresenta a arquitetura recuperada do Hip,
elaborada em camadas para melhor visualizao.
97
definio de Temas; e
98
Funcionais), mas pode continuar juntamente com a recuperao do Modelo de Objetos, pois
como dito anteriormente, os temas devem se adequar ao Modelo de Objetos implementado.
Outro aspecto observado na realizao do estudo de caso com o SASHE a validade da
recuperao do Modelo de Objetos durante a etapa de recuperao de vises funcionais.
Retomando, a recuperao das vises funcionais feita unicamente atravs das informaes j
existentes sobre o sistema e da manipulao da interface do software. Dessa forma, o Modelo de
Objetos recuperado, segundo o mtodo Fusion-RE/I, uma abstrao construda a partir das
informaes coletadas nos passos anteriores (ver Quadro 2.6), sem que haja nenhum contato com
o cdigo fonte.
Conforme discutido (Seo 5.1), essa modelagem isenta da implementao pode ser
vantajosa ou no, dependendo do objetivo definido para o processo de engenharia reversa. Nesta
proposta (Quadro 5.3), assumimos que o sistema alvo orientado a objetos e que objetivo da
engenharia reversa recuperar uma modelagem que seja fiel implementao, semelhante ao
estudo de caso desenvolvido. Sendo assim, a recuperao do Modelo de Objetos passa a ser a
primeira tarefa (a.) da segunda etapa do mtodo (Recuperao de Vises Estruturais). Dessa
forma, o Modelo de Objetos deixa de ser abstrado da funcionalidade para ser recuperado do
cdigo fonte do sistema. Assim garantimos que o Modelo de Objetos realmente reflete o sistema
implementado.
Quadro 5.3 - Modificaes propostas para o Fusion-RE/I
Etapa 1. Recuperao de Vises Funcionais
99
De fato, a tarefa de se recuperar o Modelo de Objetos a partir do cdigo fonte teve que ser
realizada no estudo de caso feito com o SASHE, pois para a recuperao do restante das
informaes estruturais prescritas pelo Fusion-RE/I necessrio ter o conhecimento da
arquitetura do cdigo OO.
No Quadro 5.3 apresentado um resumo das etapas do mtodo Fusion-RE/I com as
modificaes propostas.
As setas indicam os pontos onde houve modificaes em relao proposta original do
Fusion-RE/I (ver Quadro 2.6). Independente da mudana de passos proposta, fato que a
interao com a interface, ao invs da manipulao do cdigo fonte, facilita consideravelmente a
recuperao dos Modelos de Ciclo de Vida e de Operaes. Alm disso, conforme discutido na
Seo 5.1, consegue-se um ganho de familiaridade com o domnio do sistema, uma vez que a
interface um dos elementos que evidencia esse domnio.
100
Captulo 6
Concluso
Este trabalho teve como um dos seus objetivos principais a elaborao de uma proposta para a
adequao do sistema SASHE ao domnio da documentao de engenharia reversa de software,
de forma que fosse proporcionada maior agilidade para o acesso dessa documentao e que
tambm fossem estabelecidos links representativos, que guiassem o usurio durante a
navegao da documentao de engenharia reversa, explicitando os relacionamentos entre os
documentos.
Foi realizado um experimento, de forma que a anlise dos resultados embasasse essa
proposta. Tal experimento consistiu da utilizao e aplicao de engenharia reversa ao sistema
SASHE, um sistema hipermdia prottipo existente desenvolvido no ICMC-USP. Sendo que o
ambiente SASHE baseia-se no modelo MCA (Casanova et al., 1991), um modelo interno de
estruturao de ns que auxilia a organizao das informaes, esse modelo tambm foi
estudado para que obtivssemos os subsdios necessrios ao processo de entendimento do
SASHE.
Para que a documentao atendesse ao paradigma OO, o processo de engenharia reversa
orientou-se pelo mtodo Fusion-RE/I (Costa, 1997). Foi realizado um estudo prvio desse
mtodo, viabilizando sua aplicao ao sistema SASHE. Tambm foram estudados os conceitos
de uma linguagem padro de modelagem OO, a UML (Rational, 1997a), cuja potencialidade de
ser independente da utilizao de qualquer mtodo sob o paradigma OO, pde ser comprovada.
101
Captulo 6 - Concluso
Para que a UML pudesse ser utilizada neste trabalho, foram propostos possveis mapeamentos
entre os modelos utilizados pelo mtodo Fusion-RE/I e os modelos propostos pela UML.
Para o incio da construo da hiperbase composta pelos documentos recuperados do
sistema SASHE, foi realizada uma modelagem conceitual do domnio de engenharia reversa,
baseada nas etapas propostas pelo mtodo Fusion-RE/I. Tal modelagem foi feita utilizando-se o
mtodo de projeto de aplicaes hipermdia OOHDM.
Tendo como base a modelagem em OOHDM, foi iniciada a construo, propriamente dita,
da hiperbase no SASHE. Uma vez que o SASHE baseado no modelo MCA, a modelagem feita
previamente teve que ser ajustada para que os ns fossem organizados adequadamente.
A maior parte da documentao recuperada do SASHE foi efetivamente inserida na
hiperbase, sendo que essa experincia proporcionou o conhecimento necessrio para a sugesto
de pontos de ajuste para o sistema SASHE, visando proporcionar um melhor suporte autoria e
navegao de hiperbases contendo documentos de engenharia reversa.
102
Captulo 6 - Concluso
em Feltrim e Fortes (1999) poder servir como guia para novos usurios do sistema e tambm
auxiliar engenheiros de software em futuras manutenes.
Tambm podemos citar outras contribuies que no eram o foco principal deste trabalho,
mas que foram concludas durante o seu desenvolvimento.
A aplicao do mtodo de engenharia reversa Fusion-RE/I, da sua fase inicial at a sua
concluso, em um sistema orientado a objetos, proporcionou um contexto propcio anlise de
alguns pontos crticos da aplicao do mtodo a sistemas OO. Tambm permitiu a constatao de
aspectos do Fusion-RE/I que permanecem sendo vantajosos, mesmo quando aplicado a sistemas
OO. Foi realizada uma avaliao crtica de todas as etapas propostas pelo mtodo e foram
propostas algumas modificaes na ordem de suas etapas, a fim suprir os pontos crticos
apontados e de favorecer sua aplicao a sistemas OO (Feltrim et al., 1999).
A proposta de mapeamento feita para os modelos do Fusion-RE/I, de forma que fossem
representados em UML pode vir a ser o ponto inicial para um completo mapeamento do
Fusion-RE/I para a notao UML.
A modelagem do domnio de engenharia reversa realizada em OOHDM pode ser vista como
uma apresentao dos requisitos funcionais identificados no processo de engenharia reversa que
possam ser suportados por um sistema hipermdia. Essa modelagem foi uma tentativa de
formalizar o relacionamento das atividades de engenharia reversa, seus subprodutos e interaes
(Feltrim; Fortes 1998b). Como base para o estabelecimento das atividades envolvidas e dos
modelos gerados ao final do processo, nos apoiamos no mtodo Fusion-RE/I, que viria a ser
efetivamente utilizado posteriormente na engenharia reversa do sistema SASHE.
103
Captulo 6 - Concluso
104
Referncias Bibliogrficas
ADELSON, B.; SOLOWAY, E. The Role of Domain Experience in Software Design. IEEE
Transactions on Software Engineering, v.SE-11, n.11., p.1351-1360, 1985.
BIGELOW, J. Hypertext and CASE. IEEE Software, p.23-27, March 1988.
BIGELOW, J.; RILEY, V. Manipulating Source Code in DynamicDesign. ACM Hypertext87
Conf., Proceedings, p.397-408, 1987.
BIGGERSTAFF, T. Design Recovery for Maintenance and Reuse. IEEE Computer, v.22, n.7,
p.36-49, 1989.
BULLOCK, J.C.; GOBLE, C.A. TouristT - Conceptual Hypermedia Tourist Information. ACM
Hypertext97 Conf., Proceedings, p.228-229, 1997.
CASANOVA, M.A.; TUCHERMAN, L; LIMA, M. J.; RANGEL, J. L.; RODRIGUEZ, N. R.;
SOARES, L. F. G. The Nested Context Model for Hyperdocuments. Third ACM
Conference on Hypertext, Proceedings, San Antonio, Texas, p.193-201, 1991.
CASTRO, M.A.S. Infra-Estrutura de Suporte Editorao de Material Didtico Utilizando
Multimdia. Revista Brasileira de Informtica na Educao, n.1, p.61-70, 1997.
CERQUEIRA, A.A.C. HOOT: Integrando Hipermdia e Bancos de Dados Orientados a
Objetos. Dissertao (Mestrado), UFRJ, Rio de Janeiro, Agosto 1997.
CHIKOFSKY, E.J.; CROSS II, J.H. Reverse Engeneering and Design Recovery: A Taxonomy.
IEEE Software, v.7, n.1, p.13-17, 1990.
COLEMAN, D. et al. Desenvolvimento Orientado a Objetos: O Mtodo Fusion. Ed. Campos,
Rio de Janeiro, 1996.
COLEMAN, D.; ARTIM, J.; OHNJEC, V.; RIVAS, E.; RUMBAUGH, J.; WIRFSBROCK, R.
UML: The Language of Blueprints for Software?. ACM Sigplan Notices, n.32, p.201-205,
New York, 1997.
105
Referncias Bibliogrficas
106
Referncias Bibliogrficas
107
Referncias Bibliogrficas
108