Sei sulla pagina 1di 37

Reengenharia de Software:

Benefcios, Dificuldades, Tcnicas


e Abordagens
Aline Vasconcelos
D.Sc. em Sistemas e Computao/COPPE UFRJ

Sumrio

Conceitos, Motivaes, Processo de


Reengenharia

Benefcios e Dificuldades

Engenharia Reversa

Abordagens/Ferramentas

Reengenharia: conceitos e
motivaes

A Reengenharia de Software se constitui no exame e


alterao de um sistema existente para reconstitu-lo
em uma nova forma,
forma com a conseqente
implementao desta nova forma (CHIKOFSKY e
CROSS, 1990; IEEE, 2004).

Motivaes: renovao/migrao de sistemas legados


para plataformas atuais; reutilizao de software;
melhoria da estrutura do software para futuras
manutenes.
manutenes

A empresa no deseja perder todo o conhecimento


sobre o negcio,
negcio disponibilidade de servio e
esforo investido.
3

O Processo de Reengenharia de
Software

Etapas do Processo de Reengenharia

Engenharia Reversa: visa obteno de uma


documentao atualizada dos sistemas de software
existentes em um nvel de abstrao mais alto que o
cdigo.

Reestruturao: melhoria da estrutura do sistema


sem alterar seu comportamento. Mesmo nvel de
abstrao.

Engenharia Progressiva: processo tradicional de


se mover a partir de abstraes e lgica de alto
nvel, i.e. modelos independentes de
implementao, para a implementao fsica de um
sistema.
5

Reengenharia: benefcios
Maior satisfao dos clientes,
manuteno de servios
Melhor base para
futuras manutenes
Maior sobrevida
do software

Migrao para
plataforma atual

Reutilizao de
conhecimento, modelos
REENGENHARIA
DE SOFTWARE

Reutilizao de cdig

Reaproveitamento de
esforo investido
Melhoria da estrutura
do software
6

Reengenharia de Software:
dificuldades

Sistemas existentes - em alguns casos conhecidos


como sistemas legados - costumam apresentar
documentao defasada em relao ao cdigo.

Documentao no atualizada durante as


manutenes.

Ferramental de suporte para apoiar o processo de


engenharia reversa ou reestruturao para
sistemas legados nem sempre est disponvel.

Tamanho e complexidade dos sistemas legados.


7

Engenharia Reversa:
compreenso de
programas
Atividade-chave em um
Processo de Reengenharia

Engenharia Reversa: conceitos,


tcnicas

Processo de anlise de um sistema,


sistema a fim de identificar os
componentes desse sistema e seus relacionamentos,
relacionamentos
criando representaes em uma outra forma ou em um
nvel mais alto de abstrao (CHIKOFSKY e CROSS,
1990).
Principais Tcnicas:
Anlise Esttica: anlise do cdigo fonte para a
extrao de informaes, como acesso a variveis e
chamadas de procedimento, sendo normalmente
realizada com o uso de um analisador sinttico (parser).
Anlise Dinmica: execuo de um programa e
monitoramento dos valores das variveis, funes
chamadas etc.
9

Anlise Esttica x Anlise Dinmica


Anlise Esttica
Anlise Dinmica
Vantagens/Desvantagens Vantagens/Desvantagens
Detectar possveis
Descobrir funes de fato
chamadas de funes. No
invocadas. Suporte a late
suporta polimorfismo da OO. binding e polimorfismo.
Identifica possveis
caminhos percorridos a
partir de uma chamada de
procedimento.

Detectar um caminho de
fato percorrido para a
execuo de uma
funcionalidade.

Mais exaustiva que a anlise No exaustiva,


dinmica. Pode no detectar dependendo de dados de
caminhos reais de execuo. entrada e opes escolhidas
pelo usurio.
Menor volume de dados

Grande volume de dados.

10

Engenharia Reversa: conceitos,


tcnicas

Outras Tcnicas:
Clustering: descoberta de " melhores "
projetos do sistema ou extrao de conceitos
significativos a partir do cdigo (ANQUETIL et
al., 1999).

Remodularizao: a decomposio de um
conjunto de componentes em sub-partes (i.e.
os mdulos) (ANQUETIL, 2000).

Ambas as tcnicas acabam inferindo alguma


forma de reestruturao.
11

Engenharia Reversa:
Abordagem ArchMine (Vasconcelos,
2007)

Abordagem de engenharia reversa para a


recuperao de um modelo arquitetural de
software, utilizando as seguintes tcnicas:

Anlise esttica ferramenta Ares

