Reengenharia de Software

39
Engenharia de Software Reengenharia de Software

description

Trabalho acadêmico sobre Reengenharia de Software para a cadeira de Engenharia de Software do Unilasalle Canoas

Transcript of Reengenharia de Software

Page 1: Reengenharia de Software

Engenharia de Software

Reengenharia de Software

Page 2: Reengenharia de Software

Engenharia de Software

• Daniele Ortiz• Maurício Spolavori• Peterson Basso• Rafael Berto

APRESENTAÇÃO

Participantes

Page 3: Reengenharia de Software

Engenharia de Software

REENGENHARIA

Conceito

A Reengenharia consiste em repensar e redesenhar radicalmente os processos de negócio com o objetivo de conseguir grandes melhoras de desempenho, seja nos custos, na qualidade, no serviço ou no tempo.

"Encarar o amanhã pensando em usar métodos de ontem é ver a vida estagnada"

James Bell

Page 4: Reengenharia de Software

Engenharia de Software

REENGENHARIA

Origem

O conceito de reengenharia surgiu no início da década de 1990 em um artigo escrito por Michael Hammer para a Harvard Business Review.

" Está na hora de parar de seguir as trilhas das vacas. Em vez de acrescentar processos

ultrapassados em hardware e software, devemos rejeitá-los e começar de novo. Devemos fazer

uma "reengenharia" em nossos negócios. "

Michael Hammer

Page 5: Reengenharia de Software

Engenharia de Software

REENGENHARIA

Motivações

• O sistema não atende mais as necessidades (requisitos)• Sistema sem documentação• Modernização de sistemas legados• Custo muito alto para manter o sistema legado• Código muito bagunçado e com muitos erros• Processos de negócio ultrapassados

Page 6: Reengenharia de Software

Engenharia de Software

REENGENHARIA

Introdução

A Reengenharia ocorre em dois níveis: • Reengenharia de processo de negócio, concentra-se nos processos de

negócio para melhorar a competitividade em alguma área.

• Reengenharia de Software, examina os sistemas de informação com a finalidade de reestruturá-los para que tenham uma melhor qualidade.

Page 7: Reengenharia de Software

Engenharia de Software

A reengenharia de processos de negócio (BPR) muitas vezes resulta em nova funcionalidade de software, enquanto a reengenharia de software

trabalha para substituir funcionalidades existentes por um software melhor, mais fácil de manter.

Page 8: Reengenharia de Software

Engenharia de Software

REENGENHARIAModelo de BPR

Assim como a maioria das atividadesde engenharia, a reengenhariados processos de negócioé iterativa.

Page 9: Reengenharia de Software

Engenharia de Software

REENGENHARIA

Ciclo

Abrange uma sériede atividades.

Análise do inventário

Reestruturação dos documentos

Engenharia reversa

Reestruturação do código

Reestruturação dos dados

Engenharia avante

Page 10: Reengenharia de Software

Engenharia de Software

REESTRUTURAÇÃO

De Documentos

Pouca documentação é a marca registrada de muitos sistemas herdados.O que fazer?

• Se o sistema funciona, não documenta-se nada

• A documentação precisa ser atualizada, mas os recursos são limitados- Documenta-se apenas as partes que estão sofrendo modificações

• É necessário redocumentar por completo- Limita-se a documentação ao mínimo essencial

Page 11: Reengenharia de Software

Engenharia de Software

ENGENHARIA REVERSA

Conceito

Consiste em analisar o sistema ou a ferramenta para criar uma representação dela. Objetivo é derivar o projeto ou a especificação de um sistema a partir de seu código-fonte; um novo sistema, com manutenção mais fácil. A Engenharia Reversa faz parte do processo de reengenharia, mas não é o mesmo que a Reengenharia visto que esta analisa oprojeto e cria uma representação do mesmo quefuncione exatamente como a primeira, mas quenão seja meramente uma cópia dela.

Page 12: Reengenharia de Software

Engenharia de Software

Page 13: Reengenharia de Software

Engenharia de Software

ENGENHARIA REVERSA

