Existem vários tipos de qualidade que podem ser medidos em produtos de software, por exemplo, adequação à finalidade (por exemplo, uso final), manutenção, eficiência. Alguns deles são subjetivos ou específicos do domínio (por exemplo, bons princípios de design da GUI podem ser diferentes entre culturas ou dependentes do contexto de uso, pense em uso militar versus uso do consumidor).
O que me interessa é uma forma mais profunda de qualidade relacionada à rede (ou gráfico) de tipos e sua inter-relação, ou seja, a quais tipos cada tipo se refere, existem grupos claramente identificáveis de interconectividade relacionados a uma rede adequadamente arquitetura hierárquica ou, inversamente, existe uma grande 'bola' de referências de tipo (código 'monolítico'). Além disso, o tamanho de cada tipo e / ou método (por exemplo, medido em quantidade de código de bytes Java ou .Net IL) deve fornecer algumas indicações de onde grandes algoritmos complexos foram implementados como blocos monolíticos de código, em vez de serem decompostos em mais gerenciáveis / sustentáveis pedaços.
Uma análise baseada nessas idéias pode ser capaz de calcular métricas que são pelo menos um proxy de qualidade. Os pontos exatos de limiar / decisão entre alta e baixa qualidade eu suspeito que sejam subjetivos, por exemplo, como manutenibilidade queremos dizer manutenibilidade por programadores humanos e, portanto, a decomposição funcional deve ser compatível com o funcionamento da mente humana. Como tal, pergunto-me se pode haver uma definição matematicamente pura da qualidade do software que transcenda todo o software possível em todos os cenários possíveis.
Também me pergunto se isso é uma ideia perigosa, que se proxies objetivos de qualidade se tornarem populares, as pressões dos negócios farão com que os desenvolvedores busquem essas métricas em detrimento da qualidade geral (aqueles aspectos de qualidade não medidos pelos proxies).
Outra maneira de pensar sobre a qualidade é do ponto de vista da entropia. Entropia é a tendência dos sistemas de reverter de estados ordenados para estados desordenados. Qualquer um que já tenha trabalhado no mundo real, em um projeto de software de médio a grande escala, apreciará o grau em que a qualidade da base de código tende a se degradar com o tempo. As pressões dos negócios geralmente resultam em mudanças que se concentram em novas funcionalidades (exceto onde a qualidade em si é o principal ponto de venda, por exemplo, em software aviônico), e na deterioração da qualidade por meio de problemas de regressão e da funcionalidade 'calçar sapatos', onde ela não se encaixa bem. uma perspectiva de qualidade e manutenção. Então, podemos medir a entropia do software? E se sim, como?