Processos de Desenvolvimento de Software Análise de Sistemas de Software Prof. Rodrigo Ribeiro Problema Se você tivesse que investir 100.000... Em que você investiria? Treinamentos? Máquinas poderosas? Contratar funcionários? Programadores? Gerentes de projeto? História Departamento de Defesa dos USA Quase 90% dos projetos falham. Porquê? Investem em Carnegie-Mellon Depois de muito tempo a resposta: Projetos falham por gerência inadequada! Nascimento do CMM (atual CMM-I) Níveis de maturidade de uma empresa de desenvolvimento Classificação de 1 a 5 Capability Maturity Model - CMM Processos de Desenvolvimento Fundamentais para qualidade Processos ajudam mas... No silver bullet! Modelos de processos Codifica-Remenda Cascata Evolucionário Prototipagem Evolutiva Espiral Modelo Codifica-Remenda Especificação Desordem Produto Final Método Codifica Remenda Muito usado (infelizmente...) Não exige gerência complexa Nenhuma documentação Nenhum controle gerencial Atraente para alguns desenvolvedores Modelo em cascata Modelo em Cascata Estrutura rigorosa Uma etapa só começa quando a anterior estiver totalmente concluída. Inflexível Não se adapta bem a mudanças de requisitos. Quando usar: Requisitos bem conhecidos Cliente só possui o produto ao final Modelo cascata com realimentação Modelo Evolucionário Esboço Especificação Versão inicial Desenvolvimento Versões intermediárias Validação Versão final Atividades Simultâneas Modelo Evolucionário Especificação incremental Ideal para sistemas médios e pequenos menos de 500.000 LOC Problemas Difícil gerenciar pequenos incrementos Sistemas mal estruturados Muitas mudanças tendem a corromper a estrutura do software Prototipagem Evolutiva Prototipagem evolutiva Bom para o desenvolvedor Codificação Bom para o cliente Versão rápida desenvolvida rapidamente Ruim porquê... Cliente não vê “remendos” Modelo Espiral Modelo Espiral Similar a outros processos Ex: Processo evolucionário Diferença Análise Ex. e resolução de riscos Uso de nova linguagem: Ferramentas não disponíveis ou com problemas. Problema Difícil gerenciar todos os incrementos produzidos Outros modelos... Métodos formais Engenharia de software baseada em componentes Desenvolvimento baseado em modelos Desenvolvimento baseado em testes