Per molte persone IT, incluso me stesso alcuni anni fa, il processo di sviluppo del software ideale implica la creazione di documenti di progettazione dettagliati con molti diagrammi UML prima che venga scritta una riga di codice. (Sembra una descrizione del modello a cascata, ma è lo stesso con agile, tranne per il fatto che le iterazioni sono più piccole.)
Negli ultimi due o tre anni, ho completamente cambiato idea. Continuo a pensare che una specifica dettagliata dei requisiti con i casi di test associati sia assolutamente essenziale. Per i progetti di grandi dimensioni, richiederei anche una descrizione dell'architettura generale prima di iniziare a codificare. Ma tutto il resto dovrebbe essere fatto in codice il più possibile. Nel caso ideale non dovrebbe esserci alcuna descrizione del design del software tranne il codice stesso.
Come sono arrivato a questa conclusione? Ecco alcuni argomenti:
Feedback
Gli strumenti per scrivere documenti o creare diagrammi forniscono pochi feedback. Sì, ci sono strumenti di modellazione che eseguono alcuni controlli di coerenza sui diagrammi UML, ma sono limitati e hanno un sacco di spese generali.
Senza feedback è difficile riconoscere e correggere gli errori.
Non appena scrivi il codice, ottieni molti feedback, ad esempio:
- Errori e avvisi dal compilatore
- Risultati dell'analisi del codice statico
- Test di unità
Gli errori possono essere rapidamente riconosciuti e risolti.
Coerenza
Per assicurarti che il codice sia coerente con i tuoi documenti, devi controllare ancora e ancora. Se ci sono cambiamenti frequenti, è difficile mantenere sincronizzati il codice e i documenti.
refactoring
Esistono potenti strumenti e tecniche per il refactoring del codice mentre il refactoring di descrizioni o diagrammi testuali è solitamente difficile e soggetto a errori.
C'è una precondizione per fare in modo che funzioni: Il codice deve essere abbastanza semplice da leggere e capire. Questo probabilmente non può essere ottenuto con Assembler, Basic o Fortran ma i linguaggi (e le librerie) moderni sono molto più espressivo.
Quindi, se i miei argomenti sono validi, dovrebbe esserci una tendenza verso le specifiche e la documentazione del design del software meno o più leggero. C'è qualche prova empirica per questa tendenza?