Anlise dinmica ferramentas Tracer, Phoenix

Minerao de dados, clustering ferramenta


TraceMining

Resultados integrados ao ambiente de reutilizao


Odyssey (Odyssey, 2010).
12

ArchMine:
Anlise Esttica

Modelo esttico da UML:


classes, pacotes e seus
relacionamentos.
Extrao

Cdigo Fonte

Ferramenta
ARES
integrada ao
Odyssey
13

ArchMine:
Anlise Dinmica

Tracer:
AspectJ

Rastros de Execuo
em XML
<?xml version="1.0" encoding="UTF-8" ?>
<trace>
<Label name="Caso de Uso 1">
<Method class="pkg1.A" method="m1"
instance="@a7552" thread="T-1"
timestamp="01/04/200512:00:01">
<Method class="pkg2.B"
method="m2"
instance="@14db8d" thread="T-1"
imestamp="01/04/200512:00:01"/>
</Method>

14

Modelos Dinmicos Reconstrudos com a ferramenta Phoenix no Od

Phoenix
Integrada
Ao Odyssey

Tela de Minerao da
TraceMining
H2

H1
H3

H4
H6

<label name=Informar Notas de Estudantes de Graduao">


<execution class=Estudante">
<execution class=EstudanteGraduao">
<label name=Informar Notas de Estudantes de PsGraduao">
<execution class=Estudante">
<execution class=EstudantePosGraduao">
<label name=Imprimir Grade de Notas de Estudantes">
<execution class=Estudante">
<execution class=EstudanteGraduao">
<execution class=EstudantePosGraduao">
<execution class=ImpressoraUtils">
<execution class=ImpressoraConfig">
<label name=Inscrever Estudantes de Graduao em Turmas">
<execution class=Estudante">
<execution class=EstudanteGraduao">
<execution class=Classes">
<execution class=Turmas">
<execution class=Inscries">
<label name=Inscrever Estudantes de Ps-Graduao em
Turmas">
<execution class=Estudante">
<execution class=EstudantePosGraduao">
<execution class=Classes">
<execution class=Turmas">
<execution
class=Inscries">
<label
name=Imprimir
Inscries de Estudantes">
<execution class=Estudante">
<execution class = EstudanteGraduao,
EstudantePosGraduao>
<execution class=Classes, Turmas, Inscries">
<execution class=ImpressoraUtils, ImpressoraConfig">
<execution class=RelatUtils">

Estudante (sup. 100%)


EstudanteGraduao
EstudantePsGraduao
(confiana 66,7%)
H2 e H3

Turmas (sup. 50%)


Classes
Inscries
(confiana 66,7%)
H2, H3, H4 e H5

ImpressoraUtils (sup. 33,3%)


ImpressoraConfig
(confiana 100%)
H2, H3, H4
H6

17

Engenharia Reversa:
outros exemplos de abordagens

Princpios de Projeto/clustering (Mitchell e Mancoridis,


2006): utiliza estratgia de clustering com base em
princpios de baixo acoplamento e alta coeso,
extraindo um grafo do cdigo e buscando as
melhores parties neste grafo. Utilizam a
ferramenta Bunch.

Similaridade de Nome (Anquetil e Lethbridge, 1999):


recuperao de modelo arquitetural com base no
agrupamento de classes por similaridade de nomes
(substrings) nos nomes de arquivos, que encapsulam
conceitos do domnio, servios utilitrios etc.
19

Engenharia Reversa:
outros exemplos de abordagens

Fatos/Regras em Prolog (Riva e Rodriguez, 2002): anlise


esttica e dinmica geram fatos em uma base Prolog
e elementos agrupados atravs da definio de
regras. Modelos representados como grafos na
ferramenta Rigi (Wong et al., 2004). Regras especficas de
domnio.

Padres de codificao/Estilos Arquiteturais


(Schmerl et al., 2006): utiliza anlise dinmica para
detectar conjuntos de eventos, i.e. protocolos de
comunicao ou padres de implementao, que
indicam estilos arquiteturais. Identifica arquitetura
cliente-servidor.
20

Engenharia Reversa:
outros exemplos de abordagens

Padres de Codificao/Estilos arquiteturais


(Harris et al., 1997): anlise de padres de programao
a partir da rvore Sinttica Abstrata (AST) extrada
do cdigo fonte para o reconhecimento de estilos
arquiteturais na linguagem de programao C.

Regras/Clichs/ArchPattern (Carvalho et al., 2008):


composio de base de regras para a identificao
do estilo arquitetural MVC em sistemas escritos em
Java a partir das anlises esttica e dinmica.
Extensvel para outros estilos.
21

