Please enable JavaScript.
Coggle requires JavaScript to display documents.
Estratégia para Suporte de Software - Coggle Diagram
Estratégia para Suporte de Software
O software continua a evoluir com o tempo devido a várias mudanças.
Mudanças ocorrem quando:
Erros são corrigidos.
Adaptação a novos ambientes.
Clientes solicitam novas características ou funções.
Reengenharia para atualização.
Teoria Unificada para a Evolução do Software (Lehman)
Lei da Mudança Contínua (1974)
Software deve ser adaptado continuamente para evitar insatisfação.
Lei da Complexidade Crescente (1974)
Complexidade aumenta com a evolução do sistema, a menos que seja controlada.
Lei da Conservação da Familiaridade (1980)
Todos os envolvidos devem manter conhecimento sobre o sistema para uma evolução satisfatória.
Crescimento excessivo pode diminuir o conhecimento.
Lei do Crescimento Contínuo (1980)
Conteúdo funcional dos sistemas deve ser ampliado continuamente para manter a satisfação do usuário.
Lei da Qualidade em Declínio (1996)
Qualidade dos sistemas parece diminuir a menos que sejam mantidos e adaptados rigorosamente.
Suporte de Software
Gerenciamento de Versões
Integração das alterações de código
Integração contínua
Especificações de sistema da versão
Infraestrutura como código
Implementação e lançamento
Suportabilidade
Capacidade de fornecer suporte durante toda a vida útil do produto.
Inclui satisfazer requisitos, prover equipamento, infraestrutura, software adicional, serviços, mão de obra, etc.
Parte do modelo de requisitos e considerada durante o projeto e construção.
Atividades Importantes no Suporte
Correções, adaptações e melhorias
Suporte operacional continuado
Suporte ao usuário
Atividades de reengenharia
Manutenção e Apoio ao Suporte
Software “antidefeito” para ajudar o suporte quando defeitos são encontrados.
Banco de dados com registros de todos os defeitos, suas características, causas e soluções.
Recursos para resolver problemas diários dos usuários.
Responder a dúvidas sobre instalação, operação e uso da aplicação.
Manutenção de Software
Início da Manutenção
Começa quase imediatamente após a liberação do software.
Relatos de erros começam a chegar em poucos dias.
Solicitações de adaptação e melhorias surgem em semanas e meses.
Desafios da Manutenção
Fila crescente de correções, adaptações e melhorias.
Planejamento, programação e execução das mudanças.
Alto custo e consumo de recursos.
Empresas podem gastar 60 a 70% dos recursos em manutenção.
Importância da Manutenibilidade
Avaliar, controlar e fazer modificações.
Análise e projeto levam a uma manutenibilidade elevada.
Manutenibilidade é a facilidade de corrigir, adaptar ou melhorar o software.
Características do Software Manutenível
Modularidade eficaz.
Padrões de projeto compreensíveis.
Padrões e convenções de codificação bem definidos.
Código-fonte autodocumentado e inteligível.
Técnicas de garantia de qualidade que identificam problemas de manutenção.
Projeto e implementação que facilitam alterações futuras.
Tipos de Manutenção
Corretiva
: Correção de erros.
Adaptativa
: Adaptação a novos ambientes.
Perfectiva
: Adição de novas funcionalidades.
Preventiva
: Prevenção de problemas futuros.
Classes Gerais de Manutenção
Engenharia Reversa
: Análise do sistema para identificar componentes e suas inter-relações. Criação de representações do sistema em outro nível de abstração.
Refatoração
: Alteração do sistema sem mudar o comportamento externo, melhorando a estrutura interna. Facilita a qualidade, entendimento e manutenção.
Reengenharia (Evolução)
: Uso de um sistema existente para gerar um novo sistema com qualidade equivalente a práticas modernas de engenharia de software.
Tarefas de Manutenção
Heurísticas para Agilizar a Manutenção (Heeager e Rose)
Use sprints para organizar o trabalho de manutenção.
Permita que solicitações urgentes dos clientes interrompam sprints de manutenção.
Facilite o aprendizado da equipe com mentoria de desenvolvedores experientes.
Permita que múltiplos membros aceitem solicitações e coordenem seu processamento.
Equilibre o uso de documentação por escrito com comunicação presencial.
Escreva casos de uso informais para complementar outras documentações.
Desenvolvedores devem testar o trabalho uns dos outros.
Assegure que os desenvolvedores compartilhem conhecimentos entre si.
Mantenha reuniões de planejamento curtas, frequentes e focadas.
Engenharia Reversa
Primeira tarefa antes de qualquer manutenção é entender o sistema que precisa ser modificado.
Muitas vezes, sistemas de baixa qualidade sem documentação razoável resultam em débito técnico.
Engenharia reversa não é um processo de "slot mágico", mas envolve análise detalhada do código existente e desenvolvimento de especificações significativas.
Aplicações
Entendimento de Dados
: Análise de estruturas de dados em diferentes níveis de abstração.
Estrutura de Banco de Dados
: Reengenharia para novos paradigmas de gerenciamento de banco de dados.
Abstrações Procedurais
: Identificação de padrões de código e desenvolvimento de diagramas de fluxo.
Interfaces do Usuário
: Recriação de GUIs complexas para melhorar a interação usuário-sistema.
Técnicas e Métodos
Semiautomatização usando ferramentas de análise de código.
Desenvolvimento de modelos comportamentais para entender interações de usuário.
Transformações de estrutura de dados para suportar novos modelos de banco de dados.
Desafios e Considerações
Complexidade aumentada em sistemas grandes.
Necessidade de compatibilidade com sistemas legados.
Revisão constante de especificações existentes versus implementação real.
Suporte Proativo de Software
Adaptação às demandas mutantes dos clientes.
Correção de defeitos antes que se tornem emergências.
Criação de ferramentas e processos para identificar e resolver questões antes que se tornem problemas.
Monitoramento de indicadores de qualidade do software.
Reestruturação ou refatoração para melhorar a qualidade.
Planejamento para aposentar o produto e criar substituto antes que clientes o abandonem.
Semelhança com monitoramento e mitigação de riscos.
Uso de indicadores para prever problemas de qualidade.
Refatoração
Refatoração (ou reestruturação) de software modifica código-fonte e/ou dados para facilitar futuras alterações.
Foco em detalhes de projeto de módulos e estruturas de dados locais.
Não altera a arquitetura geral do programa, a menos que envolva engenharia direta
Condições para Refatoração
Arquitetura básica sólida.
Partes técnicas internas necessitam de retrabalho.
Partes reparáveis do software precisam de modificação mais extensa.
Objetivos da Refatoração
Melhorar legibilidade do código.
Simplificar estruturas complexas.
Reduzir duplicação de código.
Facilitar a manutenção futura.
Técnicas de Refatoração
Extração de Método
: Transformar parte do código em um novo método.
Inserção de Método
: Mover código para um novo método.
Método de Objeto
: Mover código para outro objeto.
Método de Colocação
: Mover método dentro da classe.
Método de Coleta
: Transformar em campos internos e converter em métodos.
Ferramentas de Refatoração
Automática
: IDEs modernas oferecem ferramentas automatizadas.
Manual
: Conhecimento técnico é uma ferramenta complexa existente.
Evolução de Software
Justificativa para Reengenharia
Custo de Manutenção
: Manter uma linha de código pode custar 20 a 40 vezes mais do que seu desenvolvimento inicial.
Benefícios de Reprojeto
: Facilita manutenção futura com arquitetura e estrutura de dados modernas.
Produtividade Aprimorada
: Experiência do usuário e protótipo existente aumentam a produtividade de desenvolvimento.
Estratégias de Reengenharia
Princípio de Pareto
: Aplicação da reengenharia aos 20% do software responsáveis por 80% dos problemas.
Ferramentas Automatizadas
: Facilitam partes do trabalho de reengenharia ou evolução de software.
Engenharia Reversa
Definição
: Processo de analisar um programa para criar uma representação em nível mais alto de abstração do que o código-fonte.
Objetivo
: Recuperar o projeto original do software, entender a estrutura e a lógica subjacente.
Ferramentas e Métodos
Ferramentas de Engenharia Reversa
: Automatizam a extração de informações sobre dados, arquitetura e procedimentos do programa existente.
Análise de Código
: Avaliação detalhada das estruturas de dados, fluxos de controle e interações do software.