Java e solidarietà: il progetto Jug4Tenda www.jugancona.it Jug Marche Relatore: Andrea Del Bene
Java e solidarietà: il progetto Jug4Tenda Agenda Storia del progetto Architettura Processo di sviluppo Riferimenti e contatti
Storia del progetto: il Jug Marche Nell'estate del 2006 Francesco Paladino (Falconara, AN) decide di avviare la fondazione di un Jug (Java User Group) regionale come punto di riferimento per gli appassionati di Java delle Marche (ma non solo... :-) ) Francesco è anche volontario di una casa di accoglienza per persone senza fissa dimora chiamata La Tenda di Abramo (d'ora in poi solo Tenda per brevità)
Storia del progetto: La tenda di Abramo (1) L'attività quotidiana della Tenda è composta da vari compiti: registrare l'arrivo/partenza degli ospiti, comunicare le nuove accoglienze alla questura, organizzare i turni dei volontari, ecc... La Tenda offre anche un servizio di supporto agli ospiti per la ricerca di una soluzione abitativa e/o un lavoro. Tale servizio è realizzato mediante un gruppo di ascolto composto da alcuni volontari.
Storia del progetto: La tenda di Abramo (2) Tutte queste attività venivano organizzate e mantenute manualmente su formato cartaceo, con tutti i problemi del caso. Francesco propone di impegnare il Jug nella realizzazione di un software per la gestione e l'automazione delle attività della Tenda. Il progetto è anche un'occasione per tutto il Jug di esplorare lo stato dell'arte delle tecnologie JEE e per espandere le proprie competenze professionali.
Finalità pratica del progetto Aiutare la Tenda: ogni software che si rispetti deve far felice il suo committente:-)... La tenda tramite il progetto deve rendere più efficien -te le sue attività, risparmiare tempo, migliorare il suo servizio, ecc... In futuro altri enti benefici simili alla tenda potrebbero adottare il software per la loro attività.
Finalità tecnica del progetto Essere un libero laboratorio tecnico: il progetto è un continuo laboratorio di idee a cui tutti possono partecipare. E' un'occasione per provare ed imparare ad usare i framework e le applicazioni più popolari nel mondo JEE (Hibernate, Spring, Tomcat, ecc...) Alla base del progetto c'è la convinzione che usando gli strumenti open source offerti oggi da Java si possano ottenere prodotto di alta qualità, per molti aspetti persino migliori di soluzioni commerciali chiuse.
Startup del progetto L'avvivo del progetto è stato stabilito in un primo meeting (Ottobre 2006) tra membri del Jug e rappresentanti della Tenda Il meeting è importante per: 1)Formulare un documento dei requisiti, concordato tra sviluppatori e committenti 2)Creare un dizionario di dominio comune (es:cos'è un Ospite? Ed un' Accoglienza?) 3)Stabilire quali tecnologie userà il gruppo di sviluppo
Scelta della piattaforma tecnica Il team decide di affidarsi a framework e strumenti che siano: 1)Open Source: occorre che siano gratuiti e liberi. 2)Largamente usati: è importante che siano strumenti ben documentati e con dei casi d'uso già esistenti. 3) Interessanti :-) :il fine del Jug è di approfondire e condividere la conoscenza di tecnologie che portino un valore aggiunto alla comunità. 4)Orientati alla buona programmazione!!
Prima regola aurea La prima regola che si apprende in questa fase è: Non reinventare la ruota!! Su Internet quasi sicuramente c'è un framework che fa quello che desideri meglio di quanto pensi!!
Piattaforma tecnica Dopo un'attenta analisi (e qualche birra) sono state scelti i seguenti strumenti di partenza
Piattaforma tecnica attuale
Storia del progetto: timeline Estate 2007: inizio trasferimento registro cartaceo nel sistema. Gennaio 2008: aggiunta funzione di ricerca ospiti e restyling grafico. Dicembre 2008: aggiunta funzione di ricerca ospiti full-text e servizio di reportistica.
Ricerca full-text http://www.jugancona.it/vqwiki/jsp/wikitutorialricercaospite
Generazione report http://www.jugancona.it/vqwiki/jsp/wiki?tutorialreportaccoglienzeodierne
Internazionalizzazione i18n Gli elementi dell'interfaccia e gli elementi di localizzazione (es: formato data dd/mm/yyyy) sono letti da un file messages.properties. Anche i report fatti con Jasper leggono etichette e testo fisso da questo file!
Sul piano funzionale Future implementazioni Gestione dei turni dei volontari (200 volontari, 7 sempre presenti in tenda) Gestione dei turni del centro di ascolto... Sul piano tecnico Miglioramento della reportistica Invio report via mail Integrazione con linguaggi di script......
Il processo di sviluppo: 1 fase Raccolta e pubblicazione dei requisiti
Raccolta dei requisiti I meeting sono lo strumento principale per raccogliere requisiti con il committente ( faccia a faccia ) Moti feedback vengono raccolti tramite mailing list e forum La user experience è sempre fondamentale per raccogliere nuove idee su migliorie o feature aggiuntive...
Pubblicazione dei requisiti Alla fine del meeting si traccia una roadmap per il lavoro da fare. Questo documento viene distribuito tramite mailing list degli sviluppatori. I task che compongono la road map vengono inseriti nell'issue tracker sul sito del progetto (https://jugancona.dev.java.net). Gli avanzamenti dei singoli task vengono notificati al team dall'issue tracker.
Il processo di sviluppo: 2 fase Sviluppo del codice
Il repository cvs Lo sviluppo si avvale di un repository cvs (sempre sul sito Sun) tramite il quale vengono condivisi i vari artefatti prodotti dagli sviluppatori (file java, pagine jsp, file sql, ecc...). Gli sviluppatori sono tenuti ad aggiornarsi regolarmente dal branch principale del repository in modo da lavorare sempre su una copia aggiornata del sorgente.
Sviluppo TDD Gli sviluppatori sono anche tenuti a scrivere test unitari per il codice prodotto I test unitari devono garantire un comportamento del codice logicamente corretto e che soddisfi i requisiti Il codice scritto prima di essere salvato su repository deve passare tutti i test unitari scritti. Non si deve essere pubblicato codice non consistente, ossia codice che non supera tutti i test unitari
Seconda regola aurea Una regola, o meglio un effetto che deriva da una buona TDD è: Il debugger deve essere usato il meno possibile, quasi MAI!
Le classi di dominio Lo sviluppo ruota attorno alle classi di dominio che sono puri POJO Dalle classi di dominio si ottengono gli altri artefatti di supporto (DAO, controller web, pagine jsp, ecc...) La struttura risultante ha la tipica organizzazione a layer
Terza regola aurea Nessuno strato deve dipendere da uno strato superiore,ossia più vicino alla GUI
Indipendenza tra layer La regola appena espressa consente di evitare i seguenti problemi architetturali: Non creare delle dipendenze tra oggetti a forte astrazione (classi di dominio...) e oggetti legati ad una particolare tecnologia implementativa (Spring MVC, JSP, ecc...) Non creare dipendenze circolari tra classi o package. Questo tipo di legame renderebbe due entità indivisibili. Cit. Juergen Hoeller http://www.infoq.com/presentations/codeorganization-large-projects
Il processo di sviluppo: 3 fase Deploy e branching
Deploy e branching Una volta implementate le funzionalità volute si procede a fare il deploy del contenuto del repository Contestualmente si effettua il branching (ossia un fotografia ) del repository Il branching è indispensabile se si vuole recuperare in un qualsiasi momento il sorgente della versione rilasciata (per fare bugfixing, manutenzione, ecc )
Fasi di sviluppo Raccolta requisiti Prima fase Sviluppo Sviluppo Seconda fase Commit Commit Deploy & branching Terza fase
Riferimenti e approfondimenti
Riferimenti:forum e mailing list Il wiki del nostro Jug www.jugancona.it (sito www.jugmarche.it in allestimento...) Il sito Sun https://jugancona.dev.java.net/ che ospita il progetto, il suo repository cvs e il forum. http://www.jugancona.it/mailman/listinfo/juganconanew s:la mailing list per poter usare il forum e ricevere le news dello Jug http://groups.google.com/group/jug4tendadev: la mailing list Google dedicata agli sviluppatori del progetto Jug4Tenda
Riferimenti:pagina del progetto http://www.jugancona.it/vqwiki/jsp/wiki?jug4tenda
Riferimenti:pagina del progetto Storia della Tenda Requisiti del progetto Documentazione per l'installazione e architettura Demo flash del programma in azione Costantemente aggiornata ed arricchita di contenuti...
Riferimenti: tutorial Spring Per chi fosse a digiuno di Spring c'è un ottimo tutorial (:-)) sul nostro sito: http://www.jugancona.it/vqwiki/jsp/wiki?tutorial
Contatti https://jugancona.dev.java.net/servlets/projectforum View forum del progetto (previa iscrizione) jug4tendadev@googlegroups.com mailing list di sviluppo. andrea.on.web@libero.it Mail del relatore (Andrea Del Bene) che è presente anche su Facebook per coloro che vogliano interagire usando questo network.