Recentemente ho avuto un'intervista con il team di sviluppo in un'azienda. Il team usa agile + TDD. L'esercizio del codice implementa un negozio di noleggio video che genera una dichiarazione per calcolare la tariffa di noleggio totale per ogni tipo di video (nuova versione, bambini, ecc.) Per un cliente. Il codice esistente usa l'oggetto come:
- Dichiarazione per generare una dichiarazione e una commissione di calcolo in cui si trova la dichiarazione di switch grande per utilizzare enum per determinare come calcolare la commissione di noleggio
- cliente detiene un elenco di noleggi
- classe base film e classe derivata per ogni tipo di film (NUOVO, BAMBINI, AZIONE, ecc.)
Il codice originariamente non viene compilato poiché si presume che il proprietario sia stato colpito da un bus. Quindi ecco cosa ho fatto:
- ha delineato il miglioramento rispetto al modello a oggetti per avere una migliore responsabilità per ogni classe.
- usa il modello di strategia per sostituire l'istruzione switch e intrecciarli in config
Ma il team dice che è una perdita di tempo perché non c'è alcun requisito e la suite di test UAT funziona ed è l'unica linea guida a prendere decisioni di architettura. La storia di fondo è solo per ottenere funzionalità di prezzo e non dire nulla su come farlo. Quindi la discussione è incentrata sul motivo per cui dovrebbe essere trascorso del tempo sul refactoring dell'affermazione dell'interruttore.
A mio avviso, la metodologia agile non significa zero design in anticipo e tale odore di codice dovrebbe essere evitato all'inizio. Inoltre, qualsiasi suite di test unità / UAT non rileverà tale odore di codice, altrimenti sonar, i findcugs non esistono.
Qui voglio chiedere:
- c'è una cosa chiamata design agile nella metodologia agile? Proprio come una documentazione agile.
- come definire anticipatamente il design agile? come sapere abbastanza è abbastanza? A mio modo di vedere, l'architettura del ballpark e il contratto di dati tra i componenti dovrebbero essere definiti prima / al momento dell'avvio del progetto, non i dettagli. Ho ragione?
- qualcuno può spiegare cosa sta veramente cercando il team in questo tipo di configurazione? è l'aspetto del design o l'aspetto agile?
- come implementare il concetto di prodotto minimo vitale nel processo agile nel progetto del mondo reale? È necessario che ti senti imbarazzato per essere MVP?