A modularidade é um conceito fundamental no design e arquitetura de software, focando na criação de componentes ou módulos independentes com responsabilidades bem definidas.
A medição e avaliação da modularidade são essenciais para garantir a qualidade e a manutenibilidade do software. Vou detalhar este conceito com base nos documentos que tenho em meu conhecimento:
Definição de Modularidade
Modularidade
O termo modularidade descreve um agrupamento lógico de código relacionado, como um grupo de classes em OO programação ou um conjunto de funções de forma estruturada ou linguagem funcional.
- Conceito: Modularidade refere-se à divisão de um sistema de software em módulos separados, cada um responsável por uma parte específica da funcionalidade geral do sistema.
- Objetivo: Facilitar a compreensão, desenvolvimento, teste e manutenção do software. Módulos bem definidos podem ser desenvolvidos e testados de forma independente, além de permitirem reutilização.
Como Medir e Avaliar a Modularidade
Coesão:
- Definição: Refere-se ao grau em que os elementos dentro de um módulo estão relacionados. Módulos com alta coesão têm elementos fortemente relacionados.
- Coesão não é uma métrica muito precisa e está aberta à interpretações.
- Ranking de Coesão
- Exemplo: Um módulo de processamento de pagamentos em um sistema de e-commerce que lida exclusivamente com transações financeiras tem alta coesão.
Acoplamento:
- Definição: Mede a dependência entre módulos. Baixo acoplamento é desejável, significando que as mudanças em um módulo têm pouco impacto sobre os outros.
- Exemplo: Se um módulo de autenticação pode ser substituído ou modificado sem afetar significativamente outros módulos do sistema, ele é considerado pouco acoplado.
Connascence:
- Definição: Refere-se ao nível em que a mudança em um módulo implica mudanças em outro. Menos connascence indica melhor modularidade.
- Exemplo: Se alterar o esquema de um banco de dados exige alterações significativas em vários módulos, há alta connascence.
Métricas de Modularidade
- LCOM (Lack of Cohesion in Methods):
- Uso: Mede a coesão estrutural em classes de OO. Classes com pontuação baixa em LCOM são mais coesas.
- Exemplo: Uma classe onde cada método utiliza campos comuns da classe terá um LCOM baixo, indicando alta coesão.

-
Aferente e Eferente Coupling:
- Aferente (Ca): Mede o número de classes que dependem de uma classe específica. Se refere a incoming connections.
- Eferente (Ce): Mede o número de classes que uma classe específica depende. Se refere a outgoing connections.
- Exemplo: Uma classe base com muitas classes derivadas terá alto acoplamento aferente.
-
Instabilidade e Distância da Sequência Principal:
- Instabilidade (I): Razão de eferente para o acoplamento total (Ce / (Ca + Ce)).
- Distância da Sequência Principal (D): Métrica holística derivada de abstração e instabilidade.
- Exemplo: Uma classe altamente instável (I próxima de 1) é uma classe que tem muitos dependentes e é fortemente acoplada a outras classes.
Em resumo, a avaliação da modularidade envolve o exame de coesão, acoplamento e connascence em módulos ou classes, usando métricas específicas como LCOM, acoplamento aferente/eferente e instabilidade. Atingir um equilíbrio entre alta coesão e baixo acoplamento é essencial para uma boa modularidade, o que facilita a manutenção e extensão do software.