PrimórdiosBombardeiro B-29 (Enola Gay) Processador Intel 8080

Tupolev TU-4

Page 14: Reengenharia de Software

Engenharia de Software

ENGENHARIA REVERSA

Por que utilizar?

• Sistema iniciado a muitos anos, com pouca documentação e sem atualização.

• Desenvolvedores não fazem mais parte da empresa• Trechos de código criados sem nenhum padrão.• Sistema implementado numa linguagem antiga (Cobol, Fortran, APL).• Quando o suporte de hardware ou software se torna obsoleto.• Disponibilizar novas funcionalidades.• Correção de bugs.

Page 15: Reengenharia de Software

Engenharia de Software

ENGENHARIA REVERSA

Elementos

1. Nível de Abstração: caracterizado pelo nível de detalhes durante o processo de desenvolvimento do projeto. Nível de abstração e grau de abstração são grandezas distintas. O nível de abstração diferencia os estágios do projeto e o grau de abstração está intrínseco no projeto. Quanto mais detalhado o projeto (baixo grau de abstração) e quanto mais sucinto (alto grau de abstração). 2. Completeza: refere-se ao nível de detalhes que é fornecido em cada nível de abstração e indica o quão abrangente é o processo de engenharia reversa. Quanto mais abrangente ele for, mais difícil será manter um nível de abstração alto, pois isso demandará muito trabalho.

Page 16: Reengenharia de Software

Engenharia de Software

ENGENHARIA REVERSA

Elementos

3. Interatividade: refere-se ao grau de participação do ser humano no processo de engenharia reversa. Conforme o nível de abstração aumenta, a interatividade deve aumentar ou a completitude será prejudicada. 4. Direcionalidade: sentido único, informação extraída do código fonte é usada durante as atividades de manutenção. Sentido duplo, a informação é usada para "alimentar" uma ferramenta de reengenharia que tentará regenerar o programa antigo.

Page 17: Reengenharia de Software

Engenharia de Software

Código reestruturado

Extração de abstrações

Refinar e simplificar

Processamento

Interface

Base de dados

Código fonte sujo

Código fonte limpo

Especificação Final

Especificação Final

Page 18: Reengenharia de Software

Engenharia de Software

ENGENHARIA REVERSA

Entendimento

• Determinar quais são os componentes básicos do sistema, como arquivos, rotinas, variáveis, diretório de determinado arquivo, onde se encontram determinadas variáveis, etc.

• Qual arquivo depende de outro, qual rotina depende de outra, etc.

• Realizar uma análise dinâmica, que consiste em executar o programa e monitorar os valores das variáveis, quais funções são chamadas, etc.

• Realizar análise estática para saber quais funções uma função pode chamar. Mas para saber quais ela realmente chama, precisamos da análise dinâmica, etc.

Page 19: Reengenharia de Software

Engenharia de Software

ENGENHARIA REVERSA

Aplicações

• SambaPermite que sistemas que não estão rodando o Microsoft Windows compartilhem arquivos com sistemas que estão utilizando esta plataforma.

• WinePermite executar aplicativos desenvolvidos para Windows no GNU/Linux.

• OpenOffice.orgÉ um conjunto de aplicativos OpenSource. Disponível para diferentes plataformas: incluindo Microsoft Windows, Unix, Solaris, Linux e Mac OS. Compatível com o Microsoft Office.

Page 20: Reengenharia de Software

Engenharia de Software

ENGENHARIA REVERSA

Aspectos Legais

• Nos Estados Unidos, a lei “Digital Millenium Copyright Act” aprovada em 1998, protege os direitos autorais na informática e faz restrições em relação à engenharia reversa. Só é permitido analisar para fins de compatibilidade com outros softwares e/ou hardware.

• Na União Européia, o “EU Copyright Directive”, de 2001, é similar ao “Digital Millenium Copyright Acts”. Não é tão restritiva.

• No Brasil, não existe uma lei específica sobre Engenharia Reversa, mas quando ocorre verifica-se se o objetivo. Constatado crime, a Lei de Software e de Direitos Autorais protege seus autores.

