Mudança de Software “Mudança é o processo de mover-se de um estado definido a outro.” • • • Dinâmica da evolução de programas; Evolução arquitetural; Manutenção de software; Mudança de software é inevitável • Novos requisitos surgem quando o software é usado; • O ambiente do negócio muda; • Erros podem acontecer; Estratégias de mudança de software • Manutenção de software - Mudanças são feitas em resposta a requisitos modificados, mas a estrutura fundamental do Software é estável; (Os padrões arquiteturais expressam a estrutura fundamental de um esquema de software. Alguns exemplos de padrão arquitetural são: Camadas (layers), pipes e filtros e o padrão modelo visão controle MVC) • Transformação arquitetural - A arquitetura do sistema é modificada geralmente de uma centralizada p/ uma distribuída (exemplo, cluster, Load Balance, • utilizar recursos de hardware da maquina. Memória, IO em disco) Re-engenharia de software – Refactoring; (Nenhuma funcionalidade é adicionada ao sistema, mas ele é re-estruturado e re-organizado p/ facilitar mudanças futuras (Estas estratégias podem ser aplicadas conjunta ou separadamente) Dinâmica de evolução de programas • A dinâmica de evolução de programas é o estudo dos processos de mudança do sistema; • Depois de um estudo empírico, Lehman e Belady propuseram que há um número de leis que são aplicadas a todos os sistemas enquanto eles evoluem; Leis de Lehman • 1 - Mudança contínua; (Software tem que ser modificado ou se tornará menos útil) • 2- Complexidade crescente; (Com a evolução do programa sua estrutura tende a ficar mais complexa) • 3 - Auto-regulação; (Evolução de software de grande porte - É um processo auto-regulado: tamanho, tempo entre releases, número de erros, tendem a se manter constantes) 4 - Conservação da estabilidade organizacional; (Estado Saturado - Durante o tempo de duração de um programa, taxa de desenvolvimento é constante) • 5 - Conservação da familiaridade; (Durante a vida produtiva de um programa em evolução, o índice de alterações em versões sucessivas é estatisticamente invariante) • 6 - Crescimento Contínuo; (Durante o tempo de duração de um sistema, mudanças incrementais em cada release são constantes) • 7 – Qualidade descrescente; (Programas apresentarão qualidade decrescente a menos que sejam rigorosamente mantidos e adaptados às mudanças no ambiente operacional) • 8 – Sistema de retorno; (Processos de programação de software constituem sistemas de multi-loop, multi-level e devem ser tratados como tais para serem modificados e melhorados com sucesso) • Aplicabilidade das leis de Lehman • São aplicadas a sistemas de larga escala desenvolvidos por grandes organizações • Não está claro como podem ser adaptadas para Sistemas que incorporam um número significante de componentes COTS Pequenas organizações; Sistemas de médio porte; Evolução da arquitetura • Há uma necessidade de evoluir a arquitetura de um sistema. Exemplo: Converter sistemas legados de uma arquitetura centralizada para uma cliente-servidor; • Razões: Custos de Hardware; Evolução Tecnológica; A idade do sistema; Manutenção de software • Alterações efetuadas no software depois de sua liberação; • As razões para as alterações determinam a categoria da manutenção; Categoria da manutenção: • Manutenção Corretiva – Identifica e Corrige falhas de software; (Corrigir uma falha analisando a lista de Requisitos) • • • Manutenção Adaptativa - Adapta o software a um ambiente operacional diferente (Hardware, SO, etc.) da sua implementação inicial; Manutenção Evolutiva (Perfectiva) - Adiciona ou modifica a funcionalidade do sistema, para satisfazer novos requisitos; Manutenção Preventiva – Melhora a manutenibilidade para futuros melhoramentos; Fase de Manutenção • Fase mais problemática do Ciclo de Vida de Software; • Migração para novas plataformas; • Sistemas mal estruturados; • Melhoramentos para Atender novas necessidades; • Codificação, Lógica e Documentação ruins; Atividade de Manutenção • Análise da documentação; • Análise de impacto das modificações; • Projeto é modificado e revisado; • Código é modificado; • Testes de regressão são aplicados; Custos de manutenção • Geralmente maior do que o custo de desenvolvimento (de duas a cem vezes, dependendo da aplicação) • • • Aumenta enquanto o software é mantido; Software antigos podem ter custos de manutenção altos; O custo esta ligado aos fatores: Estabilidade da equipe; Conhecimento da equipe; Idade do sistema, quanto mais velho, mais caro; Problemas de Manutenção • Deficiência da maneira como o software foi planejado e desenvolvido; • As alterações não são adequadamente documentadas; • É difícil traçar o processo através do qual o software foi criado; • A maioria dos softwares não foram projetados para suportar alterações; • A manutenção não é vista como um trabalho “glamouroso”; Manutenabilidade A Manutenibilidade pode ser definida qualitativamente como a facilidade com que o software pode ser entendido, corrigido, adaptado e ou melhorado; Facilidade de Manutenção: Facilidade pode ser prevista utilizando métricas do processo: • Número de pedidos de manutenção corretiva; (Se número de relatorios de falhas aumenta, pode indicar que erros estão sendo introduzidos) • • • Tempo médio para análise de impacto; (Em geral reflete o número de omponentes afetados; se aumenta, facilidade está diminuindo) Tempo médio para implementar mudança requerida; (Se aumentar, pode indicar declínio da facilidade de manutenção) Número de pedidos de modificações importantes; (Se aumentar, pode indicar declínio da facilidade de manutenção) Fatores de qualidade de Software (Norma ISO 9126) Os fatores de qualidade de software focalizam três aspectos importantes do software produto; Padrões de Manutenção: • IEEE 1219 - Software Maintenance • ISO 14764 - Software Maintenance • IEEE 1042 - Software Configuration Management • IEEE 828 - Software Configuration Management Plans MEDIDAS de DESEMPENHO e MANUTENÇÃO (Swanson) • Número médio de falhas de processamento por execução do programa; • Pessoas-horas despendido em cada categoria de manutenção; • Número médio de pessoas-horas despendido por comando fonte adicionado ou retirado devido a manutenção; • Tempo médio de processamento para um pedido de manutenção; • Porcentagem de pedidos de manutenção por tipo;