Esistono vari tipi di qualità che possono essere misurati nei prodotti software, ad esempio idoneità allo scopo (ad es. Uso finale), manutenibilità, efficienza. Alcuni di questi sono in qualche modo soggettivi o specifici del dominio (ad esempio, i buoni principi di progettazione della GUI possono variare a seconda delle culture o dipendono dal contesto di utilizzo, si pensi all'utilizzo militare rispetto al consumo).
Ciò che mi interessa è una forma più profonda di qualità correlata alla rete (o al grafico) dei tipi e alla loro interrelazione, ovvero a quali tipi fa riferimento ciascun tipo, ci sono cluster chiaramente identificabili di interconnettività relativi a un architettura a più livelli, o viceversa esiste una grande "sfera" di riferimenti di tipo (codice "monolitico"). Anche le dimensioni di ciascun tipo e / o metodo (ad esempio misurate in quantità di codice byte Java o .Net IL) dovrebbero fornire indicazioni su dove sono stati implementati algoritmi complessi di grandi dimensioni come blocchi monolitici di codice anziché essere scomposti in più gestibili / gestibili pezzi.
Un'analisi basata su tali idee potrebbe essere in grado di calcolare metriche che sono almeno un proxy per la qualità. Sospetto che i punti soglia / decisione esatti tra alta e bassa qualità siano soggettivi, ad esempio poiché per manutenibilità intendiamo manutenibilità da parte dei programmatori umani e quindi la decomposizione funzionale deve essere compatibile con il modo in cui funzionano le menti umane. Pertanto mi chiedo se ci possa mai essere una definizione matematicamente pura della qualità del software che trascenda tutto il software possibile in tutti gli scenari possibili.
Mi chiedo anche se questa sia un'idea pericolosa, che se i proxy oggettivi per la qualità diventano popolari, le pressioni del business indurranno gli sviluppatori a perseguire questi parametri a spese della qualità complessiva (quegli aspetti della qualità non misurati dai proxy).
Un altro modo di pensare alla qualità è dal punto di vista dell'entropia. L'entropia è la tendenza dei sistemi a ritornare dagli stati ordinati a stati disordinati. Chiunque abbia mai lavorato su un mondo reale, un progetto software di medie e grandi dimensioni apprezzerà il grado in cui la qualità della base di codice tende a deteriorarsi nel tempo. Le pressioni aziendali generano generalmente cambiamenti che si concentrano su nuove funzionalità (eccetto dove la qualità stessa è il principale punto di forza, ad esempio nel software avionico), e l'erosione della qualità attraverso problemi di regressione e funzionalità "scarpata" dove non si adatta bene una prospettiva di qualità e manutenzione. Quindi, possiamo misurare l'entropia del software? E se sì, come?