Marco Papacchini

Benvenuti

L'industria oggi richiede il rapido sviluppo di sistemi software che siano di elevata qualità, di dimensioni considerevoli, mission-critical, in un contesto commerciale e tecnologico altamente dinamico e soggetto a frequenti cambiamenti. L'e/m-commerce rappresenta un tipico esempio di tale contesto. Tuttavia troppi sistemi sono ancora rigidi e resistenti alle modifiche.

Ciò che caratterizza lo sviluppo professionale dei sistemi software dalla programmazione dilettantesca è l'attenzione alla qualità, come, ad esempio, la robustezza e la flessibilità. Sviluppare un sistema software è infatti molto differente dal semplice assemblamento di parti realizzate con l'ausilio di varie tecnologie (quali applet, servlet, Java Bean, JSP, e così via). Un sistema software deve essere attentamente ingegnerizzato al fine di presentare una struttura di elevata qualità. Le strutture di qualità sono caratterizzate da principi, per soddisfare i quali servono strategie e tecniche. Il grande successo riscosso dai Design Pattern tra la comunità degli sviluppatori di software testimonia l'importanza di questo approccio alla progettazione dei sistemi software. Un Design Pattern descrive come strategie di progettazione risolvano le forze in gioco, al fine di fornire una soluzione di elevata qualità ad un problema ricorrente in uno specifico contesto.

Il mio interesse è rivolto ad alcuni aspetti di ricerca nel settore dell'Ingegneria del Software, con lo scopo di studiare:

La Struttura del Software

«Ciò che secondo me caratterizza principalmente il pensiero intelligente è la volontà e la capacità di studiare separatamente e in profondità un aspetto di un determinato argomento, concentrandosi soltanto sulla sua coerenza, avendo sempre presente che si sta trattando soltanto uno degli aspetti. Gli altri dovranno aspettare il proprio turno (...). Sono solito riferirmi a ciò con il termine Separazione delle Competenze, poiché si cerca di affrontare le difficoltà, gli obblighi, i desideri e i vincoli singolarmente»
(E.W. Dijkstra)

La Separazione delle Competenze (Separation of Concerns) è uno degli aspetti chiave per un'efficace modularizzazione del software, però è necessario separare proprio quegli aspetti con cui si ha a che fare, al fine di realizzare la corretta modularizzazione. Lo stile di progettazione proprio dell'OO consiste nello scomporre un sistema sulla base di parti con responsabilità ben definite. Ci sono però molti aspetti che non rientrano in questo tipo di modularizzazione (ad esempio la persistenza, i vincoli real-time, ecc.). Questi aspetti sono perciò distribuiti tra le varie classi, col risultato che il codice risulta essere un'intricata matassa di istruzioni. Questo aumenta l'impatto delle modifiche e riduce la comprensibilità. L'Advanced Separation of Concerns (AOP, AP, SOP, GP, MDSoC) migliora l'approccio OO consentendo di effettuare una separazione secondo i diversi concern.

Il mio interesse è rivolto allo studio di come sia possibile ottenere struture flessibili per mezzo di questo nuovo approccio: tecniche di decomposizione/composizione, principi, strategie e pattern.

Metodologie Agili per Team Distribuiti

«Lo sviluppo tradizionale del software è grande...se non per il fatto che non funziona!»
(Martin Fowler)

Lo sviluppo del software è spesso caratterizzato dalla volatilità dei risultati. Questo è vero in particolare nel contesto delle applicazioni business. Le Metodologie Pesanti si basano su un approccio caratterizzato dal controllo e dalla prevenzione degli errori: esse sono predittive e possiedono una gran quantità di regole, pratiche, documenti e pianificazioni fatte a priori. Le Metodologie Agili, al contrario, sono adattive: affrontano il cambiamento, cercando di adattare in modo reattivo il software alle frequenti modifiche. Esse possiedono poche, ma efficaci, regole e pratiche e non producono una gran quantità di pianificazioni a priori. Adottano una strategia iterativa e incrementale per il processo, cercando di ottenere quanto prima un feedback, in modo da migliorare le iterazioni successive.

Mi interesso di come sia possibile adattare le Metodologie Agili al caso di team distribuiti in un contesto internazionale (sviluppo offshore), con particolare attenzione al caso della XP (Distributed Extreme Programming -- DXP).

Un Fondamento Formale per i Design Pattern

«Confrontando attentamente gli enigmi che ci circondano e riflettendo e analizzando le osservazioni fatte, mi sono ritrovato nel campo della Matematica»
(M.C. Escher)

Un Pattern è molto di più che una soluzione sperimentata ad un problema in un contesto! Sono interessato ad un fondamento formale dei Design pattern (e più genericamente del Design) sulla base dell'analisi della struttura geometrica del software.

Il concetto di flessibilità è strettamente legato a quello di simmetria. Molti costrutti dei linguaggi di programmazione esprimono una simmetria, ma quando si dimostrato inadeguati a risolvere particolari problemi di design, i Pattern risultano utili per farlo. E' possibile mostrare come i Pattern operano ridistribuendo localmente la simmetria (teoria di Coplien-Zhao). E' in questo modo che i Pattern Language costruiscono una struttura (un "tutto" che possiede la Qualità Senza Nome -- secondo le parole di Christopher Alexander) per mezzo di un processo di crescita differenziata e di adattamento locale.

© Copyright Marco Papacchini