Evolução de Software e Refatoração

Documentos relacionados
EVOLUÇÃO DE SOFTWARE

Evolução de Software e Refatoração. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 1

ENGENHARIA DE SOFTWARE I

Capítulo 2. Processos de Software Pearson Prentice Hall. Todos os direitos reservados. slide 1

Garantia de Processo Leis de Lehman Manutenção de Softwares

Desenvolvendo Software Livre com Programação extrema

Qualidade de Software. Prof.: Ivon Rodrigues Canedo. PUC Goiás

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 06 PROFª BRUNO CALEGARO

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

Engenharia de Software II

2 Diagrama de Caso de Uso

Engenharia de Requisitos Estudo de Caso

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

QUALIDADE DE SOFTWARE. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 27 Slide 1

Gerenciamento de Projeto

Desenvolvimento Ágil de Software

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Capítulo 1. Extreme Programming: visão geral

Projeto de Sistemas I

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Gerenciamento de configuração. Gerenciamento de Configuração. Gerenciamento de configuração. Gerenciamento de configuração. Famílias de sistemas

Engenharia de Software III

5. Métodos ágeis de desenvolvimento de software

Processos de Software

Dicas para usar melhor o Word 2007

dicas para reduzir custos na compra de software

Engenharia de Software II

ENG1000 Introdução à Engenharia

Mudanças em software. Gerir os processos de sistema em mudança de software. Objetivos

Aprenda as melhores práticas para construir um completo sistema de teste automatizado

O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no

DISCIPLINA ENGENHARIA DE SOFTWARE Aula 03 Desenvolvimento Ágil Modelos Ágeis. Profª Esp.: Maysa de Moura Gonzaga

Padrões de projeto 1

Modernização e Evolução do Acervo de Software. Gustavo Robichez de Carvalho guga@les.inf.puc-rio.br

CONVENÇÃO DE CÓDIGO JAVA

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

Orientação a Objetos

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

2 Fundamentação. 2.1 Manutenção e Evolução de Sistemas

Engenharia de Requisitos

XP extreme Programming, uma metodologia ágil para desenvolvimento de software. Equipe WEB Cercomp

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

Programação Extrema. Luis Fernando Machado. Engenharia de Software

Suporte, Treinamento e Manutenção de Software

Aspectos técnicos do desenvolvimento baseado em componentes

Pós-Graduação em Gerenciamento de Projetos práticas do PMI

Manutenção e Ferramentas CASE. Marcos L. Chaim Segundo Bimestre 2003 Mestrado Profissional IC/Unicamp

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

2 Engenharia de Software

Engenharia de Software II

Processos de Desenvolvimento de Software

ACOMPANHAMENTO GERENCIAL SANKHYA

Engenharia Reversa e Reengenharia

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

ISO/IEC 12207: Gerência de Configuração

Jonas de Souza H2W SYSTEMS

Análise e Projeto Orientados por Objetos

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 05 PROFª BRUNO CALEGARO

1 Inicie um novo. Guia de Referência Rápida de Gerenciamento de Projeto para o Project projeto

Projeto de Arquitetura

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite (81 )

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014


Professor: Curso: Disciplina:

Engenharia de Software

02 - Usando o SiteMaster - Informações importantes

Requisitos de Software

Com metodologias de desenvolvimento

Definição de Padrões. Padrões Arquiteturais. Padrões Arquiteturais. Arquiteturas de Referência. Da arquitetura a implementação. Elementos de um Padrão

Introdução à Computação

Leitura. Capítulo 7 (Prog. Orient. a Obj. usando Java - 4th Edition)

O processo de melhoria de processo

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

Ideal para que tipo de empresa (equipe): pequena, média, grande? Em software onde os requisitos não são conhecidos é recomendado o uso do XP? Por quê?

Resumo artigo Agile Modeling- Overview

AULA 1 INTRODUÇÃO - ENGENHARIA DE SOFTWARE. Prof. Msc. Hélio Esperidião

4 passos para uma Gestão Financeira Eficiente

Bancos de dados distribuídos Prof. Tiago Eugenio de Melo

Projeto de Software Orientado a Objeto

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Qualidade de Software

Engenharia de Software II

APOO Análise e Projeto Orientado a Objetos. Requisitos

