MokaByte 93 - Febbraio 2005
Pratiche di sviluppo del software
V parte: Spike Solution
di
Stefano Rossini
Nei precedenti articoli abbiamo presentato alcune importanti pratiche per lo sviluppo del software. Nello specifico abbiamo esaminato: Test Driven Development, Continuous Integration, Collective Code Ownership, Pair Programming e Coding Standards. In questo articolo ci dedicheremo ad un'altra fondamentale pratica denominata dall'Agile Modeling, Prove It With code (vedere [PAM]). In XP tale pratica viene denominata Spike Solution (vedere [XP_CSS]) mentre in RUP si parla di Proof Of Concept (vedere [SA_AMRUP]).

Spike: Cos'è ?
La pratica Prove It With Code / Spike Solution / Build Prototypes (vedere [AC_PRT]), prevede di sviluppare un prototipo laddove si sia in presenza di dubbi e/o potenziali rischi (a livello di Analisi / Design / Applicativo / Tecnologico) da chiarire / esplorare / consolidare.
In XP, tale programma di prova viene chiamato Spike.

 

Spike: Perché ?
Lo Spike è utile in svariate situazioni:

  • Consolidare la validità delle principali scelte architetturali intraprese e verificare i punti ritenuti delicati e/o critici del Modello di Design
  • Esplorare costi e benefici legati al Design effettuato (es: utilizzo corretto dei pattern, verificare se il Design è sotto-ingegnerizzato o sovra-ingegnerizzato, …)
  • Esplorare ed approfondire aree di Analisi/Design/Tecnologiche poco chiare per ridurre il rischio di incorrere in problemi tecnici durante la fase di sviluppo
  • Ottenere indicazioni attendibili sulla mole di lavoro necessaria per implementare requisiti particolarmente impegnativi
  • Migliorare la conoscenza tecnica (es. scarsa conoscenza del linguaggio, uso prodotti di nuova generazione o mai usati in precedenza).
  • Sperimentare in modo mirato nuove tecnologie

Spike: Come ?
Lo Spike può assumere varie "forme e dimensioni" in funzione dello specifico obiettivo per cui viene creato. Ad esempio, per validare presso il Customer un'interfaccia grafica complessa, si può decidere di realizzare una pagina statica HTML che in tempi rapidi proponga il layout al Customer, consentendo di raccogliere gli eventuali feedback prima della realizzazione definitiva (JSP/ASPX).


Figura 1: Uno Spike GUI


Uno Spike può anche essere una semplice classe di test che, ad esempio, metta in rilievo le funzionalità ed il comportamento di uno o piu' oggetti di business che solo in un secondo momento saranno realizzati nella loro completezza.


Figura 2: Uno Spike costituito da una classe Java di Test


Nei casi piu' delicati/complessi si può trattare di un prototipo completo (end-to-end) che implementi una o piu' funzionalità campione e che consenta di verificare le principali scelte Architetturali o di validare una "Candidate Architecture".


Figura 3: Prototipo end-to-end

Nel caso si intenda verificare l'uso di linguaggi/prodotti/tecnologie nuove o mai usate in precedenza, uno Spike può essere utile per acquisire know-how.
Ad esempio negli articoli [MOKA_INT5] e [MOKA_JCA_CICS] abbiamo effettuato degli Spike per prendere confidenza con i web services e con i connettori JCA.


Figura 4: Spike tecnologici


Da quanto detto precedentemente si evince che lo Spike deve puntare, in modo "cinico" e mirato, a chiarire il motivo per cui è stato "pensato". Lo Spike deve quindi ignorare i dettagli implementativi (non deve andare in produzione) e può essere "grezzo" da un punto di vista di codifica. Per questo motivo, spesso, gli Spike non sono riusabili e devono essere "buttati via" una volta assolto il loro compito "esplorativo".

 

