Perché è inappropriato utilizzare i diagrammi UML per pianificare come sarà organizzato il codice?

9

So, yes, diagrams can be inappropriate at times. When are they inappropriate? When you create them without code to validate them, and then intend to follow them. There is nothing wrong with drawing a diagram to explore an idea.

Agile Software Development: Principles, Patterns, and Practices - Robert C. Martin

Che cosa intende esattamente con questo? UML non è progettato per aiutarti a pianificare come strutturare il tuo codice prima "immersione"? A che serve usarlo se non segui i diagrammi che ti sono venuti in mente?

Contesto: in questo capitolo, lo zio Bob crea un diagramma UML per il segnapunti di un gioco di bowling. Quindi prosegue lo sviluppo del programma in modalità test driven, senza consultare il diagramma UML. Il programma risultante non assomiglia al diagramma UML e lo zio Bob giunge alla conclusione citata sopra.

    
posta q126y 15.12.2015 - 06:30
fonte

2 risposte

19

Per spiegarlo correttamente, abbiamo bisogno di una breve lezione di storia. Nei primi tempi dell'ingegneria del software, un'analogia usata spesso era la costruzione di una casa. Un architetto e un ingegnere strutturale discutono i piani con un cliente e escogitano un progetto. I costruttori seguono quindi il progetto per costruire la casa vera e propria. Il codice di scrittura è stato visto come l'equivalente di costruire la casa reale. Quindi, c'era una percezione della necessità di una progettazione anteriore prima che quella costruzione potesse aver luogo. Sono stati creati vari strumenti di progettazione grafica, con UML come uno di questi.

L'idea originariamente di UML era che si progetterebbe un sistema con UML, quindi lo si consegnerebbe ai programmatori per tradurre quel progetto in codice. In realtà, questo non funziona e ha portato ad anni di programmatori considerati "implementatori", piuttosto che "progettisti", i progetti sono in ritardo, i progetti devono cambiare costantemente dopo che avrebbero dovuto essere completi ecc.

La ragione è semplice. La codifica è design . Con l'analogia della casa, il codice è i disegni dell'architetto. Il compilatore è il costruttore che prende quei progetti e crea un programma da loro. Questa consapevolezza portò quindi a tecniche agili, alla nascita di TDD ecc.: Strumenti per aiutare a migliorare la qualità di quel design di codice.

Proprio come un architetto potrebbe produrre schizzi preliminari per aiutare lei e il suo team a visualizzare il progetto generale, così uno sviluppatore potrebbe usare UML o altri strumenti per aiutare a visualizzare il progetto necessario. Proprio come quegli schizzi non sono seguiti ciecamente, quindi l'UML non dovrebbe essere seguito ciecamente. La progettazione del codice dovrebbe evolversi da iterazioni agili e utilizzando TDD. Allo stesso modo, proprio come un architetto potrebbe costruire un modello della casa per aiutare lei e il suo team a visualizzare i disegni, così UML può essere usato per aiutare a visualizzare la struttura del codice.

Come dice lo zio Bob, non puoi convalidare l'UML, puoi solo convalidare il codice. Pertanto, il codice è la documentazione di progettazione principale e UML, se utilizzato, è solo documentazione secondaria.

    
risposta data 15.12.2015 - 12:10
fonte
3

Immagino che non tutti gli idiomi di programmazione (o design, o codice) si inseriscano in UML (che ammetto di non conoscere bene, leggono solo alcuni libri su di esso-, non l'ho mai usato, e probabilmente non mi piace ).

Il codice C semplice (ad esempio il codice sorgente del kernel Linux) potrebbe non essere esattamente modellato da UML.

Il codice Ocaml (con i suoi moduli e funtori) o anche il codice C ++ 11 (con lambdas e modelli) potrebbe non rientrare in UML.

La programmazione multistadio alla MetaOcaml probabilmente non si adatta a UML.

Il codice Prolog o il codice Common Lisp probabilmente non si adatta a UML.

Vedi anche questo answer & questa domanda.

Leggi la Pragmatica del linguaggio di programmazione di Scott e Van Roy's Concepts, Techniques and Models of Computer Programming libri, quindi chiediti se ogni modello di programmazione è compatibile con UML.

Vedi anche il blog di Design Dead? di Martin Fowler.

    
risposta data 15.12.2015 - 09:46
fonte

Leggi altre domande sui tag