Requisitos de Software

Introdução. O que é o Registro do Windows

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Gestão da Qualidade Políticas. Elementos chaves da Qualidade 19/04/2009

Sistemas de Informação I

Gerenciamento de Níveis de Serviço

Desenvolvimento de Sistemas Tolerantes a Falhas

4/5/2009 CONTROLSOFT CONTROLGAS CONTROLE DE VALE GÁS. Manual de Operação

Gerenciamento de Problemas

Fábrica de Software 29/04/2015

PHC dteamcontrol Externo

Transcrição:

Evolução de Software e Refatoração Mudança de software Mudança de software é inevitável Novos requisitos surgem quando o software é usado; O ambiente de negócio muda; Erros devem ser reparados; Novos computadores e equipamentos são adicionados ao sistema; O desempenho ou a confiabilidade do sistema deve ser melhorada. Um problema-chave para as organizações é a implementação e o gerenciamento de mudanças em seus sistemas. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 1 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 2 Importância da evolução Dinâmica da evolução de programas As organizações fazem grandes investimentos em seus sistemas de software eles são ativos críticos de negócios. Para manter o valor desses ativos de negócio, eles devem ser mudados e atualizados. A maior parte do orçamento de software nas grandes organizações é voltada para evolução, ao invés do desenvolvimento de sistemas novos Dinâmica de evolução de programas é o estudo de mudança de sistema. Lehman e Belady propuseram que havia uma série de leis (hipóteses) que se aplicavam a todos os sistemas quando eles evoluiam. Na prática, são observáveis, de fato, mas com ressalvas Aplicáveis principalmente a sistemas de grande porte Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 3 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 4 Leis de Lehman Leis de Lehman 1) Manutenção é um processo inevitável. Ambiente do sistema muda e requisitos mudam 2) Alteração do sistema degrada sua estrutura Como evitar? Manutenção preventiva 3) Sistemas de grande porte possuem dinâmica própria (estágios iniciais de desenv.) Tamanho e complexidade dificultam alteração 4) Estado saturado. Mudanças de recursos e pessoal não têm efeito. Sistemas grandes e overhead de comunicação 5) Novas funcionalidades introduzem novos defeitos. Não orçar grandes incrementos sem pensar nas correções de defeitos 6) Declínio da qualidade e insatisfação dos usuários 7) Aprimoramento a partir de sistemas de feedback Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 5 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 6 1

Leis de Lehman Manutenção de software É a modificação de um programa após ter sido colocado em uso. A manutenção normalmente não envolve mudanças consideráveis na arquitetura do sistema. As mudanças são implementadas pela modificação de componentes existentes e pela adição de novos componentes ao sistema. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 7 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 8 A Manutenção é Inevitável Tipos de manutenção Os sistemas estão fortemente acoplados ao seu ambiente. Quando um sistema é instalado em um ambiente, ele muda esse ambiente e, portanto, mudam os requisitos de sistema. Portanto, os sistemas DEVEM ser mantidos se forem úteis em um ambiente. Manutenção para reparar defeitos de software Mudança em um sistema para corrigir deficiências de maneira a atender seus requisitos. Manutenção para adaptar o software a um ambiente operacional diferente Mudança de um sistema de tal maneira que ele opere em um ambiente diferente (computador, OS, etc.) a partir de sua implementação inicial. Manutenção para adicionar funcionalidade ao sistema ou modificá-lo Modificação do sistema para satisfazer a novos requisitos. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 9 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 10 Distribuição de esforços de manutenção Custos de manutenção Geralmente, são maiores que os custos de desenvolvimento (de 2 a 100 vezes, dependendo da aplicação). São afetados por fatores técnicos e não técnicos. A manutenção corrompe a estrutura do software, tornando a manutenção posterior mais difícil. Design Erosion Software em envelhecimento pode ter altos custos de suporte (por exemplo, linguagens antigas, compiladores, etc.). Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 11 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 12 2