Page 21: Reengenharia de Software

Engenharia de Software

REESTRUTURAÇÃO

Conceito

A reestruturação de software modifica o código-fonte e/ou dados com o objetivo de torná-los mais amenos a futuras modificações. Tende a se focar nos detalhes de projeto de módulos individuais e nas estruturas de dados locais definidas nesses módulos. Se a reestruturação abrange a arquitetura de software, a reestruturação se transforma em Engenharia Avante.

Etapas de Reestruturação:• Reestruturação do Código• Reestruturação dos Dados

Page 22: Reengenharia de Software

Engenharia de Software

REESTRUTURAÇÃO

De Código

É realizada para executar um projeto que produz a mesma função que o programa original, porém com mais qualidade.

Benefícios:•Aumento da qualidade, devido ao código construído seguir boas práticas de design. •Deixa o código mais “limpo”, facilitando o entendimento deste.•Facilita as manutenções no código.

Apesar de poder aliviar problemas imediatos, relacionados com depuração ou pequenas modificações, não constitui reengenharia.

Page 23: Reengenharia de Software

Engenharia de Software

Page 24: Reengenharia de Software

Engenharia de Software

REESTRUTURAÇÃO

De Dados

Antes de ser realizada a reestruturação de dados é feita a análise do código-fonte, também chamada de análise de dados.

Quando a estrutura de dados é fraca, os dados passam por reengenharia, começa então o reprojeto dos dados.

As modificações nos dados resultarão tanto em modificações arquiteturais quanto de código.

Page 25: Reengenharia de Software

Engenharia de Software

REESTRUTURAÇÃO

Formas de Reprojeto

• Padronização de registro de dadosEsclarece definições de dados para obter consistência entre os nomes dos itens de dados, ou entre os formatos de registro físico dentro da estrutura de dados existentes.

• Racionalização dos nomes dos dadosGarante que todas as convenções de denominação de dados atendam aos padrões locais e que os sinônimos sejam eliminados a medida que os dados fluam através do sistema.

Page 26: Reengenharia de Software

Engenharia de Software

REESTRUTURAÇÃO

Ferramentas

• DMS Software Reengineering ToolkitReestruturação para COBOL,C/C++, Java, FORTRAN 90 e VHDL.

• FORESYSReestruturação para FORTRAN.

• Function Encapsulation ToolReestruturação de programas antigos em C para C++.

• plusFORTReestruturação para FORTRAN e de FORTRAN para C.

Page 27: Reengenharia de Software

Engenharia de Software

Normalmente é usada a primeira opção, mas isso não querdizer que seja a melhor opção.

ENGENHARIA AVANTE

Melhorias

Como acomodar alterações exigidas pelo usuário com milhares de linhas de código fonte sem nenhuma documentação?

• Podemos batalhar modificação por modificação• Podemos tentar entender o funcionamento interno para

tornar as modificações mais eficazes• Podemos reprojetar, recodificar e testar a funcionalidade

que exige modificação• Podemos reprojetar, recodificar e testar o software

inteiro, afim de facilitar melhorias futuras

Page 28: Reengenharia de Software

Engenharia de Software

Page 29: Reengenharia de Software

Engenharia de Software

ENGENHARIA AVANTE

Manter x Redesenvolver

Devemos considerar os seguintes pontos:

• Custo para manter o código-fonte atual é de 20 a 40 vezes do que desenvolver um novo código

• Reprojetar a arquitetura do software pode facilitar manutenções futuras• O fato de existir um protótipo do software, pode aumentar a

produtividade do desenvolvimento• Usuário tem mais experiência, e pode sugerir melhorias em

funcionalidades• Ferramentas automatizadas podem facilitar o processo• Documentação passará a existir

Page 30: Reengenharia de Software

Engenharia de Software

ENGENHARIA AVANTE

O que é isso afinal?

O processo de engenharia avante aplica conceitos e métodos de engenharia de software para recriar uma aplicação existente. Na maioria dos casos, a engenharia avante não cria simplesmente um equivalente moderno de um programa antigo.

