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 specificamente UML, potrebbe essere qualsiasi 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. Speriamo che abbia dei test automatici e che debba passare l'analisi del codice statico. Se un modulo non si interfaccia correttamente con un altro modulo, di solito è ovvio nel codice perché ricevi un messaggio di errore.
Tutto questo 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 semplici falsi.
Anche se i diagrammi stessi sono coerenti, non puoi essere sicuro che il codice li implementa effettivamente. Sì, ci sono generatori di codice, ma non generano mai tutto il codice.
A volte mi sento come l'ossessione per i risultati della modellazione dal presupposto 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 con. Altrimenti sarebbe troppo costoso. Pertanto tutte le decisioni di progettazione dovrebbero essere spostate dal codice. Il codice stesso dovrebbe essere lasciato agli specialisti (code monkeys) che sono in grado di scrivere (e magari leggerlo) ma non devono occuparsi di 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à della modellazione.
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 del design del software, ma questo non significa che dovremmo basare sul design del software su loro.
Chiarimento:
La domanda è stata messa in sospeso come non chiara. Quindi aggiungo qualche spiegazione:
Sto chiedendo se ha senso usare documenti (non di codice) che modellano il software come fonte primaria di verità sulla progettazione del software. Non ho il caso in mente dove una parte significativa del codice viene generata automaticamente da questi documenti. Se fosse così, considererei i documenti stessi come codice sorgente e non come modello.
Ho elencato alcuni svantaggi di questa procedura che mi fanno chiedere perché così tante persone (nella mia esperienza) lo considerano il modo preferibile di fare progettazione del software.