Infrastruttura di Supporto allo Sviluppo Software nell`INFN

Transcript

Infrastruttura di Supporto allo Sviluppo Software nell`INFN
2
Infrastruttura di Supporto allo
Sviluppo Software nell'INFN
3
Proposta di Progetto
4
3 luglio 2012
1
Contenuto
1. Introduzione......................................................................................................................................1
2. Descrizione generale.........................................................................................................................1
3. Funzioni............................................................................................................................................2
3.1. Gestione di progetto.......................................................................................................................2
3.2. Controllo di versione.....................................................................................................................3
3.3. Controllo di qualità........................................................................................................................3
3.4. Continuous integration..................................................................................................................4
3.5. Disponibilità di piattaforme di sviluppo........................................................................................4
3.6. Efficienza.......................................................................................................................................4
3.7. Formazione....................................................................................................................................4
3.8. Technology tracking......................................................................................................................5
4. Piano esecutivo.................................................................................................................................5
5. Valutazione dei costi.........................................................................................................................5
5
1. Introduzione
6
7
8
9
10
11
12
13
14
15
Il successo di un progetto scientifico dipende da molti fattori. Tra questi, la capacità di raccogliere e
successivamente processare grandi quantità di dati ha assunto negli anni un ruolo sempre più
rilevante. Nonostante il progresso tecnologico abbia consentito di fornire processori, memorie,
dischi e reti di comunicazione sempre più veloci e affidabili, il costo del fattore calcolo rimane
rilevante. Inoltre, l'esaurimento di linee di sviluppo tecnologico che avevano consentito quel
progresso – basti ricordare il raggiunto limite della frequenza di clock nei processori, il cui aumento
costante negli anni aveva fino ad ora garantito un corrispondente aumento di prestazioni senza di
fatto ulteriori sforzi – richiede ora invece di dedicare maggiore attenzione alla metodologia di
sviluppo del software. Gran parte dell'onere di sfruttare appieno le potenzialità offerte dall'hardware
è stato idealmente spostato dall'ingegnere elettronico all'ingegnere del software.
16
17
18
Questo progetto si propone dunque di creare una infrastruttura materiale e di conoscenze che possa
supportare i progetti di sviluppo software che avvengono nell'INFN, per aiutarli a produrre software
di qualità a costi ridotti e rispettando le scadenze.
19
2. Descrizione generale
20
21
22
23
24
25
L'infrastruttura oggetto di questa proposta è pensata per integrare diverse funzioni, ognuna delle
quali concorre a raggiungere l'obiettivo primario di produrre software di crescente qualità,
riducendone i costi e rispettando le scadenze. Il concetto di qualità è da intendersi in senso ampio e
comprende caratteristiche quali la bassa incidenza di errori, l'efficienza di esecuzione, la
manutenibilità, la portabilità a nuove piattaforme. Parimenti, il concetto di costo copre diversi
aspetti, quali le persone dedicate allo sviluppo e il tempo necessario non solo allo sviluppo, ma
1
Infrastruttura di Supporto allo Sviluppo Software nell'INFN
1
anche al mantenimento in esercizio del software.
2
All'obiettivo primario si affiancano alcuni obiettivi secondari:
3
4
5
6
•
Lo sviluppo del software deve essere un'attività piacevole e non, come spesso accade, una
fonte significativa di stress per le persone coinvolte. In particolare per il ricercatore in fisica
il software deve essere solo lo strumento per raggiungere il fine della sua ricerca e non
invece impegnare, come spesso accade, una parte eccessiva del suo tempo.
7
8
9
10
•
Le conoscenze accumulate nella implementazione, nel mantenimento e nell'uso
dell'infrastruttura possono essere condivise all'interno dell'ente. Inoltre la maturazione di una
comunità interessata al tema dello sviluppo software creerebbe le condizioni per un'attività
sistematica di formazione sia per il personale esistente sia per il personale futuro.
11
12
13
•
La presenza di esperienza consolidata sul tema dello sviluppo software rappresenterebbe
un'occasione importante di contatto con altri enti e con l'industria e potrebbe rientrare nel
portafoglio di competenze che l'INFN mette a disposizione per il trasferimento tecnologico.
14
15
•
Un'attività consolidata di software engineering agevolerebbe la collaborazione con i
dipartimenti di informatica, con beneficio reciproco.
16
Le funzioni che l'infrastruttura oggetto di questo progetto identifica sono:
17
•
gestione di un progetto software
18
•
controllo di versione
19
•
controllo di qualità
20
•
continuous integration
21
•
disponibilità di piattaforme di sviluppo
22
•
efficienza e ottimizzazione della performance
23
•
formazione
24
•
technology tracking
25
26
27
Le funzioni elencate sono presentate in dettaglio nelle sezioni seguenti. Per ognuna viene indicata
anche la modalità di implementazione, eventualmente specificando quali strumenti potrebbero
dimostrarsi utili.
28
Infine viene stimato il costo del progetto sia in termini di personale sia in termini finanziari.
29
3. Funzioni
30
3.1. Gestione di progetto
31
32
33
34
35
36
37
Ogni progetto software che vada al di là di un esercizio di durata temporanea svolto da una sola
persona beneficia di un sistema di gestione di progetto. Il beneficio aumenta con l'aumentare della
complessità del progetto, della sua durata prevista, del numero di persone coinvolte nello sviluppo,
del numero di utilizzatori, fino a diventare un requisito essenziale. La principale funzionalità che un
sistema di gestione di progetto offre è la possibilità di tracciare adeguatamente le modifiche
applicate al codice, siano esse correzioni di errori o implementazione di nuove funzionalità, le
richieste di supporto da parte degli utilizzatori e tutte le altre azioni necessarie a tenere sotto
2
Infrastruttura di Supporto allo Sviluppo Software nell'INFN
1
2
controllo lo sviluppo (ad es. la gestione delle release, la raccolta delle richieste di miglioramenti o la
preparazione di report periodici). Una entità tracciata in un project tracker viene detta issue.
3
4
L'INFN si è già dotato di uno strumento adeguato di project tracking: JIRA1, disponibile su
https://issues.infn.it/.
5
3.2. Controllo di versione
6
7
8
9
10
11
12
Un sistema di controllo di versione (Version Control System, VCS) consente di registrare in modo
permanente tutte le modifiche applicate a un codice sorgente (da intendersi in senso lato e
comprendente ad esempio la documentazione o le istruzioni per compilare e impacchettare il
codice). Se fatto in modo sistematico e disciplinato, ciò consente ad esempio di mantenere in vita
più versioni dello stesso prodotto oppure a più persone di sviluppare in parallelo senza timore di
conflitti o ancora semplicemente di poter annullare in modo sicuro modifiche che si sono rivelate
errate.
13
14
15
Le modifiche al codice gestite dal VCS si possono associare agli issue mantenuti nel project tracker,
consentendo una agevole navigazione tra i due e permettendo il controllo dell'intera filiera dal
requirement alla modifica nel codice alla release che la comprende e viceversa.
16
17
18
Esistono molti VCS a disposizione. Ultimamente si stanno imponendo dei sistemi cosiddetti
distribuiti (DVCS), tra i quali i più diffusi sono git2 e mercurial3. Tra quelli tradizionali
(centralizzati) il più diffuso è subversion4. E' previsto che tutti siano disponibili su code.infn.it.
19
20
21
22
23
Degne di nota sono anche soluzioni cosiddette hosted, in cui un provider offre spazio disco e
applicazioni web (quali wiki, tracker, code review, ecc.) per gestire dei progetti software. Ne sono
esempio github5 e bitbucket6. Tali soluzioni potrebbero essere adottate per piccoli progetti di
carattere personale oppure, all'estremo oppposto, per grossi progetti open-source che vedono il
coinvolgimento di un numero rilevante di persone esterne all'INFN.
24
3.3. Controllo di qualità
25
26
27
28
29
30
La qualità di un prodotto software è un concetto che copre diversi aspetti, quali affidabilità,
efficienza, sicurezza, manutenibilità. Esistono metodologie consolidate, che non sono altro che
insiemi di raccomandazioni, che aiutano gli sviluppatori a raggiungere livelli accettabili di qualità,
dove “accettabile” dipende dal contesto specifico del prodotto in questione. Un prodotto sviluppato
secondo tali metodologie permette anche di tenere sotto controllo il costo e il raggiungimento degli
obiettivi secondo le scadenze pianificate.
31
32
33
Lo scopo di questa funzione è quindi soprattutto di rendere gli sviluppatori consapevoli delle
metodologie esistenti, ad esempio sotto forma di documentazione, di formazione e di scambio di
esperienze.
34
35
Esiste tuttavia la possibilità di avere accesso anche a strumenti che aiutano a raggiungere gli
obiettivi di qualità prefissati. Tra questi, sono stati recentemente acquisiti al CNAF due prodotti di
1
2
3
4
5
6
https://www.atlassian.com/software/jira
http://git-scm.com/
http://mercurial.selenic.com/
https://subversion.apache.org/
https://github.com/
https://bitbucket.org/
3
Infrastruttura di Supporto allo Sviluppo Software nell'INFN
1
analisi statica del codice: C/C++test7 e Jtest8, per codice scritto rispettivamente in C/C++ e in Java.
2
3.4. Continuous integration
3
4
5
6
7
8
9
Durante lo sviluppo del codice è importante verificare continuamente che le modifiche introdotte
non introducano situazioni di errore, sia in fase di build (compilazione, linking, ecc.) sia di
incompatibilità con altre componenti dello stesso sistema sia al run-time. Idealmente ogni nuova
modifica introdotta nel VCS dovrebbe causare un tentativo di build dell'intero sistema, seguito da
una serie di test di verifica. Questo approccio, conosciuto con il nome di Continuous Integration,
data la sua complessità, richiede l'assistenza di uno strumento adeguato. Uno tra i più noti di questi
strumenti è Jenkins9, di cui esiste già una certa esperienza nell'INFN.
10
3.5. Disponibilità di piattaforme di sviluppo
11
12
13
14
L'obiettivo di questa funzione è di rendere agevole per lo sviluppatore l'accesso a macchine
adeguate per l'attività di sviluppo, comprendendo in questa accezione tutte le fasi dello stesso, dalla
scrittura del codice, al build (magari su piattaforme diverse), alle varie fasi di test, alla
pre-produzione.
15
16
17
La fornitura delle macchine potrebbe essere implementata al di sopra di una infrastruttura di tipo
cloud (IaaS, PaaS, SaaS a seconda dei casi). Un candidato naturale per l'infrastruttura sottostante è
WNoDeS10, sviluppato dentro l'INFN, ma anche altre soluzioni sono possibili.
18
3.6. Efficienza
19
20
21
Date le dimensioni delle esigenze di calcolo di un tipico esperimento attuale, anche un minimo
miglioramento dell'efficienza del software equivale a risparmi significativi in termini di risorse di
calcolo, siano esse processori, memorie, storage, rete o anche semplicemente corrente elettrica.
22
23
24
25
26
27
28
29
30
Inoltre le problematiche relative al raggiungimento di limiti nella capacità di dissipazione di calore
nei microprocessori hanno causato un cambio di rotta nell'architettura degli stessi. Fino a qualche
anno fa infatti l'aumento delle prestazioni era ottenuto “semplicemente” aumentando la frequenza di
clock e migliorando il parallelismo delle istruzioni implementato a livello hardware, senza
richiedere di fatto alcuna modifica a livello di codice. Ora invece quell'approccio ha
sostanzialmente esaurito il suo contributo ed è stato sostituito da un aumento delle unità di calcolo
(core) disponibili sullo stesso processore. Questo però ha come conseguenza che lo sfruttamento
pieno dei diversi core debba essere affrontato a livello applicativo, con modifiche quindi
potenzialmente molto invasive al codice per renderlo parallelo.
31
32
33
Gli ambiti di ottimizzazione o di parallelismo possibili sono molteplici: modello di calcolo generale,
algoritmi e strutture dati, linguaggio di programmazione, opzioni di compilazione, tecniche
implementative.
34
35
36
37
Questa funzione si propone di offrire innanzitutto strumenti sia di profilazione dell'esecuzione per
individuare i punti in cui questa incontra i maggiori colli di bottiglia, risolvendo i quali si
potrebbero ottenere di conseguenza i maggiori benefici, sia per individuare parti di codice
potenzialmente parallelizzabili.
7
8
9
10
http://www.parasoft.com/jsp/products/cpptest.jsp?itemId=47
http://www.parasoft.com/jsp/products/jtest.jsp?itemId=14
http://jenkins-ci.org/
http://web.infn.it/wnodes/
4
Infrastruttura di Supporto allo Sviluppo Software nell'INFN
1
3.7. Formazione
2
3
4
5
6
7
Le funzioni illustrate fino ad ora hanno riguardato soprattutto aspetti materiali dell'infrastruttura
oggetto di questa proposta. Ma la loro disponibilità sarebbe di limitata utilità se essa non fosse
accompagnata da una adeguata capacità di formazione specifica sul loro utilizzo, ma anche, e forse
soprattutto, da un'ampia diffusione, tra gli addetti ai lavori, della cultura che la produzione di
software deve avvenire secondo criteri e raccomandazioni consolidati, che sono la migliore garanzia
per ottenere dei prodotti di qualità, a costi ridotti e rispettando le scadenze previste.
8
9
La condivisione di una infrastruttura comune inoltre facilita la condivisione di esperienze e
conoscenze tra i membri della comunità.
10
3.8. Technology tracking
11
12
13
14
15
L'evoluzione tecnologica tumultuosa degli ultimi anni (l'elevato parallelismo nei microprocessori e
l'esplosione dei servizi Grid/Cloud, solo per citarne due) richiede una costante attenzione alle novità
che appaiono o che appariranno a breve sul mercato. Quando queste hanno un potenziale impatto
sul software di un esperimento, è auspicabile che l'esposizione al nuovo prodotto avvenga il prima
possibile, così da anticipare le modifiche eventualmente necessarie al codice.
16
17
E' dunque importante dotarsi di un ambiente controllato in cui tali prodotti possano essere installati
e provati. Una opportunità di questo tipo è offerta dall'OpenLab11 del CNAF.
18
4. Piano esecutivo
19
20
La sfida principale nell'implementazione dell'infrastruttura descritta nelle sezioni precedenti sta
soprattutto nell'integrazione di tutti gli aspetti citati in un sistema unico e di facile utilizzo.
21
22
23
Fortunatamente non ci sono forti dipendenze tra le varie funzioni, per cui il lavoro può da un lato
procedere in parallelo, dall'altro non è necessario affrontare tutte le problematiche allo stesso tempo.
Questo permette tra l'altro di rendere il sistema stabile prima di passare al passo successivo.
24
25
26
27
Alcune funzioni sono certamente più importanti di altre ed è per questo motivo che la loro
implementazione è già in corso, a partire innanzitutto dalla funzione di gestione di progetti. JIRA
ospita infatti già diversi progetti legati al middleware di Grid e due progetti del Sistema Informativo
dell'INFN, uno dedicato allo sviluppo, l'altro al supporto.
28
29
30
31
Seguiranno le funzioni “Controllo di versione”, “Controllo di qualità” e “Continuous integration”,
per le quali esiste già una qualche esperienza nell'ente. E' prevedibile la necessità di un modesto
sviluppo per l'integrazione nel sistema complessivo dei componenti corrispondenti a queste
funzioni.
32
Discorso analogo vale per la funzione “Disponibilità di piattaforme di sviluppo”.
33
34
35
36
37
38
Le funzioni “Efficienza” e “Formazione” appaiono le più difficili da implementare, perché il loro
successo non richiede semplicemente l'acquisizione di uno strumento hardware o software e la sua
integrazione con altri strumenti. Richiede invece l'interazione con i potenziali beneficiari del
sistema allo scopo di incoraggiarli ad utilizzare il nuovo strumento a loro disposizione. Sarà quindi
necessario fin da subito presentare questa nuova infrastruttura nelle sedi opportune, preparare e
presentare materiale formativo e dare assistenza a chi intende farne uso.
11 http://vm-storage.cr.cnaf.infn.it/wiki/doku.php
5
Infrastruttura di Supporto allo Sviluppo Software nell'INFN
1
5. Valutazione dei costi
2
3
L'esecuzione del piano previsto nella sezione precedente prevede dei costi in termini sia finanziari
sia di personale.
4
I costi finanziari sono dati dall'acquisto di risorse hardware e software.
5
6
7
8
Per il software il costo è dato delle licenze e dipende dalla scelta degli strumenti utilizzati. Molti di
questi sono liberamente disponibili con licenze open-source; tra quelli citati rientrano in questa
categoria git, mercurial, subversion, Jenkins, WNoDeS. Altri invece sono a pagamento; tra quelli
citati rientrano in questa categoria JIRA, C/C++test, Jtest. im
9
Il costo di JIRA consiste in EUR 4000 all'anno per la manutenzione.
10
11
12
C/C++test è stato acquisito in via sperimentale con una licenza permanente a prezzi molto scontati
rispetto al listino. Lo stesso vale per Jtest, con la differenza che la licenza è annuale. Ulteriori costi
dipendono dalla valutazione degli strumenti che avverrà nel prossimo futuro.
13
14
15
Potrebbe essere utile acquisire strumenti di profilazione e supporto alla parallelizzazione del codice,
ad esempio da Intel, ma è prima necessario fare delle valutazioni. In ogni caso esistono degli
strumenti con licenza open-source che sono sicuramente sufficienti per partire.
16
17
18
19
20
21
Per l'hardware il costo è innanzitutto dato dall'acquisto dei server su cui girare le applicazioni
menzionate nelle sezioni precedenti e del corrispondente storage. Di quelle esplicitamente citate,
l'unico servizio mancante è Jenkins, per il quale si stima un costo limitato alle risorse necessarie per
espandere il pool dei servizi nazionali ospitati al CNAF e stimato in circa EUR 2000. Jenkins sfrutta
poi un pool di nodi su cui eseguire dei job di compilazione e test; è verosimile che questi nodi
possano derivare dalla dismissione di risorse del Tier1.
22
23
24
25
Un'altra componente di costo per l'hardware è dato dall'acquisizione delle macchine da includere nel
pool da cui un progetto può attingere per le proprie attività di sviluppo, secondo quanto previsto
nella Sezione 3.5. Anche in questo caso è verosimile che questi nodi possano venire dalla
dismissione di risorse dal Tier1, quindi di fatto senza costi ulteriori.
26
27
28
29
30
Per quel che riguarda il personale, l'intenzione è di costituire un gruppo di persone, tra tecnologi e
tecnici di varie sedi INFN, interessate al progetto e disposte a contribuire in vario modo
all'implementazione dell'infrastruttura. Una modalità potrebbe essere quella che ognuno si
specializzi e gestisca uno degli strumenti citati, affidandosi al Servizio Servizi Nazionali presso il
CNAF, che ospiterà materialmente le risorse, limitatamente agli aspetti sistemistici.
31
32
Tuttavia sarebbe utile se almeno inizialmente ci fosse una persona, ad esempio un assegnista di
ricerca, dedicata a tempo pieno al progetto.
33
34
35
36
37
Per il coordinamento delle persone coinvolte si farà ricorso prevalentemente a strumenti di
collaborazione remota. E' tuttavia realistico presumere che ci saranno alcune riunioni di persona,
così come va prevista la partecipazione a eventi in cui presentare i servizi offerti e il lavoro svolto.
Di conseguenza sarà necessario prevedere alcuni fondi per missioni nazionali, dell'ordine di 1000
Euro per ogni sede coinvolta.
38
6