Spike: Quando ?
Come si è detto, uno Spike può essere avviato per ridurre possibili rischi o punti da chiarire/verificare, in questo senso è ipotizzabile ad ogni iterazione.
In RUP si prevede la costruzione di un prototpipo end-to-end alla fine di ogni iterazione nelle fasi di Inception/Elaboration (vedere [MOKAMET_1]) per capire la fattibilità/ritorni del progetto e per verificare/consolidare/approfondire le principali scelte Architetturali.
In XP lo Spike è invece previsto ad ogni iterazione nella fase di Pianificazione (vedere [MOKAMET_2]) principalmente per la stima di una user-story.



Figura 5: Quando effettuare uno Spike in XP


Conclusioni
Con questo articolo si conclude la mini-serie dedicate alle Pratiche di sviluppo del software.
Le pratiche che abbiamo presentato sono:

  • Test Driven Development (vedere [MOKA_TDD] e [MOKA_QS_2])
  • Refactoring (vedere [MOKA_REFAC])
  • Continuous Integration (vedere [MOKA_CI_1] e [MOKA_CI_2)])
  • Coding Standards (vedere [MOKAMET_2] e [MOKA_QS_1])
  • Collective Code Ownership e Pair Programming (vedere [MOKAMET_2])
  • Spike Solution

 

Bibliografia
[MOKAMET_1] S. Rossini: Processi e metodologie di sviluppo(II): introduzione alle
metodologie di sviluppo- Mokabyte 83 Marzo 2004
[MOKAMET_2] S. Rossini: Processi e metodologie di sviluppo(II): Le Metodologie Agili -
Mokabyte 85 Maggio 2004
[MOKA_TDD] S. Rossini, Pratiche di sviluppo del software (I): Test Driven Development,
MokaByte N.86 - Giugno 2004
[MOKA_REFAC] S. Rossini, Pratiche di sviluppo del software (IV): Il Refactoring
MokaByte N.86 - Giugno 2004
[MOKA_CI_1] Stefano Rossini, A. D'Angeli: Pratiche di sviluppo del software (II)
Continuous Integration: la teoria - Mokabyte N.87 Luglio Agosto 2004
[MOKA_CI_2] Stefano Rossini, A. D'Angeli: Pratiche di sviluppo del software (III)
Continuous Integration: la pratica - Mokabyte N.88 Settembre 2004
[MOKA_QS_1] S. Rossini: Qualità del software: auditing del codice
Mokabyte N. 90 - Novembre 2004
[MOKA_QS_2] S. Rossini: Qualità del software(II): i Test - Mokabyte N. 91 - Dicembre 2004
[MOKA_INT5] S.Rossini, A. D'Angeli: Integrazione di applicazioni Enterprise (V) MokabyteN.74-Settembre 2003
[MOKA_JCA_CICS] S. Rossini: JCA VI parte: un Resource Adapter per accedere a CICS -
MokaByte 89 - Ottobre 2004
[PAM] Scott W. Ambler: The Practices of Agile Modeling (AM)-
http://www.agilemodeling.com/practices.htm
[SA_AMRUP] http://www.agilemodeling.com/essays/agileModelingRUP.htm: S. Ambler: Agile Modeling and the Rational Unified Process (RUP)
[XP_CSS] Create Spike Solution: http://www.extremeprogramming.org/rules/spike.html
[WK_SS] Spike Solution: http://c2.com/cgi/wiki?SpikeSolution
[WK_SS2] http://c2.com/cgi/wiki?HowXpPlansDeploymentDiscussion
[XP] Estreme Programming: A gentle introduction - http://www.extremeprogramming.org [XP_12P] http://www.xpexchange.net/english/intro/practices.html
[AM_XP] Scott W. Ambler: Agile Modeling and eXtreme Programming (XP)
http://www.agilemodeling.com/essays/agileModelingXP.htm
[AC_PRT] AlistairCockburn's :
http://www.bell-labs.com/cgi-user/OrgPatterns/OrgPatterns?BuildPrototypes
[AC_CTF] AlistairCockburn's : Clear The Fog:
http://www.bell-labs.com/cgi-user/OrgPatterns/OrgPatterns?ClearTheFog


MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it