Quello che stai cercando si chiama round-trip engineering . Ci sono strumenti più e meno solidi disponibili per questo.
L'idea di base dell'ingegneria round-trip è questa:
- È possibile apportare modifiche al diagramma UML nello strumento di modellazione UML e la modifica viene automaticamente riflessa in un aggiornamento del codice (ad esempio, si aggiunge un metodo alla classe UML e lo strumento aggiunge il metodo all'h. e .cpp)
- È possibile apportare una modifica al codice sorgente e il diagramma UML viene aggiornato automaticamente.
Mentre l'ingegneria circolare a tutto tondo è praticamente uno sforzo di ricerca in corso, ci sono strumenti là fuori, che almeno in parte lo supportano. In particolare, tali strumenti di solito supportano la conversione di progetti esistenti e in tale processo consentono di creare diagrammi UML dallo stato corrente della sorgente.
Quindi, invece di aggiornare manualmente i diagrammi, è possibile rigenerarli ogni volta che è necessario mostrare i progressi e solo perdere un po 'di tempo per il layout o selezionare parti rilevanti per la presentazione. Ma in particolare, ti garantiamo che i diagrammi che hai mostrato contengono esattamente le informazioni presenti nel tuo codice sorgente.
Per C ++ temo di conoscere solo uno di questi strumenti: Enterprise Architect . Sono sicuro che ce ne sono di più, comunque.
Come nota finale: l'automazione a questo livello è lungi dall'essere perfetta. Otterrai un diagramma UML decente, ma certamente non qualcosa del genere che avresti ottenuto da solo. Prima di tutto, una volta che si lascia il regno della struttura statica e si vogliono diagrammi comportamentali, la maggior parte degli strumenti non è solo una perdita totale, ma produce un output totalmente inutile. E in secondo luogo, anche per la struttura statica, è un argomento difficile derivare aggregazione / composizione / associazione (classi) / ecc. automaticamente dal codice sorgente. Dato che la maggior parte dei generatori di codice sono ancora sintonizzati manualmente per produrre gli output desiderati nell'ovvio modello UML - > direzione del codice, è comprensibilmente molto più difficile generalizzare la direzione opposta.