Fatores de custo de manutenção Previsão de manutenção Estabilidade da equipe Os custos de manutenção são reduzidos se o mesmo pessoal estiver envolvido por algum tempo. Responsabilidade contratual Os desenvolvedores de um sistema podem não ter responsabiidade contratual pela manutenção, portanto, não há incentivo para projetar para mudanças futuras. Habilidade do pessoal O pessoal da manutenção geralmente é inexperiente e tem conhecimento limitado de domínio. Idade e estrutura do programa À medida que os programas envelhecem, sua estrutura é degradada e se torna mais difícíl de ser compreendida e modificada. Avaliação de quais partes do sistema podem causar problemas e ter altos custos de manutenção A aceitação de mudança depende da facilidade de manutenção dos componentes afetados por ela; A implementação de mudanças degrada o sistema e reduz a sua facilidade de manutenção; Os custos de manutenção dependem do número de mudanças, e os custos de mudança dependem da facilidade de manutenção. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 13 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 14 Processos de evolução Previsão de mudanças Os processos de evolução dependem Do tipo de software que está sendo mantido; Dos processos de desenvolvimento usados; Das habilidades e das experiências do pessoal envolvido; Propostas para mudança são os direcionadores para a evolução do sistema. Metodologias mais novas não costumam ter um processo separado A previsão do número de mudanças requer o entendimento dos relacionamentos entre um sistema e seu ambiente. Sistemas fortemente acoplados requerem mudanças sempre que o ambiente é mudado. Fatores que influenciam esse relacionamento são O número e a complexidade das interfaces de sistema; O número de requisitos de sistema inerentemente voláteis; Os processos de negócio nos quais o sistema é usado. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 15 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 16 Medidas de processo O processo de evolução de sistema As medições de processo podem ser usadas para avaliar a facilidade de manutenção Número de solicitações para manutenção corretiva; Tempo médio necessário para análise de impacto; Tempo médio para implementar uma solicitação de mudança; Número de solicitações de mudança pendentes. Se qualquer uma ou todas essas estão aumentando, isso pode indicar um declínio na facilidade de manutenção. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 17 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 18 3

Solicitações de mudança urgentes Reengenharia de sistema Mudanças urgentes podem ter de ser implementadas sem passar por todos os estágios do processo de desenvolvimento de software Se um defeito sério de sistema tem de ser reparado; Se mudanças no ambiente do sistema (por exemplo, atualização do OS) têm efeitos inesperados; Se existem mudanças de negócio que necessitam de uma resposta muito rápida (e.g.mudança de lei) POP Patch-Oriented Programming É a reestruturação ou reescrita de parte ou de todo um sistema sem mudar sua funcionalidade. Importante ressaltar: reestruturação de grande porte! Aplicável onde partes de um sistema de grande porte necessitam de manutenção freqüente. Envolve a adição de esforço para tornar o sistema mais fácil de manter. Simplicidade é um objetivo complexo Podem resultar em problemas ainda piores Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 19 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 20 Engenharia direta e reengenharia Atividades do processo de reengenharia Conversão de código-fonte Converter o código para uma nova linguagem. Engenharia reversa Analisar o programa para compreendê-lo. Aprimoramento da estrutura de programa Analisar e modificar a estrutura para facilidade de entendimento. Modularização de programa Reorganizar a estrutura do programa. Reengenharia de dados Limpar e reestruturar os dados do sistema. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 21 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 22 Fatores do custo de reengenharia A qualidade do software que deve passar pela reengenharia. O apoio de ferramentas disponíveis para reengenharia. Extensão da conversão de dados. A disponibilidade do pessoal especializado Isso pode ser um problema com sistemas antigos baseados em tecnologia que não são mais amplamente usadas. Refatoração: Melhorando a Qualidade de Código Pré-Existente Prof. Dr. Fabio Kon Prof. Dr. Alfredo Goldman Departamento de Ciência da Computação IME / USP Laboratório de Programação extrema Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 23 24 4

