Atualmente, estou escrevendo minha tese de mestrado sobre manutenção de uma aplicação web. Encontrei alguns métodos como o "Índice de Manutenção", de Coleman et.al. ou o "Índice de Manutenção de Software" de Muthanna et.al. Para os dois, é necessário calcular a complexidade ciclomática. Então, minha pergunta é:
É possível medir a complexidade ciclomática de um aplicativo da web?
Na minha opinião, existem três partes em um aplicativo da web:
- Código do servidor (PHP, C #, Python, Perl etc.)
- Código do cliente (JavaScript)
- HTML (links e formulários como operadores, parâmetros GET e campos de formulário como operandos !?)
O que você acha? Existe outro ponto de vista sobre a complexidade do aplicativo da web? Perdi alguma coisa?
Respostas:
A complexidade ciclomática é uma das múltiplas medidas da complexidade do código. Por exemplo, no Visual Studio, o índice de manutenção depende de:
Todas essas medidas, bem como outras medidas de complexidade, funcionam de alguma forma, mas nunca são a indicação absoluta de que o código fonte tem problemas de complexidade . Algumas medidas, como LOC, são conhecidas por serem totalmente sem sentido e enganosas; outros, como a complexidade ciclomática, são um pouco melhores, mas ainda têm problemas.
Isso se deve ao fato de que:
É muito complicado para um programa de computador saber o quão complexo o código fonte seria percebido pelo desenvolvedor .
Por exemplo, notei muitas vezes uma enorme queda no índice de manutenção ao refatorar o código do estilo de procedimento para o estilo funcional através do LINQ, transformando um bloco de código-fonte altamente ilegível em uma única expressão de encadeamento que era extremamente explícita.
Outro exemplo seria a reflexão de padrões de programação nas métricas. Freqüentemente, ao introduzir padrões de programação em seu código, você o torna menos complexo para um desenvolvedor (supondo que ele esteja familiarizado com esses padrões), mas o índice de manutenção diminui.
O código fonte pode ter diferentes formas.
A medição da complexidade ciclomática ou da profundidade da herança ou do acoplamento de classes é muito limitada para um aplicativo Web, porque, como você disse, a existência de HTML / CSS, JavaScript etc. e, como observado nos comentários, a existência de acesso ao banco de dados.
Essa limitação não existe apenas para aplicativos da web. Em aplicativos de desktop, por exemplo, e a complexidade do layout da interface do usuário (código XAML nos aplicativos Windows)? E o código gerado? Ou acesso ao banco de dados?
fonte