Questes de Pesquisa

Estender abordagens existentes para deteco de


novos padres arquiteturais ou para outras
tecnologias.

Tornar abordagens mais genricas atravs da


gerao de uma base de fatos e regras mais
completa.

Recuperao de rastros de execuo para casos de


uso ou funcionalidades do sistema de forma mais
automatizada.

Utilizao de modelos de ontologia de domnio para


apoiar a recuperao de modelos arquiteturais.

etc.

22

Reengenharia:
exemplos de
abordagens

Reengenharia:
abordagem ROOSC (Moura, 2009)

Reengenharia de Sistemas Orientados a Objetos


para Componentes apoiada por Mtricas em nvel de
modelo.
Objetivos:

encontrar os pontos do modelo OO que precisam ser


melhorados para que se possa derivar o modelo de
componentes nas etapas seguintes;

esses pontos do modelo a serem reestruturados so


descobertos com o uso de mtricas, como: acoplamento entre
classes em diferentes pacotes, heranas em pacotes distintos,
nmero de filhos por classes em diferentes pacotes etc.

para cada resultado de mtrica, onde esse resultado possa


indicar um problema no modelo, sugerida uma
reestruturao.
24

ROOSC: o processo de Reengenharia


Modelo OO c/ Agrupamentos recuperado do cdigo Engenharia Reversa

Agrupamentos Reestruturados

Avaliao do
modelo baseada
em mtricas

Reestruturao
ou refatorao
do modelo

Gerao de
interfaces e
modelo de
componentes

Modelo de Componentes
Modelo pode
ser reimplementado em
uma tecnologia componentes

Reengenharia:
abordagem ROOSC (Moura, 2009)

Gerao de interfaces e modelo de componentes:


Objetivo: derivar as interfaces dos
componentes e definir os modelos de projeto
de componentes;

Funcionamento: so derivadas as interfaces


que os componentes necessitam (interfaces
requeridas) e as as interfaces que eles
fornecem (interfaces providas). So gerados os
modelos de projeto de componentes de acordo
com algum mtodo de DBC.

26

Reengenharia:
abordagem ROOSC (Moura, 2009)

Exemplos de Passos para a gerao de componentes:


selecionar o nvel na hierarquia de pacotes do modelo
OO onde derivar os componentes;
derivar um componente para cada pacote encontrado;
encontrado
para cada par de componentes que possuam classes
que se comunicam (i.e. associao e dependncia)
deve-se derivar uma interface provida no componente
requerido para atender o componente requerente;
as interfaces geradas devem possuir todas as
operaes, de visibilidade pblica,
pblica pertencentes s
classes requisitadas pelo componente requerente.
27

Abordagem ROOSC (Moura,


2009): apoio ferramental

Ares ferramenta de engenharia


reversa/anlise esttica plugin do ambiente
Odyssey (Odyssey, 2010)

Tracer anlise dinmica/ gerao de rastros


de execuo

ORC extrao de mtricas e reestruturao


do modelo OO plugin do Odyssey

GenComp gerao dos componentes e suas


interfaces plugin do Odyssey
28

Abordagem ROOSC (Moura,


2009): trabalhos futuros

Gerao de cdigo a partir do


modelo de componentes gerado: a
nfase neste trabalho est no
projeto dos componentes. Apesar
desta nfase, h a necessidade de
gerar cdigo, reutilizando cdigo do
sistema original, em uma tecnologia
de componentes.

29

Abordagem ROOSC (Moura,


2009): trabalhos futuros

Acompanhamento da evoluo do
sistema: a abordagem ROOSC
poderia ser utilizada para o
acompanhamento da evoluo do
sistema, atravs de um mecanismo
de armazenamento histrico das
mtricas. Dessa forma, de tempos
em tempos poderia se verificar se a
estrutura do sistema est se
degradando.
30

Reengenharia:
um outro exemplo de abordagem

Prado (2005): a reengenharia realizada a partir de


um software legado procedural para um software
baseado em componentes. O processo dividido nas
atividades: organizar o cdigo, recuperar o
projeto do sistema atual, re-especificar, reprojetar e re-implementar. A organizao do
cdigo legado um passo preparatrio para
facilitar a transformao de um cdigo procedural
para OO, para, a partir da, serem gerados os
componentes.
31

Reengenharia:
outros exemplos de ferramentas

Ferramentas CASE engenharia reversa do


modelo de classes e pacotes: ArgoUML, Jude,
Enterprise Architect, Rational Rose, OMondo Eclipse
UML, ArgoUML-PHP, BoUML etc.