A idéia principal é que o programa redesenvolvido amplie a capacidade da aplicação antiga.

Page 31: Reengenharia de Software

Engenharia de Software

ENGENHARIA AVANTE

Para…Arquitetura Cliente / Servidor Arquitetura Orientada a Objetos

Interface com o Usuário

Page 32: Reengenharia de Software

Engenharia de Software

ENGENHARIA AVANTE

Arquitetura Cliente / Servidor

É importante notar que a migração de um computador de grande porte para cliente/servidor exige reengenharia, tanto do negócio quanto de software.

Em alguns casos, a migração para uma arquitetura cliente/servidor deve ser abordada não como reengenharia, mas como um esforço de desenvolvimento novo. A reengenharia entra em cena apenas quando a funcionalidade específica do sistema antigo precisa ser integrada na nova arquitetura.

Passos da engenharia para arquiteturas Cliente/Servidor:• Engenharia reversa• Preparação/Adaptação da infra-estrutura• Migração do Banco de Dados para o servidor• Adaptação do software para rodar no cliente

Page 33: Reengenharia de Software

Engenharia de Software

ENGENHARIA AVANTE

Arquitetura Orientada a Objetos

Podemos afirmar que é uma das arquiteturas mais utilizadas atualmente.Na maioria dos casos, migrar para essa arquitetura ocasiona a reescrita de muito código, quando não todo.

Passos da engenharia para arquiteturas Orientadas a Objetos:• Engenharia reversa• Criação de modelos de dados, funcionais e comportamentais• Criação de casos de uso• Modelagem de Classes

Page 34: Reengenharia de Software

Engenharia de Software

ENGENHARIA AVANTE

Interfaces com o Usuário

Passos da engenharia para Interfaces com o Usuário:• Entender as tarefas realizadas e os dados importantes apresentados• Remodelar o comportamento, sem ser radical• Aplicar melhorias

Page 35: Reengenharia de Software

Engenharia de Software

Page 36: Reengenharia de Software

Engenharia de Software

ENGENHARIA AVANTE

Custo x Benefício

Análise custo/benefício por Sneed:

• P1 = custo de manutenção anual corrente de uma aplicação• P2 = custo de operação anual corrente para uma aplicação• P3 = valor de negócio anual corrente de uma aplicação• P4 = custo de manutenção anual previsto após reengenharia• P5 = custo de operação anual previsto após reengenharia• P6 = valor de negócio anual previsto após reengenharia• P7 = custo estimado de reengenharia• P8 = período estimado para reengenharia• P9 = fator de risco de reengenharia ( P9 = 1,0 é nominal)• L = esperança de vida do sistema

Page 37: Reengenharia de Software

Engenharia de Software

ENGENHARIA AVANTE

Custo x Benefício

Custo com aplicação atual:Cmanut = [P3 – (P1 + P2)]xL

Custo com reengenharia:Creeng = [P6 – (P4 + P5)X(L – P8) – (P7 x P9)]

Custo/Benefício = Creeng - Cmanut

Page 38: Reengenharia de Software

Engenharia de Software

Page 39: Reengenharia de Software

Engenharia de Software

REENGENHARIA

Referências

• Engenharia de Software 6ª Edição – Roger S Pressman• http://isosoftware.blogspot.com/2009/10/engenharia-reversa-de-software.html • Engenharia Reversa – www.youtube.com.br• Engenharia Reversa - Proj. Assis. por Comp. - www.youtube.com.br• http://dinamico.orgfree.com/softwares/desafios.html• http://www.dcc.ufrj.br/~schneide/es/2001/1/g18/Engenharia%20Reversa.htm• http://www.slideshare.net/adorepump/engenharia-reversa-e-reengenharia-

software-presentation• http://www.dcc.ufrj.br/~schneide/es/2002/1/g13/trabalho.htm• http://www.dcc.ufrj.br/~schneide/es/2001/1/g19/atividades.html• http://projetos.inf.ufsc.br/arquivos_projetos/projeto_218/TCC-

PauloCesarAllebrandt.pdf