Come gestisci il design in Scrum?


26

Come gestisci il design in Scrum? Hai ancora documenti di design ben scritti per ogni iterazione della mischia? Ti basta fare delle note di progettazione con diagrammi UML? O hai solo un codice ben commentato?

Ogni iterazione può comportare una modifica del design, quindi volevo solo sapere come le persone lo catturano, così i nuovi sviluppatori hanno un lavoro facile per comprendere il dominio e salire a bordo il più rapidamente possibile.


Il design dovrebbe essere gestito in modo incrementale dal team, sia prima di uno sprint che durante. La maggior parte dei team incorpora il perfezionamento del backlog come attività in corso per rivedere i prossimi elementi del backlog. Questo è il momento perfetto per il team per progettare e progettare abbastanza la soluzione per stimare lo sforzo. Qualsiasi artefatto creato dovrebbe essere allegato alla storia. Durante lo sprint, dovrebbero verificarsi attività di progettazione e architettura a grana più fine. Allega anche questi artefatti. Una volta completata la storia, dovrebbero esserci molte informazioni sulla soluzione fornita.
Treefiddy,

Risposte:


11

solo perché è mischia non significa che tutto cambi ad ogni scatto!

Scrum significa fare ciò che è necessario (ma non di più) . Devi ancora fare il disegno e devi ancora documentare. È solo che l'importo non è fisso né come farlo.

Parte della pianificazione di ogni sprint è decidere cosa deve essere fatto. Se è necessario progettare qualcosa nel backlog perché influisce su altre cose, è necessario aggiungere un'attività specifica per i processi di progettazione e farlo prima dell'attività di implementazione.


9

Ho molto da dire su questo argomento. Ho visto molti casi in cui aziende / team / persone affermano di utilizzare un approccio Agile al software, ma in realtà vogliono raccogliere i frutti che i metodi Agile promettono senza aderire ai principi.

Affinché l'iterazione rapida funzioni, è necessario eseguire uno sviluppo guidato dai test (ho smesso di dire che devi fare riluttante TDD). In TDD, i tuoi test esprimono il design e l'intento del codice (quando dicono "il codice è la documentazione" quello che dovrebbero dire è "i test sono la documentazione"). Scrivendo unit test che esprimono la tua comprensione della funzionalità a portata di mano stai dichiarando esplicitamente ciò che ritieni debba fare il codice. Quindi scrivi il codice che lo fa. Quindi refactoring quel codice in modo che aderisca ai buoni principi architettonici "Red-Green-Refactor".

L'esecuzione dei test unitari con ogni check-in (o anche prima di ogni check-in) verifica che il nuovo codice che hai scritto non interrompa la funzionalità prevista in qualche altra area dell'applicazione. Ciò fornisce una rete di sicurezza che consente di modificare il codice con l'abbandono senza problemi. Man mano che aumenta la comprensione dei requisiti a portata di mano, è possibile modificare il test per riflettere quella nuova conoscenza. Il vero design risiede nei test unitari. Tutto il resto (incluso il codice che non è coperto) è una bugia.

Ecco alcune letture consigliate

Questi sono buoni posti per iniziare a cercare di imparare come affrontare veramente lo sviluppo agile.


4
@Murph: L'idea è che l'architettura sia emergente, che dovresti trovarla attraverso i test piuttosto che definirla in anticipo.
Martin Wickman,

