Eduardo M Fagundes

Artigos

Coletânea de artigos técnicos e reflexões de Eduardo M. Fagundes publicados entre 2011 e 2017

Assine a Newsletter no Linkedin

Tag: CMMI

  • Pode a ISO 9.001 substituir o CMMI no desenvolvimento eficiente de software?

    A busca da eficiência e qualidade no desenvolvimento de software vem de décadas. No início definiu-se processos estruturados e lineares para o desenvolvimento de softwares, evoluiu com a introdução de feedbacks e análise de risco nas fases de levantamento de requisitos, análise e desenho, como por exemplo o modelo espiral, para consolidar e obter consenso do objetivo e escopo final do projeto. As fases de codificação, testes e implantação assumem aspectos de linha de produção.

    O conceito em torno de Engenharia de Software é o desenvolvimento de software com o máximo de eficiência e qualidade, incluindo custo e entregas no prazo. Para gerenciar melhor essa evolução é possível classificar as áreas de desenvolvimento, ou células dentro das áreas, em diferentes níveis de maturidade: Inicial, Gerenciada, Definida, Quantitativamente Gerenciado e Otimizado. Essa classificação é definida pelo CMMI – Capability Maturity Model Integration – um processo de melhoria contínua de desenvolvimento de software, criado pela Universidade americana Carnegie Mellon, administrado pelo CMMI Institute, uma subsidiaria da ISACA desde 2016.

    Metodologias e softwares de apoio ao desenvolvimento foram desenvolvidos para estruturar e controlar o desenvolvimento com padronização dos processos e reusabilidade de componentes, na busca da eficiência. Uma das ferramentas mais conhecidas é o RUP (Rational Unified Process) que implementa uma metodologia de desenvolvimento, parte da IBM desde 2003. Em 2006, a IBM criou um subconjunto de RUP para projetos ágeis, lançado como um método open source chamado OpenUP, usando o Eclipse (ambiente de desenvolvimento integrado com código aberto). O uso de processos e softwares de desenvolvimento são aplicáveis em qualquer categoria de metodologia: tradicionais ou ágeis.

    A certificação em CMMI é recomendável para fábricas de software e para o desenvolvimento de software de missão crítica, onde existem produção maciça de software ou risco a vida (software para aviões, análises clinicas, suporte a vida, por exemplo). Por ser um processo caro e grande esforço de implantação, cada empresa deve avaliar o custo-benefício de uso e, principalmente, certificação junto a órgãos autorizados.

    Uma alternativa ao CMMI é a ISO 9.001. A norma internacional ISO 9.001 é quase obrigatório para as áreas de manufatura e, mais recentemente, para serviços. A norma tem foco na qualidade. Sua implantação envolve o mapeamento de todos os processos organizacionais, “gap analysis”, análise de riscos e planos de melhoria contínua. Para o mapeamento dos processos do ciclo de vida do software podemos utilizar a ISO 12.207-1, que descreve as atividades que podem ser realizadas no ciclo de vida de um software em cinco processos principais, oito processos de suporte e quatro processos gerais, assim como um processo que permite adaptar o ciclo de vida a cada caso concreto.

    Ou seja, é possível descrever os processos utilizados para o desenvolvimento de software dentro do contexto da ISO 9.001, integrado com os outros processos da operação da infraestrutura de TI e dos processos de negócios. É possível atender aos requisitos do Cobit 5 que prevê uma visão fim-a-fim dos processos e arquitetura da organização.

    A TI participando do mesmo processo de certificação de qualidade da empresa, usando a ISO 9.001, tem as seguintes vantagens:

    • Integra seus processos de desenvolvimento de sistemas e operação da infraestrutura aos processos de negócio da empresa;
    • Utiliza frameworks de outros métodos como guia para descrever os seus processos, adotando com isso o estado da arte em governança de TI;
    • Utiliza o orçamento do projeto de certificação de qualidade da empresa, reduzindo o desgaste e convencimento para investimentos próprios de processos pouco conhecidos pelo resto da empresa;
    • Reduz os custos de consultoria e de certificação em qualidade;
    • Cria evidências para as auditorias de processos alinhados com práticas internacionais de gestão e alinhamento com os negócios da empresa;
    • Reduz os atritos entre a TI e as áreas de negócios devido ao fato que os processos são integrados e aprovados pelo Comitê de Qualidade da empresa.

    Respondendo à pergunta inicial, acredito que seja possível substituir o modelo de melhoria contínua de maturidade das equipes de desenvolvimento de software CMMI pela norma internacional de qualidade ISO 9.001. Mais ainda, acredito que seja possível substituir outras certificações de TI, como Cobit, ITIL, ISO 20.000 e ISO 27.000.

  • Produtividade na Gestão de Projetos de Software

    Para melhorar a produtividade na gestão de desenvolvimento de software deve-se usar uma metodologia que garanta a repetitividade de tarefas, medição e definição de processos e que incentive a melhoria contínua.

    A metodologia deve prever que a fase de definição de requisitos de um novo software é um processo criativo, diferente da implantação de um software de mercado. Para novos softwares é necessário adotar um modelo interativo com protótipos para aperfeiçoar a ideia inicial. O número de interações depende do tempo estipulado para essa atividade ou do consenso dos patrocinadores que as especificações atendem as expectativas.

    Para softwares de mercado é possível adotar um modelo de gestão linear e sequencial uma vez que já existe um processo definido e testado de implantação. Não existe criatividade e inovação na implementação de um software de mercado. Ele implementa as melhores práticas do mercado e garante que a empresa chegue mais rápido a processos com excelência operacional. Neste caso, é possível ter previsibilidade de prazo e custo. Entretanto, se a empresa decidir propor muitas alterações do software original, com certeza, nem prazos nem orçamento serão cumpridos.

    Temos aqui que diferenciar a simples automatização de um processo existente para melhorar a produtividade e controle, de softwares que implementam novos modelos de negócios. Automatizar processos existentes é melhoria contínua. Softwares para novos modelos de negócios é inovação. No primeiro caso temos previsibilidade e conseguimos estimar os benefícios. No segundo, trabalhamos com um grau de incerteza, porém se obtivermos sucesso os resultados serão significativos.

    Desenvolver cronogramas de novos softwares é um desafio. A começar pela evolução das expectativas dos patrocinadores ao longo do desenvolvimento do projeto. Notem que mudar de ideia durante o desenvolvimento de um software não é um pecado. Pode custar caro se utilizar um modelo linear e sequencial de desenvolvimento. Para atender a fase de levantamento de requisitos e o amadurecimento das ideias, o melhor modelo de desenvolvimento é o espiral. Esse modelo permite várias interações com os patrocinadores através de protótipos para convergir para a especificação do projeto final.

    O passo seguinte no desenvolvimento de software é estabelecer o cronograma do projeto. Aqui outros desafios. Os desenvolvedores, analistas e consultores costumam subestimar em média 20-30% a duração das tarefas. Pior, chegam a omitir entre 30-50% das tarefas. Isso torna inevitável atrasos e estouros de orçamentos. Quando isso acontece a perda de produtividade é acentuada, pois perde-se muito tempo em explicações e replanejamento. Isso acaba afetando a moral da equipe, a qualidade do projeto e a confiança dos patrocinadores na equipe.

    Aqui fica um alerta para quem contrata serviços de desenvolvimento de software. Estudos mostram que 75% dos desenvolvedores de software são introvertidos e apenas 33% tem habilidades de negociação. Se houver pressão sobre eles para aceitar prazos não realistas para um projeto, provavelmente, eles concordarão. Mesmo com o conhecido heroísmo dos desenvolvedores em trabalhar por longas horas para atender prazos, existe um grande risco dos projetos não atingirem as expectativas de qualidade, prazo e orçamento.

    Na prática, quem contrata o desenvolvimento de novos softwares pode fixar duas entre as três opções: produto, prazo e orçamento. Por exemplo, se você quiser um produto de qualidade em um prazo determinado, você terá que ter um orçamento flexível. Se escolher ter prazo e orçamento determinados, você terá uma incerteza sobre a qualidade do produto.

    Mas afinal como melhorar a produtividade? Repetindo tarefas que deram certo, medindo o desempenho de cada tarefa, definindo processo e adotando um programa de melhoria contínua. Para isso você precisa ter uma equipe experiente e que trabalhe juntos há pelo menos três anos dentro da filosofia de buscar, continuamente, a melhoria da produtividade.

    Uma equipe de alta performance no desenvolvimento de sistemas tem que ter histórico e evidencias documentadas, como: medição, processo definidos, métricas e objetivos de aumento de produtividade. Um bom roteiro a seguir é modelo CMMI – Capability Mature Model Integration – que define um método para avaliação e melhoria de processos.

    Para processos já consolidados a melhor alternativa é adotar pacotes de software de fornecedores especializados. Esses softwares já implementam as melhores práticas de mercado e podem ser implantados fixando prazo e custo, pois a qualidade do produto já foi consolidada.

    Para novos softwares que embutem um certo grau de incerteza e, obviamente, um maior risco deve-se entregar o desenvolvimento para equipes internas ou externas que tenham experiência e metodologia para ter previsibilidade, eficácia e controle.