3.04) Sviluppo del Software
5) Production ramp-up (pre-produzione)
Utilizzando il progetto di dettaglio ed il flusso di assemblaggio vengono prodotte le prime versioni ufficiali del Software che verrà distribuito inizialmente in quantità limitate al fine comunque di poterne saggiare le qualità e poter evidenziare eventuali imperfezioni che andranno eliminate per arrivare con gradualità ad una versione stabile ed efficiente del prodotto.
Nella fase centrale, quella di sviluppo del Software vero e proprio, in base alle regole dettate dall’Ingegneria del Software, devono essere rispettati alcuni principi fondamentali tra i quali risultano di particolare importanza:
Open Source e Software: Sviluppo del Software
- Conservazione: il Software deve poter evolvere continuamente per conservare la propria qualità ed utilità nel tempo;
- Affidabilità: il Software non deve procurare danni fisici ed economici all’utente né propagare l’errore verso altri sistemi;
- Efficienza: il Software deve consentire un efficiente impiego delle risorse tecnologiche;
- Utilizzabilità: l’interfaccia utente deve essere appropriata e di facile utilizzo;
Nella fase di sviluppo del Software è possibile mettere a confronto diversi modelli o strategie indispensabili da attuare al fine di ottenere il prodotto con le caratteristiche migliori in rapporto a risorse e fattori impiegati:
a) Modello Build and Fix: in questo tipo di approccio non è stabilita una sequenzialità nelle attività di sviluppo per cui molto spesso la qualità del risultato è in funzione delle capacità e dell’esperienza del personale tecnico. Ciò determina una continua variazione del processo non potendo assicurare quindi elevati livelli di produttività né il mantenimento di quelli raggiunti nel tempo.
Questo modello spesso, però, risulta adatto solo a piccoli progetti che non necessitano di numerosi aggiornamenti in quanto, altrimenti, rischia di divenire antieconomico a causa dei seguenti motivi:
- l’uscita dal progetto di soggetti chiave;
81
- costi esponenziali dovuti alle modifiche necessarie fino al rilascio del prodotto finale;
- lentezza del processo di sviluppo determinata da una confusa strategia di produzione;
b) Modello Waterfall: questo modello è caratterizzato da sei fasi specificamente studiate a tale scopo:
- Analisi e definizione dei requisiti auspicati dagli utenti;
- Progettazione del sistema e del processo di sviluppo attraverso dettagliate informazioni relative al processo di sviluppo e indispensabili per attuare la migliore distribuzione di risorse tecniche, umane e finanziarie utili a tali settori;
- Sviluppo e controllo delle singole componenti del sistema;
- Integrazione delle componenti e controllo globale del sistema riunendo e analizzando tutto il codice sorgente al fine di ricercare errori o imperfezioni e determinare così la versione finale del prodotto;
- Distribuzione e utilizzo in condizioni operative del prodotto sottoponendo una versione beta dello stesso ad un gruppo di utenti che ne testerà la validità in condizioni reali di utilizzo consentendo così la correzione di errori, la modifica di moduli e lo sviluppo di nuove funzionalità richieste;
Open Source e Software: Sviluppo del Software
- Ritiro del sistema dovuto al mancato apprezzamento dal mercato.
Il Modello Waterfall è caratterizzato della sua linearità: in tal modo le fasi di sviluppo sono tutte eseguite in sequenza e si perviene al completamento di un ciclo prima di dare avvio a quello successivo il che ne determina la sua ripetibilità rendendolo meno soggetto ad interferenze e consentendo il miglioramento dei processi e della qualità dei risultati ottenibili.
I lati negativi intrinseci nel modello risiedono nella necessità di pervenire ad una perfetta conoscenza dei requisiti del sistema già in fase di progettazione il che risulta difficile specie in caso di Software complessi con la conseguenza che cambiamenti e modifiche inaspettate determinerebbero un aumento considerevole sia del tempo necessario a realizzarli sia dei costi ad essi correlati;
c) Modello Iterativo: esso prevede fin dall’inizio la suddivisione del progetto in più cicli reiterati ognuno dei quali costituisce un Modello Waterfall con l’esecuzione di tutte le attività di progettazione, sviluppo e testing ottenendo così un’evoluzione incrementale del prodotto.
Sebbene sia il processo di sviluppo quanto l’architettutra del prodotto possano essere definiti in modo meno rigoroso e completo rispetto al modello Waterfall si potrebbe verificare un problema definito di “evoluzione strisciante” del prodotto che necessiterebbe l’introduzione di nuove funzionalità in ogni ciclo
83
di iterazione il che potrebbe determinare un’eccessiva instabilità e possibili inefficienze difficilmente gestibili;
d) Modello Evolutivo: il modello ripropone il concetto di evoluzione incrementale del prodotto e, in aggiunta, introduce la possibilità di rendere parallela l’esecuzione dei singoli cicli di sviluppo.
I rischi di natura organizzativa del modello sono accentuati dall’introduzione del concetto di parallelismo da cui discende che le diverse soluzioni svilupppate potrebbero risultare incompatibili fra loro. Di conseguenza viene a determinarsi un’inefficienza nell’uso delle risorse ed eventuali problemi di integrità e quindi di qualità del prodotto;
e) Modello del Prototipo: questo modello richiede il continuo aggiornamento delle informazioni relative al processo evolutivo ed al processo di sviluppo del Software che viene così ad essere suddiviso in due parti distinte: la prima fase è diretta allo sviluppo del prototipo mentre la seconda alla versione effettiva.
La costruzione del prototipo richiede la definizione dei relativi requisiti, la progettazione e lo sviluppo: attività queste che necessitano quindi di un’accurata analisi e di informazioni molto dettagliate del prodotto richiesto.
Questo modello, applicato a progetti anche complessi, consente di ridurre i rischi di sviluppo specie per prodotti innovativi con conseguenti risparmi in termini di tempi e costi totali;
f) Modello a Spirale: il modello a spirale riassume le peculiarità dei Modelli Iterativo, Evolutivo e del Prototipo. Esso è caratterizzato da una continua ripetizione dei cicli tipici del
Open Source e Software: Sviluppo del Software
Modello Waterfall; all’interno di ciascun ciclo si ha la sovrapposizione delle attività di progettazione, sviluppo e controllo del codice; viene eseguita una continua revisione delle informazioni raccolte in ogni fase di sviluppo.
Questo modello risulta adattarsi alla dinamicità del Software e soddisfa la necessità di avere un processo di sviluppo molto flessibile abbandonando un approccio di tipo sequenziale e seguendo un’evoluzione di sviluppo del progetto che graficamente può essere rappresentato appunto da una spirale.
Il modello a spirale consente di individuare ed eliminare i rischi e gli errori più velocemente ed assicurare una qualità del progetto più elevata. Per contro necessita di un elevato grado di esperienza e la disponibilità di risorse umane e finanziarie elevate per implementare le procedure.
Il Modello a Spirale, attualmente molto diffuso, viene utilizzato anche da Microsoft con il nome di Modello Synch and Stabilize (Sincronizza e Stabilizza);
g) Modello del Riutilizzo: ai fini dello sviluppo dei prodotti questo tipo di strategia propone il riutilizzo di componenti e parti già esistenti organizzati in librerie per consentire una facile ricerca degli stessi. Il loro uso avviene in base a due modalità:
- il componente viene inserito in modo diretto adattandolo nel contesto nel quale viene a posizionarsi;
- il componente viene sottoposto ad un processo di adattamento e modifica e quindi inserito nel progetto.
85
Nel caso in cui il componente non sia disponibile occorrerà crearlo, inserirlo nella libreria e quindi utilizzarlo.
La strategia del riutilizzo è impiegata per abbattere i costi ed i tempi di sviluppo e per assicurare una certa affidabilità dei prodotti. Ciò comporta comunque la necessità di poter disporre di una libreria composta da numerosi componenti e la previsione di un loro riutilizzo ripetuto.
Schema riassuntivo dei punti di forza e debolezza di alcuni modelli di sviluppo
Questi modelli tipo utilizzati in campo informatico nello sviluppo del Software rappresentano una classificazione teorica e schematica degli stessi in quanto spesso, all’atto pratico, essi vengono combinati fra loro o modificati al fine di sfruttarne appieno i vantaggi ed attenuarne le debolezze col fine ultimo di ottimizzare la produzione. Particolare attenzione riveste poi l’osservazione di un particolare schema di sviluppo Software adottato da una delle maggiori case produttrici e definito:
Open Source e Software: Sviluppo del Software
h) Modello Synch and Stabilize: è il modello utilizzato da Microsoft ed in sostanza è una personalizzazione del Modello a Spirale. Esso si basa sulla continua sincronizzazione delle attività di sviluppo e sulla periodica stabilizzazione dei prodotti.
Le specifiche del progetto non sono statiche ma si evolvono durante tutto il processo di sviluppo.
Si preferisce evitare lo sviluppo di un prodotto completo in un unico ciclo ma distribuire la definizione dei dettagli ed il miglioramento del Software in più cicli successivi (come nel Modello Iterativo).
Microsoft ha inoltre cominciato ad introdurre il concetto di modularità specificatamente studiato per prodotti caratterizzati da rapidi cicli di vita.
Le attività di sviluppo e testing risultano reiterate in ocni ciclo e rese simultanee con altri cicli durante tutto il processo di sviluppo (come nel Modello Evolutivo).
In fase di pianificazione sono stabilite le caratteristiche del prodotto e le sue specifiche.
Inoltre, le informazioni ottenute nei vari cicli sono utilizzate al fine di identificare e migliorare le caratteristiche del prodotto e stabilire tra loro delle priorità il che consente di minimizzare il numero di funzionalità sviluppate contemporaneamente in un singolo ciclo della spirale (come nel Modello a Spirale).
In tal modo vengono sviluppate solo le caratteristiche ritenute necessarie per realizzare un prodotto utile tenendo presenti le esigenze e le richieste degli utenti ed evitando un inutile dispendio di risorse ed energie.
87
Queste ultime sono assegnate in funzione delle differenti specifiche di prodotto a diversi team di sviluppo ognuno dei quali è costituito da un numero uguale di programmatori e addetti al testing in grado di lavorare parallelamente sul codice.
Ogni attività di sviluppo è suddivisa in sottoprogetti il che consente l’inserimento di cambiamenti nel corso dello sviluppo del prodotto e risolvere possibili eventi inaspettati.
Giornalmente viene richiesta l’integrazione (Synch) dei codici sviluppati attraverso la produzione di una release unica e condivisa dall’intero team: in tal modo la maggior parte degli errori viene individuato al momento opportuno evitando che gli stessi si propaghino nei cicli successivi.
Segue la fase di stabilizzazione (Stabilize) in cui si attua il congelamento delle caratteristiche sviluppate per proseguire verso un loro completo e definitivo perfezionamento.
Si arriva così alla fase di testing in cui il prodotto viene sottoposto a funzionamento in base a reali condizioni di utilizzo.
Sono individuati due livelli di testing:
- interno, effettuato dal personale dell’azienda nei laboratori dedicati;
- esterno (beta testing), sottoponendo il prodotto a fasce di utenti costituite sia da professionisti che semplici utilizzatori.
Superato il testing viene redatta la documentazione di supporto al prodotto accompagnato dalla release finale (gold master copy) necessaria per la produzione delle copie destinate al mercato.
Open Source e Software: Sviluppo del Software
Nel caso in cui il test produca risultati negativi il progetto ritorna nel ciclo di sviluppo al fine di eliminare difetti e malfunzionamenti.
Schema di confronto tra sviluppo di tipo Open Source e modello Microsoft
Le caratteristiche di funzionamento della comunità Open Source non consentono di individuare un modello di sviluppo del Software ben definito e standardizzato potendo evidentemente avvicinare lo sviluppo del Software al Modello Build and Fix caratterizzato da talune influenze tipiche dei Modelli Iterativo ed Evolutivo. La combinazione dei tre modelli può essere sfruttata soprattutto nei casi di progetti complessi in cui si può notare la forza della comunità i cui sforzi sono rivolti al miglioramento del codice attraverso ripetute fasi di aggiornamento delle funzionalità dei programmi determinando così una crescita incrementale delle loro potenzialità.
Dato inoltre il diffuso utilizzo delle librerie Software è possibile lo sfruttamento del Modello del Riutilizzo.
89
Il modello Open Source, in sostanza, accogliendo in buona parte gli insegnamenti ed i punti di forza di diversi modelli di sviluppo, potrebbe essere assimilato al Modello a Spirale.
Sebbene il modello Open Source sia differente a prima vista da quello Microsoft, essi hanno notevoli punti di contatto e talune caratteristiche tipiche del modello open sono state recepite ed adottate anche da Microsoft.
Una caratteristica tipica del sistema Linux è costituita dalla modularità dei suoi componenti che determina il funzionamento ottimale di ogni singola funzione consentendo uno sviluppo parallelo dei progetti pur avendo un controllo centralizzato sugli stessi e facilitando quindi l’introduzione di nuove parti di codice nel progetto.
Dal punto di vista Microsoft la modularità sembra essere stata introdotta attraverso i linguaggi ad oggetto anche se l’approccio è ancora rivolto allo sviluppo integrale che consente una facile distribuzione e vendita di diversi prodotti riuniti in un unico pacchetto.
Mentre per Microsoft il parallelismo è associato a ridondanza, spreco inutile di risorse e scarsa ottimizzazione di sforzi e risultati, risulta evidente che nel mondo Open Source il parallelismo viene considerato un vantaggio: il lavoro di più soggetti sullo stesso progetto consente infatti risparmi di tempo, risoluzione di problemi ed evoluzione esponenziale dei risultati.
In ambiente Microsoft lo sviluppo di nuove idee non può essere preso in considerazione subito ma deve essere pianificato essendo correlato un costo a ciascuno di essi. Nell’Open Source le idee nascono tanto dall’apporto fornito dalla comunità che da apporti esterni: esse possono essere sviluppate sia interrompendo il processo legato allo sviluppo del prodotto che attivando un nuovo processo o addirittura lo sviluppo di un nuovo prodotto: tutto ciò è favorito dalla disponibilità di risorse umane e tecnologiche potenzialmente illimitate ed a costi irrisori.
Open Source e Software: Sviluppo del Software
Sebbene la Microsoft effettui fasi di testing sui suoi prodotti in maniera accurata e su una larga fascia di utenti spesso molto competenti in materia è pur vero che essi non hanno a disposizione il codice sorgente: questo, invece, è disponibile in ambito Open Source per cui si assiste ad una revisione dei prodotti completa e rapidissima.
Infine, sebbene i prodotti Microsoft vengano studiati per risolvere le esigenze degli utenti, sviluppando anche configurazioni particolari, nel mondo Open Source il codice sorgente consente agli utenti o sviluppatori di risolvere ogni problematica adattando il Software alle diverse esigenze che potrebbero necessitare agli utilizzatori.
Schema di confronto tra metodologie di sviluppo Software
91