Bene, la misura che uso, o mi piace pensare di usare, è questa:
Per ogni requisito funzionale indipendente, singolo, a una riga, take-it-or-Leave-it, eseguire l'istantanea della base di codice prima di implementarla. Quindi implementalo, incluso trovare e correggere eventuali bug introdotti nel processo. Quindi eseguire un diff
tra la base di codice prima e dopo. Il diff
vi mostrerà un elenco di tutti gli inserimenti, cancellazioni e le modifiche che ha implementato il cambiamento. (Come inserire 10 righe di codice consecutive è una modifica.) Quante modifiche ci sono state? Più piccolo è quel numero, in genere, più il codice è gestibile.
La chiamo ridondanza del codice sorgente, perché è come la ridondanza di un codice che corregge gli errori. Le informazioni erano contenute in 1 blocco, ma sono state codificate come blocchi N, che devono essere fatti tutti 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 quel conteggio sia basso, se N richiede 1 modifiche per implementare un requisito tipico, e come programmatore fallibile ottieni inizialmente solo N-1 o N-2, hai inserito 1 o 2 bug. Oltre allo sforzo di programmazione O (N), questi bug devono essere scoperti, individuati e riparati. Ecco perché la piccola N è buona.
Manutenibile non significa necessariamente leggibile, per un programmatore che non ha imparato come funziona il codice. L'ottimizzazione di N potrebbe richiedere alcune cose che creano una curva di apprendimento per i programmatori.
Ecco un esempio
Una cosa che aiuta è se il programmatore tenta di anticipare i cambiamenti futuri e lascia indicazioni pratiche nel commento del programma.
Penso che quando N viene ridotto abbastanza lontano (l'ottimale è 1) il codice sorgente legge più come un linguaggio specifico del dominio (DSL). Il programma non "risolve" tanto il problema in quanto "indica" il problema, perché idealmente ogni requisito è semplicemente riformulato come un singolo pezzo di codice.
Sfortunatamente, non vedo persone che imparano molto a farlo. Piuttosto sembrano pensare che i sostantivi mentali dovrebbero diventare classi e i verbi diventino metodi e tutto ciò che devono fare è girare la manovella. Ciò si traduce in codice con N di 30 o più, nella mia esperienza.