Per molte persone IT, incluso me stesso qualche anno fa, il processo di sviluppo software ideale prevede la creazione di documenti di progettazione dettagliati con molti diagrammi UML prima che venga scritta una riga di codice. (Questa sembra una descrizione del modello a cascata, ma è la stessa con agile, tranne per il fatto che le iterazioni sono più piccole.)
Negli ultimi due o tre anni, ho completamente cambiato idea. Penso ancora che una specifica dettagliata dei requisiti con i casi di test associati sia assolutamente essenziale. Per progetti di grandi dimensioni, richiederei anche una descrizione generale dell'architettura prima di iniziare a programmare. Ma tutto il resto dovrebbe essere fatto nel codice il più possibile. Nel caso ideale non dovrebbe esserci una descrizione della progettazione del software tranne il codice stesso.
Come sono arrivato a questa conclusione? Ecco alcuni argomenti:
Risposta
Gli strumenti per scrivere documenti o creare diagrammi forniscono un feedback scarso. Sì, esistono strumenti di modellazione che eseguono alcuni controlli di coerenza sui diagrammi UML ma sono limitati e comportano un sacco di costi generali.
Senza feedback è difficile riconoscere e correggere gli errori.
Non appena scrivi il codice, ricevi molti feedback, ad esempio:
- Errori e avvisi dal compilatore
- Risultati dell'analisi del codice statico
- Test unitari
Gli errori possono essere rapidamente riconosciuti e corretti.
Consistenza
Per assicurarti che il codice sia coerente con i tuoi documenti devi controllare ancora e ancora. Se ci sono cambiamenti frequenti, è difficile mantenere sincronizzati codice e documenti.
refactoring
Esistono potenti strumenti e tecniche per il refactoring del codice, mentre il refactoring delle descrizioni o dei diagrammi testuali è solitamente difficile e soggetto a errori.
C'è un presupposto per farlo funzionare: il codice deve essere abbastanza facile da leggere e capire. Questo probabilmente non può essere raggiunto con Assembler, Basic o Fortran ma i linguaggi moderni (e le librerie) sono molto più espressivi.
Quindi, se i miei argomenti sono validi, dovrebbe esserci una tendenza verso specifiche o documentazione di progettazione software meno o più leggere. Esistono prove empiriche per questa tendenza?