O CMMI (Capability Maturity Model Integration) foi criado pelo SEI (Software Engineering Institute), o qual é um órgão integrante da universidade norte-americana Carnegie Mellon. Trata-se de um modelo que está atualmente na versão 1.3 (Agosto/2012), com um enfoque voltado para a capacidade de maturidade de processos de software.
Um processo representa, dentro da área de software, um conjunto de atividades cujo objetivo é atingir uma meta previamente estipulada. Já por capacidade e maturidade de um processo, deve-se ter a noção do grau de qualidade com o qual um processo atinge um resultado esperado.
O CMMI está dividido em 5 níveis de maturidade que atestam, por sua vez, o grau de evolução em que uma organização se encontra num determinado momento. Além disso, tem por objetivo principal funcionar como um guia para a melhoria dos processos da organização, considerando para isto atividades como o gerenciamento do desenvolvimento de software, prazos e custos previamente estabelecidos. O objetivo maior, considerando o CMMI e seus diferentes conceitos, está justamente na produção de software com maior qualidade e menos propenso a erros.
Dentre os principais benefícios da implantação do CMMI, vale a pena destacar:
- Uma maior confiabilidade no que refere ao cumprimento de prazos e custos que foram acordados, inicialmente, perante o cliente que solicitou o desenvolvimento de um sistema. Essa previsibilidade é decorrente do rigor que o CMMI exige quanto à medição dos processos, fato este que conduz à obtenção de uma base histórica realista e confiável para estes fins;
- O gerenciamento das atividades relativas à produção de software aumenta consideravelmente;
- Uma maior qualidade nos softwares criados, já que processos bem definidos e controlados conduzem à produção de produtos mais confiáveis;
- A menor dependência da empresa de desenvolvimento para com seus especialistas. Com um foco voltado para processos e melhoria contínua, além do uso intensivo de informações históricas, a organização deixa de depender única e exclusivamente de profissionais com um elevado grau de conhecimento técnico;
- A busca por melhorias contínuas nos processos cotidianos.
Para se conseguir o que este modelo propõe, a organização interessada na implantação do CMMI deverá evoluir progressivamente, considerando para isto uma sucessão de diferentes de níveis. Cada nível indica, por sua vez, o grau de maturidade dos processos num determinado instante:
- Nível 1 - Inicial: os processos normalmente estão envoltos num caos decorrente da não-obediência ou ainda, inexistência de padrões;
- Nível 2 - Gerenciado: os projetos têm seus requisitos gerenciados neste ponto. Além disso, há o planejamento, a medição e o controle dos diferentes processos;
- Nível 3 - Definido: os processos já estão claramente definidos e são compreendidos dentro da organização. Os procedimentos se encontram padronizados, além de ser preciso prever sua aplicação em diferentes projetos;
- Nível 4 - Gerenciado Quantitativamente: ocorre o aumento da previsibilidade do desempenho de diferentes processos, uma vez que os mesmos já são controlados quantitativamente;
- Nível 5 - Otimizado: existe uma melhoria contínua dos processos.
A implantação do CMMI é recomendável para grandes fábricas de software. Implementar os diversos estágios é uma tarefa árdua, não só numa fase inicial, mas também quando se leva em conta a migração de um nível para outro. Isto exigirá, invariavelmente, a realização de vultosos investimentos financeiros, assim como uma mudança de postura da organização (principalmente quando a mesma não contava uma experiência anterior bem-sucedida no gerenciamento de processos). Em inúmeras ocasiões, empresas desenvolvedoras de sistemas recorrem a consultorias especializadas, visando apoio na obtenção da certificação CMMI (fato este que inviabiliza a adoção deste mesmo modelo por pequenas companhias).
Este artigo procurou fornecer uma visão geral a respeito de um modelo adotado por diversas empresas, as quais procuram com o CMMI otimizar diferentes processos que fazem parte de suas atividades de desenvolvimento de sistemas.