Can you use UML in a TDD project?
L'uso di TDD non impedisce l'uso di UML, né l'uso di UML impedisce il TDD. In effetti, sospetto che l'utilizzo di UML come strumento di progettazione per catturare il comportamento e le interazioni del sistema renderebbe più semplice scrivere i test prima. Avresti un modello di riferimento dell'implementazione da utilizzare. Tuttavia, mentre implementi, dovresti anche tenere aggiornato il tuo UML, altrimenti perderà rapidamente il suo valore.
If so, at what stage? or it is also an iterative process?
Se applichi UML in un progetto, ci sono tre punti in cui sarebbe più utile.
Il primo sarebbe quando si progetta l'architettura del sistema, in cui si vorrebbe probabilmente usare diagrammi di componenti, di implementazione e di comunicazione per mostrare quanto pezzi grandi del sistema si adatteranno insieme e dove ciascun componente verrà implementato. Un diagramma di distribuzione sarebbe particolarmente utile in un sistema distribuito, in cui i nodi avranno responsabilità e capacità diverse.
Il prossimo punto sarebbe una fase di progettazione più dettagliata, quando inizierai a pianificare le interazioni a livello di classe e metodo. In questo caso, probabilmente troverai utile la classe, la struttura composita, la sequenza, l'oggetto e i diagrammi di stato. I diagrammi specifici di cui avresti bisogno dipendono molto dalla complessità del sistema e da ciò che desideri mostrare.
In ciascuna di queste due fasi, l'uso di UML consente di eseguire revisioni del design. Puoi convalidare il tuo design in base alle tue esigenze per assicurarti di non mancare nulla. In un ambiente TDD, potresti voler utilizzare queste recensioni per identificare potenziali problemi con l'implementazione dei test.
Le fasi finali saranno durante lo sviluppo, la manutenzione e la valorizzazione. Hai un'architettura e un design catturati a cui puoi fare riferimento. Questo dovrebbe anche catturare il tuo ragionamento. Mentre continui a far crescere il tuo sistema, puoi vedere le tue vecchie decisioni di progettazione insieme al motivo per cui le hai create, per determinare la fattibilità e l'entità delle modifiche apportate all'aggiunta di nuove funzionalità. Fornisce anche un progetto da cui partire quando si sviluppa il sistema - hai fatto almeno parte del pensiero in anticipo, quindi non devi preoccuparti di connettere i tuoi moduli al volo.
La modellazione iterativa è sicuramente qualcosa a cui aspirare. Non solo dovresti rivedere i tuoi modelli all'inizio di ogni iterazione mentre stai progettando e pianificando nuove funzionalità, ma dovresti anche considerare il reverse engineering per cercare di mantenere i tuoi modelli aggiornati. Non tutti gli strumenti possono automaticamente decodificare tutti i tipi di diagrammi, ma puoi provare a mantenere gli altri manualmente aggiornati. Se lasci che un diagramma diventi obsoleto, assicurati di denotarlo o annullarlo da qualsiasi repository o documento in modo da non prendere decisioni basate su dati non validi.
If iterative, how formal?
Dipende.
Tendo ad essere più informale con i miei modelli UML. Uso la notazione che ho bisogno di trasmettere a me stesso e agli altri esattamente ciò che il sistema sta facendo. Tendo ad essere più minimalista, concentrandomi sull'ottenere un messaggio particolare per me e per altri ingegneri da utilizzare durante lo sviluppo del sistema. Catturo il messaggio nel testo (come le note sul diagramma o incorporando il diagramma in un documento Word insieme a un testo esplicativo) L'idea è che mentre sviluppo il sistema, sto anche sviluppando la documentazione per me stesso e gli altri.
Also, how useful is UML for a solo programmer doing open source?
Se si tratta di un piccolo sistema che sarà costruito abbastanza rapidamente (< 6 mesi di sviluppo coerente, o così, proprio come una stima immediata) da uno o due sviluppatori, l'impatto di UML sarebbe probabilmente minimo. Per un periodo di tempo più lungo, per sistemi più complessi o con un team più grande, ti aiuterà a prendere decisioni architettoniche e di design e a comunicarle attraverso il team di sviluppo.
Il punto di UML non riguarda te, ma la comunicazione. Se e quando altre persone si uniscono al tuo progetto come tester o sviluppatori, avere modelli UML aggiornati può aiutarli a capire meglio il loro sistema. Una comprensione più veloce significa che sono più facilmente in grado di mettersi al passo e iniziare a contribuire, un vantaggio per tutti.