7 Etableringen av Bia
7.1 Programmeringsprosessen
Diversos autores tˆem se preocupado com quest˜oes de engenharia reversa e reengenharia na ´area de Engenharia de Software, como pode ser observado na Tabela 2.1. O surgimento de padr˜oes de software fez com que autores de diversos m´etodos e abordagens de reengenharia definissem padr˜oes espec´ıficos, como ´e o caso de Recchia (2002) e Lemos (2002). Outros optaram por utilizar padr˜oes de projeto existentes (Gamma et al., 1995), como ´e o caso de Gall e Kl¨osch (1993), Chu et al. (2001, 2000) e Cha et al. (2004). Al´em disso, atividades de teste s˜ao consideradas explicitamente em poucos processos de reengenharia. Teste de sistema e teste de aceita¸c˜ao s˜ao considerados pelo Renaissance (Esprit Project 29512, 1999; Warren e Ransom, 2002). Teste de equivalˆencia ´e utilizado em IRLS (Bianchi et al., 2003) para garantir que o comportamento do sistema alvo permanece o mesmo ap´os a reengenharia de um ou mais componentes do sistema legado. A cria¸c˜ao desse tipo de teste ´e baseada em exemplos de uso, considerados pelos usu´arios. Ressalta-se que a ausˆencia de atividades de teste na reengenharia pode comprometer a qualidade do sistema resultante, podendo levar a reengenharia ao fracasso.
Com rela¸c˜ao ao uso de padr˜oes de projeto na reengenharia de sistemas, Gall et al. (1996) afirmam que a recupera¸c˜ao desse tipo de padr˜oes em sistemas legados procedimentais ´e uma tarefa dif´ıcil, pois n˜ao se pode esperar encontrar uma instancia¸c˜ao direta de um padr˜ao particular no c´odigo fonte, e essa tarefa torna-se um pouco mais complexa se o sistema foi desenvolvido por diversos programadores. Chu et al. (2000) afirmam que a tarefa mais dif´ıcil e dispendiosa ´e a migra¸c˜ao do c´odigo legado para uma nova linguagem alvo, particularmente as estruturas de dados antigas em padr˜oes de projeto. A partir disso, e com a necessidade de apoio computacional associado a processos e abordagens de reengenharia, como pode ser observado na Tabela 2.1, notou-se a importˆancia do uso de frameworks na reengenharia de software. Isso porque n˜ao h´a necessidade de mapeamento de padr˜oes de projeto no c´odigo fonte do legado e n˜ao h´a perigo de selecionar padr˜oes de projeto incorretamente na
reengenharia pois, em geral, como padr˜oes de projeto s˜ao utilizados na implementa¸c˜ao de frameworks, eles s˜ao obtidos automaticamente a partir da sua instancia¸c˜ao; e a migra¸c˜ao do c´odigo legado para uma nova linguagem alvo ´e praticamente autom´atica com o uso de frameworks, pois somente os requisitos e regras do neg´ocio espec´ıficos do sistema legado s˜ao implementados manualmente no sistema alvo.
Tabela 2.1: Resumo dos processos/abordagens de engenharia reversa e reengenharia Processo/ Abor-
dagem
Objetivo Apoiado por
Computador?
Escopo COREM (Gall e
Kl¨osch, 1993, 1995)
Realiza a reengenharia orientada a objetos de sistemas legados procedimentais, utili- zando conhecimento do dom´ınio da aplica¸c˜ao e padr˜oes de projeto para apoiar a engenha- ria reversa.
Parcial (ferramenta CORET (Taschwer et al., 1999))
Reengenharia
N˜ao possui nome espec´ıfico (Sneed e Ny´ary, 1995)
Extrai “automaticamente” a documenta¸c˜ao de projeto orientada a objetos de programas em COBOL e realiza a reengenharia manual.
Parcial (ferramenta OBJECT-REORG)
Reengenharia
Fusion/RE (Pente- ado, 1996)
Utiliza os modelos de an´alise do m´etodo Fusion (D. Coleman et al, 1994) para obter uma pseudo documenta¸c˜ao OO do sistema legado, aprimorando-a depois para torn´a-la efetivamente OO.
N˜ao Engenharia
Reversa
Fusion-RE/I (Costa, 1997)
Baseado no m´etodo Fusion/RE. Elabora a documenta¸c˜ao orientada a objetos de sis- temas legados procedimentais a partir de aspectos operacionais e de dados dispon´ıveis na interface com o usu´ario.
N˜ao Engenharia
Reversa
N˜ao possui nome espec´ıfico (van Deursen e Kuipers, 1998)
Identifica objetos (atributos e m´etodos) das estruturas de dados legados de programas em COBOL por meio da reestrutura¸c˜ao semi-autom´atica dessas estruturas.
Parcial Engenharia Reversa Renaissance (Esprit Project 29512, 1999; Warren e Ransom, 2002)
Fornece diversas estrat´egias de evolu¸c˜ao do sistema legado, que s˜ao selecionadas obser- vando os fatores de risco de cada estrat´egia. A evolu¸c˜ao ´e guiada por um modelo de processo que cont´em tanto o planejamento da evolu¸c˜ao quanto o gerenciamento do seu projeto.
N˜ao Reengenharia
N˜ao possui nome espec´ıfico (Cimitile et al., 1999)
Decomp˜oe sistemas legados em objetos. Os m´etodos s˜ao associados aos objetos por in- term´edio de m´etricas de projeto orientadas a objetos.
N˜ao Engenharia
Tabela 2.1: Resumo dos processos/abordagens de engenharia reversa e reengenharia (continua¸c˜ao) Processo/ Abor-
dagem
Objetivo Apoiado por
Computador?
Escopo Reengenharia de
software baseada em padr˜oes (Chu et al., 2001, 2000)
Migra sistemas legados desenvolvidos com abordagens de projeto tradicionais para sis- temas baseados em padr˜oes de projeto vi- sando melhorar a sua capacidade de enten- dimento, re´uso e manuten¸c˜ao.
N˜ao Reengenharia
FaPRE/OO (Rec- chia, 2002)
Evolu¸c˜ao do Fusion/RE, ´e baseado na abor- dagem incremental e em padr˜oes de reenge- nharia.
N˜ao Reengenharia
PRE/OO (Lemos, 2002)
Evolu¸c˜ao da FaPRE/OO com a cria¸c˜ao de dois clusters espec´ıficos de padr˜oes para tratar a qualidade do processo e do produto.
N˜ao Reengenharia
IRLS (Iterative Re- engineering of Le- gacy Systems) (Bi- anchi et al., 2003)
IRLS realiza reengenharia gradual em sis- temas legados procedimentais, a partir do re-projeto da base de dados.
Parcial (Microfocus Revolve tool 5.0 (MERANT, 2000)) Reengenharia Processo de Reengenharia baseado em Arquitetura (Cha et al., 2004)
Define uma arquitetura alvo, refinando in- forma¸c˜ao da arquitetura do sistema legado extra´ıda por meio de an´alise do dom´ınio; identifica os padr˜oes de reengenharia (base- ados nos de Gamma et al. (1995)) que s˜ao aplic´aveis a essa arquitetura alvo e conclui o sistema alvo mapeando os padr˜oes identifica- dos para os componentes do sistema legado e, por fim, implementa o sistema alvo.
N˜ao Reengenharia
Outra problem´atica est´a relacionada `a identifica¸c˜ao de objetos em sistemas legados procedimentais, e ´e comentada por alguns autores (Cha et al., 2004; Cimitile et al., 1999; van Deursen e Kuipers, 1998). De acordo com Cimitile et al. (1999), a identifica¸c˜ao dos objetos ´e realizada com o apoio do engenheiro de software e requer um grande esfor¸co de compreens˜ao. Por outro lado, diversos m´etodos de reengenharia tentam identificar objetos automaticamente por meio de an´alise est´atica do c´odigo fonte. No entanto, como confirmado por Cha et al. (2004), a semˆantica do neg´ocio ´e perdida. O uso de linguagens de padr˜oes de an´alise na reengenharia ´e utilizado nesta tese tentando minimizar essa problem´atica, pois o entendimento e a identifica¸c˜ao dos requisitos do sistema legado s˜ao apoiados pelo conhecimento do dom´ınio embutido na linguagem de padr˜oes de an´alise.