5
@Martin In un certo senso vedo - ma ci sono ancora orribili problemi di scala lì. Mi sento a mio agio fino a un certo livello, ma oltre a quello ... beh, suppongo che probabilmente avresti dovuto farlo (o almeno avere una struttura iniziale) prima di arrivare al livello di mischia dello sviluppo (in cui ci si potrebbe aspettare il squadra per affinare ed evolvere l'architettura di alto livello e il basso).
Murph

2
@Murph: Sì il bootstrap è un problema. È necessario selezionare almeno il linguaggio di programmazione. Requisiti non funzionali come la scalabilità e le prestazioni influenzano molto l'architettura e devono essere presi in considerazione al più presto. Ma a parte questo, mi piace iniziare nel modo più semplice possibile, quindi aggiungere in modo incrementale e iterativo funzionalità di lavoro (yagni) fetta per fetta. Concentrati sul refactoring per mantenere pulita la base di codice ed estrarre elementi finché non viene visualizzato il progetto.
Martin Wickman,

1
Il motivo per cui Scrum è iterativo è che la natura stessa del software significa che non lo facciamo mai bene la prima volta. In molti casi le parti interessate non sanno cosa vogliono veramente fino a quando non hanno qualcosa di fronte a loro. Cosa c'è di meglio: passare ore a creare un progetto per una funzione (che dovrà essere perfezionata o molto probabilmente eliminata quando la gomma colpisce il marciapiede) e comunicando tale progetto all'implementatore; o passare quelle ore a implementare un primo passaggio per la funzione e perfezionarlo attraverso test e refactoring.
Michael Brown,

3
A proposito, non ti accorgerai mai del vero valore di TDD fino a quando un test diventerà INASPETTAMENTE rosso. Quello è stato il mio grande momento "aha" con TDD. Guardando il test che è appena diventato rosso, mi sono reso conto che senza il test, il bug sarebbe stato molto difficile da rintracciare dopo che il codice era nelle mani dei tester. Se hai bisogno di vedere un'architettura top-down di alto livello, ci sono molti strumenti che possono generare diagrammi di sequenza e classe dal tuo codice. Usa quelli per ottenere un rapporto di istantanea e smaltirli perché non sono la legge.
Michael Brown,

2

Scrum è una metodologia di gestione del progetto, non una metodologia di sviluppo del software. Scrum viene in genere utilizzato in combinazione con una metodologia Agile. Qui sta la tua risposta.


4
Scrum è una metodologia agile, focalizzata sul team di sviluppo e sugli stakeholder e che ottiene consegne iterative di codice funzionante. La gestione dei progetti dall'alto in basso e Scrum sono come olio e acqua.
Michael Brown,

1
@Mike ha concordato, ma ho sempre sentito che Scrum è la metodologia agile di un project manager mentre Extreme Programming è la metodologia agile di uno sviluppatore. Detto questo, ho visto Scrum applicato a molti progetti diversi dal software. È interessante notare che Wikipedia fornisce questa definizione di Scrum: Scrum è una metodologia iterativa e incrementale per la gestione dei progetti spesso vista nello sviluppo di software agile, un tipo di ingegneria del software: en.wikipedia.org/wiki/Scrum_(development) .
ahsteele,

2
Ho appena realizzato che ho accidentalmente ridimensionato il tuo commento ... non volevo. Non mi lasceranno rimuovere quel voto a meno che tu non faccia una modifica minore. Non ho mai visto Scrum descritto come un metodo di gestione del progetto prima. Interessante. Detto questo, penso che aspettarsi che Scrum funzioni per il software senza applicare TDD è il motivo per cui molti tentativi di "fare agile" falliscono.
Michael Brown,

1

Non c'è tanto design frontale quanto i requisiti cambiano spesso. Quindi progettare a livello di classe è generalmente una perdita di tempo. Tuttavia, può essere utile abbozzare decisioni architettoniche di livello superiore.

Il problema con la realizzazione di documenti di progettazione pesanti è che sono obsoleti non appena vengono creati. Quindi ciò che ha funzionato meglio è di solito una documentazione di alto livello che difficilmente cambierà completamente in breve tempo.


1
Non direi che i requisiti cambiano costantemente. Infatti durante uno sprint i requisiti sono statici e invariati. Dopo ogni sprint è possibile rivalutare la priorità dei requisiti. Acquista il tuo obiettivo generale non cambierà.
Martin York,

@Martin buon punto. Immagino che dovrei riformulare che stanno cambiando da mischia a mischia.
Vadim,

1

Scrum è un modello iterativo e incrementale basato su valori agili . Ciò significa che non hai una fase di progettazione separata. L'idea è che dovresti occuparti costantemente del design, così come ti occupi costantemente dell'analisi, dell'implementazione, del testing e dell'integrazione nel corso del progetto.

Hai bisogno di un po 'di pianificazione affinché questo funzioni. Partecipa alla riunione di pianificazione dello sprint , in cui il team stima le attività per lo sprint a venire. Molte persone non si rendono conto che questo non è solo un incontro di stima, ma anche uno sforzo di progettazione. Ad esempio, un'attività potrebbe essere "Aggiungi codice per nuovo modello di auto". Non puoi ancora stimarlo, devi sapere un po 'di più. Quindi il team discute del design e propone una soluzione ampia ("Auto di sottoclasse?") E lo aggiunge come promemoria all'attività. Raramente hai bisogno di più formalità di quella. Ora hai un'idea di come risolvere il problema. Non hai ancora tutti i dettagli e va bene, conosci abbastanza il design da poter fare una stima comoda. Senza dover creare alcun diagramma (a questo punto).

Per la vera documentazione fisica , consiglio di creare un diagramma di panoramica dei sistemi su una parete che tutti possano vedere. La panoramica deve solo includere le classi e i moduli più importanti e raramente dovrebbe essere aggiornata. Inoltre, la creazione di alcuni diagrammi di stato per le classi più importanti nel sistema è molto utile. Cospargere con alcuni diagrammi di sequenza selezionati di casi d'uso tipici per consentire alle persone di vedere rapidamente come sono collegati gli oggetti. Presumo che tu possa generare diagrammi di gerarchia di classi dal tuo codice, in modo tale problema sia facilmente risolto.

Si noti che tutti i diagrammi vengono creati dopo l'implementazione effettiva. Ciò è coerente con il "software funzionante sulla documentazione completa" e la progettazione just-in-time.

E sì, il codice leggibile è sicuramente documentazione.


1

L'architettura generale del progetto e il design di alto livello verrebbero realizzati al di fuori dei team di scrum quando i proprietari del progetto stanno creando le storie.

Deve esserci abbastanza di un disegno complessivo scritto in qualsiasi forma per aiutare a vedere la relazione tra le storie e le aspettative del cliente.

Parte della progettazione necessaria per ogni storia sarebbe stata fatta durante la pianificazione e la negoziazione con il proprietario del prodotto durante la pianificazione.

La maggior parte dello sforzo progettuale per una storia verrebbe fatto nello sprint.

Se la storia non è abbastanza definita per essere stimata, allora una finestra temporale potrebbe essere messa da parte nello sprint corrente per fare abbastanza lavoro di progettazione da poter creare una storia appropriata per uno sprint successivo.


0

La mia comprensione è che si esegue una progettazione di livello superiore con i requisiti iniziali che si raccolgono all'inizio del progetto. Documentate bene questo disegno.

Quindi, quando si implementa effettivamente il requisito, si modifica la progettazione di livello inferiore come è necessario, ma si evita di modificare la progettazione di livello superiore.

Bene, è così che mi è stato spiegato cinque minuti fa comunque ...


0

Oggi esiste una divisione all'interno della comunità Eclipse tra strumenti UML tradizionali focalizzati su MDD in cui il modello guida il codice / sviluppo e Omondo che ritiene che le iterazioni dovrebbero guidare il processo di sviluppo e certamente non solo il modello.

Sono d'accordo con loro perché MDD è una schifezza mentre UML è davvero un modo eccellente perché standardizzare per comunicare con altri membri del team. testo alternativo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.