Bene, la misura che uso, o mi piace pensare di usare, è questa:
Per ogni requisito funzionale indipendente, a una sola riga, prendere o lasciare, è necessario eseguire un'istantanea del codice prima di implementarlo. Quindi implementalo, incluso trovare e correggere eventuali bug introdotti nel processo. Quindi esegui un diff
tra il codice base prima e dopo. Il diff
ti mostrerà un elenco di tutti gli inserimenti, le eliminazioni e le modifiche che hanno implementato la modifica. (Come inserire 10 righe consecutive di codice è one modificare.) Quanti cambiamenti ci sono stati? Il numero più piccolo è, in genere, il codice più gestibile è.
Io chiamo la ridondanza del codice sorgente, perché è come la ridondanza di un codice che corregge gli errori. L'informazione era contenuta in 1 blocco, ma era codificata come N pezzi, che devono essere tutti fatti insieme, per essere coerenti.
Penso che questa sia l'idea alla base di DRY, ma è un po 'più generale. Il motivo per cui è buono che il conteggio sia basso è, se occorrono N modifiche per implementare un tipico requisito, e come programmatore fallibile hai solo ottenuto il N-1 o il N-2 in modo corretto all'inizio, hai inserito 1 o 2 bug.
Oltre allo sforzo di programmazione O (N), questi bug devono essere scoperti, localizzati e riparati. Ecco perché la piccola N è buona.
Mantenibile non significa necessariamente leggibile, per un programmatore che non ha imparato come funziona il codice.
L'ottimizzazione di N potrebbe richiedere alcune operazioni che creano una curva di apprendimento per i programmatori.
Ecco un esempio.
Una cosa che aiuta è se il programmatore cerca di anticipare le modifiche future e lascia indicazioni su come fare nel commento del programma.
Penso che quando N viene ridotto abbastanza (l'optimum è 1) il codice sorgente è più simile a un dominio specifico della lingua (DSL). Il programma non "risolve" il problema in quanto "afferma" il problema, perché idealmente ogni requisito viene semplicemente rideterminato come un singolo pezzo di codice.
Sfortunatamente, non vedo le persone che imparano a fare così tanto. Piuttosto sembrano pensare che i nomi mentali dovrebbero diventare classi, ei verbi diventano metodi, e tutto ciò che devono fare è girare la manovella. Ciò si traduce in codice con N di 30 o più, nella mia esperienza.