Engenharia Reversa de Arquitetura ferramentas


acadmicas.

Extrao de modelo dinmico com anlise


dinmica desafios (identificao da
funcionalidade/volume de informao): MaintainJ
Eclipse plugin, Tracer/Phoenix (Vasconcelos, 2007),
JProfiler (monitoramento do cdigo).

32

Reengenharia:
questes de pesquisa

Manter a consistncia dos modelos durante as


manutenes aps a realizao de um processo
de Reengenharia (round-trip engineering).

Combinar abordagens de MDA (Model Driven


Architecture) com abordagens de Engenharia
Reversa/Reestruturao em um ciclo de
Reengenharia.

etc.
33

Referncias

CHIKOFSKY, E. J. e CROSS, J. H. I., 1990, Reverse Engineering and Design


Recovery: a Taxonomy. IEEE Software, v. 7, n. 1. pp. 13-17.
IEEE, C.-T., 2004, Reengineering & Reverse Engineering Terminology.
Washington.
ANQUETIL, N., FOURRIER, C., LETHBRIDGE, T.C., 1999, "Experiments with
Hierarchical Clustering Algorithms as Software Remodularization Methods".
In: Working Conference on Reverse Egineering, pp. 235-255, Pittsburgh, PA,
USA, October.
ANQUETIL, N., 2000, Curso de Engenharia Reversa, notas de aula,
COPPE/UFRJ.
ANQUETIL, N., LETHBRIDGE, T.C., 2003, "Comparative Study of Clustering
Algortihms and Abstract Representations for Software Remodularization",
IEE Software, v. 150, n. 3 (June), pp. 185-201.
ODYSSEY, 2010, "Odyssey: Infra-Estrutura de Reutilizao baseada em
Modelos de Domnio". In: http://reuse.cos.ufrj.br/odyssey, acessado em
18/03/2010.

34

Referncias

MITCHELL, B.S., MANCORIDIS, S., 2006, "On the Automatic


Modularization of Software Systems Using the Bunch Tool", IEEE
Transactions on Software Engineering, v. 32, n. 3 (March), pp. 193-208.
RIVA, C., RODRIGUEZ, J.V., 2002, "Combining Static and Dynamic Views
for Architecture Reconstruction". In: Sixth European Conference on
Software Maintenance and Reengineering (CSMR02), pp. 47-56,
Budapeste, Hungary, March.
SCHMERL, B., ALDRICH, J., GARLAN, D., et al., 2006, "Discovering
Architectures from Running Systems", IEEE Transactions on Software
Engineering, v. 32, n. 7 (July), pp. 454-466.
HARRIS, D.R., YEH, A., CHASE, M.P., 1997a, "Manipulating Recovered
Software Architecture Views". In: 19th International Conference on
Software Engineering, pp. 184-194, Massachusets, USA, May.
HARRIS, D.R., YEH, A., REUBENSTEIN, H.B., 1997b, "Extracting
Architectural Features from Source Code", The Mitre Journal.
HARRIS, D.R., YEH, A., REUBENSTEIN, H.B., et al., 1995, "Reverse
Engineering to the Architectural Level". In: 17th International Conference
on Software Engineering, pp. 186-195, Scattle, Washington, USA, April.

35

Referncias

Moura, A. M. M., ROOSC: Uma Abordagem de Reengenharia de Sistemas


Orientados a Objetos para Componentes baseada em Mtricas,
Dissertao de M.Sc., COPPE, UFRJ, Rio de Janeiro, Brasil, maro, 2009.

PRADO, A. F., 2005, "Reengenharia de Software Baseado em


Componentes". In: Desenvolvimento Baseado em Componentes:
Conceitos e Tcnicas,Cincia Moderna.

CARVALHO, F., BARROSO, L., SEUFITELES, V., VASCONCELOS, A. P. V.


Reconhecimento de Padres Arquiteturais em Sistemas Java. INFOCOMP
(UFLA. Impresso). , v.1, p.41 - 50, 2008.

BARROSO, L., CARVALHO, F., SEUFITELES, V., VASCONCELOS, A. P. V.


ArchJava: Reconhecimento de Padres Arquiteturais em Sistemas Java In:
WMSWM 2008 - V Workshop de Manuteno de Software Moderna, 2008,
Florianpolis. VII Simpsio Brasileiro de Qualidade de Software - WMSWM.
Sociedade Brasileira de Computao - SBC, 2008.

36

Dvidas

37

Potrebbero piacerti anche