🧰 Cap 19: Qualidade de Processo, Manutenção e Gerência de Configuração
Guia Extra: Engenharia de Software e Modelagem UML • Bloco 5: Do Modelo ao Código e à Evolução
🗺️ Mapa Conceitual do Capítulo
flowchart TD
subgraph PROCESS_PRODUCT["Qualidade de Processo vs Qualidade de Produto"]
ISO["ISO/IEC 25010 (SQuaRE)\n8 Características de Qualidade de Produto"]
CMMI["Modelos de Maturidade\nCMMI v2.0 (1 a 5) · MPS.BR (G a A)"]
FAGAN["Inspeções Formais de Fagan\nRevisões Estáticas por Pares & Checklists"]
CK["Métricas CK (Chidamber & Kemerer)\nWMC · DIT · NOC · CBO · RFC · LCOM"]
end
subgraph EVOLUTION["Evolução e Manutenção de Software"]
LEHMAN["Leis de Lehman (E-Type Systems)\nMudança Contínua & Complexidade Crescente"]
MAINT["Taxonomia ISO/IEC 14764\nCorretiva · Adaptativa · Perfectiva · Preventiva"]
TECH_DEBT["Quadrante de Débito Técnico (Fowler)\nPrudente/Imprudente · Deliberado/Inadvertido"]
end
subgraph SCM["Gerência de Configuração de Software (GCS)"]
CI_ITEM["Itens de Configuração (CI) & Baselines"]
BRANCH["Estratégias de Branching\nGitFlow vs Trunk-Based Development & Feature Flags"]
SEMVER["Versionamento Semântico (SemVer 2.0)\nMAJOR.MINOR.PATCH & Conventional Commits"]
end
PROCESS_PRODUCT --> EVOLUTION
EVOLUTION --> SCM
style PROCESS_PRODUCT fill:#ede7f6,stroke:#512da8,stroke-width:2px
style EVOLUTION fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
style SCM fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
🏅 1. Qualidade de Processo e Modelos de Maturidade
A engenharia de software distingue com rigor a Qualidade de Produto (atributos intrínsecos do software em execução, padronizados pela norma ISO/IEC 25010 SQuaRE) da Qualidade de Processo (a eficácia e repetibilidade dos métodos de engenharia empregados pela organização para conceber e entregar valor).
CMMI (Capability Maturity Model Integration)
Mantido pelo ISACA (originalmente concebido pelo Software Engineering Institute da Carnegie Mellon University), o CMMI v2.0 avalia a capacidade organizacional através de cinco níveis de maturidade em sua representação por estágios (staged representation):
| Nível de Maturidade | Denominação | Filosofia Operacional e Características |
|---|---|---|
| Nível 1 | Inicial | Processos imprevisíveis, reativos e caóticos. O sucesso depende exclusivamente do heroísmo individual dos profissionais. |
| Nível 2 | Gerenciado | Projetos planejados, executados, medidos e controlados ao nível de equipe. Gestão básica de requisitos e baseline de configuração. |
| Nível 3 | Definido | Processos padronizados e documentados em nível corporativo, customizados para projetos específicos através de diretrizes organizacionais. |
| Nível 4 | Quantitativamente Gerenciado | O desempenho dos processos é controlado por meio de técnicas estatísticas rigorosas e métricas quantitativas de causa-efeito. |
| Nível 5 | Em Otimização | Foco contínuo na inovação incremental e na melhoria contínua dos processos com base no entendimento estatístico de variações. |
MPS.BR (Melhoria de Processo do Software Brasileiro)
Coordenado pela Softex, o MPS.BR foi desenhado para viabilizar a maturidade em pequenas e médias empresas de tecnologia. Sua estrutura escalonada divide a evolução em sete níveis graduais: Nível G (Parcialmente Gerenciado) até o Nível A (Em Otimização), alinhando normas ISO/IEC 12207 e ISO/IEC 15504 a custos acessíveis ao mercado nacional.
Inspeções Formais de Código e Modelagem (Michael Fagan)
Formulada em 1976 na IBM, a Inspeção de Fagan provou que revisões estáticas formais removem até 80% dos defeitos antes da execução do primeiro teste de unidade. O processo segue um ritual rigoroso com papéis segregados: Moderador (conduz a sessão), Autor (escreveu o artefato), Leitor (guia a leitura do código/modelo) e Inspetores (buscam defeitos orientados por checklists de conformidade).
📐 2. Métricas de Qualidade OO: A Suite Chidamber & Kemerer (CK)
Para mensurar matematicamente o acoplamento, a coesão e a complexidade do design orientado a objetos, a engenharia adota a clássica suíte métrica de Chidamber & Kemerer (1994):
| Métrica CK | Nome Completo | Significado Matemático e Limite Saudável |
|---|---|---|
| WMC | Weighted Methods per Class | Soma da complexidade ciclomática de todos os métodos da classe. Classes com WMC elevado concentram responsabilidades indevidas (God Classes). |
| DIT | Depth of Inheritance Tree | Distância máxima da classe até a raiz da hierarquia. DIT > 5 indica fragilidade da classe base e acoplamento desmedido. |
| NOC | Number of Children | Quantidade de subclasses imediatas que herdam da classe. NOC alto exige testes exaustivos na superclasse para evitar violação de Liskov. |
| CBO | Coupling Between Objects | Contagem de classes externas às quais a classe está vinculada. CBO alto dificulta reuso e manutenção. |
| RFC | Response For a Class | Quantidade de métodos locais somados a todos os métodos chamados por ela em outros objetos. RFC alto amplia a propagação de falhas em cadeia. |
| LCOM | Lack of Cohesion in Methods | Mede se os métodos operam sobre os mesmos atributos internos. LCOM alto indica que a classe deve ser dividida (violação do SRP). |
🔧 3. Dinâmica da Evolução e Manutenção de Software
Um sistema de software em produção não é estático; ele é um artefato sociotécnico vivo submetido às célebres Leis de Lehman:
- 1ª Lei (Mudança Contínua): Todo sistema computacional que reflete a realidade do mundo real (E-Type System) deve se adaptar continuamente, caso contrário perde utilidade progressivamente.
- 2ª Lei (Complexidade Crescente): À medida que um sistema evolui, sua entropia e complexidade interna aumentam, a menos que esforços intencionais de refatoração sejam aplicados para reduzi-las.
Tipologias de Manutenção (ISO/IEC 14764)
Pesquisas seminais da indústria (Lientz & Swanson e Ian Sommerville) revelam uma distribuição de esforço surpreendente ao longo do ciclo de vida:
pie title Distribuição Real do Esforço de Manutenção na Indústria
"Manutenção Perfectiva / Evolutiva (Novas Features)" : 65
"Manutenção Adaptativa (Novos Ambientes / Leis)" : 18
"Manutenção Corretiva (Bugs em Produção)" : 17
- Corretiva: Reparação reativa de defeitos funcionais e incidentes em ambiente de produção.
- Adaptativa: Ajustes derivados de alterações nas plataformas externas (atualização de SGBD, migração de nuvem, conformidade LGPD).
- Perfectiva (Evolutiva): Implementação de novas funcionalidades requeridas pelo mercado e otimizações de performance.
- Preventiva: Engenharia proativa para sanar dívidas técnicas e refatorar algoritmos antes que falhas se manifestem.
O Quadrante do Débito Técnico (Martin Fowler)
O débito técnico traduz o custo composto futuro de decisões apressadas tomadas no presente:
- Prudente & Deliberado: “Temos que lançar a feature hoje para a Black Friday; registramos no backlog o débito e refatoraremos na Sprint subsequente.” (Válido e gerenciável).
- Imprudente & Deliberado: “Não temos tempo para escrever arquitetura nem testes; apenas empurre para produção.” (Inaceitável na engenharia).
- Prudente & Inadvertido: “Agora que terminamos o domínio, compreendemos como deveríamos ter estruturado as entidades desde o início.” (Aprendizado natural).
- Imprudente & Inadvertido: “A equipe não conhece padrões de projeto básicos nem princípios SOLID e construiu um monólito espaguete sem perceber.” (Desastre estrutural).
🗂️ 4. Gerência de Configuração e Estratégias de Branching
A Gerência de Configuração de Software (GCS) assegura a rastreabilidade e integridade de todos os Itens de Configuração (CI) que formam a entrega:
gitGraph
commit id: "v1.0.0" tag: "v1.0.0"
branch feature/emprestimo-online
checkout feature/emprestimo-online
commit id: "feat: entidade reserva"
commit id: "test: unitario regra"
checkout main
merge feature/emprestimo-online id: "v1.1.0" tag: "v1.1.0"
branch hotfix/multa-feriado
checkout hotfix/multa-feriado
commit id: "fix: regra de feriados"
checkout main
merge hotfix/multa-feriado id: "v1.1.1" tag: "v1.1.1"
- Item de Configuração (CI): Qualquer artefato submetido a versionamento (código-fonte, modelos UML em DaC, esquemas SQL de migração, manifestos de infraestrutura).
- Baseline Arquitetural: Conjunto consistente de versões de CIs formalmente revisado e congelado para servir de base a novas entregas.
- Estratégias de Ramificação (Branching):
- GitFlow: Abordagem robusta com branches de longa duração (
main,develop,release/*,feature/*), excelente para softwares com ciclos de lançamento formais e auditorias estritas. - Trunk-Based Development (TBD): Todos os desenvolvedores integram código diariamente no branch
mainatravés de pequenos commits suportados por Feature Flags (Toggles) e testes automatizados instantâneos.
- GitFlow: Abordagem robusta com branches de longa duração (
- Versionamento Semântico (SemVer 2.0.0): Formato
MAJOR.MINOR.PATCH:MAJOR: Quebra de compatibilidade retroativa na API ou contratos.MINOR: Acréscimo de funcionalidade retrocompatível.PATCH: Correção de bugs retrocompatível.- Conventional Commits: Padronização semântica das mensagens de commit (
feat:,fix:,docs:,refactor:,perf:,chore:,feat!:) permitindo a geração 100% automatizada deCHANGELOG.mde releases sem intervenção humana.