Em 1977, Maurice Howard Halstead introduziu suas medidas de complexidade para sistemas de software , que incluíam medidas do vocabulário do programa, duração do programa, volume, dificuldade, esforço e um número estimado de erros em um módulo. De acordo com a Wikipedia, a dificuldade está relacionada à dificuldade de entender o programa ao lê-lo ou escrevê-lo, e o esforço pode ser traduzido no tempo que leva para codificar um aplicativo em que Tempo = (esforço / 18) segundos.
Uma medida é inútil, a menos que os dados e cálculos estejam relacionados a algum aspecto do desenvolvimento de software. No entanto, não encontrei nenhum trabalho que indique que uma dificuldade de um determinado valor ou superior tenda a um aumento estatisticamente significativo de defeitos ou a uma relação entre dificuldade e tempo para ler o código (uma dificuldade de N produz uma média de M horas gastas entender a base do código) ou qualquer análise de poder calcular o tempo após o fato de ser útil na determinação da qualidade (principalmente porque o tempo para escrever já deveria ter sido registrado como uma medida). Estou especialmente interessado na estimativa de erros de Halstead (que não é mencionada na Wikipedia) - o número de erros em um aplicativo pode ser estimado em Volume / 3000 ou Effort ^ (2/3) / 3000.
Estou procurando duas coisas:
- Alguém usou as medidas de complexidade de software da Halstead em um aplicativo do mundo real para avaliar a qualidade do software? Em caso afirmativo, como você os aplicou e eles se mostraram uma medida útil, válida e / ou confiável?
- Existe alguma pesquisa acadêmica na forma de pesquisas, análises ou estudos de caso que discutam a validade (ou invalidez) das medidas de complexidade de Halstead quando aplicadas à qualidade do software?
- Existe alguma pesquisa acadêmica na forma de pesquisas, análises ou estudos de caso que demonstrem o uso do SLOC (Source Lines of Code) para calcular algo semelhante às métricas de Halstead de Volume, Dificuldade, Esforço, Tempo e Erros? Eu suspeitaria que o Volume corresponda apenas a uma contagem SLOC e a Dificuldade corresponda à complexidade ciclomática (e possivelmente a outras medidas). Também sei que medir o esforço, a produtividade ou o tempo no SLOC é potencialmente enganador.
fonte
Respostas:
A Microsoft Research fez algum trabalho nesta área. Confira esta página: http://research.microsoft.com/en-us/people/nachin/ . Embora não seja especificamente baseado em Halstead, Nachi e sua equipe fizeram algumas investigações usando Halstead, complexidade ciclomática, rotatividade de código e outras medidas para avaliar o risco e a fragilidade relativos para fazer alterações nas áreas de código. Há também um artigo interessante sobre como a eficácia organizacional também desempenha um grande papel, mas isso não é relevante. :)
fonte
Existem alguns estudos desse tipo. Google é seu amigo.
As métricas de Halstead ficaram em desuso quando foi demonstrado que todas elas estavam fortemente correlacionadas com o SLOC bruto (linhas de código-fonte). Nesse ponto, fica mais fácil medir o SLOC e fazer com ele.
Aqui está um resultado do Google Livros .
fonte
Que o Halstead Volume esteja correlacionado com o SLOC é interessante, mas limitado. Estatísticas básicas: a correlação linear não é transitiva. X correlacionado com Y, Y correlacionado com Z NÃO SIGNIFICA que X está correlacionado com Z.
fonte