Non
La qualità del software è davvero difficile da misurare oggettivamente. Abbastanza difficile da non avere una soluzione. Mi sto trattenendo in questa risposta per dilettarmi sulla domanda se ci può essere una soluzione, ma semplicemente sottolineare perché definire uno sarebbe davvero difficile.
Ragionamento per status quo
Come ha sottolineato Kilian Foth, se esistesse una semplice misura per un "buon" software, lo useremmo tutti e tutti lo richiederebbero.
Ci sono progetti in cui i manager hanno deciso di applicare determinate metriche. A volte ha funzionato, a volte no. Non sono a conoscenza di correlazioni significative. Soprattutto i software di sistemi critici (ad esempio aeroplani, automobili, ecc.) Hanno molti requisiti metrici per "garantire" la qualità del SW - Non sono a conoscenza di studi che dimostrino che questi requisiti comportano effettivamente una qualità superiore e ho esperienze personali contrario.
Ragionamento da controspionaggio
Anche accennato da Kilian già, e più in generale definito come "ogni metrica può e verrà giocata".
Cosa significa giocare una metrica? È un gioco divertente per gli sviluppatori: assicurati che i valori della metrica siano davvero buoni, mentre fai cose davvero di merda.
Supponiamo che tu misuri i difetti per LOC. Come lo suonerò? Facile: basta aggiungere altro codice! Crea un codice stupido che si traduce in una non operazione su 100 righe e all'improvviso hai meno difetti per LOC. Soprattutto: in questo modo hai ridotto la qualità del software.
Le carenze degli strumenti vengono abusate, le definizioni vengono estese al massimo, vengono inventati modi completamente nuovi .. fondamentalmente, gli sviluppatori sono persone davvero intelligenti e se dovessi avere solo uno sviluppatore nel tuo team che si diverta a giocare con le metriche, le tue metriche saranno discutibili.
Questo non significa che le metriche siano sempre negative, ma l'atteggiamento del team nei confronti di queste metriche è cruciale. In particolare, ciò implica che non funzionerà bene per alcuna relazione di subappaltatore / fornitore di terze parti.
Ragionamento con targeting errato
Quello che vuoi misurare è la qualità del software. Quello che misuri è una o più metriche.
C'è un divario tra ciò che misuri e ciò che credi che ti dirà. Questo divario è addirittura enorme.
Succede sempre in tutti i tipi di aziende che ci circondano. Hai mai visto decisioni basate su KPI (indicatori chiave di prestazione)? È solo lo stesso problema: vuoi che un'azienda faccia bene, ma misuri qualcos'altro.
Ragionamento per quantificabilità
Le metriche possono essere misurate. Qual è l'unica ragione per cui li trattiamo affatto. La qualità del software, tuttavia, si estende ben oltre queste entità misurabili e ha molto che è molto difficile da quantificare: quanto è leggibile il codice sorgente? Quanto è estensibile il tuo design? Quanto è difficile ottenere nuovi membri del team? ecc ecc.
Giudicare la qualità del software solo in base alle metriche e chiudere un occhio sulle parti di qualità che non è possibile quantificare non funzionerà sicuramente.
modificare:
Sommario
Vorrei sottolineare che quanto sopra si basa sul giudicare obiettivamente se il software è buono o cattivo in base alle metriche. Ciò significa che non sta dicendo nulla su se e quando applicare le metriche.
In realtà, questa è un'implicazione unidirezionale: le metriche errate implicano un codice errato. Unidirezionale significa che il cattivo codice non garantisce metriche errate, né buone metriche garantiscono un buon codice. D'altra parte, questo di per sé significa che puoi applicare metriche per giudicare un pezzo di software, quando tieni a mente questa implicazione.
Misuri il software A e le metriche risultano davvero pessime. Quindi puoi essere certo che la qualità del codice è scarsa. Misuri il software B e le metriche sono ok, quindi non hai idea della qualità del codice. Non farti ingannare dal pensiero "metrica buona = codice buona" quando in realtà è "buona codifica => metrica buona".
In sostanza, puoi utilizzare le metriche per trovare problemi di qualità, ma non la qualità stessa.