Refatoração (Refactoring) Exemplos de Refatoração Uma [pequena] modificação no sistema que não altera o seu comportamento funcional, mas que melhora alguma qualidade nãofuncional: simplicidade flexibilidade clareza ( Verbo ) Refactoring (Substantivo) vs. Refactoring Mudança do nome de variáveis Mudanças nas interfaces dos objetos Pequenas mudanças arquiteturais Encapsular código repetido em um novo método Generalização de métodos raizquadrada(float x) raiz(float x,int ( n Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 25 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 26 Aplicações Passos de Refatoração 1. Melhorar código antigo e/ou feito por outros programadores. 2. Desenvolvimento incremental à la XP. Em geral, um passo de refatoração é tão simples que parece pouco útil. Mas quando se juntam 50 passos, bem escolhidos, em seqüência, o código melhora radicalmente. Cada passo é trivial. Demora pouco tempo para ser realizado. É uma operação sistemática e óbvia Os passos, individualmente, podem mudar o comportamento do programa A sequência de passos que forma a refatoração garante a preservação do comportamento Atualmente, muitas refatorações são automatizadas por ferramentas Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 27 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 28 Quando Usar Refatoração Catálogo de Refatorações Sempre há duas possibilidades: 1. Melhorar o código existente. 2. Jogar fora e começar do 0. [Fowler, 1999] contém 72 refatorações. Análogo aos padrões de projeto orientado a objetos [Gamma et al. 1995] (GoF). É sua responsabilidade avaliar a situação e decidir optar por um ou por outro. Refatoração é importante para desenvolvimento e evolução! Vale a pena gastar algumas horas com [Fowler, 1999]. (GoF é obrigatório, não tem opção). [Fowler, 1999] Martin Fowler. Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 29 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 30 5

Dica Quando você tem que adicionar uma funcionalidade a um programa e o código do programa não está estruturado de uma forma que torne a implementação desta funcionalidade conveniente, primeiro refatore de modo a facilitar a implementação da funcionalidade e, só depois, implemente-a. O Primeiro Passo em Qualquer Refatoração Antes de começar a refatoração, verifique se você tem um conjunto sólido de testes para verificar a funcionalidade do código a ser refatorado. Refatorações podem adicionar erros Até mesmo as automatizadas Os testes vão ajudá-lo a detectar erros se eles forem criados. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 31 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 32 O Testador Ideal Formato de Cada Entrada no Catálogo executar Teste ver Detalhes OK Erro Nome da refatoração. Resumo da situação na qual ela é necessária e o que ela faz. Motivação para usá-la (e quando não usá-la). Mecânica, i.e., descrição passo a passo. Exemplos para ilustrar o uso. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 33 Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 34 ( 110 ) Extract Method ( 110 ) Extract Method Nome: Extract Method Resumo: Você tem um fragmento de código que poderia ser agrupado. Mude o fragmento para um novo método e escolha um nome que explique o que ele faz. Motivação: é uma das refatorações mais comuns. Se um método é longo demais ou difícil de entender e exige muitos comentários, extraia trechos do método e crie novos métodos para eles. Isso vai melhorar as chances de reutilização do código e vai fazer com que os métodos que o chamam fiquem mais fáceis de entender. O código fica parecendo comentário. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 35 Mecânica: Crie um novo método e escolha um nome que explicite a sua intenção Copie o código do método original para o novo. Procure por variáveis locais e parâmetros utilizados pelo código extraído. Se variáveis locais forem usadas apenas pelo código extraído, passe-as para o novo método. Caso contrário, veja se o seu valor é apenas atualizado pelo código. Neste caso substitua o código por uma atribuição. Se é tanto lido quando atualizado, passe-a como parâmetro. Compile e teste. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 36 6

Exemplo Sem Variáveis Locais // imprime cabeçalho System.out.println ( *** Dívidas do Cliente **** ); // calcula dívidas // imprime detalhes System.out.println ( nome: + _nome); System.out.println ( divida total: + divida); Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 37 Exemplo Com Variáveis Locais // calcula dívidas //imprime detalhes System.out.println( nome: + _nome); System.out.println( divida total: + divida); void imprimecabecalho () { System.out.println ( *** Dívidas do Cliente **** ); Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 38 Exemplo COM Variáveis Locais // calcula dívidas imprimedetalhes (divida); ( divida void imprimedetalhes (double { System.out.println( nome: + _nome); System.out.println( divida total: + divida); Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 39 com atribuição double divida = calculadivida (); imprimedetalhes (divida); () double calculadivida { return divida; Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 40 depois de compilar e testar depois de compilar e testar double divida = calculadivida (); imprimedetalhes (divida); dá para ficar mais curto ainda: () double calculadivida { double resultado = 0.0; resultado += cada.valor (); return resultado; Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 41 imprimedetalhes (calculadivida ()); mas não é necessariamente melhor pois é um pouco menos claro. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 Slide 42 7