La maggior parte, se non tutte le persone IT che conosco, ritengono che sia utile modellare il software con UML o altri tipi di diagrammi prima della codifica. (La mia domanda non riguarda UML in particolare, potrebbe essere una descrizione grafica o testuale del design del software.)
Non ne sono così sicuro. Il motivo principale è: il codice non mente. Viene controllato dal compilatore o dall'interprete. Si spera che abbia test automatizzati e debba passare l'analisi del codice statico. Se un modulo non si interfaccia correttamente con un altro modulo, di solito è evidente nel codice perché viene visualizzato un messaggio di errore.
Tutto ciò non può essere fatto con diagrammi e altri documenti. Sì, ci sono strumenti che controllano UML, ma tutto ciò che ho visto finora è molto limitato. Pertanto questi documenti tendono ad essere incompleti, incoerenti o semplicemente falsi.
Anche se i diagrammi stessi sono coerenti, non si può essere sicuri che il codice li implementi effettivamente. Sì, ci sono generatori di codice, ma non generano mai tutto il codice.
A volte mi sembra che l'ossessione per la modellazione derivi dall'ipotesi che il codice debba inevitabilmente essere un pasticcio incomprensibile che architetti, designer o altre persone ben pagate che ottengono il quadro generale non dovrebbero avere a che fare. Altrimenti sarebbe troppo costoso. Pertanto, tutte le decisioni di progettazione devono essere allontanate dal codice. Il codice stesso dovrebbe essere lasciato agli specialisti (scimmie di codice) che sono in grado di scriverlo (e forse leggerlo) ma non devono occuparsi di nient'altro. Questo probabilmente aveva senso quando l'assemblatore era l'unica opzione, ma i linguaggi moderni consentono di codificare a un livello molto alto di astrazione. Quindi non vedo più la necessità di modellare.
Quali argomenti per la modellazione dei sistemi software mi mancano?
A proposito, credo che i diagrammi siano un ottimo modo per documentare e comunicare alcuni aspetti della progettazione del software, ma ciò non significa che dovremmo basare la progettazione del software su di essi.
Una precisazione:
La domanda è stata sospesa in quanto poco chiara. Pertanto, vorrei aggiungere qualche spiegazione:
Sto chiedendo se abbia senso usare documenti (non codificati) che modellano il software come fonte primaria di verità sulla progettazione del software. Non ho in mente il caso in cui una parte significativa del codice viene generata automaticamente da questi documenti. Se così fosse, considererei i documenti stessi come codice sorgente e non come modello.
Ho elencato alcuni svantaggi di questa procedura che mi fanno pensare al motivo per cui così tante persone (nella mia esperienza) lo considerano il modo preferibile di progettare il software.