|
emi7oP <a href="http://etyxbsmwlbop.com/">etyxbsmwlbop</a>, [url=http://ejkbnyaqouhe.com/]ejkbnyaqouhe[/url], [link=http://iytqgxxmxvee.com/]iytqgxxmxvee[/link], http://ddjproogyauv.com/ |
ProcessiI ProcessiAutori: Alberto Taiocchi Sommario
In questo capitolo si introdurranno i processi rispetto all’ingegneria del softaware, in particolare si porrà l’attenzione su diverse tipologie per affrontare il processo di sviluppo del software che verranno presentati e descritti singolarmente; infine si tratteranno alcuni aspetti inerenti alla qualità interna ad essi, sulla valutazione della stessa e sulle tecniche per migliorarla.
Processi e organizzazioni
Modellare e classificare i processiModellare un processo significa capire il funzionamento dell’organizzazione, capire il funzionamento può portare a delle migliorie). Un processo è un’attività complessa e difficile da gestire. Per migliorarne la gestione viene suddiviso in fasi diverse (specifica, progettazione e codifica). Una volta suddiviso in fasi successive, queste vengono assegnate a gruppi diversi di persone con compiti e competenze diverse (suddividere per gestire, verificare, ridurre i rischi). Il processo è composto da diverse azioni e può essere strutturato nella seguente maniera:
Un processo di qualità porta ad avere un prodotto qualità. Processi softwareLo sviluppo di software è un processo complesso, richiede uno sforzo collettivo complesso e creativo. La qualità del prodotto software non dipende solo dalla qualità del processo ma anche dalle persone, dall’organizzazione e dalle procedure utilizzate per sviluppare, controllare e gestire il codice. I processi software vengono distinti in tre classi:
Modelli di processo di sviluppo software – life cycleSono modelli che rappresentano le fasi da seguire e l’ordine per poter realizzare un processo. Ne esistono diversi, non esiste quindi un processo migliore in assoluto, ma quello più adatto per una determinata situazione. Code and fixE’ un non modello, viene usato in attività non identificate nE’ organizzate. Si utilizza solo in progetti piccoli e non gestiti. Si basa, ciclicamente,sulle attività di codifica e prova. Sequenziale o a cascataE’ stato introdotto da Royce nel 1970. Si utilizza questo modello quando i requisiti del sistema sono abbastanza noti, oppure quando si deve adattare o estendere un sistema esistente. Questo modello è da considerare solo con requisiti ben definiti e stabili. Lo sviluppo procede tramite una sequenza lineare di attività. Ognuna di quest’ultime produce un risultato intermedio usato a valle dall’attività successiva. E’ fortemente sconsigliato iniziare una fase successiva fino a che non si è terminata la precedente. Le attività principali da compiere sono:
Questo è un modello molto criticato, ma allo stesso tempo è molto usato. Il progetto reale si conforma raramente allo schema sequenziale del modello. Ogni modifica è causa di confusione a mano a mano che il progetto avanza tanto che i costi aumentano quando le modifiche vengono fatte più in la nel tempo. Altro motivo di disapprovazione è che per il cliente è difficile enunciare esplicitamente tutti i requisiti. Questo tipo di modello non è in grado di governare l’incertezza. Il modello a cascata solo al termine dell’arco temporale porta a una versione funzionante dei programmi, un problema grave è che conduce a stati bloccanti cioè tutte le attività a valle di una determinata attività rimangono in stallo fino a quando l’attività a monte non viene completata. Modello incrementaleSi utilizza questo modello quando i requisiti iniziali sono piuttosto ben definiti, ma l’ampiezza stessa dell’attività di sviluppo preclude un processo lineare. Una soluzione attuabile in questa situazione è quella di fornire all’utente un insieme limitato di funzionalità per poi affinare ed espanderle nelle release successive. Come prima cosa si sviluppano i componenti più critici e più urgenti, poi nelle release successive avverranno le integrazioni. Nella versione 1 si avrà il prodotto base che soddisfa i requisiti fondamentali, nelle versioni successive fino alla finale verranno apportate delle modifiche volte a soddisfare le esigenze del cliente oppure implementeranno nuove funzioni. E’ utile usare questo modello in situazioni quali:
Modello a prototipoSi sviluppa un prototipo come strumento per comprendere i requisiti. Si adotta questa tecnica quando:
Bisogna ricordare che il modello ottenuto è un prototipo. Si deve resistere a trasformare un prototipo in un programma perchè il risultato sarà scadente. Modello iterativoSi utilizza questo modello quando si sviluppa un prototipo e lo si fa evolvere nel tempo. Dopo la fase di specificazione e progettazione si hanno due fasi in loop-back quella nella quale si sviluppa il prototipo e quella successiva di test. Se il test ha dato esisto negativo si ritorna a lavorare sull’implementazione del prototipo e cos`ı via iterativamente fino a quando la fase di test darà esito positivo. Modello a spiraleAbbina la natura iterativa della prototipazione e gli aspetti controllati e sistematici del modello a cascata consentendo un rapido sviluppo di versioni via via più complete del software. Non è un modello ma uno strumento per descrivere i modelli. Adottano un approccio ciclico per far crescere in modo incrementale il grado di definizione e implementazione di un sistema riducendo i rischi. Il modello a spirale produce dei passi e risultati intermedi che garantiscono agli stakeholder che le soluzioni del sistema sono fattibili e soddisfacenti. E’ composto da 4 parti principali che iterano ciclicamente.
Questo modello introduce la gestione del rischio e tratta anche aspetti gestionali (pianificazione e definizione obiettivi). E’ una strategia realistica per lo sviluppo di sistemi e di software di grande dimensioni. Poichè il software evolve di pari passo con l’avanzare del processo, lo sviluppatore e il cliente hanno modo di valutare meglio rischi e di reagire ad ogni stadio dell’evoluzione. Si serve della prototipazione, applicata ad ogni stadio dell’evoluzione, per ridurre i rischi. Modello Unified Process (UP - RUP)E’ un processo iterativo e incrementale guidato dai casi d’uso e centrato attorno all’architettura. Utilizza UML. Il processo è costituito da più cicli di sviluppo. Ogni ciclo produce una versione rilasciabile del prodotto Ogni ciclo è costituito da fasi (parzialmente sovrapposte):
Verifiche possibili al termine di ogni fase e ogni ciclo. Modello per integrazioneDopo la definzione della specifica si analizzano i modelli già esistenti. Possibili soluzioni:
Modelli agili (agile programming)Si utilizza il modello agile quando si hanno tempi stretti e requisiti incerti. Si trova in contrapposizione con gli alti modelli più rigidi e meno flessibili. Il ‘’Manifesto for agile software development’’ descrive la filosofia del modello agile sostanzialmente in questi termini:
I metodi agili sono stati sviluppati nel tentativo di superare i punti deboli presunti ed effettivi nell’ingegneria del software convenzionale. Lo sviluppo agile può fornire importanti benefici ma non può essere applicato a tutti i progetti, prodotti, gruppi di persone e situazioni. In molte situazioni non è più possibile definire completamente i requisiti prima dell’inizio del progetto. Gli ingegneri software devono essere sufficientemente agili da rispondere ad un ambiente in costante cambiamento. Un modello agile nasce quindi per rispondere in modo appropriato ai cambiamenti. Esistono due filoni principali di modelli agili eXtreme Programming e Agile Modeling Ecco i punti principali di ‘’XP Practices’’:
(su questa parte, vedere anche la sezione Informatica 3 alla pagina eXtreme Programming) Sistemi e softwareLa distinzione Software Engineering e System Engineering è dovuta al fatto che il software è solo un tipo di componente di un sistema, il processo di sviluppo di un sistema è più complesso ed articolato del processo di sviluppo di un prodotto software. Il software prodotto non è altro che un componente che il sistema dovrà gestire. Infatti sarà affiancato da altri componenti come l’hardware di elaborazione, la rete di comunicazione, procedure organizzative, banche dati, stampanti, ect. Sviluppo, controllo e gestioneLa creazione di un software che soddisfa le esigenze è composto da tre blocchi principali:
Scelta dei processi adeguatiNon esistono processi che sono assolutamente migliori di altri, è necessario dunque scegliere quello più adeguato in base alle specifiche esigenze del caso tenendo conti delle dimensioni del progetto e delle variabili tempo e costo. Processo di sviluppo di sistemi software
Esempio: Azienda di 50 persone. Sviluppo applicazioni custom e servizi (software di complessità standard, elevata, sistemi ERP)
architetturale, due sottoprocessi diversi.Uno dei sottoprocessi adatta in modo iterativo il prodotto ERP alle specifiche esigenze, mentre l’altro progetta in dettaglio e realizza eventuali componenti software specifici aggiuntivi.
Valutazione e miglioramento dei processiL’esistenza di un processo di sviluppo software non garantisce che il software venga consegnato nei tempi previsti, che risponda ai bisogni del cliente o che esibisca le caratteristiche tecniche che ne garantiranno qualità a lungo termine. I modelli devono essere affiancati da una solida pratica di ingegneria del software. Inoltre il processo deve essere valutato per garantire che risponda a un insieme di criteri di base che si sono dimostrati essenziali per il successo dell’ingegneria del software. Esistono due principali approcci alla valutazione del processo di sviluppo del software:
Per quanto riguardo quest’ultimo possiamo dire che si tratta di uno standard che definisce un insieme di requisiti per la valutazione del processo di sviluppo software. Lo scopo dello standard è quello di assistere le organizzazioni a sviluppare una valutazione obiettiva dell’efficienza di un determinato processo di sviluppo software. Dall’osservazione di attributi di processo si determinano i livelli di capacità indicatori della qualità raggiunta nella gestione del processo stesso. Esistono 5 livelli di maturità:
Il processo non è implementato o comunque non raggiunge i risultati attesi
Miglioramento dei processiIl miglioramento dei processi è una soluzione che va pianificata nel corso del tempo. Migliorare un processo significa mettere in atto un processo di controllo che misuri, analizzi e retroagisca sui processi per migliorarli. Per migliorare un processo è necessario estrarre delle variabili o misure da monitorare tra cui:
La norma che gestisce il miglioramento dei processi è la ISO 9001:2000. Essa suddivide i processi in 4 categorie:
|