Faz sentido calcular a complexidade ciclomática / proporção de linhas de código?


8

Em geral, o índice de manutenção depende de muitos fatores. Por exemplo, no Visual Studio, ele conta com complexidade ciclomática, profundidade de herança, acoplamento de classe e linhas de código; esses quatro valores devem ser o mais baixo possível.

Ao mesmo tempo, nunca vi, nem nas ferramentas de métricas de código nem nos livros, a comparação entre apenas a complexidade ciclomática (CC) e as linhas de código (LC).

Faz sentido calcular essa proporção? Que informações são fornecidas sobre o código? Em outras palavras, é melhor diminuir mais o CC do que o LC para ter uma proporção mais baixa?

O que noto é que, para pequenos projetos, a relação CC / LC é baixa (⅓ e menor). Em outras palavras, LC é alto e CC é baixo. Em grandes projetos, o CC / LC é na maioria dos casos maior que ½. Por quê?


13
O código métrica de qualidade só é válida é WTFs / minuto;)

1
Sua última previsão (projetos pequenos x grandes) provavelmente depende da plataforma e da quantidade de código padrão que é necessário escrever para que um projeto mínimo seja executado. Usando a API Win32 bruta, a quantidade de clichê no código real é alta para pequenos projetos, por exemplo. Isso aumenta o número de linha de código. Você pode selecionar alguns projetos de código aberto aleatórios e fazer um gráfico de dispersão de CC x LC. Talvez você possa encontrar algo útil com isso.
Vitor Py

A proporção que você está sugerindo é IMO interessante, mas quero sugerir a substituição de linhas de código (LOC) por Pontos de Função (FP) ou Pontos de Caso de Uso (UCP) e ver o que você obtém.
M.Sameer

Respostas:


4

De http://en.wikipedia.org/wiki/Cyclomatic_complexity

Les Hatton afirmou recentemente (Keynote na TAIC-PART 2008, Windsor, Reino Unido, setembro de 2008) que McCabe Cyclomatic Complexity tem a mesma capacidade de previsão que linhas de código. [11]

A proporção tem aproximadamente a mesma capacidade de previsão usada separadamente.


1
Discordo. A complexidade ciclomática (CC) está claramente correlacionada com as linhas de código lógicas (LLOC). Quanto maior o seu projeto, maior a sua complexidade. Isto é óbvio. Mas o CC / LLOC não tem correlação com o tamanho de um projeto (vi exemplos concretos). Essa proporção depende de três coisas: linguagem e estrutura usada, complexidade funcional do projeto e estilo do código. Se os dois primeiros elementos não puderem ser alterados facilmente, o terceiro poderá ser uma indicação clara da qualidade do código.
Alexandre Butynski


3

Conforme observado em uma resposta anterior, esta declaração na resposta aceita está claramente incorreta.

A proporção tem aproximadamente a mesma capacidade de previsão usada separadamente.

Verificou-se que a densidade de CC faz sentido por vários pesquisadores, embora não pareça ter ganho popularidade significativa entre os praticantes. Existem evidências de dois estudiosos conhecidos na área de métricas de software de que a razão (densidade da complexidade ciclomática = CC / KLOC) é um preditor muito melhor da produtividade de manutenção do que apenas o CC ou o KLOC.

GK Gill e CF Kemerer, "Densidade da complexidade ciclomática e produtividade de manutenção de software", em IEEE Transactions on Software Engineering, vol. 17, n. 12, pp. 1284-1288, dez 1991. doi: 10.1109 / 32.106988

Existem muitos outros que foram criados neste trabalho para refinar as métricas baseadas na densidade de CC. Dois exemplos:

  1. T. Andersson, K. Enholm e A. Törn. Medida independente da extensão da complexidade do software. Em M. Ross, CA Brebbia, C. Staples e J. Stapleton (eds.) Segunda Conferência Internacional sobre Software Quality Management, Vol. 1, Managing Quality Systems, 1994.

  2. JP Mittal, Pradeep Bhatia e Harish Mittal. 2009. Avaliação da produtividade de manutenção de software usando lógica difusa. SIGSOFT Softw. Eng. Notas 34, 5 (outubro de 2009), 1-4. DOI = http://dx.doi.org/10.1145/1598732.1598739


E deveria ser alto, baixo, em um intervalo específico, ou alguma idéia nebulosa de "razoável" para o melhor caso, de acordo com isso?
Deduplicator

O artigo afirma que em módulos específicos dos sistemas investigados os valores estavam entre 0,10 e 0,12. Eu observei valores de aplicativos da Web de produção bastante complexos, implorando por refatoração, entre 0,18-0,20. Eu suspeitaria que algo em torno de 0,20 possa ser muito complexo, enquanto valores próximos a 0,10 indicam um nível suficientemente baixo de densidade de complexidade - no entanto, são necessários mais dados para obter resultados mais seguros.
Nikos Houssos

1

Desculpe, mas não concordo com esta afirmação:

A proporção tem aproximadamente a mesma capacidade de previsão usada separadamente.

Uma proporção claramente não é a mesma que uma métrica individual. Com base em dados empíricos, Hatton afirma que o CC é proporcional ao XLOC com uma taxa constante de cerca de 0,25 (veja o slide 17) para seu conjunto de dados específico. Portanto, se seu XLOC é 60 ou 400, sua proporção CC: XLOC será de cerca de 0,25 (ignorando desvios estatísticos em números mais altos). Portanto, a proporção não é preditiva.


certamente você tem maior probabilidade de obter desvio estatístico com números pequenos
jk.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.