Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica tesi di laurea specialistica Metodologie e strumenti dell'Ingegneria dei Requisiti della piattaforma MLA Anno Accademico 2010/2011 relatore Ch.mo Prof. Stefano Russo correlatore Ch.mo Ing. Roberto Pietrantuono candidato Emanuela Daria Capuano matr. 885/223 i A chi mi ha indicato la strada, tenendomi per mano. A mia madre e mio padre ii Indice generale Metodologie e strumenti dell'Ingegneria dei Requisiti della piattaforma MLA...................................1 Introduzione..........................................................................................................................................7 Capitolo 1...........................................................................................................................................10 1. I requisiti.........................................................................................................................................10 1.1 Pseudo requisiti...................................................................................................................11 1.2 Requisiti funzionali.............................................................................................................11 1.3 Requisiti non funzionali......................................................................................................12 1.3.1 Requisiti non funzionali di Prodotto.......................................................................14 1.3.1.1 Usability Requirements..............................................................................16 1.3.1.2 Efficency Requirements.............................................................................16 1.3.1.3 Reliability Requirements............................................................................16 1.3.1.4 Portability Requirements............................................................................17 1.3.2 Process Requirements.............................................................................................17 1.3.2.1 Requisiti di consegna.................................................................................17 1.3.2.2 Requisiti di implementazione.....................................................................18 1.3.2.3 Standards Requirements ............................................................................18 1.3.3 Requisiti Esterni.....................................................................................................18 1.4 Requisiti di dominio............................................................................................................18 1.5 Considerazioni ...................................................................................................................19 1.6 I requisiti utente e di sistema...............................................................................................20 1.7 Requisiti di interfaccia........................................................................................................21 1.8 La scrittura dei requisiti......................................................................................................22 1.9 Documento dei requisiti......................................................................................................24 1.10 La qualità del software......................................................................................................27 1.10.1 Lo standard ISO....................................................................................................28 Capitolo 2...........................................................................................................................................32 Requirements Engineering.................................................................................................................32 2.1 I rischi.................................................................................................................................32 2.2 L'ingegneria dei requisiti: definizioni ed attività................................................................34 2.3 Studio di fattibilità..............................................................................................................38 2.4 Elicitazione ed analisi dei requisiti.....................................................................................39 2.4.1 La scoperta dei requisiti..........................................................................................42 2.4.1.1 Sorgenti di informazioni.............................................................................42 2.4.1.2 Ingegneria dei requisiti basata sui punti di vista........................................43 2.4.1.3 Tecniche di elicitazione dei requisiti..........................................................44 2.4.1.3.1 Le interviste...................................................................................44 2.4.1.3.2 Scenari di interazione e casi d'uso.................................................45 2.4.1.3.2.1 Considerazioni sui casi d'uso.............................................49 2.4.2 L'analisi...................................................................................................................51 2.5 Specifica dei requisiti..........................................................................................................51 2.6 La tracciabilità dei requisiti.................................................................................................53 2.7 Convalida dei requisiti........................................................................................................56 2.8 La gestione dei requisiti......................................................................................................58 Capitolo 3...........................................................................................................................................61 Sistemi emdebbed e metodologie di sviluppo....................................................................................61 3.1 Caratteristiche dei sistemi embedded..................................................................................63 iii 3.2 Vincoli dei sistemi embedded.............................................................................................65 3.3 I requisiti di un sistema embedded......................................................................................66 3.3.1 I requisiti funzionali................................................................................................66 3.3.2 Requisiti temporali ................................................................................................67 3.3.3 Requisiti di affidabilità...........................................................................................67 3.3.4 Consumo.................................................................................................................68 3.3.5 Prestazioni..............................................................................................................68 3.3.6 Costo.......................................................................................................................68 3.4 Lo sviluppo dei sistemi embedded......................................................................................68 3.4.1 Il modello di sviluppo a cascata.............................................................................69 3.4.2 Un approccio di tipo evolutivo...............................................................................74 3.4.3 Modello a V............................................................................................................75 3.4.3.1 Le fasi del modello a V..............................................................................76 Capitolo 4...........................................................................................................................................79 Le metodologie agili...........................................................................................................................79 4.1 Il processo Agile..................................................................................................................81 4.2 Il Manifesto Agile...............................................................................................................82 4.3 Alcune metodologie agili....................................................................................................83 4.4 Metodologie tradizionali vs Metodologie agili...................................................................84 Capitolo 5...........................................................................................................................................89 La piattaforma Metropoolitana Leggera Automatica di AnsaldoBreda: un caso di studio................89 5.1 MLA....................................................................................................................................90 5.1.1 Generalità sui componenti della piattaforma..........................................................92 5.2 Il ciclo di sviluppo...............................................................................................................94 5.2.1 Planning..................................................................................................................95 5.2.2 Requirements Specification....................................................................................96 5.2.3 Architecture and Design.........................................................................................97 5.2.4 Module Design and Implementation......................................................................98 5.2.5 Analisi Statica.......................................................................................................100 5.2.6 Module Testing.....................................................................................................101 5.2.7 Integration and Validation Testing........................................................................102 5.2.8 Release .................................................................................................................103 5.2.9 Gestione della configurazione del software.........................................................104 5.3 Analisi del processo di sviluppo........................................................................................105 5.4 Problematiche connesse alla piattaforma MLA................................................................106 5.5 MetroRiyadh: un caso di studio........................................................................................108 5.5.1 Studio della documentazione esistente.................................................................109 5.5.2 Specifica................................................................................................................110 5.5.3 Verifica e validazione dei requisiti........................................................................111 5.5.4 Tracciabilità e gestione dei cambiamenti..............................................................111 5.6 Interventi...........................................................................................................................112 5.6.1 I requisiti software................................................................................................112 5.6.2 I livelli di astrazione.............................................................................................112 5.6.3 I requisiti di interfaccia.........................................................................................114 5.6.4 La scrittura dei requisiti........................................................................................117 5.6.4.1 Linee guida per la scrittura dei requisiti...................................................117 5.6.4.1.1 Strutturazione del requisito software...........................................118 5.6.4.1.2 Osservazioni.................................................................................119 5.6.4.1.3 Software High Level Requirements.............................................120 5.6.4.1.4 Low Level Software Requirements.............................................122 iv 5.6.4.1.5 Casi d'uso, scenari di interazione e gerarchie di requisiti............125 5.6.4.1.6 Interazioni con altri sottosistemi..................................................126 5.6.4.1.7 La tracciabilità.............................................................................126 Esempi.....................................................................................................................................128 Esempio 1......................................................................................................................128 Esempio 2......................................................................................................................135 Esempio 3......................................................................................................................138 Esempio 4......................................................................................................................140 5.7 IBM Rational DOORS: un tool per la Requirements Management.................................145 5.7.1 La struttura del progetto.......................................................................................145 5.7.2 Dal capitolato ai requisiti di sistema/veicolo..............................................147 5.7.3 Dai requisiti di sistema/veicolo agli HLR...................................................148 5.7.4 Dal requisito HL al requisito LL.................................................................149 5.7.5 Dai LLR ai Moduli Software......................................................................149 5.7.6 Moduli Software e Test...............................................................................150 Conclusioni.............................................................................................................................152 Appendice.........................................................................................................................................153 Scenari.....................................................................................................................................153 Suggerimenti per la scrittura dei casi d'uso.............................................................................153 Misure di qualità per la valutazione della specifia dei requisiti software (Standard IEEE 830)154 I dodici principi del software agile.........................................................................................154 SIL – Safety Integrity Level....................................................................................................156 Strumenti di supporto alla progettazione in AnsaldoBreda....................................................157 Norme adottate in AnsaldoBreda............................................................................................158 Bibliografia.......................................................................................................................................160 Indice delle illustrazioni Illustrazione 1: Esempio di requisito funzionale................................................................................12 Illustrazione 2: Classificazione dei requisiti non funzionali .............................................................14 Illustrazione 3: Misure dei requisiti non funzionali...........................................................................15 Illustrazione 4: Esempio di requisito di usabilità...............................................................................16 Illustrazione 5: Esempio di requisiti di sistema..................................................................................21 Illustrazione 6: Modello di qualità ISO/IEC 9126.............................................................................29 Illustrazione 7: Valutazione della maturità del processo....................................................................30 Illustrazione 8: Attività dell'ingegneria dei requisiti..........................................................................32 Illustrazione 9: Evasione dei progetti IT nell'anno 2009 secondo una stima dello Standish Group. .33 Illustrazione 10: Principali cause di fallimento di un progetto...........................................................34 Illustrazione 11: Modello a spirale dell'Ingegneria dei Requisiti.......................................................35 Illustrazione 12: Le fasi del processso di ingegneria dei requisiti......................................................38 Illustrazione 13: Il processo di deduzione ed analisi dei requisiti......................................................41 Illustrazione 14: Processo di ricerca dei requisiti...............................................................................42 Illustrazione 15: Casi d'uso e ciclo di vita del software.....................................................................48 Illustrazione 16: Esempio di matrice di tracciabilità (orizzontale).....................................................54 Illustrazione 17: Tracciabilità Pre-RS e Post-RS................................................................................55 Illustrazione 18: Mutabilità dei requisiti nel tempo......................................................................58 Illustrazione 19: Evoluzione controllata dei requisiti.........................................................................60 Illustrazione 20: Incidenza percentuale dei sistemi emebedded sul costo complessivo dei prodotti. 62 Illustrazione 21: Fasi dello sviluppo software secondo il modello a cascata.....................................70 Illustrazione 22: Metodologia di sviluppo per sistemi embedded......................................................71 Illustrazione 23: Partizionamento HW/SW........................................................................................72 v Illustrazione 24: Costo necessario per risolvere bug durante il CVS.................................................72 Illustrazione 25: Sviluppo di sistemi embedded basati su piattaforma..............................................73 Illustrazione 26: Metodologia di sviluppo software a spirale............................................................74 Illustrazione 27: Modello a V.............................................................................................................76 Illustrazione 28: Fasi dei modelli iterativi..........................................................................................80 Illustrazione 29: Fasi del waterfall model..........................................................................................80 Illustrazione 30: Fasi del processo di sviluppo Agile.........................................................................82 Illustrazione 31: Piattaforma MLA....................................................................................................92 Illustrazione 32: Architettura del TCMS............................................................................................93 Illustrazione 33: Modello a V adoperato dall'AnsaldoBreda..............................................................94 Illustrazione 34: Planning e Project Review......................................................................................95 Illustrazione 35: Requirements Specification.....................................................................................96 Illustrazione 36: Requirements Review..............................................................................................97 Illustrazione 37: Archietecture and Design........................................................................................98 Illustrazione 38: Module Design and Implementation.......................................................................99 Illustrazione 39: Detailed Design Review........................................................................................100 Illustrazione 40: Analisi Statica........................................................................................................101 Illustrazione 41: Module Testing......................................................................................................102 Illustrazione 42: Integration and Validation Testing.........................................................................103 Illustrazione 43: Release...................................................................................................................104 Illustrazione 44: Configuration Review...........................................................................................105 Illustrazione 45: Esempio di requisito funzionale di sistema di MetroRiyadh................................109 Illustrazione 46: Esempio di requisito software...............................................................................109 Illustrazione 47: Processo di definizione dei requisiti......................................................................114 Illustrazione 48: Esempio di requisito di interfaccia di comunicazione: Dataset 500......................116 Illustrazione 49: Esempio di requisito di sistema.............................................................................120 Illustrazione 50: Esempio di "sovra-specifica" nel requisito software.............................................121 Illustrazione 51: DOORS: Il Project Template.................................................................................146 Illustrazione 52: Il campo descrizione di un documento FRS..........................................................147 Illustrazione 53: Tracciabilità FRS_CapitolatoTecnico....................................................................148 Illustrazione 54: Estratto di una matrice di tracciabilità (riferimento verticale)..............................149 Illustrazione 55: Matrice di tracciabilità HLR - LLR.......................................................................149 Illustrazione 56: Esempio di tracciabilità tra LH e Moduli software...............................................150 Illustrazione 57: Esempio di tracciabilità tra Modulo Software e File Test....................................151 Indice delle tabelle Tabella 1: Destinatari del documento dei requisiti.............................................................................24 Tabella 2: Protitype SRS outline................................................................................................25 Tabella 3: La struttura di un documento dei requisiti.........................................................................26 Tabella 4: Metodologia a cascata vs Agile (SCRUM)........................................................................85 Tabella 5: Luoghi comuni sugli approcci a cascata e Agile...............................................................86 Tabella 6: Livelli di SIL nella norma EN IEC 61508.......................................................................157 vi 6 Introduzione Nel corso degli ultimi decenni il software ha vissuto una rapida evoluzione, fornendo tecnologie sempre più intelligenti e, di conseguenza, prodotti sempre più complessi. Le esperienze pregresse relative a tali sistemi hanno mostrato che lo sviluppo informale del software non sia l'approccio più idoneo: si pensi, infatti, ai progetti di grandi dimensioni ed alle difficoltà ad essi correlate di presentare il lavoro in tempo congruo, di non sforare il budget iniziale, alle caratteristiche di performance ed affidabilità richiesti, nonché alla loro manutenzione. Per poter ottenere un buon prodotto software è indispensabile gestire il relativo progetto in maniera adeguata1 . A tal riguardo, è necessario introdurre un'importante figura, quella del Gestore del Progetto, il cui compito è attuare, durante il processo di sviluppo del prodotto, la pianificazione, il monitoraggio ed il controllo di persone, processi ed eventi. Indubbiamente, il primo passo da compiere in tal senso è quello della raccolta delle informazioni concernenti le funzionalità che il committente richiede al prodotto che si intende sviluppare, cioè dei requisiti. In questo lavoro sarà approfondita una particolare branca dell Ingegneria dei Sistemi: l' Ingegneria dei Requisiti, che rappresenta una delle attività più critiche del processo software, poichè racchiude in sé il processo di comprensione e definizione dei servizi richiesti al sistema in esame e l'individuazione dei vincoli operativi e di sviluppo del prodotto. Naturalmente, un errore commesso in questa fase si riverbera nelle fasi susseguenti di progettazione ed implementazione del sistema: da ciò se ne evince la criticità. L'approccio adeguato per comprendere l'utilizzo di un artefatto consiste nell'individuare gli obiettivi che esso ci consentirà di raggiungere, affinchè il sistema risulti adeguato alle aspettative del cliente. Molto spesso, però, le tecniche di Requirements Engineering sono adoperate solo nella fase finale di analisi per ottemperare all'esigenza di completezza, consistenza ed, eventualmente, per garantire una verifica automatica dei requisiti stessi, ignorandone gli obiettivi iniziali. La letteratura riporta una molteplicità di metodi e tecniche volti alla raccolta ed alla strutturazione dei requisiti e la scelta dell'approccio da adottare dipende dal particolare contesto nel quale si opera. In generale, l'Ingegneria dei Requisiti ha come obiettivo quello di sviluppare tecniche e modelli che siano di aiuto all'analista per capire in profondità il contesto organizzativo nel quale è 1 Le problematiche che possono scaturire da una gestione non adeguata del progetto software ricadono nel ritardo della consegna dello stesso, l'aumento dei suoi costi e la sua scarsa aderenza alle esigenze dei committenti. 7 inserito il sistema software ed a sviluppare soluzioni che siano quanto più possibile aderenti alle esigenze riscontrate. Pertanto, nell'ottica di dover adoperare un approccio diverso a seconda del particolare contesto in esame, si rende ancor più indispensabile individuare gli obiettivi che il sistema deve raggiungere, capire le motivazioni, le funzioni che dovranno essere progettate ed implementate, nonchè i vincoli ai quali la realizzazione del sistema dovrà sottostare. Tutto ciò è ancor più vero in un contesto nel quale i sistemi si trovano in stretta relazione con l'ambiente in cui operano, perchè pensati per applicazioni specifiche, come i sistemi embedded (cioè dedicati ad un'applicazione od una classe specifica di applicazioni) la cui presenza massiva sul mercato è fonte, principalmente, di innovazione. L' applicazione dei principi del Requirements Engineering richiede, a partire dal concetto di "obiettivo", lo sviluppo di un'idea di "componente attivo" dotato di capacità di reazione che dipendano dal contesto in cui opera, nonchè quella di "componente strategico", con caratteristiche di indipendenza rispetto all'ambiente in cui il prodotto viene immesso. Questa considerazone renderà possibile, nell'ambito dell'Ingegneria dei Requisiti, separare gli aspetti troppo vincolati allo specifico progetto in esame da quelli più generici e, quindi, adattabili ai membri di una stessa famiglia di prodotti. Pertanto, ad un sistema embedded potrebbe essere conferito il requisito mancante della versatilità e, di conseguenza, porre le basi per il riuso delle parti che godono di questa caratteristica. Un approccio sistematico delle pratiche suggerite dall'Ingegneria del Software risulta di grande interesse in coloro i quali abbiano intenzione di migliorare i processi già acquisiti, così da renderli standard e minimizzare la differenza tra i processi aziendali adottati. In effetti, la tendenza che va via via affermandosi è quella di abbandonare l'approccio legato alle azioni correttive sulle "non conformità" riscontrate, a favore di uno basato sulla prevenzione dei difetti sul prodotto finale, spostando l'attenzione dal prodotto al processo. Obiettivo della tesi è tracciare un percorso che, a partire dai capisaldi dell'Ingegneria dei Requisiti conduca verso la loro applicazione in un sistema embedded reale. Un'interessante sezione del lavoro presentato è, infatti, frutto di un'attività svolta nell'ambito del progetto Iniziativa Software Finmeccanica. Essa è stata sostenuta dall'Unità di Ricerca coordinata dal Prof. Ing. Stefano Russo e svolta, assieme all' Ing. Roberto Pietrantuno, presso la sede napoletana di AnsaldoBreda. Tra gli alti, l'Azienda si distingue per la piattaforma MLA, un prodotto particolarmente apprezzato dal mercato mondiale; pertanto, per garantirne la credibilità e la qualità è richiesto il rispetto di alcuni standard e l'adozione di particolari criteri e strumenti di sviluppo. 8 Ciò ha fatto nascere una nuova consapevolezza che ha spronato l'azienda a rivedere l'intero ciclo di vita del prodotto, così da scorgerne le criticità e gli aspetti migliorabili. Pertanto, uno degli obiettivi da raggiungere è stato fissato nell'applicazione di metodologie e strumenti dell'Ingegneria del Software per miglirare il processo di sviluppo della piattaforma MLA, con particolare enfasi sulla gestione dei requisiti e la progettazione mirata alla riusabilità. I risultati esposti in questa tesi, riguardano il progetto MetroRiyadh, del quale si è fatto un caso di studio. Nel seguente lavoro sarà introdotto il concetto di "requisito", ed una possibile classificazione (Capitolo 1); sarà discusso il processo di Requirements Engineering, mostrandone i risultati (Capitolo 2). A partire da una panoramica sui Sistemi Embedded, verranno mostrati alcuni possibili modelli di sviluppo (Capitolo 3), saranno confrontati i metodi tradizionali con le metodologie Agili, per comprendere quale sia l'approccio più adeguato nei sistemi dedicati (Capitolo 4). Tutti i concetti esposti nelle precedenti sezioni di questo lavoro troveranno riscontro in un caso concreto, il progetto di AnsaldoBreda MetroRiyadh, per il quale, in questa prima fase di lavoro, sono stati proposti ed attuati degli interventi di Ingegneria dei Requisiti (Capitolo 5). La tesi è corredata da un'Appendice, in cui alcuni aspetti verranno approfonditi. 9 Capitolo 1 1. I requisiti Il termine "requisito" ha una natura controversa2, che viene chiarita da Alan Mark Davis, uno dei maggiori esperti di ingegneria dei requisiti, come segue: " Se una compagnia vuole dare in appalto un grande progetto di sviluppo software, deve definire i requisiti in modo abbastanza astratto da non predefinire alcuna soluzione. I requisiti devono essere scritti in modo che diversi appaltatori possano fare le offerte proponendo vari metodi per soddisfare le necessità del cliente. Quando l'appalto è stato assegnato, l'appaltatore deve scrivere per il cliente una definizione del sistema molto dettagliata, in modo che il cliente possa capire e verificare cosa il software farà. Entrambi questi documenti possono essere chiamati documenti dei requisiti del sistema " [1]. La prima distinzione proposta da Davis è, dunque, quella tra requisiti utente 3, che rappresentano l'entità (bisogni/necessità dello stakeholder 4) ad un alto livello di astrazione ed i requisiti di sistema5 (cosa farà il sistema ed i vincoli operativi),nche ne offrono una descrizione al un livello di maggior dettaglio. Sebbene la distinzione tra i "ruoli" utente-sistema possa sembrare chiara, alcune volte non è semplice attuare una separazione netta tra i due livelli descrittivi, così da cadere in errore in questa fase del processo di sviluppo. Una seconda classificazione dei requisiti, ancora una volta proposta da A.M. Davis, si basa sulla pratica del triage6: secondo questo approccio, la priorità del requisito rappresenta uno dei presupposti per stipulare un contratto tra gli stakeholder, che stabiliranno quali requisiti debbano essere soddisfatti ed entro quali limiti di tempo e di costo. Per meglio comprendere questo principio, potremmo immaginare di operare con un progetto ipotetico dotato di risorse illimitate: in tal caso, pur essendo pronti a soddisfare tutte le esigenze degli stakeholder coinvolti, sarebbe opportuno valutare gli aspetti che siano in grado di apportare una maggiore soddisfazione e che diverrebbero prioritari. 2 In alcuni casi, un requisito è una formulazione astratta e di alto livello di un servizio che il sistema dovrebbe fornire, oppure un vincolo di sistema; in altri casi, un requisito è visto come una definizione formale e dettagliata di una funzione del sistema. 3 Requisiti utente: rappresentano i bisogni/necessità degli stakeholder 4 Stakeholder: Un individuo, un gruppo di persone, un'organizzazione, o altra entità direttamente o indirettamente interessata al sistema. 5 Requisiti di sistema: definiscono le funzioni, i servizi ed i vincoli operativi del sistema in modo dettagliato. Il documento dei requisiti ad essi relativo, noto come Documento dei Requisiti di Sistema (o Functional Requirements Specification) , dovrebbe essere preciso nel descrivere accuratamente cosa debba essere implementato. Esso può essere parte del contratto tra l'acquirente e lo sviluppatore. 6 Triage: Questo termine, adoperato in campo medico, consiste nel distinguere le urgenze nei pronto soccorso, così da garantire l'intervento tempestivo ai casi inidcati come urgenti. 10 La situazione appena descritta non è realistica, dunque è ancor più evidente quanto nei progetti concreti sia necessario ridurre la quantità dei requisiti da soddisfare così da semplificare i progetti ed eliminare inutili sprechi di risorse. Questa considerazione comporterebbe, in definitiva, validazioni più mirate da parte del committente e degli altri stakeholder, fornendo anche una flessibilità maggiore rispetto alle eventuali modifiche da apportare ai requisiti. Ciò risulta perfettamente in linea se consideriamo le ultime stime pubblicate dallo Standish Group, dalle quali si evince che circa il 45% delle funzionalità di un sistema sia completamente inutilizzato, ed il 19% viene utilizzato solo raramente. Tuttavia, i requisiti rappresentano il patrimonio di progetto più importante, dal momento che costituiscono l’anello di congiunzione tra i bisogni e le percezioni degli stakeholder e le soluzioni tecnologiche progettate dagli esperti software. 1.1 Pseudo requisiti Una considerazione interessante in merito alle caratteristiche richieste ad un sistema riguarda il concetto [2] di "pseudo requisito", ovvero un requisito secondario. Vengono così indicati i vincoli imposti dal cliente o dall' ambiente in cui opererà il sistema, come quelli sull' implementazione 7, relativi alle interfacce8, operazioni9, packaging10, vincoli di natura legale11. Ne sono un esempio: "Il linguaggio di programmazione adottato dovrà essere Java", oppure "La piattaforma dovrà interfacciarsi con documenti scritti con MS Word su Windows XP". Nei successivi paragrafi non verrà operata la distinzione tra requisiti primari e secondari12. 1.2 Requisiti funzionali I requisiti funzionali si presentano come elenchi di funzionalità o servizi che il sistema deve fornire. Essi descrivono anche il comportamento del sistema a fronte di particolari input e come esso dovrebbe reagire in determinate situazioni. 7 Vincoli posti su come implementare il sistema, ad esempio l'utilizzo di specifici tool, di particolari piattaforme hardware oppure di linguaggi di programmazione. 8 Vincoli di interfaccia, cioè imposti da sistemi esterni (con i quali il sistema debba comunicare) e formati di scambio delle informazioni. 9 Possono essere prescritte le operazioni da eseguire rispetto all'amministrazione del sistema e sulla sua gestione. 10 Vincoli sul packaging riguardano la consegna del sistema. 11 I vincoli di natura legale possono far riferimento a licenze, norme e certificazioni alle quali il sistema dovrà essere conforme. 12 Ad esempio, lo pseudo requisito di interfaccia verrà indicato come requisito di interfaccia. 11 Illustrazione 1: Esempio di requisito funzionale Che si tratti di utente o di sistema, un requisito funzionale potrà essere formulato a diversi livelli di dettaglio, dovendo preservare, naturalmente, la precisione della specifica. Due importante caratteristica delle specifiche dei requisiti sono la completezza e la coerenza. Un documento di specifica dei requisiti è completo se tutti i requisiti richiesti dagli utenti sono definiti ed è consistente quando non vi sono requisiti in conflitto tra loro. Sebbene per sistemi di piccole dimensioni questi risultati siano facilmente raggiungibili, per i sistemi caratterizzati da un numero elevato di requisiti è richiesto uno sforzo maggiore. Infatti, in questo secondo caso, la difficoltà è dovuta alla maggiore occorrenza di errori ed omissioni, nonché alla presenza di un numero elevato di stakeholder con esigenze differenti, a volte contrastanti, che possono non essere valutate nella prima fase di scrittura delle specifiche. Dunque, la presenza di inconsistenze potrebbe essere scorta addirittura dopo aver consegnato il prodotto al cliente, dando luogo a costi esorbitanti. 1.3 Requisiti non funzionali I requisiti non funzionali rappresentano i vincoli e le proprietà/caratteristiche relative ad sistema, come vincoli di natura temporale, vincoli sul processo di sviluppo e sugli standard da adottare13. Tipicamente, i requisiti non funzionali non si applicano a singole funzioni o servizi, bensì all'intero sistema. Essi non riguardano direttamente le specifiche funzioni fornite dal sistema, ma possono sia riferirsi a caratteristiche che si desidera il sistema presenti (come l'affidabilità, i tempi di risposta, l'occupazione in memoria), sia definire i vincoli ai quali il sistema deve sottostare (come la capacità dei dispositivi di I/O e la rappresentazione dei dati utilizzata nelle interfacce del sistema). 13 I requisiti non funzionali non riguardano solo il sistema software che si sta sviluppando, alcuni possono vincolare il processo usato per sviluppare il sistema. Esempi di questo tipo sono: le specifiche degli standard di qualità da usare, la specifica sull'uso di un particolare strumento CASE, una descrizione della lavorazione che deve essere seguita [3] 12 I requisiti non funzionali sono strettamente vincolati alle esigenze degli utenti, alle politiche organizzative adottate, agli standard adoperati, alla necessaria modalità di interazione del relativo sistema con altri componenti. Pertanto, essi possono essere classificati14 in: • requisiti di prodotto, che descrivono le caratteristiche del prodotto, in termini di usabilità 15, efficienza16 , affidabilità17 e portabilità18; • requisiti organizzativi (o di processo), che derivano dalle politiche e procedure organizzative relative al cliente ed allo sviluppatore; • requisiti esterni, che si riferiscono a fattori estranei al sistema ed al relativo processo di sviluppo, come requisiti legislativi, requisiti di interoperabilità. La classificazione proposta ha un carattere meramente teorico, poichè viene in aiuto proponendo una visione schematica della vasta gamma di requisiti non funzionali che possono intervenire nell'ambito di un progetto. Infatti, nella realtà, ed ancor di più nel documento che dovrà descriverli, è praticamente impossibile attuare una distinzione così rigida tra concetti espressi, magari nello stesso requisito, soprattutto se si pensa alle relazioni che sussistono tra le varie tipologie di requisiti. Pertanto, quella fornita è solo una delle possibilità di classificare i requisiti non funzionali19. 14 Ian Sommerville [4]classificò quindi i requisiti non funzionali in tre categorie principali: product, process e external, cioè i requisiti di prodotto, di processo e requisiti esterni. 15 L'usabilità indica la semplicità di utilizzo del prodotto, pertanto, è una qualità soggettiva: • dipende dal contesto • dipende dall’esperienza 16 Un sistema è efficiente se usa memoria, CPU e altre risorse in modo proporzionato ai servizi che svolge, ovvero senza sprechi. 17 Per affidabilità di un qualsiasi dispositivo (sistema o componente) si intende la probabilità che esso funzioni correttamente, per un dato tempo, in certe condizioni. 18 Un sistema è 'potabile' quando può essere esportato in ambienti diversi da quello di origine. 19 Ad esempio, si potrebbero considerare non funzionali solo i requisiti di prodotto, riferendosi agli altri come "vincoli". 13 Illustrazione 2: Classificazione dei requisiti non funzionali 1.3.1 Requisiti non funzionali di Prodotto Un requisito di prodotto specifica le caratteristiche desiderabili per un sistema, che possono limitare la libertà20 di chi dovrà progettare e sviluppare il prodotto. Ad esempio, un requisito di performance è espresso in maniera non oggettiva dall'utente, la qual cosa rende difficile agli sviluppatori capire quale sia il livello di soddisfazione per l'utente. Pertanto, quest'ultimo potrebbe essere stabilito arbitrariamente dagli stessi sviluppatori, potendo non incotrare le effettive esigenze del committente. Per ovviare al problema è necessario esprimere i requisiti non funzionali di prodotto in maniera quantitativa, così da poterne fare una verifica oggettiva prima della consegna del prodotto. Sulla scorta di tali considerazioni, forniamo un esempio di quanto detto: Goal (non verificabile): "il sistema deve essere facile da usare per controllori esperti, e deve essere tale da 20 Un esempio di requisito di prodotto vincolante potrebbe essere: " Il sistema deve essere eseguito sia in su di un PC che su di un MAC" (portanility requirement) Da ciò scaturisce che sarà influenzato direttamente il codice sorgente. 14 minimizzare gli errori degli utenti". Requisito non-funzionale (verificabile): "controllori esperti devono poter imparare a usare tutte le funzioni del sistema in max. 2 ore di apprendimento. Dopo l’apprendimento, il controllore deve essere in grado di operare senza commettere più di 2 errori al giorno". Questa considerazione, però, non può prescindere della difficoltà, da parte del cliente, di tradurre una propria esigenza in tal senso, del costo talvolta elevato dell'operazione, e dell'impossibilità di quantificare alcune tipologie di requisiti21. Si pensi, ad esempio, ai requisiti di performance ed a quelli di usability: i primi possono essere formulati e quantificati in maniera esatta, cosa che non vale per i secondi che, quindi, potranno essere descritti solo informalmente. Illustrazione 3: Misure dei requisiti non funzionali Non di rado, i requisiti non funzionali di prodotto entrano in conflitto tra loro (ad esempio, un requisito di sicurezza potrebbe comportare una perdita in performance); pertanto, analizzandoli adeguatamente, si riuscirà a comprendere la priorità di ciascuno di essi e stabilire quali strategie adottare per prevenire i conflitti. 21 Si pensi, ad esempio, alla manutenibilità di un prodotto che non può essere quantificata. 15 Usabilità, Efficienza, Affidabilità, Portabilità sono le principali caratteristiche richieste ad un prodotto. 1.3.1.1 Usability Requirements I requisiti di usabilità descrivono la caratteristica di un prodotto software di essere comprensibile ed utilizzabile agevolmente22 da parte dell'utente23. Questa tipologia di requisiti può essere influenzata dagli aspetti funzionali, di efficacia e di affidabilità richiesti al sistema. Essi descrivono in che modo utente e sistema debbano interagire, indirizzando tutti gli scenari di utilizzo del prodotto, inclusa la fase di apprendimento dell'utilizzo dello strumento. Illustrazione 4: Esempio di requisito di usabilità 1.3.1.2 Efficency Requirements L'efficienza rappresenta una qualità interna, che si riferisce al "peso" del software sulle risorse; spesso, essa influenza e determina le prestazioni di un sistema. Ci si riferisce alle risorse per indicare altri prodotti software, hardware, ecc. L'efficienza di un sistema può essere meglio compresa attraverso due tipologie derivate: requisiti prestazionali e requisiti di spazio, di cui mostriamo alcuni esempi. "Il risultato di un'invocazione di una query su di un database dovrà essere visualizzato entro 1,3 secondi dalla richiesta" (requisito prestazionale). " Il codice eseguibile non può superare i 512 Kbyte di memoria" (requisito di capacità). 1.3.1.3 Reliability Requirements La Dependability può essere definita come la credibilità di un sistema di calcolo, cioè il grado 22 Lo sforzo è commisurato al livello di conoscenza dell'utente. 23 Saranno considerati utenti gli operatori, utenti finale e gli utenti indiretti. 16 di fiducia che può essere ragionevolmente riposto nei servizi che esso offre. Essa include gli attributi di Reliability, Availability, Safety e Security. In particolare, la Reliability di un sistema è la misura del tempo continuativo in cui viene fornito un servizio corretto 1.3.1.4 Portability Requirements I requisiti di portabilità descrivono la capacità di un prodotto software di essere eseguito in ambienti diversi, cosicché esso sia in grado di seguire l'evoluzione tecnologica. Naturalmente, quando ci si riferisce ad un ambiente si tiene conto degli aspetti organizzativi e tecnologici (insieme di hardware e software) che lo caratterizzano. 1.3.2 Process Requirements Altra tipologia di requisiti non funzionali sono quelli di processo che, come suggerito dal nome, descrivono i vincoli ai quali deve sottostare il processo di sviluppo di un sistema. Essi derivano dalle politiche e dalle procedure dell'organizzazione del cliente e dello sviluppatore. Un process requirement può definire gli standard da adottare: "Il processo di sviluppo ed i documenti consegnati saranno conformi al processo ed alle strutture di documento descritte nello std ISO-ABCD-2007", gli strumenti24 che dovranno essere adoperati: " La gestione dei requisiti dovrà essere effettuata mediante il tool IBM Rational DOORS", così come la documentazione da presentare: "I report relativi alla gestione del sistema dovranno essere presentati al committente ogni 3 settimane". Come suggerito dalla figura 2, i requisiti di processo danno vita a tre sotto-tipologie di requisiti non funzionali: i requisiti di consegna, i requisiti di implementazione ed i requisiti degli standard. 1.3.2.1 Requisiti di consegna I requisiti di consegna impongono i vincoli sulle scadenze di consegna al committente, dai report iniziali sino all'installazione e manutenzione, accompagnando tutto il processo di sviluppo del sistema. 24 Un vincolo su di un processo di sviluppo potrebbe essere quello di adoperare particolari tool software. 17 1.3.2.2 Requisiti di implementazione I requisiti di implementazione vincolano l'intera fase di realizzazione del sistema e possono riguardare, ad esempio, la prescrizione dell'utilizzo di un particolare linguaggio di programmazione25 o di uno specifico tool software. 1.3.2.3 Standards Requirements Altri vincoli che potranno essere imposti al processo di sviluppo di un sistema riguardano gli standard che dovranno essere adottati per garantirne la conformità. Per poter implementare correttamente un requisito sugli standard sarà necessario tener conto delle ulteriori restrizioni imposte dai requisiti esterni. 1.3.3 Requisiti Esterni Così come suggerito dal nome, i requisiti esterni non dipendono da caratteristiche instrinseche del sistema, né dal relativo processo di sviluppo. Essi si riferiscono a come deve avvenire l'interazione tra il sistema ed altri sistemi (non appartenenti alla medesima organizzazione), definiscono le norme che devono essere rispettate affinchè il sistema operi in maniera lecita, così come le caratteristiche che il sistema deve mostrare per accogliere un maggior consenso da parte degli utenti. Un esempio di requisito esterno è il seguente: " Il sistema non permetterà ai suoi operatori di conoscere alcuna informazione personale sui clienti, eccetto il nome ed il numero di riferimento interno". Si noti che in alcuni casi, a causa della loro natura, il soddisfacimento dei requisiti esterni è difficilmente verificabile Da quanto detto, questa classe di requisiti non funzionali è scomponibile in tre sotto-categorie: requisiti di interoperabilità, requisiti etici e requisiti legislativi. I primi, probabilmente, ricalcano maggiormente la natura di requisito poichè esprimono in che modo il sistema che si vuole sviluppare svolgerà delle azioni, mentre i secondi ed i terzi pongono delle restrizioni non propriamente tecniche. 1.4 Requisiti di dominio I requisiti di dominio derivano dal dominio di applicazione del sistema, di cui rispecchiano le caratteristiche ed i limiti. I requisiti di dominio possono rientrare in una delle due categorie sopraccitate e, poichè hanno una natura specialistica, gli ingegneri del software possono trovare 25 Una organizzazione potrebbe esprimere l'esigenza che il processo software sia sviluppato con un particolare linguaggio perchè è quello che viene adoperato di consueto e, pertanto, ben conosciuto. 18 difficoltà nel capire il modo in cui questi si rapportino agli altri requisiti di sistema. Se non soddisfatti, essi potrebbero portare il sistema a non lavorare in maniera soddisfacente. La loro definizione può includere una terminologia specifica del dominio e, naturalmente, possono dar luogo a requisiti funzionali, così come vincolare requisiti pre-esistenti. Consideriamo, ad esempio, un requisito di dominio per un sistema di controllo di frenata di un treno [3]. La massima decelerazione che il software può imporre al veicolo per evitare, ad esempio, un deragliamento sarà calcolata come segue: Dtreno = Dcontrollo + Dgradiente Si noti l'utilizzo di una terminologia specifica del dominio di applicazione, cioè di un'equazione matematica, che presuppone la conoscenza del particolare sistema in esame. Un errore, in tal senso, potrebbe essere quello di lasciar fuori dalla definizione del requisito tali aspetti, comportando una errata implementazione dello stesso. Ancora, non è raro che il committente consideri un requisito di dominio come implicito e nel supporre che lo sviluppatore ne abbia cognizione, non lo esprime. 1.5 Considerazioni L'attività di analisi e specifica dei requisiti 26 termina con la redazione di un documento, il Software Requirements Specification, il quale dovrebbe mostrare caratteristiche di completezza 27 e coerenza28(cfr. Appendice). Richiedere queste caratteristiche per un SRS relativo ad un sistema di grandi dimensioni e complesso è un'impresa impegnativa, se non impossibile per due ragioni: la prima riguarda la facilità nel commettere errori ed omissioni nello scrivere le specifiche dei requisiti, la seconda riguarda le esigenze, a volte contrastanti, degli stakeholder coinvolti. Per scovare le incongruenze in un documento di specifica dei requisiti è, quindi, necessaria un'analisi attenta che, purtroppo, a volte viene effettuata solo a valle della consegna del prodotto software al cliente. I requisiti non funzionali specificano o limitano le proprietà complessive del sistema come le prestazioni, la disponibilità, la protezione: spesso sono più critici dei singoli requisiti funzionali 29, 26 La fase di analisi e specifica dei requisiti si ritiene conclusa dopo che : • sia stato studiato il contesto e raccolte le esigenze del cliente, • siano analizzate le richieste per capirne la realizzabilità, • siano state negoziate le priorità di sviluppo. 27 Completezza: nella specifica dei requisiti indica che tutti i servizi richiesti dagli utenti siano definiti. 28 Coerenza: nella specifica dei requisiti indica che nella loro descrizione non debbano esserci termini contraddittori. Si noti che nei sistemi grandi e complessi è praticamente impossibile raggiungere la coerenza e la completezza dei requisiti. 29 Un utente, non trovando una corrispondenza tra una funzione che si aspetta il sistema fornisca, ha solitamente la capacità di aggirare tale funzione, sopperendola con una simile. Ciò non accade nel caso di requisiti non funzionali 19 tanto da poter rendere il sistema inutilizzabile nel caso in cui non trovino corrispondenza nella specifica. Infatti, essi possono essere vincolati a limiti di budget, alle politiche organizzative, di sicurezza, privacy30, alla necessità di interoperabilità con altri sistemi software o hardware. Una difficoltà che accompagna tali requisiti riguarda la loro verificabilità: infatti, è abbastanza comune che gli utenti o i clienti si riferiscano ad essi come obiettivi generali che il sistema deve perseguire, dando la libertà agli sviluppatori di interpretarli in maniera arbitraria. Questa potrebbe essere una causa di malcontento da parte del commitente, una volta rilasciato il prodotto. 1.6 I requisiti utente e di sistema I requisiti utente, essendo rivolti a personale non esperto, specificano solo il comportamento esterno del sistema attraverso una descrizione chiara dei requisiti funzionali e non funzionali. In effetti, in essi dovrebbero essere concentrati i servizi chiave che devono essere forniti (bisogni ed esigenze degli utenti), in quanto un requisito che contiene troppe informazioni potrebbe risultare di difficile comprensione per l'utente e, d'altro canto, limitare lo slancio degli sviluppatori verso soluzioni innovative. Dunque, nella definizione di tali requisiti, bisognrebbe evitare l'utilizzo di un linguaggio specifico che descriva in che modo il sistema venga implementato, così come è sconsigliato l'utilizzo del linguaggio naturale. Infatti, mentre l'adozione del primo ci condurrebbe certamente ad un requisito che per definizione non sarà di utente, l'utilizzo del linguaggio naturale, sebbene possa sembrare il mezzo più immediato ai fini della comprensione dell'utente, proietterebbe sul requisito ottenuto tutte le sue lacune (requisiti funzionali, non funzionali, obiettivi di sistema e di progettazione potrebbero non essere chiaramente distinti, oppure si potrebbe definire in un unico requisito più requisiti). Dunque, per la definizione dei requisiti utente 31 si potrebbe prediligere un linguaggio naturale, corredato da diagrammi, che rappresenti il giusto compromesso tra formalismo e comprensibilità. Essendo destinati agli specialisti, gli aspetti tecnici prendono forma nei requisiti di sistema, ai quali potremmo pensare come versioni maggiormente dettagliate dei requisiti utente, dato che esprimono cosa un sistema debba fare e sotto quali vincoli debba operare. che, coinvolgendo l'intero sistema, non può essere eluso allo stesso modo. 30 I principali tipi di requisiti non funzionali sono: i requisiti di prodotto, i requisiti esterni, i requisiti organizzativi. 31 Durante questa attività, potrebbe essere interessante etichettare i requisiti utente a seconda dell'importanza che riveste per l'utente, ad esempio come OBBLIGATORIO o DESIDERATO. 20 Illustrazione 5: Esempio di requisiti di sistema In effetti, essi dovrebbero descrivere il comportamento esterno ed i vincoli operativi, utilizzando notazioni più dettagliate rispetto a quelle adoperate per i requisiti utente. Naturalmente, essendo un sistema scomponibile, anche i requisiti di sistema saranno organizzati così da far riferimento al particolare sottosistema al quale si riferiscono: ciò è indispensabile per il riuso. In ultimo, ricordiamo che è consigliabile collocare i requisiti utente in sezioni del documento di specifica separate da quelle di sistema, così da fornire al destinatario le informazioni di suo interesse in una forma ad esso consona. 1.7 Requisiti di interfaccia Solitamente, un sistema software viene calato in un contesto costituito da altri sistemi, con i quali sarà necessario interagire. Naturalmente, per consentire lo scambio di informazioni tra il nuovo ed i preesistenti sistemi bisognerà, innanzitutto32, definire in maniera precisa le interfacce di questi ultimi. La specifica delle interfacce dovrebbe essere espressa ad un alto livello di astrazione, senza descrivere dettagli ed inoltre, le funzionalità offerte dalla specifica interfaccia potrebbero essere espresse mediante un linguaggio tabellare, oppure linguaggio naturale strutturato. Strutturare la specifica di un'interfaccia come un modello astratto è certamente anche un'azione mirata al riuso. Immaginiamo, ad esempio, che un'organizzazione si occupi di progettare e mettere in commercio una famiglia di prodotti, che si interfacciano tutti con un sistema preesistente 32 La specifica delle interfacce dei sistemi preesistenti deve essere definita nella fase di analisi dei requisiti. 21 adoperando una particolare interfaccia, come un dataset. Quest'ultimo non dovrà essere definito ex novo per ogni nuovo progetto, bensì potrà essere riusato. Potremmo chiederci per quale motivo non preferire notazioni formali al posto di un linguaggio naturale strutturato. In linea di principio l'adozione di un metodo formale risulterebbe più idoneo alla specifica delle interfacce, eliminandone le ambiguità; per contro, se la descrizione non venisse corredata da ulteriori spiegazioni, risulterebbe incomprensibile. Tipicamente, i tipi di interfaccia che potranno essere specificate in un documento dei requisiti sono: le interfacce procedurali, strutture dati e rappresentazione dei dati. Le interfacce procedurali riguardano le funzionalità che programmi o sottosistemi preesistenti offriranno richiamando le procedure di interfaccia. Le interfacce dei dati33 descrivono le strutture dati che vengono scambiate tra sottosistemi, mentre le interfacce di rappresentazione34 descrivono specifici pattern utilizzati per descrivere i dati di un sottosistema preesistente. 1.8 La scrittura dei requisiti Sebbene i requisiti utente possano essere espressi in un linguaggio naturale 35, non vale lo stesso per i requisiti di sistema, i quali necessitano di notazioni più dettagliate e specifiche. Infatti, l'utilizzo del linguaggio naturale richiede che ogni termine adoperato per descrivere un requisito abbia un' accezione comune a colui che redige il documento e all' utente. Un chiaro esempio dell'ambiguità del linguaggio naturale è fornito dallo studioso Jackson (1995): "Shoes must be worn" "Dogs must be carried" "Le scarpe devono essere indossate" " I cani devono essere portati" In effetti, entrambi i verbi adoperati (to wear, to carry) si prestano ad un accezione comune: portare, pertanto il significato di ciascuna frase può essere equivocato. In definitiva, il linguaggio naturale risulta essere eccessivamente flessibile se utilizzato nella 33 Per la descrizione delle interfacce dei dati vengono preferiti i modelli grafici. 34 Le interfacce di rappresentazione dei dati come la disposizione di bit sono molto comuni nei sistemi real time integrati ed il modo più consono per descriverle è quello di adoperare diagrammi delle strutture corredate di spiegazioni delle funzioni espletate da ogni gruppo di bit. 35 Nella descrizione dei requisiti utente in linguaggio naturale possono sorgere dei problemi, quali: • mancanza di chiarezza: alcuni termini potrebbero prestarsi a più di un'interpretazione generando ambiguità; • confusione dei requisiti: potrebbe non esserci una chiara distinzione tra requisiti funzionali, non funzionali, informazioni di progettazione, obiettivi di sistema; • mescolanza dei requisiti: in un requisito potrebbero essere accorpati più requisiti. 22 specifica dei requisiti. Oltre a questa caratteristica, si è riscontrato che l'adozione di tale metodo di scrittura infici la tracciabilità e una volta definiti, i requisiti verranno collezionati in un documento strutturato che, a vari livelli di dettaglio, dovrà essere completo e coerente. Dunque, ottenere un buon documento di specifica richiede che i requisiti in esso contenuti siano descritti in modo uniforme e, per fare ciò, diviene molto utile adoperare delle linee guida che vengono indicate in letteratura.stessa dei requisiti, nonchè la possibilità di scovare requisiti correlati al fine di valutare l'impatto di un possibile cambiamento. Per far fronte all'esigenza di adoperare un linguaggio idoneo, la letteratura propone l'uso del linguaggio naturale strutturato, eventualmente corredato da semplici modelli grafici. L'idea di base è quella di limitare la libertà 36 dell'addetto alla descrizione dei requisiti, così da forzarlo a scrivere ciascun requisito secondo uno "schema" che garantisca l'uniformità delle specifiche, senza sacrificare l'espressività e la comprensibilità peculiari del linguaggio naturale. Una volta definiti, i requisiti verranno collezionati in un documento strutturato che, a vari livelli di dettaglio, dovrà essere completo e coerente. Dunque, ottenere un buon documento di specifica richiede che i requisiti in esso contenuti siano descritti in modo uniforme; per fare ciò, risulta molto utile adoperare le linee guida riportate in letteratura. Il punto da cui partire è quello di scegliere un formato standard ed adoperarlo per ciascun requisito, in cui servendosi del linguaggio naturale strutturato, si esprimano le azioni attraverso la forma "dovrà" per i requisiti obbligatori e la forma "dovrebbe" per i requisiti desiderabili. Inoltre, bisognerà evidenziare i concetti fondamentali contenuti nel requisito, evitando, nel caso di requisiti utente, termini troppo tecnici. Si può, ad esempio, adoperare un modulo standard costituito dai seguenti campi: • Funzione: indicazione della funzione che dovrà o dovrebbe essere svolta o, se vogliamo, il nome della funzione; • Descrizione: descrizione sintetica della funzione che dovrà o dovrebbe essere svolta; • Input: input della funzione; • Sorgente: entità dalla quale arriva l'input; • Output: output della funzione; 36 Il linguaggio naturale strutturato limita la terminologia che può essere adoperata attraverso l'uso di modelli per specificare i requisiti di sistema. Inoltre, può includere costrutti di controllo derivati dai linguaggi di programmazione, così come schemi grafici per suddividere le specifiche. In pratica vengono usati costrutti di controllo tiipici di linguaggi di programmazione(if-then-else, while…), forms (moduli predefiniti: nome e descrizione della funzione, input, output, pre-condizioni, ecc.) 23 • Destinazione: entità alla quale perverrà l'output; • Azione: descrizione dettagliata delle azioni che dovranno o dovrebbero essere svolte. È importante che il dettaglio si riferisca a COSA debba o dovrebbe essere fatto, non al COME, quindi alle scelte implementative; • Richiede: indicazione delle azioni pregresse all'esecuzione della funzione corrente; • Pre-condizioni: indicazione delle condizioni che debbano o dovrebbero sussistere prima dell'esecuzione della funzione corrente; • Postcondizioni: indicazione delle condizioni che debbano o dovrebbero verificarsi dopo l'esecuzione della funzione corrente; • Effetti collaterali: indicazione degli effetti che l'adempimento della funzione possa comportare. Le voci presenti nel modulo appena mostrato rappresentano solo un esempio dal quale prendere spunto per definire uno schema di strutturazione che possa rispecchiare le specifiche esigenze. Infatti, è possibile eliminare alcune voci o aggiungere tabelle o modelli grafici del sistema, così da pervenire ad un formato più semplice o ad uno più ricco di informazioni.Una breve linea guida su come scrivere i requisiti è presentata in Appendice 1.9 Documento dei requisiti La fase di analisi e specifica termina con la redazione del Documento di Specifica dei Requisiti Software (SRS), che rappresenta una dichiarazione ufficiale di ciò che gli sviluppatori del sistema dovrebbero implementare. Tabella 1: Destinatari del documento dei requisiti Clienti Specificano i requisiti; Validano i requisiti se essi rispecchiano le loro esigenze; Richiedono cambiamenti. Manager Usano il documento dei requisiti per pianificare l'offerta del sistema ed il suo processo di sviluppo Ingegneri di sistema Adoperano i requisiti per capire le caratteristiche del sistema da sviluppare Ingegneri del test di sistema Utilizzano i requisiti per sviluppare i test di controllo del sistema. Ingegneri della manutenzione del sistema Usano i requisiti per comprendere la struttura del sistema e le interazioni tra i suoi componenti In effetti, si potrebbe pensare all'SRS come un contratto tra due contraenti (l'organizzazione che si aggiudica il lavoro ed il committente), in quanto esso rappresenta un compromesso tra la 24 descrizione delle funzionalità che devono essere fornite al cliente, la descrizione dettagliata dei requisiti che devono essere fornite agli sviluppatori e ai tester, nonché informazioni inerenti alla evoluzione del sistema. In ogni caso, il livello di dettaglio dell'SRS dipende dal particolare sistema in esame e dal processo di sviluppo adottato37. Nel corso degli ultimi decenni sono state fornite delle linee guida per la redazione di un documento di specifica dei requisiti software, ne è un esempio notevole lo standard IEEE/ANSI 830-1998 che, sebbene rappresenti una struttura troppo generale per essere adottata in qualunque contesto, offre ottimi spunti per redigere un documento di buona qualità. Tabella 2: Protitype SRS outline Table of Contents 1. Introduction 1.1 Purpose 1.2 Scope 1.3 Definitions, acronyms and abbreviations 1.4 References 1.5 Overview 2. Overall description 2.1 Product prospective 2.2 Product functions 2.3 User characteristics 2.4 Assumption and dependencies 3. Specific Requirements Appendixes Index Si noti, però, che la definizione dei requisiti nella fase iniziale del progetto consente sì di definire un accordo tra le parti in causa, ma non dà luogo ad un "congelamento delle specifiche". Infatti, anche dopo la stesura del documento di specifica, durante le attività di realizzazione del prodotto, i requisiti possono ancora cambiare a causa di diversi fattori ed anche se l'indagine iniziale sia stata ritenuta esaustiva. Accade non di rado che nuove esigenze del cliente, cambiamenti del mercato, nuove norme determinino un mutamento nei requisiti prcedentemente concordati. 37 Si noti che, quando il prodotto software è parte di un progetto più ampio, in cui è prevista l'interazione tra sistemi hardware e software, bisogna definire i requisiti ad un livello di maggior dettaglio. Ciò vuol dire che i documenti saranno più prolissi, poichè dovranno includere, se non tutti, la maggior parte delle sezioni mostrate nello standard IEEE/ANSI 830-1998. In tali casi bisogna corredare l'SRS di un sommario completo ed un indice analitico, così da rendere agevole ai lettori trovarvi le informazioni di cui necessitano. 25 Questa considerazione spinge taluni a pensare che, in effetti, il documento di specifica dei requisiti sia obsoleto già al momento della sua stesura. Per questo motivo, si potrebbe pensare di strutturare un documento dei requisiti sulla scorta dello standard IEEE, ma con sezioni che tengano conto dell'evoluzione prevista del sistema. Tabella 3: La struttura di un documento dei requisiti Prefazione Dovrebbe definire i potenziali lettori del documento e descrivere la storia della corrente revisione, includendo una motivazione per la creazione di una nuova versione ed un riassunto delle modifiche apportate in ciascuna versione Introduzione Dovrebbe descrivere le necessità del sistema, descrivere in breve le funzioni e spiegare come interagirà con gli altri sistemi; descrivere come il sistema si inserisce all'interno degli obiettivi strategici e aziendali dell'organizzazione che ha commissionato il software Glossario Dovrebbe definire i termini tecnici utilizzati nel documento. Non si dovrebbe presupporre una particolare esperienza e competenza del lettore. Definizione dei requisiti utente Dovrebbe descrivere i servizi forniti agli utenti ed i requisiti di sistema non funzionali. Per questa descrizione si può usare il linguaggio naturale, diagrammi, o altre notazioni che siano comprensibili al committente. Bisogna specificare gli standard del prodotto e della lavorazione che devono essere applicati. Architettura del sistema Descrizione di alto livello dell'architettura del sistema prevista, mostrando la distribuzione delle funzioni nei vari moduli del sistema. Si dovrebbero evidenziare i componenti strutturali che sono stati riutilizzati Specifiche dei requisiti di sistema Descrizione dettagliata dei requisiti funzionali e non funzionali. Se necessario, possono essere aggiunti ulteriori dettagli ai requisiti non funzionali (ad esempio, le interfacce con altri sistemi). Modelli del sistema Dovrebbe delineare uno o più modelli del sistema, mostrando le relazioni tra i componenti del sistema e l'ambiente. Possono essere diagrammi di flusso, modelli semantici, ecc. Evoluzione del sistema Dovrebbe indicare i presupposti su cui si basa il sistema ed indicare le modifiche previste, dovute all'evoluzione dell'hardware ed ai cambiamenti delle necessità dell'utente. Appendici Dovrebbe fornire informazioni dettagliate relative all'applicazione che si sta sviluppando, ad esempio le descrizioni del database o dell'hardware. I requisiti hardware devono definire le configurazioni minime ed ottimali per il sistema. I requisiti del database devono definire l'organizzazione logica delle informazioni usate dal sistema e le relazioni tra queste. Indice Possono essere inclusi diversi indice nel documento: oltre ad un indice alfabetico, potrebbe esservi un indice dei diagrammi, delle funzioni e così via. 26 1.10 La qualità del software Per qualità38 di un prodotto si intende la sua aderenza ai requisiti per esso richiesti, tale da apportare un buon livello di soddisfazione in coloro che ne usuifruiranno. Naturalmente, questa definizione si mantiene valida per il prodotto software, per il quale è fondamentale importanza determinarne il corretto funzionamento e l' utilizzo adeguato da parte degli utenti. Per poter stimare la qualità del prodotto software è necessario effettuare un insieme di valutazioni e, per fare ciò, occorrerà definire delle caratteristiche e metriche che consentano di calcolare in maniera quanto più possibile oggettiva e precisa39 il suo livello di qualità. Cerchiamo di comprendere cosa si intende per misurazione e dove si colloca questo concetto nell'ambito della discussione a venire. La misurazione è il processo di assegnazione oggettiva di un numero (o simbolo) ad una entità del mondo reale, descrivendole secondo regole defintite, al fine di caratterizzarne uno specifico attributo [6]. Per effettuare una misurazione è necessario aver compreso con chiarezza quali siano gli attributi da misurare e quali entità posseggano tali attributi. Si parla, in tal caso, di comprensione empirica. Queste definizioni si adattano al contesto in esame in considerazione del fatto che ogni caratteristica rilevante del prodotto sarà misurata applicando metriche adeguate e verrà valutata secondo intervalli di accettabilità e valori di soglia stabiliti. In effetti, i criteri secondo i quali viene stimata la qualità del software sono di facile comprensione. Di seguito riportiamo una lista delle principali caratteristiche che rendono un software di qualità: • l'adeguatezza delle funzionalità alle necessità degli utenti; • la facilità con cui il prodotto può essere installato e personalizzato in ambienti e piattaforme differenti; • le prestazioni fornite sia in termini di tempi di risposta che di utilizzo delle risorse; • l'affidabilità; • la capacità di evolvere nel tempo, così da facilitare le operazioni di manutenzione del prodotto; 38 L'ISO 8402 definisce la qualità come "l'abilità a soddisfare le necessità degli utenti, esplicite ed implicite". 39 Si noti che le misure che riguardano il software non sono assolute come quelle delle scienze fisiche [5]. 27 • il livello di sicurezza garantito rispetto agli accessi non autorizzati; • la sicurezza dei dati, sicurezza fisica delle persone e dei beni. 1.10.1 Lo standard ISO La presenza sempre più massiva di software nei servizi che quotidianamente ci vengono offerti è chiaramente proporzionale all'esigenza di controllarne la qualità. Allo scopo, nel corso degli ultimi decenni sono state emesse delle norme a supporto, tra le quali quelle della serie ISO 900040 che, nella versione Vision 2000, propone un modello unico, adattabile a diverse tipologie aziendali (in sostituzione alla vecchia suddivisione nelle tre norme ISO 9001, 9002, 9003. Tra le norme di maggior rilevanza, riveste il ruolo principale il modello ISO/IEC 912641. In esso si identificano quattro sezioni: • Parte 1: Modello della qualità del software • Parte 2: Metriche per la qualità esterna • Parte 3: Metriche per la qualità interna • Parte 4: Metriche per la qualità in uso a ciascuna delle quali è associato un insieme di attributi. Di seguito riportiamo una tabella riassuntiva delle caratteristiche e attributi del software indicate dal modello. 40 La serie ISO 9000 venne pubblicata per la prima volta nel 1987, la seconda edizione venne invece rilasciata nel 1994, con piccole modifiche rispetto alla precedente. 41 Le norme sono emesse dall'ISO, l'organismo internazionale di standardizzazione (International Organization for Standardization), al quale aderiscono moltissimi paesi al mondo e collaborano un gran numero di enti nazionalai, anche non governativi. Tra questi ultimi, compare l'IEC, l'organo internazionale che definisce gli standard nel settore delle tecnologie dell'informazione e comunicazione (International Electrotechnical Commission). 28 Illustrazione 6: Modello di qualità ISO/IEC 9126 L'approccio dello standard può essere rappresentato da una "catena di qualità", che mette in risalto, attraverso le influenze/dipendenze, che la qualità di un prodotto software dipende dalla maturità dell'organizzazione che lo produce, intesa come competenza delle persone, efficacia dei processi ed utilizzo di metodi, tecniche e strumenti adeguati . 29 Illustrazione 7: Valutazione della maturità del processo Quelli che vengono valutati, al fine di misurare la qualità del prodotto software, sono i requisiti non funzionali, noti anche come "requisiti di qualità" che si esplicano nei fattori di qualità interni, esterni ed in uso. I primi, detti anche fattori di Processo, indicano la qualità del software percepita dagli sviluppatori; i secondi, noti anche come fattori di Prodotto, si riferiscono alla qualità percepita dagli utenti; i terzi rappresentano l'efficacia, l'efficienza e la soddisfazione con cui determinati utenti raggiungono specifici obiettivi in particolari ambienti [8]. Questi ultimi sono strettamente dipendenti dal contesto, dalla capacità di percezione degli utenti del sistema, dunque non rappresentano fattori assoluti di qualità. Dunque, la catena di qualità indica che la qualità del processo di sviluppo influenza la qualità interna prodotto software realizzato, la quale, a sua volta, influenza la qualità esterna del prodotto che, infine, influenza la qualità del prodotto in uso. Queste relazioni implicano la necessità di definire gli attributi che caratterizzano ogni tipologia di fattori di qualità e di individuare le metriche per misurarne il livello. Rivolgendo la nostra attenzione alla figura 7, percorrendola da sinistra verso destra, possiamo dedurre che la valutazione della maturità del processo, nell'ottica del suo miglioramento, è un strumento importante per ottenere un prodotto qualitativamente soddisfacente. Allo stesso modo, la valutazione ed il miglioramento della qualità del prodotto conducono al miglioramento della qualità in uso. Viceversa, percorrendo la figura da destra verso sinistra, si evince che la valutazione della qualità in uso rappresenta un vero e proprio feedback per migliorare il prodotto. Analogamente, la valutazione della qualità di quest'ultimo (facciamo riferimento alle qualità interne ed esterne del software) rappesenta un riscontro volto al miglioramento del processo. Lo sviluppo del software è un'a attività basata sulla creatività e su concetti tecnici, in cui la componente umana è la principale chiave di lettura. La definizione dei processi consente di standardizzare le operazioni, prevede dei risultati che saranno misurabili e migliorabili. 30 Inoltre, l'adozione di strumenti a supporto consente di aumentare la produttività e la qualità. Pertanto, la giusta combinazione di questi aspetti determinano il grado di maturità di un'organizzazione software e, da ciò, il livello di qualità del software prodotto. La maturità di un'organizzazione è determinata: • dalla competenza ed esperienza delle persone; • dalla maurità dei processi adoperati per lo sviluppo del software; • dall'utilizzo di metriche, metodi, tecniche e strumenti a supporto delle attività di sviluppo, che siano utili ed efficaci. Ciascuna persona coinvolta in un progetto software contribuisce in una certa misura alla sua qualità. Le aree di competenza che hanno un impatto diretto nella gestione della qualità del software sono: • L'assicurazione della qualità: il controllo e la verifica dell'aderenza ai processi, del livello qualitativo della conduzione del progetto e, naturalmente, di qullo raggiunto dal prodotto sviluppato; • Gestione dei requisiti: la raccolta, l'analisi, la selezione, la documentazione la gestione delle modifiche, la tracciabilità dei requisiti. In sintesi, la qualità del prodotto finale dipende dalla qualità con cui i requisiti sono raccolti e interpretati, sviluppati, verificati e validati. Usare strumenti e metodi standard per la gestione dei requisiti permette di aumentare l’efficacia e l’efficienza del processo, migliorando la capacità di fissare gli opportuni traguardi per l’organizzazione e riducendo l’impatto dei cambiamenti richiesti in corso d’opera sul disegno generale. • Ingegnerizzazione del software: la progettazione, lo sviluppo ed il test; • La Gestione del progetto: pianificazione e controllo del progetto; • La gestione della configurazione; • le misurazioni: la definizione delle metriche da usare in base agli obiettivi che si vogliono raggiungere, le misurazioni e le valutazioni dei risultati. 31 Capitolo 2 Requirements Engineering Illustrazione 8: Attività dell'ingegneria dei requisiti 2.1 I rischi Il rischio rappresenta la possibilità del verificarsi di una condizione svantaggiosa in relazione alle attese ed alla scala dei valori dei soggetti coinvolti e che, una volta presentatasi, possa creare loro dei danni. Per la sua natura, la probabilità associata ad un rischio deve essere misurata. La valutazione del potenziale danno associato al verificarsi di un evento, pertanto, parte dalla comprensione della scala dei valori e del risultato atteso dagli stakeholder42 di un progetto. Nell'ambito di un progetto, un rischio rappresenta la probabilità del non raggiungimento degli obiettivi prefissati in termini di quantità di prodotti (numero e tipo di funzionalità, dati), di qualità dei risultati (requisiti non funzionali), di costo e durata delle attività. Dunque, tra le principali cause di insuccesso di un progetto emergono l'indeterminatezza, l'ambiguità, la genericità (intesa come scarsa qualità della formulazione), la mutevolezza degli obiettivi progettuali. Infatti, poichè dietro una formulazione ambigua di un obiettivo possono nascondersi una moltitudine di differenti formulazioni specifiche, essa difficilmente potrà prestarsi da guida per il lavoro a valle. Pertanto, è necessario che ciascun obiettivo sia ben formulato, condiviso e misurabile 42 Nella corretta definizione dei requisiti, è fondamentale riconoscere e coinvolgere fin dalle prime fasi gli stakeholder che trarranno vantaggi o svantaggi dall’esito progettuale. Tipici stakeholder da considerare sono i committenti, gli utilizzatori diretti ed indiretti, i partecipanti allo sviluppo, i rappresentanti dell’esercizio dei sistemi, il management ed i regolatori esterni (autorità di vario tipo non partecipanti al progetto ma interessate al rispetto di vincoli esterni predeterminati). 32 dalle parti interessate, cioè clienti e produttore. Capita spesso che gruppi di progetto con esperienza e capacità tecnologiche, non presentino la stessa attitudine a mettere a fuoco gli obiettivi da perseguire, calandoli nel contesto reale. Questo atteggiamento è dovuto alla scarsa attenzione dedicata alla fase iniziale del progetto e comporta un ulteriore investimento di risorse per revisionare, testare e correggere gli errori propagati sul prodotto finale. Infatti, porre l'accento sulle attività, confondendole con i risultati, porta spesso a trascurare soluzioni alternative meno immediate, ma talvolta più efficaci. Causa di scarsa qualità è la difficoltà di far condividere gli obiettivi tra stakeholder con interessi talvolta divergenti, nonchè le errate motivazioni che spingono il gruppo incaricato del progetto a concentrarsi sullo strumento da produrre, perdendone di vista lo scopo per cui viene richiesto. Illustrazione 9: Evasione dei progetti IT nell'anno 2009 secondo una stima dello Standish Group Alcuni studi hanno mostrato che la percentuale di progetti falliti, o che hanno richiesto risorse maggiori rispetto a quelle stanziate, sia elevatissima. In questo scenario, un peso importate è stato attribuito agli errori nei requisiti: come è noto, la rimozione di un errore commesso durante la fase di definizione può costare fino a 20 volte di più di uno commesso durante la fase di realizzazione del prodotto. Inoltre, alcune stime mostrano che un gran numero di progetti falliscono per erroti commessi nella fase di definizione dei requisiti e ciò ha portato all'introduzione di una ben definita disciplina: l'Ingegneria dei Requisiti. 33 Illustrazione 10: Principali cause di fallimento di un progetto 2.2 L'ingegneria dei requisiti: definizioni ed attività "Requirements engineering is the branch of software engineering concerned with the realworld goals for, functions of, and constraints on software systems. It is also concerned with the relationship of these factors to precise specifications of software behaviour, and to their evolution over time and across software families" [9]. L'ingegneria dei requisiti è una sezione fondamentale del System Engineering e, come tale, è rappresentata da un vasto insieme di attività volte al trattamento sistematico dei requisiti. Tale disciplina non rappresenta un processo a sé stante, bensì è parte integrante del processo di sviluppo [10]; essa vede la sua esplicazione nella "Gestione dei requisiti", che si espanderà a sua volta nelle attività di studio di fattibilità, elicitazione, analisi, specifica e validazione. 34 Illustrazione 11: Modello a spirale dell'Ingegneria dei Requisiti Prima di procedere ad una definizione più dettagliata delle attività coinvolte nell'ingegneria dei requisiti, si esprimerà breve considerazione sul modello mostrato in figura 11. La spirale indica la ciclicità delle attività svolte, in cui le risorse impiegate (in termini di lavoro e tempo profusi) in ciascuna azione sono commisurati al particolare sistema su cui si sta lavorando ed allo stato di avanzamento del processo. Pertanto: • Nello stadio iniziale del processo, rappresentato dalla parte più interna della spirale, sarà impiegato uno sforzo maggiore per la deduzione dei requisiti di alto livello aziendali, non funzionali ed i requisiti utente. • Nello stadio finale del processo, rappresentato dalla parte più esterna della spirale, i maggiori sforzi saranno indirizzati alle azioni peculiari dell'ingegneria dei requisiti e, chiaramente alla modellazione del sistema. Si noti che il modello mostrato risulta flessibile 43 per diversi contesti e, in particolar modo, laddove i requisiti vengono definiti a mano a mano con un livello di dettaglio maggiore, ovvero attraverso livelli di astrazione differenti. Descriviamo brevemente ognuna di tali attività, al fine di meglio comprendere in cosa consista una adeguata gestione dei requisiti. Lo studio di fattibilità consiste nel valutare se le necessità del cliente possano essere soddisfatte con le risorse disponibili. La Requirements Elicitation (elicitazione) consiste nella fase di comprensione e raccolta dei requisiti provenienti dagli stakeholder principali del sistema. In questa fase bisognerà tener conto 43 Il modello a spirale mostrato non è rigidamente fissato, bensì consente di introdurre nuovi giri alla spirale, così di uscirvi qualora l'attività di raccolta dei requisiti utente sia terminata. 35 delle esigenze mutevoli del customer, il quale, durante la vita del prodotto, potrebbe richiedere modifiche a requisiti precedentemente valutati oppure chiederne di nuovi. Nella System Requirements Analysis si effettua una trasformazione dei requisiti richiesti dagli stakeholder in requisiti tecnici del sistema, i quali fungeranno da guida per il progetto del sistema stesso. Tale fase, dunque, consiste nello stabilire quali requisiti debbano essere soddisfatti, nell'assegnazione di una priorità ad essi [11], nonchè nella definizione di una strategia generale che ne consenta il soddisfacimento. L'attività di Requirements Specification consiste nel documentare in maniera adeguata i requisiti derivanti dalle fasi precedenti, così da comunicarli agli stakeholder ed ai progettisti. L'ultima fase consta delle attività di Verifica e Validazione: la prima riguarda la valutazione della qualità dei requisiti, la seconda consiste nell'accertarsi che i requisiti specificati rispecchino effettivamente i bisognI degli stakeholder. Lo spettro delle attività svolte nell'ambito dell'ingegneria dei requisiti è molto ampio 44 e ciò rende difficile fornire una definizione precisa di tale disciplina. Certamente, la definizione dei requisiti di un sistema parte dal concetto di "obiettivo", mentre l'attività cardine è il modo in cui si passa dall'obiettivo alla specifica del corrispondente sistema software. Quanto detto è suffragato da una seconda e più tecnica definizione della disciplina: “Requirements engineering is concerned with the identification of the goals to be achieved by the envisioned system, the operationalization of such goals into services and constraints, and the assignment of responsibilities for the resulting requirements to agents such as humans, devices and software”[12]. che sposta l'interesse sulla definizione ed analisi delle motivazione e degli obiettivi della specifica dei requisiti stessa; da qui la definizione di approccio "goal-oriented". Per adottare questo approccio vi saranno delle azioni prelimiari da compiere e che riguardano l'individuazione degli obiettivi che il sistema dovrà raggiungere. Naturalmente, la definizione formale dei goal prende vita solo dopo una serie di raffinamenti 45 degli aspetti considerati in prima battuta e, darà luogo ad obiettivi di natura e priorità differenti. Sulla scorta di quanto appena detto, gli obiettivi rappresentano sia il punto di partenza che di arrivo delle attività svolte, fungendo da meccanismo per l'individuazione, l'organizzazione dei requisiti e, chiaramente, un mezzo per giustificare la presenza degli specifici requisiti in un sistema 44 Requirements Engineering: the subset of system engineering concerned with discovering, developing, tracing, analyzing, qualifying, communicating and managing requierements that define the system at successive levels of abstraction [13]. 45 Sarà possibile raffinare gli obiettivi esplorando diverse soluzioni alternative. Infatti, una volta che sia stato selezionato un insieme di alternative per il raggiungimento dell'obiettivo, sarà possibile elaborarle nelle fasi successive per renderle complete e precise. 36 software. In linea con questo approccio: • La fase di acquisizione dei requisiti partirà dalla comprensione degli obiettivi che lo stakeholder richiederà per il sistema: ciascuno di essi dovrà essere motivato, così come dovranno essere definite e valutate le modalità alternative per raggiungerlo. • Una volta stabiliti i requisiti, essi dovranno essere messi in relazione al contesto organizzativo, cioè il sistema reale in cui essi dovranno essere calati per soddisfare le esigenze e vincoli (ovvero obiettivi ) di contesto46. • Si noti che l'analisi basata sugli obiettivi apporta benefici anche in termini di chiarezza dei requisiti che potrebbero mancare di tale caratteristica. • La tracciabilità dei requisiti evidenzierà chi li ha definiti e le motivazioni, i collegamenti tra i requisiti in relazione tra loro; • La gestione dei conflitti consisterà nell' individuare e gestire gli obiettivi che hanno dato luogo ai requisiti discordanti47 già nella fase iniziale del processo (e prima dell'attività di design). A partire dagli obiettivi degli stakeholder, si potranno esplorare soluzioni alternative di design per il loro soddisfacimento: esse dovranno essere valutate in base all'importanza, ai costi ed all'efficacia. • Già prima che l'applicazione venga sviluppata sarà possibile valutarne la qualità della specifica, verificando che soddisfi gli obiettivi determinati nella fase di analisi. • Il cambiamento dei requisiti degli utenti e degli stakeholder può essere gestito definendo nuovi obiettivi o modificando quelli esistenti. Si noti che la gestione dei cambiamenti al livello degli obiettivi consente una più agevole gestione dei cambiamenti dei requisiti. • Definire gli obiettivi, la tracciabilità tra essi ed i requisiti e con il design offre una maggiore spinta verso il riuso. Infatti, lo sforzo iniziale profuso per la comprensione e la formalizzazione degli obiettivi di un prodotto, potrebbe essere capitalizzato, sfruttando gli aspetti comuni a prodotti simili. Naturalmente, ciò sarà possibile a patto che gli obiettivi siano adeguatamente formalizzati, scomposti in sotto-obiettivi e tradotti in requisiti. Nonostante la gestione dei requisiti sia decisiva nelle fasi di vita iniziali di un progetto, essa rappresenta un processo che accompagna il progetto durante tutta la sua durata. Del resto, mano a mano che ci si addentra nel ciclo di vita, anche i requisiti subiscono 46 Si pensi a norme interne, obiettivi di business, ecc. 47 Stakeholders may have different viewpoints on the systems and conflicting interests[14]. 37 un'evoluzione, arricchendosi e specializzandosi fino, talvolta, ad indirizzarsi verso strade non valutate inizialmente. Essi potranno affiancarsi a nuovi requisiti, potranno essere modificati od eliminati. Dunque, i requisiti rappresentano il fattore che maggiormente potrà incidere sulle risorse necessarie allo sviluppo del progetto, ed è per questo motivo che potremmo pensare al Requirements Management come ad un processo con carattere sia tecnico che gestionale. Infatti, se è vero che la modifica dei requisiti comporti, tipicamente, una modifica degli aspetti tecnici legati al sistema, presumibilmente, affinchè il progetto venga portato a termine, dovrà essere rivista anche l'assegnazione delle risorse da stanziare. Riguardo la redazione della documentazione dei requisiti, può rilevarsi utile l'utilizzo di tool software capaci di automatizzare le parti più ripetitive dell'attività, consentendo raggruppamenti, estrazioni ed analisi di tracciabilità dei requisiti e di impatto dei cambiamenti. Questi ultimi aspetti, infatti, mostrando le interrelazioni tra requisiti, consentiranno inizialmente l'individuazione di eventuali inconsistenze e ridondanze, poi la loro risoluzione, così da evitarne l'influenza nella fase di realizzazione del prodotto. In definitiva, un' adeguata gestione dei requisiti è la base per abbattere la probabilità di rischio associati ad un progetto, favorendo il riuso e la qualità. Illustrazione 12: Le fasi del processso di ingegneria dei requisiti 2.3 Studio di fattibilità L'azione da intraprendere prima di stabilire se un nuovo sistema sia sviluppabile è quello di operare uno studio di fattibilità. Le informazioni preliminari di cui si dovrà disporre saranno, dunque, i requisiti aziendali, una 38 descrizione di massima del sistema che dovrebbe essere sviluppato e un'indicazione di come esso contribuirà al raggiungimento degli obiettivi aziendali. Lo studio di fattibilità consiste, fondamentalmente, nell'identificare e porre al committente una serie di quesiti in merito all'utilizzo che si vuole fare dello strumento commissionato, dall'impatto positivo che ci si aspetta abbia sull'organizzazione, di quante e quali risorse debbano essere profuse allo scopo. Ed infatti, non di rado capita che un'organizzazione richieda un sistema che poi non riesca a contribuire ai processi aziendali. Ciò può capitare a causa di requisiti espressi in maniera confusa, oppure perchè vengono interposti ostacoli all'utilizzo proficuo dello strumento. Dunque, i candidati a rispondere a tali domande dovrebbero essere: i manager dei dipartimenti in cui lo strumento sarebbe adoperato, gli ingegneri del software che mostreranno una certa conoscenza del tipo di sistema commissionato, nonchè gli utenti finali, ovvero tutte persone interessate, competenti e direttamente coinvolte nel progetto proposto. Seguendo questa strada, l'azione dovrebbe condurre, passando per la raccolta e la valutazione delle risposte fornite, all'output: il report dello studio di fattibilità. Oltre all'esito dello studio, in esso potranno essere proposti cambiamenti negli scopi e nelle risorse allocate, nonchè nuovi spunti (eventuali requisiti di alto livello) su cui lavorare. 2.4 Elicitazione ed analisi dei requisiti Nella prima parte di questo capitolo è stata rivolta particolare attenzione al concetto di obiettivo, come punto focale attorno al quale sviluppare tutta la successiva discussione. Pertanto, si provi a ritornare su tali concetti per comprendere in che modo gli obiettivi del cliente vadano mano a mano a trasformarsi in un prodotto finito48. Il primo passo da compiere, in tal senso, è certamente l'apertura verso gli obiettivi che debbano essere raggiunti e la valutazione dei vincoli ai quali essi sono sottoposti. L'attività di elicitazione dei requisiti mira a circoscrivere i confini del sistema da sviluppare. Pertanto, al fine di reperire le informazioni necessarie per la corretta ed esaustiva comprensione del problema al quale fornire la soluzione software, bisognerà innanzitutto identificare gli stakeholder 49 del progetto. Il ruolo che ciascuno stakeholder riveste in un progetto può essere molto diverso da quello di un altro e ciò proprio in considerazione del fatto che ogni persona, o gruppo, potrà essere influenzato in maniera differente dal sistema. 48 In effetti, se si pensasse agli interventi correttivi, piuttosto che di manutenzione, ci renderemmo conto che il prodotto software non possa essere considerato un prodotto finito. 49 Uno stakeholder rappresenta un soggetto che, direttamente o indirettamente, sarà influenzato dal sistema in esame. 39 Di conseguenza, la fase di deduzione e comprensione dei requisiti può rivelarsi particolarmente impegnativa, poichè gli aspetti trattati saranno quelli specifici del dominio di applicazione, con il quale l'ingegnere del software potrebbe non avere familiarità. Ancora, capita non di rado, che gli stakeholder non riescano ad esprimere in modo chiaro le proprie esigenze, che vi siano conflitti tra i requisiti dichiarati dalle diverse figure, oppure di trovarsi di fronte ad un ambiente dinamico. Tutti gli aspetti sopraccitati convincono del fatto che, durante questa fase, sia indispendabile avvalersi del supporto dei committenti, con i quali potrebbero nascere incomprensioni dovute all'utilizzo da parte di questi ultimi di linguaggi troppo tecnici e punti di vista, a volte, divergenti. D'altro canto, confrontarsi con un ambiente dinamico, in cui i requisiti cambiano rapidamente, non consente la definizione precisa del loro numero e delle funzionalità che esprimono. L'evoluzione, così come una cattiva comunicazione tra l'ingegnere del software ed i committenti, può comportare una revisione nell'espressione e/o nel contenuto di un requisito; dunque, terminato lo studio di fattibilità, le successive fasi possono richiamarsi tra loro durante tutto il processo. L'obiettivo di questa fase è, infatti, a fronte di una buona comprensione del dominio in cui sarà sviluppato un sistema software, la definizione dei requisiti che esso debba essere in grado di soddisfare. In primo luogo, una profonda comprensione del dominio in cui il sistema opererà aiuterà anche a calarsi nei diversi scenari che possano verificarsi nell'interazione tra sistema software ed ambiente circostante. Inoltre, una definizione chiara ed inequivocabile dei requisiti è sicuramente decisiva per le successive fasi di specifica, progettazione ed, infine, realizzazione del sistema. Questi due obiettivi possono essere raggiunti in vari modi, a seconda dei fattori che dovranno caratterizzare il prodotto finale, ma qualunqe metodo di analisi deve prevedere due azioni: • la costruzione di un glossario ai fini della definizione del dominio; • la redazione dei requisiti utente, relativi sia agli aspetti funzionali che non funzionali del sistema. Il glossario sarà un documento nel quale verranno definiti in maniera univoca tutti i termini significativi in relazione allo specifico contesto e che verranno adoperati nella descrizione degli obiettivi. L'operazione attraverso la quale si perviene ad un documento siffatto consta di alcune fasi , in ciascuna delle quali viene attuata una operazione di 'filtraggio' su di un testo iniziale, fino a 40 pervenire al glossario di dominio50, poi al glossario dei dati51 ed, infine, ai requisiti del sistema 52 software che rappresenteranno il documento di partenza per la fasi di specifica dei requisiti. Si è parlato della disponibilità di un testo iniziale, cioè una descrizione del problema, delle esigenze e volontà del committente, ma, in alternativa, si potrebbe pensare di reperire le informazioni attraverso delle interviste tra committente ed analista53. Si noti, infatti, che il glossario dovrà essere verificato ed approvato dal cliente. Il modello di deduzione ed analisi dei requisiti al quale faremo riferminento nel corso di questo lavoro è quello mostrato in figura 13. Illustrazione 13: Il processo di deduzione ed analisi dei requisiti in cui distinguiamo le 4 attività fondamentali: • Scoperta dei requisiti; • Classificazione ed organizzazione dei requisiti; • Negoziazione e priorità dei requisiti; • Documentazione dei requisiti. 50 Il glossario di dominio conterrà tutti i termini connessi al dominio applicativo in cui il prodotto software verrà calato. 51 Il glossario dei dati conterrà tutti i dati scambiati tra 'dominio' e sistema software. 52 I requisiti di sistema software verranno fuori dopo una operazione di 'riadattamento' dei concetti rimanenti dopo le precedenti operazioni di filtraggio. 53 Le interviste rappresentano ununo strumento attraverso il quale il Glossario potrà essere consolidato. 41 2.4.1 La scoperta dei requisiti La sezione relativa alla scoperta potrebbe essere vista come scomponibile in altre 4 sottosezioni, L'attività dovrà partire da una conoscenza adeguata54 del contesto in cui sarà calato il sistema, così da poter meglio comprendere le funzionalità richieste, i limiti, le caratteristiche fisiche. Noto il problema da risolvere, per l'ingegnere del software sarà più agevole comprendere le motivazioni delle richieste del cliente e gli sarà consentito di ampliare le sue conoscenze nello specifico ambito. Illustrazione 14: Processo di ricerca dei requisiti Inoltre, nella maggior parte dei casi, l'adozione di un nuovo sistema costituisce un valore aggiunto in termini di business per l'organizzazione che ne ha commissionato lo sviluppo. L'obiettivo dell'attività di scoperta dei requisiti consiste nella raccolta delle informazioni inerenti a sistemi nuovi o preesistenti, finalizzata alla definizione dei requisiti utente e di sistema. 2.4.1.1 Sorgenti di informazioni Per raggiungere lo scopo, l'attività dovrà partire dalla consultazione delle "sorgenti di informazioni": la natura delle sorgenti consultate dipenderà dal tipo di sistema in esame. Naturalmente, nel caso in cui lo sviluppo parta da zero (nessun sistema preesistente) i requisiti dovranno essere reperiti direttamente dagli utenti e cliente. E infatti, l'idea di sviluppare il nuovo sistema nasce da necessità proprie dell'utente, piuttosto che da esigenze di mercato (si parla, in tal caso di Greenfield Engineering). 54 La conoscenza del dominio richiesto non deve essere ne' troppo specifica ne' troppo generica. 42 Può capitare, invece, che il lavoro debba svolgersi su di un sistema già esistente che, a causa dell'obsolescenza o per estenderne le funzionalità, debba essere riprogettato. In tal caso le fonti di informazioni saranno soprattutto la relativa documentazione (si parla, di Re-engineering). Oppure, potrebbe nascere l'esigenza di riprogettare le interfacce per consentire ad un sistema già esistente di fornire servizi in un nuovo ambiente: si pensi, ad esempio, ad un sistema legacy lasciato inalterato, tranne che per le sue interfacce. Sulla scorta di quanto detto, le sorgenti informative riguardano: • gli obiettivi di business delle imprese destinatarie del prodotto, • la conoscenza del dominio applicativo, • le opinioni degli stakeholder di sistemi analoghi, • gli ambienti operativi (ad esempio l' interoperabilità), • gli ambienti organizzativi (come gli aspetti logistici). 2.4.1.2 Ingegneria dei requisiti basata sui punti di vista La presenza di un molteplicità di stakeholder che esprimeranno le loro esigenze, comporterà la definizione di una moltitudine di obiettivi. Un stesso obiettivo, però, potrebbe essere comune a due o più stakeholder, oppure potrebbe essere in contrasto con un altro. Questa caratteristica fa assumere all'obiettivo una natura soggettiva, poichè la sua decisione dipende dalla percezione e, maggiormente, dell'esperienza di chi lo esprime. Sulla scorta di questa considerazione nasce l'ingegneria dei requisiti orientati ai punti di vista [14], nella cui analisi i punti di vista vengono adoperati per classificare gli attori 55 (cioè gli stakeholder) e, naturalmente, anche per valutare la copertura dei possibili (ed a volte contrastanti) requisiti. Seguendo questo approccio, si preferirà intervistare un numero inferiore di attori appartenenti però a gruppi differenti, piuttosto che un numero maggiore appartenenti allo stesso gruppo e dal quale ci si potrà aspettare un contributo minore, poichè presumibilmente condivideranno dei requisiti. Attuiamo una distinzione tra: punti di vista diretti, indiretti e di dominio, ciascuno dei quali sarà caratterizzato da un proprio livello di astrazione. I primi rappresentano coloro che si interfacciano direttamente con il sistema (persone o sistemi): essi forniscono dei requisiti di sistema ad un buon livello di dettaglio, comprese le 55 Un attore modella un'entità esterna che comunica con il sistema: • utente; • sistema esterno; • ambiente fisico. Un attore ha un unico nome ed una descrizione opzionale. 43 funzionalità e le interfacce. I secondi rappresentano coloro che hanno la capacità di influenzare il sistema (gli stakeholder): essi forniscono requisiti di alto livello e vincoli organizzativi. I terzi, invece, rappresentano le caratteristiche che influenzano i requisiti del sistema (i vincoli), dunque forniscono requisiti di dominio (ad esempio gli standard da adottare). Ovviamente, la distinzione dei punti di vista nelle tre categorie è solo una generalizzazione di uno scenario vasto, in cui si potrebbero scorgere tanti più punti di vista dai quali, naturalmente, sarebbe impensabile dedurne i requisiti. Pertanto, per un sistema bisognerà: 1) identifiare i principali e più specifici56 'punti di vista'; 2) strutturare ed organizzare gerarchicamente i punti di vista; 3) identificare i punti di vista più importanti per la scoperta dei requisiti di sistema. 2.4.1.3 Tecniche di elicitazione dei requisiti Definito il "perchè" ed il "dove", cerchiamo di capire 'come' reperire le informazioni. La scoperta dei requisiti può avvenire mediante diverse tecniche che comprendono: • interviste; • scenari d'uso; • prototipi; • conferenze, incontri, riunioni; • valutazioni di sistemi concorrenti; • studio del problema e del dominio applicativo. 2.4.1.3.1 Le interviste Le interviste rappresentano un valido strumento di interazione con gli attori (stakeholder) del sistema, il cui obiettivo è quello di raggiungere una comprensione generica sul cosa il sistema dovrà fare. Per giungere a tale comprensione, l'intervista da svolgere si baserà su di un insieme di domande predefinite (intervista chiusa) e domande che nascono dalle problematiche sollevate dagli 56 Per principali e specifici punti di vista si intendono: • fornitori e destinatari del sistema; • sistemi che si interfacciano direttamente con il sistema in esame; • norme e standard con le quali il sistema dovrà essere in linea; • sorgenti dei requisiti aziendali e non funzionali, che potranno diventare punti di vista utili per definire requisiti di alto livello che potranno essere trasformati in requisiti di sistema ad un maggior livello di dettaglio; • punti di vista ingegneristici che forniranno la competenza su sistemi analoghi a quello che sis ta specificando ed, eventualmente, un aiuto a semplificare il supporto al sistema. 44 stakeholder (intervista aperta). Il suo esito dipenderà, naturalmente, dalle capacità personali dell'intervistatore, il quale dovrà invogliare l'attore alla discussione ed alla proposta dei requisiti. Un possibile approccio potrebbe essere quello di iniziare a lavorare assieme all'intervistato su di un prototipo, così da tener traccia dei confini del sistema da specificare. Le informazioni ottenute mediante un'intervista rappresenteranno solo una parte di quelle necessarie al raggiungimento dell'obiettivo finale, altre potranno essere reperite attraverso la consultazione di documentazioni, uteriori osservazioni e proposte degli utenti. 2.4.1.3.2 Scenari di interazione e casi d'uso L'elicitazione dei requisiti può essere effettuata anche attraverso la definizione di scenari di interazione con il sistema software, la qual cosa semplifica notevolmente lo sforzo degli attori, i quali potranno riferirsi a situazioni concrete. Le informazioni reperite adottando questa tecnica di elicitazione consentiranno di dettagliare i requisiti descritti ad un livello troppo alto di astrazione. Chiariamo, a questo punto il significato dello "scenario" e come esso venga descritto Uno scenario è “A narrative description of what people do and experience as they try to make use of computer systems and applications” [15]. Uno scenario rappresenta una sequenza di passi che descrivono l'interazione tra il sistema (o sue componenti) ed un attore, che dovrebbe trarre "vantaggio" dall'interazione stessa . In esso ci si focalizzerà sul punto di vista di una persona o dispositivo che interagisce con il sistema. Per chiarire il concetto appena esposto, facciamo riferimento all'esempio di un negozio online. Uno scenario possibile sarà l'acquisto di un prodotto, che potrebbe essere descritto come segue: scenario: Acquisto di un prodotto Il cliente naviga nel catalogo dei prodotti, seleziona il/i prodotto/i desiderati e lo/li colloca in un carrello virtuale. Quando il cliente vorrà effettuare il pagamento dovrà prima fornire le informazioni relative alla propria carta di credito, poi confermare l'acquisto. Il sistema controlla la validità della carta di credito del cliente e conferma l'acquisto al cliente attraverso un messaggio di posta elettronica. Per ciascuno scenario bisognerà definire: 45 1) chi siano gli attori (primario57 e secondari58); 2) quali siano gli obiettivi dell'attore; 3) le precondizioni dello scenario; 4) i compiti principali dell'attore; 5) come estendere lo scenario base; 6) quali sottoscenari siano possibili; 7) quali informazioni verranno acquisite, modificate o prodotte dall'attore; 8) se l'attore debba farsi carico di informare il sistema dei cambiamenti dell'ambiente esterno e, se si, di quali, quanto spesso e quando; 9) quali informazioni l'attore desideri ottenere dal sistema; 10) se l'attore voglia essere informato di modifiche inaspettate del sistema e, se si, ogni quanto. Gli scenari, dunque la loro descrizione, differiscono in base al punto di vista considerato (cfr. Appendice). Qualora si necessiti di uno risultato più formale si potrebbe adoperare una tecnica basata sì sugli scenari, ma più strutturata: i casi d'uso. Il caso d'uso rappresenta un insieme di scenari59 dipendenti dall'obiettivo dell'attore. La tecnica del casi d'uso venne introdotta per la prima volta da Ivar Jacobson, uno degli autori della notazione UML60, nel 1987; la diffusione del concetto avvenne, però, alcuni anni più tardi (1992) [16]. Questo approccio risultò particolarmente valido perchè consente una gestione più efficiente dei requisiti ed, inoltre, può essere adottato come una base per l'analisi, lo sviluppo del software e per il test funzionale. L'utilizzo dei casi d'uso consente, da un canto, di specificare ed analizzare soluzioni diverse di design, dall'altro, essi sono espressi in modo "grossolano" e, quindi, facilmente modificabili. Pertanto, rappresentano un buon compromesso tra il formalismo descrittivo e la modificabilità/espandibilità desiderabili in tale ambito. Catturando la conoscenza del problema ad un livello intermedio, i casi d'uso forniscono una 57 Un attore primario è quelli che, tipicamente fornisce per primo lo stimolo iniziale, che avvia l'esecuzione del caso d'uso e fruisce del relativo servizio. 58 Un attore secondario, in genere, è quello che riceve comunicazioni, dati, ecc. 59 Un caso d'uso è una astrazione che rappresenta una classe di scenari. 60 UML (the Unified Modelling Language) “is a graphical language for visualizing, specifying, constructing, and documenting the artefacts of a software-intensive system”. UML venne concepito verso la fine degli anni '80 e l'inizio degli anni '90 da Booch Rambaugh and Jacobson come unificazione di diverse metodologie di analisi ed object oriented. Attualmente, rappresenta lo standard industriale più utilizzato per la specifica e la modellazione di sistemi software. Tra i numerosi costrutti offerti da UML, gli "use case" sono considerati lo strumento concettuale per la specifica dei requisiti. Tuttavia,nella comunità dell'ingegneria dei requisiti ci sono punti di vista discordanti riguardo l'efficacia di UML e degli use case come supporto all'attività di analisi dei requisiti. 46 percezione concreta delle interazioni reali col sistema e, nel contempo, presentano caratteristiche di riusabilità e flessibilità. Tornando all'esempio del negozio online, lo scenario "Acquisto di un prodotto" descrive il normale flusso di eventi, senza tener conto del manifestarsi di situazioni alternative. Ad esempio, il caso in cui la carta di credito non sia valida fa in modo che il flusso di eventi subisca ad un certo punto una deviazione. In effetti, l'obiettivo dell'attore (l'acquisto di uno o più prodotti) è la radice comune alle possibilità "transazione eseguita" e "transazione fallita", ed allora: • caso d'uso: Acquisto di un prodotto; a) scenario 1: successo della transazione b) scenario 2: insuccesso della transazione: carta di credito non valida Un caso d'uso è rappresentato da uno scenario base, che tipicamente corrisponde all'avanzamento lineare del flusso di azioni ed al caso di "successo" (main success scenario), da scenari alternativi (alternative scenario), che possono rappresentare casi di successo o di fallimento, ma che comportano l'insorgere di complicazioni. Infatti, nonostante non sia necessario (si pensi ai costi) analizzare nel dettaglio tutti i possibili scenari alternativi a quello base, si rende necessario individuare ogni situazione che potrebbe comportare un cattivo esito del caso d'uso o che richiedano contromisure ad hoc. Si noti che, in questa fase, l'attenzione dovrà essere concentrata sull’interazione (sull'uso) e non sulle attività interne al sistema. Infatti, un caso d'uso viene adoperato per descrivere i requisiti di utente (cosa ci si aspetta da un sistema) ed, in particolare, rappresenta un requisito funzionale. Esso potrà essere specificato attraverso le seguenti informazioni: • Nome del caso d'uso; • Attori: descrizione degli attori coinvolti nel caso d'uso; • Entry condition: descrizione della condizione che debba verificarsi affinchè possa iniziare il caso d'uso; • Flusso di eventi: descrizione informale61, mediante linguaggio naturale; • Exit condition: descrizione della condizione che debba verificarsi affinchè termini il caso d'uso; • Eccezioni: descrizione delle situazioni che possano causare una deviazione del flusso normale di eventi, indicando anche le azioni da intraprendere a riguardo; • Requisiti speciali: elenco dei requisiti non funzionali e dei vincoli. I casi d'uso possono essere adoperati in ogni fase del ciclo di vita del software, ad esempio per 61 Si potrebbe pensare di descrivere il flusso di eventi come una successione numerata di passi. 47 controllare il sistema (nella fase di testing e di verifica) e ciò proprio sulla scorta delle informazioni che vengono utilizzate per descriverli. Naturalmente, un'azione del genere dovrà prevedere la descrizione di scenari che, a vari livelli di astrazione, dettaglino i flussi di eventi. Illustrazione 15: Casi d'uso e ciclo di vita del software Una volta individuati e definiti i casi d'uso, gli svuluppatori dovranno assicurarsi che le funzionalità richieste al sistema siano state completamente specificate. Pertanto, bisognerà dettagliare ciascun caso d'uso e descrivere più precisamente il comportamento che il sistema assumerà a fronte di determinate situazioni62. In particolare, saranno specificati: • gli elementi manipolati dal sistema; • le sequenze di interazione di basso livello tra l'attore ed il sistema; • gli accessi al caso d'uso: quale attore potrà invocare il caso d'uso; Inoltre, saranno individuati e specificati gli scenari non ancora valutati ed identificate le relazioni (cioè le dipendenze) tra i casi d'uso. Ancora, saranno accordati i requisiti non funzionali e gli attributi di qualità63 del prodotto, ovvero quelli visibili64 dall'utente finale, ma non direttamente legati alle funzionalità del sistema. Tra casi d'uso possono essere definiti tre tipi fondamentali di relazioni: estensione, inclusione e generalizzazione. Un caso d'uso descrive un insieme di interazioni, tra un attore ed il sistema, relative ad una 62 Condizioni di errore o limite. 63 Efficienza, usabilià, ecc. 64 Gli aspetti non visibili (come le scelte delle tecnologie da adottare per lo svilippo del sistema, il progetto del sistema e delle metodologie), dall'utente non saranno trattati nella fase di raccolta. 48 particolare funzionalità, che potrebbe essere estesa. Dunque, attraverso la relazione di estensione si potranno separare gli eventi "opzionali65" dal caso d'uso comune. In tal modo, il caso d'uso base sarà più conciso e più leggibile e, anche un'eventuale modifica diverrà più agevole. Può accadere che una funzionalità richiesta al sistema sia tanto complessa da rendere difficile la sua risoluzione in un unico caso d'uso (si pensi ad una lunga sequenza di passi da compiere), per cui sia necessario decomporla66. In tal modo, la stessa funzione sarà descritta come l'aggregazione di un insieme di sotto-funzioni e, di conseguenza, il caso d'uso associato ad essa sarà decomposto in tanti casi d'uso (più semplici) quante sono le sotto-funzioni. Dunque, fattorizzare un "comportamento" in casi d'uso semplici e separati è ancor più importante quando esso è comune a più Use Case. In questo modo, verrà ottimizzata la presenza di quello condiviso, favorendo il riuso. D'altro canto, frammentare un requisito, seppur complesso, in un numero troppo elevato di casi d'uso, dà luogo a specifiche poco chiare per gli utenti ed i clienti. La generalizzazione tra casi d'uso è un altro metodo di fattorizzazione, che consiste nel raggruppare i comportamenti comuni in un caso d'uso "padre" nella definizione di casi d'uso "figli", nei quali verranno ridefinite alcune informazioni e che erediteranno il funzionamento ed il significato del padre. Le relazioni tra casi d'uso mirano a ridurre più possibile la ridondanza dal modello, così da mitigare la presenza di inconsistenze. È importante notare che le relazioni che intercorrono tra gli attori ed i casi d'uso consentono agli utenti ed agli sviluppatori di ridurre la complessità del modello, di aumentarne la conoscenza, così da individuare i requisiti (che evolveranno mentre si sviluppano gli scenari). In definitiva, la raccolta dei requisiti servirà alla costruzione del modello funzionale del sistema che sarà poi usato durante l’analisi per le fasi successive e che dovrà essere sottoposto ad una validazione da parte dei committenti. 2.4.1.3.2.1 Considerazioni sui casi d'uso Fino ad ora abbiamo discusso i casi d'uso, descrivendone le caratteristiche e le motivazioni che hanno reso molto apprezzata tale tecnica. È bene notare, però, che essi si prestano in maniera ottimale per descrivere le modalità di utilizzo solo di particolari tipi di sistemi: quelli che prevedono interazioni significative con gli attori e quelli le cui operazioni siano di tipo operativo e strutturato. 65 In tal caso la condizione eccezionale è l'ampliamento della funzionalità espressaa dal caso d'uso base. 66 Si parla di decomposizione funzionale. 49 In effetti, l'adozione di tale approccio non risulta ottimale in sistemi come data warehouse, sistemi CAD67, ad esempio, per i quali i casi d'uso potranno essere definiti, senza apportare, però, benefici significativi nella specifica della maggior parte dei requisiti. Rispetto alle specifiche di analisi tradizionalali, i casi d'uso presentano un vantaggio di fondo, che risiede nella migliore comunicazione con il committente. Infatti, se tipicamente le prime descrivono in maniera astratta le funzionalità interne al sistema, i casi d'uso descrivono in maniera più concreta, sotto forma di dialogo , le interazioni (azione dell'attore – reazione del sistema). Uno degli errori che dovrebbero essere evitati nel loro utilizzo è quello di adoperarli secondo una logica di scomposizione funzionale troppo spinta, descrivendo al livello atomico ogni singola funzione del sistema o di sue componenti68, per la quale essi sono inadeguati. Operare in questo modo, infatti, farebbe perdere, principalmente, il buon livello di comunicazione con i committenti offerto dai casi d'uso. Un altro aspetto interessante concerne la sicurezza nel modello dei casi d'uso. Come è noto, si tratta di un requisito non funzionale che costituisce un vincolo sentito in qualunque sistema e, quindi, nella maggior parte dei casi d'uso. L'approccio più tradizionale prevede di includere i relativi casi d'uso a tutti gli use case che devono applicare i requisiti di sicurezza. Per chiarire il concetto, consideriamo l'esempio di una segereteria online per studenti, per la quale definizamo gli use case "autenticazione studente" (che servirà ad accertarsi che l'utente sia effettivamente quello che dichiara di essere e per il quale il problema riguarda anche lo scambio di messaggio con altri sistemi), "autorizzazione ad espletare la funzionalità selezionata" (si noti che, se un utente è autorizzato a svolgere l'attività che ha selezionato, come la visualizzazione degli esami sostenuti, ciò non vuol dire che potrà richiedere lo stesso servizio per un altro insieme di dati, come la lista degli esemi sostenuti da un altro studente), "autorizzazione al trattamento dei dati richiesti", ecc. È evidente che tale approccio, sebbene molto semplice, complichi la descrizione dei casi d'uso. Dunque, una tecnica alternativa da adoperare potrebbe essere quella di "isolare" i casi d'uso della sicurezza dagli altri, così da avere il vantaggio di poter specificare particolari comportamenti/requisiti. Ritornando all'esempio precedente, dopo il riconoscimento dell'utente si potrebbe richiedere di verificare se il profilo ad esso associato sia stato bloccato, oppure se la password sia scaduta. 67 CAD è l'acronimo di Computer Aided Design. Il computer assite la fasse di progettazione non solo cambiando concezione del disegno (la modellazione solida crea un oggetto 3D virtualmente manipolabile sullo schermo), ma offrendo diversi mezzi di supporto per la verifica del progetto e l'ottimizzazione della produzione [17]. 68 A questo scopo possono essere adoperati approcci più consoni, come i diagrammi di flusso (activity diagram in UML) 50 Ancora, nella redazione della sezione del documento relativo ai requisiti non funzionali, si potrà descrivere in maniera dettagliata il comportamento che dovrà essere assunto in relazione ai diversi casi d'uso. Inoltre, nelle precondizioni dei caso d'uso potrebbe essere inserita una clausola standard. Rispetto al caso mostrato, essa potrebbe essere: "l'utente autenticato ed autorizzato ad eseguire il servizio69". 2.4.2 L'analisi Una volta raccolti, i requisiti dovranno essere analizzati, raffinati (descrivendoli ad un livello di astrazione più basso) e valutati. L'analisi consente di ottenere requisiti descritti ad un opportuno livello di dettaglio e con caratteristiche adeguate di qualità, tali da consentire la formulazione di una o più possibili soluzioni al problema. Definiti i confini del contesto, bisognerà individuandarne le interfacce con altri attori (eventualmente attraverso un protitipo delle interfacce utente), così da chiarire ulteriormente gli scenari di interazione, espressi mediante i casi d'uso, e gli altri requisiti. Ancora, si dovranno stimare i costi, le prestazioni ed i rischi legati alla scelta di implementare i requisiti definiti. Nel caso in cui la valutazione della fattibilità sia positiva, sarebbe opportuno invitare i committenti a classificare i requisiti da implementare secondo una scala di priorità70. A questo punto, sarà possibile sviluppare i casi d'uso, individuati nella fase di elicitazione, e produrre modelli di analisi che consentiranno di esplorare in maniera più precisa le funzionalità che il sistema dovrà offrire ed individuare nei requisiti eventuali errori e/od omissioni. L'ultimo passo da compiere consisterà nella creazione del glossario, già discusso precedentemente, attraverso il quale la terminologia adottata sarà di uso comune per il team di progetto, così come per gli stakeholder. 2.5 Specifica dei requisiti L'attività di specifica dei requisiti rappresenta la descrizione formale di un sistema software, inteso come prodotto che soddisfi le esigenze mostrate dall'utente, sotto i vincoli posti dallo specifico dominio di applicazione. 69 Si noti che la seconda clausola implica la prima: se l'utente non fosse autenticato, non sarebbe autorizzato a svolgere le azioni selezionate. 70 La classificazione dei requisiti da implementare costituisce il punto di partenza nel caso in cui si preveda un rilascio incrementale del prodotto. 51 Tale attività confluisce in un documento di specifica dei requisiti software, appunto, per il quale vi è la possibilità di adoperare un linguaggio formale, oppure strutturato, come abbiamo precedentemente discusso. Esso potrà essere dotato di una semantica formale oppure convenzionale (dunque più intuitiva) e di una sintassi controllata. L'operazione di specifica offre, innanzitutto, la possibilità di tradurre in frasi, cioè concetti concreti, quel che sino a poco prima era solo un'idea di come il sistema software dovesse comportarsi, poi di poter comunicare e condividere tali concetti con il team di progetto e, naturalmente, con il committente. Il documento di specifica dei requisiti potrà essere eventualmente analizzato da uno strumento automatico. È, pertanto, necessario adottare un metodo che consenta di svolgere questa attività in maniera logica e graduale, così da focalizzare la nostra attenzione sugli aspetti più significativi (e, spesso, più complicati da trattare). Durante l'attività di specifica dei requisiti bisognerà assegnare a ciascun requisito un identificativo univoco, così da poter documentarne l'origine71 più agevolmente e gestirne la tracciabilità lungo tutto il suo ciclo di vita. Bisognerà prevedere anche una gestione della versione di ciascun requisito, così da poter tracciare anche tutte le modifiche effettuate su di esso. Un requisito può essere specificato, oltre che dall'indentificativo ed dalla descrizione, anche da un insieme di attributi che ne vanno a caratterizzare: • la tipologia (funzionale o non funzionale ed, eventualmente, specificare a quele classe appartiene); • chi lo ha richiesto, la data di richiesta e dell'ultima modifica apportata al requisito; • il numero di versione, così da tener traccia dell'evoluzione subita; • l'importanza secondo il punto di vista del committente (ad esempio: obbligatorio, desiderabile, opzionale); • la priorità di implementazione del requisito, quindi rispetto al suo rilascio; • lo stato che indichi, ad esempio, se il requisito sia stato approvato, implementato, verificato, eliminato; • il criterio di accettazione; • il livello di stabilità del requisito: infatti, la specifica e lo sviluppo di un sistema possono protrarsi per lungo tempo, durante il quale le esigenze degli stakeholder possono mutare, 71 Casi d'uso, input pervenuti dagli stakeholder, standard aziendali, regole di business, vincoli legislativi, ecc. 52 invalidando la presenza di alcuni requisiti. Per questo motivo, nell'ambito della gestione dei requisiti, si potrebbe classificarli in duraturi72 o volatili in base al livello di stabilità che presentano. La creazione di una matrice di tracciabilità dei requisiti è uno dei passi fondamentali di tutta l'attività. In essa dovranno essere riportati tutti i collegamenti tra i requisiti ed i casi d'uso da cui discendono ed i requisiti del documento di specifica. Successivamente, si dovranno riportare tutti i collegamenti tra i requisiti specificati e gli "artefatti" dello sviluppo, sino ad arrivare ai componenti fisici in cui essi sono implemetati ed, infine, con le specifiche di test che li verificano. 2.6 La tracciabilità dei requisiti Lo sviluppo di un prodotto deve seguire un percorso logico, durante il quale è fondamentale assicurare la completezza e la consistenza di ogni passo. Rispetto all'ingegneria dei requisiti ed, in particolare, nell'ambito loro specifica, il problema della tracciabilità è particolarmente sentito e la sua risoluzione consentirà di capire come e dove si collocano i requisiti una volta realizzato il sistema, dimostrare la loro effettiva implementazione, gestire più semplicemente le evoluzioni, la manutenzione, garantire un maggior riuso. Le tecniche di tracciabilità dei requisiti vengono adottate per garantire la congruenza tra prodotto software ed aspettative del committente, quindi presume un lavoro congiunto e consapevole di entrambe le parti chiamate in causa. La tracciabilità è una proprietà dei requisiti: infatti, una volta specificati, dovranno essere direttamente connessi alle motivazioni ed obiettivi che hanno dato origene ad esso. Per ottenere tutti i vantaggi che derivano da essa, bisognerà fissare la tracciabilità dei requisiti con i corrispondenti componenti del progetto, con il codice, i casi di test e, in generale, con tutti gli artefatti derivanti dallo sviluppo del prodotto. Tra le definizioni di tracciabilità presentate in letteratura, si distinguono i seguenti tipi: • Tracciabilità dell'origine, in cui viene indicata la sorgente da cui ha preso vita ogni requisito. Ad esempio, un requisito sarà collegato alla documentazione, ad un committente (cioè all'obiettivo in cui si è tradotto il requisito) oppure ad una specifica norma, ecc. • Tracciabilità della descrizione, in cui il requisito specificato sarà collegato alla motivazione da cui ha avuto origine. • Tracciabilità delle dipendenze, in cui vengono esplicitate (sotto forma di collegamenti) le 72 Per duraturo si intende un requisito relativamente stabile che rispecchia quelche aspetto fondamentale dell'organizzazione e che, quindi, si riferisce direttamente al dominio del sistema. Per volatile, invece, si intende un requisito che presumibilmente subirà dei cambiamenti, che seguiranno l'evoluzione. 53 dipendenze tra requisiti; • Tracciabilità tra sottosistemi, in cui i requisiti vengono collegati con i sottosistemi in cui trovano la loro implementazione, dunque consentono di definire "chi deve sviluppare cosa". Infatti, i requisiti sono suddivisi per tipologie a seconda dei sottosistemi che li governano. • Tracciabilità del progetto, in cui il requisiti verranno collegati con i componenti specifici del sistema che sono adoperati per implementarli; • Tracciabilità dell'interfaccia, in cui i requisiti verranno collegati con le interfacce interne ed esterne del sistema, attraverso le quali essi potranno esse utilizzati. Per poter tracciare i requisiti, così da poterli individuare facilmente, bisognerà associare a ciascuno un identificativo univoco (ad esempio, nella forma <tipo_requisito> <numero_requisito>), in modo da utilizzare quest'ultimo come riferimento per collegare i requisiti agli aspetti relativi alla tracciabilità. Le informazioni sulla tracciabilità saranno disponibili su di una tabella detta, appunto, matrice di tracciabilità, sulle cui righe e colonne sono, rispettivamente, collocati i requisiti e gli aspetti con cui essi presentano delle relazioni. In particolare, una relazione tra il contenuto di una riga e quello di una colonna sarà registrato in corrispondenza della loro intersezione. Illustrazione 16: Esempio di matrice di tracciabilità (orizzontale) Una classificazione di tracciabilità meno stringente è la distinzione nelle due tipologie: orizzontale e verticale. Per tracciabilità orizzontale si intendono i collegamenti tra requisiti allo stesso livello di astrazione e tra i quali sussiste una relazione. Ad esempio, supponiamo che nel documento di specifica dei requisiti di sistema il requisito indicato con R1 presenti una relazione con il requisito R2. Verrà creato un collegamento tra i due requisiti ed in più tale relazione potrebbe essere specificata nel caso in cui R2 usi R1, R2 dettagli R1, R2 sia in conflitto con R1. Per tracciabilità verticale si intende il collegamento tra un requisito e altre entità (siano, ad esempio, requisiti di differente livello, moduli software, casi di test, ecc.) a cui esso fa riferimento. 54 Un esempio potrebbe essere il collegamento tra requisiti di sistema e relativi requisiti software di alto livello (nel caso in cui si sia deciso di operare un'astrazione a più livelli dei requisiti software). Allo stato attuale delle cose, il problema della tracciabilità, pur essendo particolarmente sentito, non riesce a trovare uno sbocco risolutivo in parecchi contesti. Infatti, la molteplicità delle definizioni di tracciabilità ha fatto sì che non si sia sviluppata un'idea chiara e condivisa del concetto. Pertanto, nonostante i tool di gestione dei requisiti73 prevedano funzionalità a supporto, nei contesti in cui vengono utilizzati, raramente si riesce a mettere a frutto i vantaggi che si potrebbero ottenere. È comunque possibile distinguere due fasi della tracciabilità: precedente (Pre-R equirements Specification Traceability) e successiva alla specifica dei requisiti (Post-Requirements Specification Traceability). Nella prima vengono considerati i collegamenti tra un requisito con gli aspetti ad un livello ancora alto di astrazione, mentre nella seconda ci si riferisce ai collegamenti tra lo stesso requisito e gli aspetti a valle della specifica, cioè quelli ad un livello di dettaglio maggiore. In figura 17 mostriamo un esempio che ci aiuterà a comprendere i concetti appena esposti. Illustrazione 17: Tracciabilità Pre-RS e Post-RS 73 Un esempio di tool di gestione dei requisiti è IBM Rational DOORS. 55 L'approfondimento della conoscenza dei requisiti, a mano a mano che si procede, è distribuita e messa assieme per ottenere le rappresentazioni successive, nelle quali verranno aggiunte interazioni e sulle quali dovranno propagarsi i cambiamenti dovuti all'evoluzione dei requisiti stessi. Si noti, inoltre, che i vantaggi ottenibili dalla tracciabilità Pre–Requirements Specification sono strettamente dipendenti alla capacità di tracciare (in maniera bidirezionale) i requisiti con la loro originaria formulazione. Invece, i vantaggi legati alla tracciabilità Post-Requirements Specification dipendono dalla capacità di tracciare (in modo bidirezionale) i requisiti con la loro specifica, attraversando tutti gli artefatti in cui essi vengono lavorati. 2.7 Convalida dei requisiti La convalida consiste nel dimostrare che i requisiti specificati definiscano realmente il sistema richiesto dal cliente. La sua importanza deriva dalla considerazione che correggere un errore od un'omissione in una fase avanzata dello sviluppo del sistema (o, ancor peggio, dopo la sua messa in esercizio) comporti costi molto elevati. I requisiti documentati (nel documento dei requisiti) dovranno essere sottoposti al committente, così che possa valutarne l'aderenza alle sue aspettative ed, eventualmente, approvarli. Durante il processo di convalida potranno essere effettuati diversi controlli sui requisiti per dimostrarne la validità, la consistenza, la completezza, il realismo/realizzabilità e la verificabilità (cfr. Appendice). Le tecniche di validazione più adoperate consistono nella revisione dei requisiti, nella prototipizzazione e nella generazione dei casi di test. Tra esse, la revisione dei requisiti è la più diffusa, poichè consente di validare anche i requisiti non funzionali. Alla base di essa vi è l'idea di riunire un gruppo di persone che dovranno leggere ed analizzare il docmento dei requisiti, per individuare eventuali errori od incongruenze che verranno discusse al 56 fine di risolverle. Il modello di revisione dei requisiti prende vita dalle considerazioni degli studiosi Gilb e Graham74 e, successivamente ampliata da Kotonya e Sommerville, consta delle seguenti attività: 1. Plan review: viene nominato il team, il luogo, il giorno in cui verrà operata la revisione; 2. Distribuite documents: il documento dei requisiti (ed eventuale altra documentazione) viene fornita al team di revisione; 3. Prepare for review: lettura individuale del documento, così da trovare conflitti e/o incongruenze. In tal modo, ogni soggetto potrà operare senza subire l'influenza di un altro; 4. Hold review meeting: discussione di tutti i problemi riscontrati e decisione delle contromisure da adottare; 5. Follow-up actions: verifica delle contromisure decise da parte del coordinatore del team; 6. Revise document: ulteriore revisione delle sezioni evidenziate. I problemi riscontrabili all'interno del documento possono venir fuori dalla mancanza di chiarezza nei requisiti: il requisito può essere espresso in maniera poco chiara, oppure si è omessa qualche informazione comunicata durante la fase di elicitazione; Nel caso in cui il documento dei requisiti presenti informazioni mancanti, esse potranno essere reperite dagli utenti interessati. Va da sè che, nel caso di conflitti tra requisiti, sia necessario negoziare con i clienti una possibile soluzione alternativa. La revisione dei requisiti, alla quale dovrebbero essere coinvolti tutti gli interessati al prodotto (committente e produttore), potrà essere svolta in maniera formale od informale I requisiti dovrebbero essere revisionati regolarmente durante tutta la fase di definizione, poichè servono ad affrontare problemi od errori di specifica nella fase iniziale del processo. Una delle caratteristiche che dovrebbero mostrare i requisiti proposti è la verificabilità, 74 Gilb e Graham affermano che il gruppo di revisonatori dovrebbe essere selezionato così da riflettere i diversi punti di vista, quali il test, l'utente finale e la gestione della qualità. Inoltre, ogni organizzatore dovrebbe sviluppare le proprie check-list, basate su standard e prassi interne, da aggiornare regolarmente quando vengono scoperti nuovi tipi di difetti [4]. 57 pertanto bisogna scrivere un insieme di casi di test 75, attraverso i quali dimostrare che il sistema consegnato soddisferà ogni requisito specificato. Una volta rilevate, le incongruenze potranno essere risolte mediante tecniche di negoziazione. 2.8 La gestione dei requisiti Nel corso del processo software, gli stakeholder e produttore acquisiscono una maggiore consapevolezza del problema e ciò, inevitabilmente, influenzerà i requisiti. Ad esempio, non di rado capita di accorgersi che alcuni aspetti del dominio non siano stati affrontati o, magari, non trattati in maniera adeguta, per cui nasce l'esigenza di rivedere il documento dei requisiti sulla base delle nuove conoscenze acquisite. Illustrazione 18: Mutabilità dei requisiti nel tempo Tipicamente, i requisiti su cui si avverte l'impatto di questa "evoluzione" sono: • i requisiti di compatibilità: dipendono da altri sistemi o processi organizzativi; • i requisiti duplicati: requisiti che rappresentano il medesimo "bisogno"; • i requisiti emergenti: sono frutto dell'ampliamento della conoscenza del problema. Questa categoria di requisiti è, probabilmente, quella più interessante, poichè comporta nell'ampliamento delle funzionalità del sistema. • i requisiti impliciti: specifici del dominio e, per questo motivo, non formalizzati adeguatamente; • i requisiti instabili: cambiano con lo sviluppo del sistema. L'evoluzione, sfociata in una modifica, piuttosto che in una cancellazione o nella creazione di nuovi requisiti, dovrà essere gestita opportunamente. 75 Ed infatti, la specifica dei casi di test, condotta a fronte dei casi d'uso (correlati ai requisiti funzionali), consente di rilevare omissioni, ambiguità nel documento dei requisiti. 58 Il primo passo da compiere in tal senso è la pianificazione delle attività da svolgere, che dovrà iniziare durante il processo di elicitazione dei requisiti. Questo stadio consta di alcune fasi: • l'identificazione dei requisiti, che consiste nell'associare a ciascun requisito in identificativo univoco, in modo che si possa più agevolmente tenerne traccia; • creazione di un processo di gestione delle modifiche; • definizione di politiche di tracciabilità, in cui verranno determinati i tipi di dipendenze tra requisiti che devono essere tracciate, verranno stabilite le relazioni tra requisiti e casi d'uso e tra questi ultimi e gli artefatti dello sviluppo; In particolare, il sistema di tracciabilità delle modifiche dovrà consentire di seguire ciascuna proposta nei diversi stadi di avanzamento: dall'elicitazione, all'analisi, alla valutazione dell'impatto organizzativo, temporale, economico, all'approvazione di quest'ultimo. • Individuazione degli strumenti CASE76 da adottare. La gestione dei requisiti consiste in un insieme di attività volte alla comprensione ed al controllo dei cambiamenti ai requisiti di sistema. Bisognerà, innanzitutto, definire un processo formale di gestione delle modifiche proposte, come la creazione di nuovi requisiti, la modifica di requisiti già esistenti, la cancellazione di requisiti non più necessari. Ciascuna proposta dovrà essere analizzata e valutata, solo dopo essere stata approvata, si deciderà quando metterla in atto sul requisito di sistema al quale si riferisce. Pertanto, nel processo di gestione dei requisiti, ogni requisito dovrà essere seguito individualmente, ovvero, si dovrà tener traccia della sua storia e delle modifiche che ha subito (gestione delle versioni). Nei progetti di grandi dimensioni, con un cospicuo numero di requisiti, si rende necessario definire il Change Control Board, che rappresenta un canale ufficiale di controllo delle modifiche ai requisiti. E infatti, esso è rappresentato da un gruppo formalmente costituito dai ruoli preposti ad analizzare, valutare, approvare o rifiutare le modifiche proposte. Il Change Control Board, nel suo complesso, avrà il compito di determinare l'impatto che una modifica proposta possa avere sul sistema e, di conseguenza, stabilire se sia opportuno attuare la modifica. Sarà, inoltre, importante stabilire la baseline dei requisiti, che servirà a misurare lo stato di avanzamento del progetto. E infatti, come se fosse una istantanea, mostra l'insieme dei requisiti che 76 Computer Aided Software Engineering: strumenti che supportano lo sviluppo del software attraverso interfacce grafiche e visuali, librerie di funzionalità. 59 rappresentano la base dell'accordo iniziale con il committente e sui quali si misurerà l'impatto delle modifiche. All'interno della baseline, ciascun requisito avrà un proprio stadio di avanzamento che potrà essere identificato con i termini "proposto", "approvato", "implementato" oppure "verificato"; di conseguenza, in ogni istante si potrà ottenere il numero dei requisiti che si trovano in uno specifico stato. L'impatto che una modifica proposta su di un requisito rispetto alle funzionalità sel sistema, sui clienti e stakeholder, sulla potenziale destabilizzazione del sistema in seguito alla modifica, potrà essere stimato servendoci delle matrici di tracciabilità e della conoscenza acquisita dei requisiti di sistema. Il risultato di questa analisi fornirà il carico di lavoro necessario ed il costo legato all'attuazione della modifica stessa. Naturalmente, maggiori saranno le modifiche da apportare al documento dei requisiti e, se necessario al progetto del sistema ed alla sua implementazione, maggiori saranno i costi ed il lavoro da svolgere. Una volta completata l'analisi di impatto, si dovrà decidere se procedere o meno con la modifica. È importante considerare che le modifiche, a causa degli impatti che potrebbero avere, devono essere apportare seguendo un approccio top-down, cioè seguendo la tracciabilità tra i requisiti ed i prodotti dello sviluppo. Ciò consentirà di procedere in maniera sistematica e coerente. Illustrazione 19: Evoluzione controllata dei requisiti La necessità di modificare un requisito potrebbe nascere da mutamenti del punto di vista del committente, piuttosto che dalla presenza di errori o anomalie. Sarebbe opportuno, adoperare un 60 sistema che tracci ciascuna proposta di modifica e anomalia presentata con il corrispondente requisito, così da avere sempre un'idea chiara della motivazione che ha spinto ad operare su di esso. Apportare le modifiche al contentuto del documento dei requisiti potrebbe diventare una attività critica, soprattutto considerando quanto spesso e su quanti requisiti potrebbe essere svolta. Per questo motivo, è necessario organizzare il documento dei requisiti in modo che ogni sezione sia più possibile modulare e non presenti troppo riferimenti esterni, così da poterla modificare senza incidere (o minimizzare l'impatto) sulle altre sezioni del documento. 61 Capitolo 3 Sistemi emdebbed e metodologie di sviluppo Un dispositivo embedded ha una natura invisibile agli occhi dell'utente, poichè è incapsulato all'interno di un sistema progettato per una specifica applicazione e supportato da una piattaforma hardware e software ad hoc. La loro presenza massiva sul mercato, in grande varietà77 è indice dell'impegno sempre più concreto delle organizzazioni verso gli specifici obiettivi del consumatore e la naturale spinta verso l'innovazione tecnologica. In contrapposizione ad un sistema general purpose, che ammette tipicamente una forte alterabilità da parte dell'utente, un sistema embedded limita normalmente le possibilità di ingerenza alla sola modifica della configurazione. Spesso, la specifica d'uso di un sistema embedded influisce anche sulle specifiche progettuali dell'hardware. La scelta di realizzare un sistema embedded, piuttosto che adattare un insieme di componenti hardware e software commerciali, ricade nella classica problematica del Make or Buy. I sistemi embedded vedono la loro collocazione soprattutto in alcuni importanti settori applicativi, il cui utilizzo assorbe circa la metà del costo complessivo. Illustrazione 20: Incidenza percentuale dei sistemi emebedded sul costo complessivo dei prodotti Un sistema dedicato è assimilabile ad un generico sistema di calcolo, poichè la sua archiettura 77 Si pensi ad automobili, lavatrici, navigatori satellitari, carte di credito, ecc. 62 è costituita da una sezione di elaborazione, di comunicazione e di memorizzazione. L'unità di elaborazione rende il sistema capace di elaborare i segnali provenienti dal mondo esterno; quella di comunicazione consente il trasferimento dei segnali (cioè l'informazione) da e verso il mondo esterno ed all'interno del sistema embedded stesso. L'unità di memoria fornisce al sistema la capacità di custodire nel tempo l'informazione. Naturalmente, per ogni applicazione realizzata da un sistema embedded dovranno essere soddisfatte specifiche esigenze per la capacità di elaborazione, comunicazione e memorizzazione. Si pensi ad una funzionalità ed a come essa possa essere ottimizzata in maniera differente a seconda dell'applicazione a cui è destinata. Dunque, ciò che rende un sistema embedded diverso rispetto ad altri è l'insieme dei requisiti operativi, che ne fanno un caso peculiare, per il quale è necessario definire una particolare metodologia di progetto. Oltre ad essi, un sistema embedded è vincolato anche da fattori di varia natura: vincoli non direttamente tecnologici, come il costo del prodotto ed il tempo di realizzazione. Ci si renderà facilmente conto di quanto un numero così elevato di vincoli e requisiti dipendano dalla necessità di adottare architetture miste hardware e software, al fine di trovare il miglior compromesso tra prestazioni, costo e tempo di sviluppo e, nel contempo, il ricorso a metodologie di progetto ben strutturate. Sappiamo che un normale elaboratore è realizzato con lo scopo principale di renderlo versatile, in maniera che possa adattarsi alla enorme varietà di ambiti applicativi cui è destinato. Tale caratteristica sarà ottenuta dotando le architetture hardware di risorse sovrabbondanti rispetto alle singole applicazioni, ma in linea con i vincoli di costo. Pertanto, i prodotti general purpose seguono standard e architetture di riferimento. Al contrario, ad un sistema dedicato a una specifica applicazione (oppure ad una classe specifica di applicazioni) non viene certamente richiesto il requisito di versatilità, poichè è una macchina dedicata allo svolgimento di una classe molto ristretta di compiti. Nonostante ciò, grazie alla specificità dell'applicazione cui è rivolto, il sistema embedded potrà essere progettato in modo da ottimizzare78 determinati vincoli di costo e di prestazioni. Questa caratteristica rende arduo standardizzare l'architettura di un sistema dedicato, giacché, anche a parità di requisiti funzionali, i vincoli relativi alla specifica applicazione portano a scelte progettuali radicalmente diverse. Si noti, infatti, che vincoli temporali troppo stringenti alla realizzazione del sistema fanno sì 78 Approfondita la conoscenza sulla particolare applicazione, si potrà dimensionare la capacità di calcolo scegliendo il microprocessore ed, eventualmente, adoperando dispositivi hardware aggiuntivi per ridurre la potenza di elaborazione 63 che si protenda verso soluzioni prevalentemente software, così come limiti sulla dimensione e sui costi possono far protendere verso lo sviluppo di hardware dedicato. 3.1 Caratteristiche dei sistemi embedded Alcuni fattori sono determinanti per un sistema embedded e, per questo motivo, ne rappresentano i principali vincoli e requisiti in termini commerciali, di hardware e software: • Peso e dimensioni: caratteristica determinante, soprattutto per i dispositivi mobili, o che non verranno collocati in una postazione fissa; • Volume: i volumi di produzione previsti per il sistema rappresentano un fattore rilevante, che dovrà essere considerato in fase di progetto; • Costo: è un parametro fondamentale e di impatto per le scelte progettuali (strettamente connesso ai volumi di produzione); • Consumo energetico: questo problema dovrebbe essere affrontato in fase di progetto, in particolar modo per quei sistemi che vengono alimentati da batterie; • Dimensione del codice: per ragioni di costo e per ridurre l'area occupata, il software dei sistemi embedded risiede in un supporto di memoria permanente ed integrato sullo stesso chip del microprocessore. Questa caratteristica inciderà sulla dimensione del codice che, pertanto, dovrà essere quanto più contenuta possibile; • Prestazioni: nel caso dei sistemi embedded quest'obiettivo è strettamente dipendente dall'applicazione. Ma tipicamente, i vincoli che devono essere soddisfatti sono: - il tempo di reazione ad un evento; - il tempo di gestione dell'evento, eseguendo il codice ad esso associato. Questi vincoli prestazionali dovranno trovare riscontro in una soluzione architetturale, nella quale bisognerà bilanciare anche il costo, adoperando soluzioni miste hardware/software che renderanno più complesso il processo di progettazione e sviluppo; • Tempo reale: progettare il sistema in modo che esso possa operare entro parametri temporali ben definiti; • Affidabilità: sarà possibile quantificare l'affidabilità del sistema (eventualmente fissando una soglia minima) solo dopo aver effettuato un'attenta e scrupolosa analisi dei potenziali rischi; • Manutenibilità: probabilità che il sistema possa essere riparato o sostituito entro un certo intervallo di tempo; 64 • Disponibilità: probabilità che il sistema sia funzionante (dipende essenzialmente dall’affidabilità e dalla manutenibilità); • Safety: misura la possibilità che, a fronte di un guasto, il sistema non provochi danni a cose o persone con cui interagisce. A seconda dell'amibito in cui viene applicata, si definiscono diversi livelli di safety79; • Sicurezza: capacità di resistenza del sistema contro gli utilizzi non autorizzati o non preventivati in fase di progetto; • Time-to-market e flessibilità: nella progettazione di un sistema embedded bisogna valutare quando porre in prodotto sul mercato. Per questo motivo, per il progetto sarà necessario opzionare le metodologie e le tecnologie che consentano di giungere al prodotto entro breve tempo, così da poter cogliere al massimo tutte le opportunità di mercato; • Interfacce di comunicazione: tipicamente, il costo di vendita di un dispositivo embedded è basso, pertanto, la scelta di interfacce di comunicazione diventa critica quando il loro costo incide in maniera significativa sul prezzo finale del prodotto. • Interfacce utente: in alcuni casi, l'interfaccia utente dei sistemi embedded è costituita da pulsanti e LED, altre volte, invece, viene adoperata l'interfaccia utente di un sistema ospitante80. Quando si vuole realizzare un sistema embedded bisogna scontrarsi con tre concetti fondamentali: l'architettura, le applicazioni e la metodologia di sviluppo. Infatti, se è vero che nei sistemi informatici general purpose i tre aspetti citati possono essere sviscerati in maniera relativamente indipendente l'uno dall'altro, nei sistemi embedded essi sono strettamente interdipendenti. Ricordiamo che un sistema siffatto dovrà essere sviluppato per realizzare una specifica applicazione, la cui definizione determinerà un insieme di vincoli, requisiti funzionali e non funzionali del sistema. Ad esempio, requisiti funzionali espressi per un sistema embedded potrebbero essere la capacità di elaborazione o di memorizzazione, le prestazioni (prestazione media e nel worst case, throughput, ecc.), il consumo di energia e di potenza81,ecc. Così come, requisiti non funzionali del sistema potrebbero essere limiti di budget (costi di fabbricazione, di progetto, di manutenzione dell'hardware e del software), limiti di tempo relativi alla fase di progettazione ed il numero di pezzi da produrre. 79 Esistono diversi standard e metodi per la valutazione della safety quali ad esempio il Safety Integrity Level o SIL. 80 Si pensi ad un sistema embedded interno di un autoveicolo. 81 Durata della batteria e dissipazione del calore 65 3.2 Vincoli dei sistemi embedded Per la sua natura, un sistema embedded è caratterizzato da aspetti che, sotto un certo punto di vista, lo rendono unico. Questa considerazione ci spinge a pensare che vi siano alcuni punti cruciali che non possono essere trascurati prima di intraprenderne lo sviluppo. Abbiamo, infatti, detto che il mondo embedded ha rappresentato e rappresenta tutt'oggi un grosso stimolo all'innovazione tecnologica, concetto che non potrebbe esistere senza quello della creatività. È quest'ultima che spinge, da un canto alla scoperta di nuove soluzioni e, dall'alto, a trovare tecniche che consentano di adattare le vecchie soluzioni ai nuovi contesti. Del resto, una importante ed auspicabile caratteristica di un sistema embedded è certamente la ripetibilità, che, nel caso di famiglia di prodotto, consente di capitalizzare gli sforzi profusi per qualcosa che si è già sviluppato. In tal modo, infatti, si eviterebbe di partire daccapo ogni volta che si debba iniziare un nuovo progetto analogo. Oltre agli aspetti appena discussi, lo sviluppo di un sistema embedded dovrebbe tener conto dei vincoli posti sulla durata della fase di progetto, nonché ai costi ad esso correlati (di progettazione, fabbricazione e manutenzione) e previsti. Abbiamo, quindi, definito alcuni vincoli dell'attività: • Creatività (non è un vincolo); • Ripetibilità; • Rapidità; • Prevedibilità, i quali non potranno essere soddisfatti senza la definizione di una metodologia di sviluppo adeguata. I dispositivi embedded sono sistemi complessi, al cui sviluppo partecipano più team e per i quali l'adozione di una metodologia standardizzata rappresenta una necessità. Si noti che, per metodologia di sviluppo, non si intende solo un'astrazione o, comunque, una guida teorica da seguire; piuttosto, essa deve essere definita in termini di strumenti e risorse disponibili. 3.3 I requisiti di un sistema embedded La discussione a monte ci guida verso la definizione dei requisiti di progetto che vengono, tipicamente, richiesti per un sistema embedded. Essi sono classificabili in: • Requisiti funzionali; 66 • Requisiti temporali; • Requisiti di affidabilità; • Consumo; • Prestazioni; • Costo, i quali, spesso, mostrano conflittualità tra loro. 3.3.1 I requisiti funzionali I requisiti funzionali relativi ad un sistema embedded contengono la specifica della parte elaborativa del sistema. Pertanto, essi definiscono: • quali siano i dati di ingresso e da dove provengano (ad esempio il comando inviato attraverso un tasto pigiato da un operatore); • quali siano i dati di uscita e la loro destinazione (ad esempio un segnale di pericolo riscontrabile attraverso l'accensione di un LED su di un banco di manovra); • quali dati in uscita debbano essere prodotti dal sistema in funzione di quali segnali di ingresso. 3.3.2 Requisiti temporali Non di rado, le specifiche tecniche dei sistemi embedded fanno riferimento a vincoli sui tempi di risposta agli eventi esterni e che possono dar luogo ad una progettazione hardware dedicata. Tra i requisiti temporali distinguiamo: • Deadline: una richiesta molto restrittiva sul massimo tempo di risposta ad un evento. Si consideri, come esempio, un sistema di controllo dei freni di un veicolo che non potrà mai ammettere un ritardo imprevedibile fra il comando di frenatura e l'attuazione dello stesso. Si distinguono vincoli che rendono un sistema: − soft real-time, la cui violazione ne comporta un degrado delle prestazioni; − hard real-time, la cui violazione comporta effetti catastrofici sul sistema e, in alcuni casi, sull'ambiente circostante. Nel caso in cui le speciche funzionali non contengano alcun vincolo temporale, invece, si ha un sistema senza caratterizzazione real time. 67 • Average: rappresenta un requisito piuttosto generico, in cui viene specificato un ritardo tipico tra lo "stimolo" e "l'effetto" che ne consegue. Dunque, si tratterà di dimensionare il tempo medio di risposta ad un evento non eccezionale; • Burst: è un requisito rappresentato da una richiesta che non ha alcun impatto sul tempo di risposta, ma si riferisce alla capacità che dovrà mostrare il sistema nel non perdere eventi (eventualmente adoperando strumenti hardware). 3.3.3 Requisiti di affidabilità Per soddisfare i requisiti indicati come di affidabilità, un sistema embedded dovrà essere: • Affidabile, cioè dovrà presentare un MTTF82 sufficientemente alto; • Sicuro, cioè dovrà essere in grado di gestire casi eccezionali e/o critici. Si noti che, in alcuni contesti di applicazione dei sistemi embedded (settore quello avionico, militare, ecc.) si richiede essi la conformità a particolari standard di sicurezza. • Riparabile, cioè dovrà mostrare un MTTR83 sufficientemente basso; • Disponibile, calcolabile come D = MTTF/(MTTF + MTTR) 3.3.4 Consumo Il consumo è uno dei requisiti più importanti richiesti ad un sistema embedded. E infatti, esso ha un impatto diretto sul costo complessivo del sistema e sulla complessità derivata nell'hardware. Questo problema è particolarmente sentito per i sistemi alimentati mediante batteria, che è necessario progettare in modo da ridurre il consumo, così da assicurare il maggior tempo di vita possibile. 3.3.5 Prestazioni I requisiti prestazionali hanno un impatto su diversi aspetti legati ad un sistema embedded. Se da un canto, però, migliori sono le prestazioni di un sistema, tanto più saranno influenzati positivamente gli aspetti connessi ai requisiti temporali ed all'usabilità, d'altro canto, ciò comporterà un peggioramento negli aspetti collegati al consumo ed ai costi. Dunque, sarebbe necessario giungere ad un giusto compromesso tra le prestazioni e, in 82 MTTF è l'acronimo di Mean Time To Failure ed indica il tempo medio intercorso tra due errori consecutivi. 83 MTTR è l'acronimo di Mean Time to Repair ed indica il tempo mediamente necessario per ripristinare la funzionalità del componente, valutato dall'istante in cui si verifica il guasto [18]. 68 definitiva, il costo del dispositivo. 3.3.6 Costo Il costo finale è un aspetto fondamentale, in particolare, per i sistemi prodotti in larga scala. Esso è fortemente influenzato alle scelte progettuali dell'architettura, dall'hardware utilizzato , dagli aspetti legati al software, nonchè dalle licenze hardware e softwarre e dal numero di pezzi da produrre. 3.4 Lo sviluppo dei sistemi embedded Il processo di sviluppo di un sistema consta di un certo numero di fasi, per molte delle quali non sono previsti strumenti di sintesi, la qual cosa rende necesssario effettuare un gran numero di analisi e simulazioni della specifica applicazione embedded. Questa considerazione ci porta, però, a scontrarci con un'ulteriore difficoltà: infatti, a causa dei vincoli posti sulla durata della fase di progetto e sui costi legati al suo sviluppo, non sarà possibile simulare accuratamente tutto il sistema. In più, per progettare architetture eterogenee sono necessari strumenti sofisticati e, di conseguenza, molto costosi; inoltre, tipicamente, le metodologie adoperate per il software sono differenti rispetto a quelle utilizzate per l'hardware. Basti pensare al metodo di sviluppo hardware a sintesi digitale, nel quale si ravvisano tecniche sofisticate84 del tutto assenti nelle tecniche di sviluppo software. Relativamente a questo caso, le differenze tra il caso hardware e software è giustificato dal fatto che, nel progetto dell'hardware, le metriche di valutazione del prodotto sono facilmente quantificabili ed oggettive. Inoltre, tipicamente, ogni metrica rappresenta un vincolo progettuale molto stringente che deve essere ottimizzato. Ancora, i cicli di sviluppo dell'hardware sono in genere più brevi di quelli del software. Tutte queste considerazioni suggeriscono di adottare una strategia di sviluppo ibrida, in parte ricavata dal mondo software, in parte da quello hardware. 3.4.1 Il modello di sviluppo a cascata Il modello di sviluppo a cascata (Royce, 1970), consta di sei fasi principali: • Studio di fattibilità; • Analisi e specifica dei requisiti; 84 Esempi di tecniche di sviluppo hardware assenti in quelle software sono, ad esempio: gli algoritmi per la stima deòòe metriche (come consumo di energia, area occupata, ecc.), Algoritmi predittivi per valutare i modelli che operano su definizioni incomplete del progetto, ecc. 69 • Progetto: - progetto architetturale, in cui si definisce la struttura generale del sistema, - progetto in dettaglio, in cui si definiscono i singoli moduli; • Codifica, in cui le parti vengono implementate ed integrate con l'hardware; • Collaudo; • Manutenzione. Si può notare che le fasi di sviluppo sono organizzate in una rigida gerarchia, secondo la quale per progettare un livello sarà necessario definire il livello immediatamente superiore [19]. Viene da sè che, in un modello siffatto, sarebbe molto costoso apportare modifiche al un livello gerarchicamente superiore, mentre è in corso la definizione di un livello inferiore, poichè comporterebbe la riesecuzione della fase successiva. Vi sono alcuni problemi che dovranno essere affrontati nella fase di progetto. Innanzitutto, poichè un sistema embedded è costituito sia da componenti hardware che da Illustrazione 21: Fasi dello sviluppo software secondo il modello a cascata 70 componenti software, per ogni modulo sarà necessario stabilire quali funzionalità debbano essere implementate via hardware e quali via software. Il partizionamento hardware/software è un problema complesso di ottimizzazione, in cui si deve tener conto di diversi fattori (costi, competitività del prodotto, prestazioni, hardware proprietario) che, spesso, sono in conflitto tra loro. Proprio la conflittualità tra essi può ostacolare il raggiungimento di una soluzione completamente soddisfacente. Piuttosto, si raggiungerà un prodotto frutto di un compromesso necessario per il soddisfacimento delle esigenze del cliente. Illustrazione 22: Metodologia di sviluppo per sistemi embedded Dunque, dalla fase di elicitazione ed analisi dei requisiti si dovrà determinare un opportuno e necessario partizionamento hardware/software, dopo del quale bisognerà definire l'architettura 71 generale del sistema embedded e, naturalmente, l'interfacciamento tra le due logiche. A valle di ciò, sarà necessario determinare le specifiche dell'hardware e del software. Il vantaggio di questa metodologia risiede, quindi, nella possibilità di realizzare componenti hardware e software separatamente e contemporaneamente. Illustrazione 23: Partizionamento HW/SW Naturalmente, il processo di partizionamento diventa maggiormente preciso con l'aumentare della conoscenza del sistema. Inoltre, bisognerà capire quali moduli hardware o software debbano essere realizzati ex novo e quali, invece, possano essere riusabili oppure acquistabili all'esterno. Un' altra attività molto delicata (e costosa in termini di tempo) sarà quella dell'integrazione85 hardware/software. 85 Il processo di integrazione consiste nella verifica del corretto funzionamento delle specifiche e nell'eventuale analisi delle risposte sistema a fronte di sollecitazioni non previste. Essa richiede tool specifici per la piattaforma che si adopera e che, spesso, deve essere realizzata ad hoc. 72 Illustrazione 24: Costo necessario per risolvere bug durante il CVS Si noti che spesso i sistemi embedded vengono sviluppati definendo, o comunque utilizzando, una piattaforma di riferimento. Si tratta di un dispositivo, o un'architettura di base, facilmente modificabile al fine di apportare cambiamenti a funzionalità esistenti o per realizzarne di nuove. Questa strategia diviene particolarmente utile qualora il sistema dedicato debba realizzare delle funzioni definite e regolate dagli standard. Illustrazione 25: Sviluppo di sistemi embedded basati su piattaforma 73 Questo approccio allo sviluppo consta di due fasi: la prima, nella quale viene definita la piattaforma (funzionalità di base, prestazioni e riconfigurabilità) e la seconda, in cui la piattaforma definita viene utilizzata per progettare uno specifico prodotto, basato su di essa. 3.4.2 Un approccio di tipo evolutivo Nei modelli evolutivi ci si pone l'obiettivo di superare i limiti del modello a cascata, al fine di ottenere una maggiore flessibilità [19]. Essi vengono adoperati, prevalentemente, per le fasi di progettazione e realizzazione del software. Appartiene a tale categoria il modello a spirale (Bohem 1988), nel quale lo sviluppo è interpretato come un processo incrementale, costituito da piccoli passi consecutivi. Esso combina la natura iterativa della prototipazione e quella controllata e sistematica del modello lineare-sequenziale. Relativamente allo sviluppo software, tale metodologia prevede che ogni ciclo sia costituito da tutte le fasi (che potremmo sintetizzare in requisiti, architettura e codifica) e che ciascuno di essi dia luogo ad una versione più dettagliata86 del prodotto87, poichè ogni ciclo incamera la conoscenza e l'esperienza maturate nei cicli precedenti. La versione ottenuta al termine di ciascun ciclo può essere un progetto, un prototipo, oppure un prodotto software. Pertanto, il primo ciclo corrisponderà un raffinamento della conoscenza che porterà alle specifiche, mentre i successivi condurranno via via a prototipi sempre più completi. Illustrazione 26: Metodologia di sviluppo software a spirale La metodologia a spirale consta di alcune fasi che si ripetono ciclicamente: • comunicazione con il cliente; 86 Ogni versione successiva introduce correzioni, miglioramenti e nuove caratteristiche. 87 Si noti che il punto di partenza potrà essere anche un prototipo cartaceo. 74 • pianificazione; • analisi dei rischi; • strutturazione; • costruzione e rilascio; • valutazione da parte del cliente. Si noti, però che le attività da svolgere non sono fissate, bensì variano a seconda della complessità del progetto. Naturalmente, al contrario del rigido modello a cascata, quello a spirale consentirà di apportare modifiche e raffinamenti in ogni fase, con costi notevolmente ridotti. Questo approccio, però risulta particolarmente rischioso nelle circostanze in cui il processo debba essere fortemente controllato; infatti, nel modello a spirale risulterebbe particolarmente costoso (dunque antieconomico) produrre tutta la documentazione a corredo di ciascuna attività svolta. 3.4.3 Modello a V Laddove l'affidabilità, la sicurezza, la qualità rappresentano requisiti imprescindibili, così come accade nei sistemi embedded, il modello di sviluppo tipicamente utilizzato è quello a cascata. Nonostante i limiti mostrati88, esso garantisce l'esecuzione di un insieme ben strutturato di attività89. Del resto, esso consente di realizzare progetti i cui prodotti (cioè gli output delle attività svolte) vengono costruiti, almeno teoricamente, in maniera sequenziale. E infatti, l'ordine con cui vengono eseguite le attività consentono, in qualche modo, di abbassare i costi ed i tempi di sviluppo. Il modello a cascata si basa sui due seguenti presupposti: • tutti i requisiti utente sono chiari e la tecnologia è nota agli sviluppatori ed al committente; • il committente accetta che nell'ultima fase temporale del progetto venga messo in esercizio tutto l'output prodotto. Potrebbbe, però, accadere che il committente accetti che i risultati siano consegnati nella fase finale del progetto, ma che non riesca ad esprimere in modo completo i requisiti utente, oppure che la tecnologia adottata non sia conosciuta, piuttosto che instabile. Il modello a V nasce dal modello a cascata, per far fronte a situazioni come quella appena 88 Il modello a cascata diviene rischioso laddove si voglia sviluppare un sistema di cui non si hanno sufficienti conoscenze e competenze pregresse rispetto al dominio applicativo e di business. 89 Analisi, analisi del rischio, pianificazione, tracciabilità dei requisiti, assicurazione della qualità, versioning, ecc. 75 descritta. Come mostrato in figura 28, il modello a V è caratterizzato: • da interazioni anche non locali tra le varie fasi; • dalla presenza di ricicli, non solo alla fase precedente; • dalla presenza di una fase di revisione critica dell'intero progetto. Quest'ultima caratteristica rappresenta un'attività di basilare importanza affinchè si inneschi un processo di apprendimento che veda coinvolti il committente e gli sviluppatori, i quali svilupperanno la conoscenza e coscienza adeguata per la gestione anche di progetti futuri. Illustrazione 27: Modello a V Tipicamente, il modello a V è caratterizzato da 9 fasi di sviluppo "simmetriche" nella misura in cui da una fase si possa riciclare sia quella precedente che quella che si trova alla stessa altezza nello schema. In ciascuna fase del processo bisognerà redigere un documento formale, l'output, che dovrà essere approvato dall'organo responsabile dell'intero progetto. Va da sè che, in un modello siffatto, le modifiche dovute, ad esempio, a ripensamenti da parte del committente, hanno un impatto prevedibile90. 90 Così come sono prevedibili i tempi ed i costi del progetto (questa caratteristica è del modello a cascata). 76 3.4.3.1 Le fasi del modello a V 1) Preanalisi/studio di fattibilità: L'obiettivo di questa fase è stabilire l'opportunità economica del progetto, in termini di costi e benefici. Pertanto, consisterà anche nell'esaminare le alternative di realizzazione possibili e nella scelta di una soluzione tra queste. Le decisioni prese a questo punto del progetto non saranno definitive, poichè i requisiti utente, così come la tecnologia, non sono ancora completamente noti. Nel corso dello studio di fattibilità, così come nelle tre successive fasi, è opportuno prendere decisioni che siano quanto più possibile indipendenti l'una dall'altra. Questo modo di operare renderà più agevole apportare una eventuale modifica. 2) Elicitazione ed analisi dei requisiti utente: I presupposti su cui di fondano queste due attività sono relativamente instabili, poichè a questo punto del progetto è improbabile che il committente sia in grado di esprimere completamente i propri obiettivi. Sulla scorta di questa considerazione, è fondamentale che il documento formale redatto alla fine dell'attività sia "modulare". In pratica, esso dovrà essere sintetico (nella giusta misura) e dovrà risultare leggibile per i committenti e gli utenti che, pur non avendo ancora chiare le esigenze e gli obiettivi, potranno approvarne i contenuti. 3) System design: In questa fase viene redatto il documento contenente la descrizione dettagliata dell'architettura hardware e software dell'intero sistema da realizzare e quella del sistema di sviluppo. Tale documento dovrà essere modulare, in particolare rispetto alle componenti tecnologiche meno sperimentate, quindi meno conosciute. 4) Program design: Sulla scorta delle funzionalità descritte in fase di elicitazione ed analisi e sulle specifiche tecnologiche definite in fase di System design, verranno documentati dettagliatamente tutti i moduli software91 da implementare. Essi verranno riportati nel documento formale, che rappresenta l'output di tale fase. 5) Programmazione/codifica: In questa fase, vengono prodotti i programmi e la documentazione necessaria per la loro manutenzione; mentre, a differenza di ciò che accade nel modello a cascata, ancora non vengono prodotti i manuali d'uso per l'utente. 6) Program test (simmetrica alla fase di Programmazione/Codifica): In questa fase vengono prodotti e popolati dei data base di prova, allo scopo di verificare le 91 Transazioni, programmi, procedure, ecc. 77 funzionalità e le prestazioni di ogni modulo realizzato. La documentazione prodotta in questa sede contiene le prove eseguite e, naturalmente, il loro esito. È proprio in corrispondenza di questa fase che il committente inizierà a rendersi conto delle funzionalità reali92 offerte dal sistema; pertanto, potrà capitare - anche con una certa frequenza - di dover intervenire al livello di programmazione/codifica, ma anche rispetto all'associazione nei moduli delle varie funzionalità (fase di program design). A questo punto, per ciascun modulo accettato, sarà redatto il documento utente. 7) System test (fase simmetrica a System Design): Una volta terminato il test di tutti i programmi, i realizzatori, con l'assistenza degli utenti di riferimento, eseguiranno un test sulle prestazioni globali del sistema. Esso dovrà verificare che le prestazioni complessive siano accettabili e che le macro funzioni93 (come la regolamentazione degli accessi, la sicurezza, ecc.) siano realizzate correttamente. Riguardo le parti non accettate, si tornerà alla fase di System design e verranno apportate le opportune modifiche e/o corrrezioni. Al temine della fase verrà prodotta la documentazione necessaria per l'installazione e la gestione del sistema. 8) Accettazione da parte dell'utente (simmetrica riespetto alla fase di Elicitazione ed Analisi): Questa fase non è esplicitamente presente nel modello a cascata, poichè si ritiene che le fasi di elicitazione ed analisi dei requisiti e quella di test siano sufficienti ad assicurare l'aderenza del prodotto alle esigenze rappresentate. Nel modello a V è, invece, necessario esplicitare la presenza di tale controllo finale, così da garantire che tutti i requisiti (impliciti ed espliciti) siano soddisfatti. Qualora ciò non accadesse, sarà necessario tornare alla fase di elicitazione ed analisi dei requisiti. Durante questa attività verrà controllata tutta la documentazione disponibile. 9) Messa in esercizio e review del progetto: In quest'ultima fase verrà completata l'installazione dell'hardware, del software e verranno generati e popolati i data base di gestione. Naturalmente, in questa fase bisognerà prevedere anche l'addestramento degli utenti finali del prodotto. La messa in esercizio è un'attività lunga, che può anche terminare con la cancellazione dell'intero progetto, qualora non sia realmente possibile adoperare i suoi prodotti. In quest'ultimo caso,attraverso un'attenta e documentata review del progetto, tutto il lavoro svolto costituirà una base più solida di conoscenza e competenza. Dunque, potrebbe essere necessario tornare alla fase 92 La fase di definizione dei requisiti evidenzia l'incertezza dei committenti ed utenti, che nella fase corrente vengono posti dinnanzi a qualcosa di concreto. 93 Tra le macro funzioni, rivestono un ruolo molto importante quelle di sistema, come la sicurezza. 78 dello studio di fattibilità. Il principale punto di forza del modello a V è la gestione dei ricicli, che diviene più efficiente quando ci si aspetta di dover controllare maggiormente quelli relativi alla parte bassa. Infatti, in tal caso, con l'avanzamento del progetto, le stime dei costi e dei tempi (fattori critici nello sviluppo di un sistema embedded) diventano sempre più attendibili. Naturalmente, una adeguata gestione presume che durante lo studio di fattibilità vi sia un'attenta analisi dei rischi che serve a garantire la controllabilià dei ricicli nel modello. Come accade nel modello a cascata, anche in quello a V le risorse specialistiche impiegate in ciascuna fase vengono rilasciate al termine di essa, ma a differenza del primo, tali risorse potranno essere ancora necessarie per lo svolgimento della fase ad essa simmetrica. L'applicazione più valida del modello a V riguarda il caso in cui un'azienda vuole procedere con la prima informatizzazione di un dato settore, per il quale non è stata maturata un'esperienza sufficiente derivante da progetti conclusi con successo. 79 Capitolo 4 Le metodologie agili L'idea del cambiamento come una necessità del business, ha spinto gli studiosi a cercare nuove metodologie di sviluppo software. Frutto di queste attività è, tra gli alti, l'approccio Agile. In effetti, ci si può riferire ad esso come una disciplina in contrapposizione o in complemento alle metodologie tradizionali94, definite "heavyweight". Ma, l'utilizzo dell'una o delle altre dipende, fondamentalmente, dai risultati che si vogliano ottenere. Alla base delle metodologie agili vi è l'idea di raggiungere l'obiettivo per passi, focalizzandosi su di un piccolo e ben definito risultato per volta, costruendo con un processo iterativo l'intero sistema. I metodi "pesanti", come quello a cascata, semplificano il controllo dell'andamento del progetto mediante la scomposizione e la specificazione del ciclo di vita in fasi successive e ben definite, in cui l'output di ogni fase (milestone) rappresenta l'input della successiva. Naturalmente, questa caratteristica, se da un canto rappresenta il maggior punto di forza dell'approccio tradizionale, d'altro canto diviene una criticità in quei progetti in cui i requisiti mutano velocemente e/o non siano completamente elicitabili nella prima fase di sviluppo. Illustrazione 29: Fasi del waterfall model Illustrazione 28: Fasi dei modelli iterativi Per questo motivo, sono nati i modelli iterativi, in cui le stesse fasi del waterfall model sono eseguite su porzioni del sistema incrementalmente, consentendo di apportare modifiche iterativamente e correzioni, tornando dalla fase di testing a quella di pianificazione. Le discipline agili, sottoclasse dei modelli evolutivi, nascono verso la fine degli anni '8095, con l'idea di risolvere problemi ricorrenti correlati alla conduzione di progetti software. Esse non 94 "Pesanti" come il modello a cascata e quello iterativo. 95 A partire dagli anni '80, sulla scorta delle innovazioni metodologiche introdotte in diversi settori (come il sistema di propulsione Toyota), alcuni autori hanno proposto processi software adattativi e leggeri. 80 presentano caratteristiche "predittive" rispetto all'evoluzione del sistema software, ma propongono valori e pratiche da adottare, al fine di "adattarsi" all'evoluzione dei requisiti utente, prima che del sistema software [20]. Un'importante constatazione che ha spinto verso questo approccio riguarda la natura mutevole nel tempo dei requisiti di un progetto. Pertanto, nell'ottica della pianificazione delle attività, i requisiti iniziali potrebbero risultare un punto di partenza inadeguato. L'adozione di un approccio è strettamente vincolato alla natura dei requisiti utente: del resto, sebbene averne cognizione definitiva già dal principio sia un aspetto desiderabile in qualunque progetto software, ciò avviene raramente. Inoltre, anche se accadesse, la fase di progettazione potrebbe ugualmente presentare qualche difficoltà. Sulla scorta di queste considerazioni, nelle metodologie agili i vincoli principali dei progetti diventano i tempi, i costi e la possibilità di favorire la gestione del cambiamento dei requisiti. Naturalmente, per poter operare in tal modo, è richiesta la suddivisione in singoli componenti indipendenti delle funzionalità, al fine di poterne valutare i tempi, i costi e la possibilità di completarli procedendo per piccoli incrementi progressivi. In tal modo, viene agevolata anche la suddivisione dei compiti e delle responsabilità ai componenti del team di sviluppo. In definitiva, i Metodi Agili [21] sono un insieme di tecniche di sviluppo software che si focalizzano sullo sviluppo ed il rilascio incrementale (ed in tempi brevi) di porzioni del sistema, che siano usabili. 4.1 Il processo Agile A differenza delle metodologie "pesanti", quelle agili sono caratterizzate da un processo iterativo scomposto in fase di progettazione, di sviluppo e test96 di breve durata. Tipicamente, i Metodi Agili si basano su di una disciplina rigorosa che dà vita ad un processo ben definito; si noti, però, che quest'ultimo è di tipo adattativo: si adatta, cioè, alle esigenze del committente, che possono mutare durante lo sviluppo. Quest'ultimo di focalizza su gruppi di funzionalità ed è guidato dalla necessità di rilasciare prodotti di progetto usabili. Dunque, gli artefatti possono considerarsi "leggeri", cioè manca la "pesante" documentazione. Il lavoro di progettazione, anzichè essere concentrato nella sola parte iniziale, è continuo e distribuito lungo tutte le fasi del processo. Pertanto, anche le parti già realizzate sono soggette a modifiche, al fine di migliorare l'architettura del software. 96 Testing: la verifica automatica del corretto funzionamento del sistema è uno degli aspetti più rilevanti delle discipline agili. Essa si applica al codice, ai dati, ai modelli. Laddove non sia possibile un test automatico, la verifica sarà eseguita manualmente da personale di pari esperienza. 81 Illustrazione 30: Fasi del processo di sviluppo Agile Secondo Highsmith e Cockburn (2001): “what is new about agile methods is not the practices they use, but their recognition of people as the primary drivers of project success, coupled with an intense focus on effectiveness and maneuverability”. In questo contesto, si suppone che il progredire del tempo non faccia aumentare i costi del cambiamento, bensì essi si stabilizzano ad un valore modesto. Esistono diverse Metodolie agili tra cui: • Extreme Programming (XP) [22]; • Dynamic Systems Development Method (DSDM) [23]; • SCRUM [24]; • Feature Driven Development (FDD) [25]; • Crystal Family [26]; • Adaptive Software Development (ASD)[27]; • Agile Modeling [28]. 82 Tutte queste aderiscono ai principi elencati nel cosiddetto Agile Manifesto 4.2 Il Manifesto Agile L’“Agile Movement” [29]è nato ufficialmente nel 2001 quando un gruppo di sviluppatori e consulenti ha redatto l' “Agile Software Development Manifesto”, [30]. Questo documento enfatizza non solo la necessità di implementare velocemente i cambiamenti di requisiti durante lo sviluppo, ma anche la cultura della responsabilità personale, il rispetto e la collaborazione tra gli individui. I valori fondamentali sono ravvisati nei seguenti quattro punti (cfr. Appendice): • Le persone e le interazioni prima dei processi e degli strumenti. Ciò nasce dall'idea che un soggetto, solo se opportunamente stimolato, possa produrre un sistema di migliore qualità ed in tempi contenuti. Pertanto, l'importanza viene spostata sui singoli, così da stimolarne la creatività, e sulla comunicazione tra di essi, così da promuovere la condivisone di conoscenza. • L'obiettivo è realizzare e rilasciare, ad ogni passo, parte di progetto che sia usabile. Il codice deve essere semplice in modo da poter essere compreso facilmente riducendo la necessità di una documentazione esaustiva; • La negoziazione contrattuale è meno importante della collaborazione con il cliente, in modo che sia quest'ultimo a "trainare" lo sviluppo del progetto. La relazione e la collaborazione tra gli sviluppatori e il cliente è da preferirsi rispetto a contratti stringenti. Lo sviluppo agile si focalizza sul produrre valore per il cliente già nelle prime fasi del progetto, in modo da ridurre i rischi di una cattiva comprensione dei requisiti ed il non soddisfacimento delle esigenze del cliente. • Risposta ai cambiamenti dei requisiti e dell'ambiente circostante, piuttosto che l' aderenza alla pianificazione, che risulta difficilmente realizzabile. Le brevissime iterazioni richiedono una pianificazione continua, questo significa che il team di sviluppo ed il cliente possono apportare modifiche in ogni momento per soddisfare nuove esigenze. 4.3 Alcune metodologie agili Quello agile rappresenta un vero e proprio movimento, divenuto noto grazie al progetto XP (Extreme Programming), sviluppato da Kent Beck97 per Daimler Chrysle, con la collaborazione di Ward Cunningham. Nella XP si inseriscono diverse pratiche, tra le quali il refactoring del codice, 97 Kent Beck è un esperto informatico, pioniere dell'XP e dell'uso di template nel software. Ha ideato i file CRC, il framework per il testing xUnit, ecc. 83 formalizzato da Martin Fowler [31]. Essa rappresenta, principalmente, una metodologia di gestione del progetto, fondandosi sui seguenti valori fondamentali: la comunicazione98, la semplicità99, il feedback100, il coraggio101, il pair programming102, il testing103, il refactoring104, standard e proprietà collettiva105, i rilasci piccoli e frequenti106, l' integrazione frequente e seriale107. Sulla scorta della XP nasce SCRUM, un metodo agile per la gestione di progetti software, in cui viene ribadito il concetto di ciclo di sviluppo costituito da un grande numero di iterazioni di breve durata, caratterizzato da brevi meeting e sprint produttivi108 In particolare, tale disciplina di gestione del processo funge da contenitore di pratiche di ingengeria del software già esistenti. SCRUM è basato su di un approccio iterativo ed incrementale, studiato per quei sistemi i cui requisiti mutano velocemente; la sua adozione consente di migliorare la comunicazione tra le persone coinvolte e massimizzarne la cooperazione. 98 In XP c’è una forte comunicazione tra tutti gli attori coinvolti: gli sviluppatori, il management ed il cliente. 99 Il risultato deve essere semplice e risolvere il solo ambito del problema che è stato posto: non deve cercare di anticipare i problemi futuri ma concentrarsi sulla soluzione del problema contingente. Lo sviluppatore deve pensare in piccolo, concentrando lo sforzo in un ambito ristretto. 100Il sistema è costantemente verificato, in modo da assicurarne la consistenza in ogni momento. Questo avviene tramite la creazione di test di unità che possono essere eseguiti dalla macchina stessa. 101Se si rende necessario modificare quello che è stato fatto in precedenza, in prima persona o da un altro sviluppatore del team, è necessario procedere senza timore cambiando strada per rimanere vicini all’obiettivo. Questi valori sono applicabili ai diversi aspetti dello sviluppo software: dalla gestione (management), alla progettazione, allo sviluppo, fino alla documentazione. 102Extreme Programming prevede che per ogni postazione di lavoro siano presenti due persone. Lo scopo del secondo sviluppatore è quello di verificare che il primo sviluppatore scriva il codice in modo corretto eventualmente per sollevare potenziali problemi o proporre vie alternative di sviluppo. 103Prima di scrivere il codice dell’applicazione, viene scritto quello di test. Vengono identificati pochi ma sostanziali test che mettano in luce eventuali malfunzionamenti del codice e se ne codifica l’implementazione. Una volta scritto il test, si passa allo sviluppo del codice vero e proprio.Si noti che, quando si presenta un bug viene creato subito un test per evidenziarlo. 104Il sistema è soggetto a continua riscrittura, volta a lasciare il codice nel più semplice stato possibile così da consentire l’implementazione delle funzionalità richieste. Nessuna funzionalità viene aggiunta prima che sia effettivamente necessaria. 105La codifica avviene secondo standard definiti, per promuovere la proprietà collettiva del codice. Tutti gli sviluppatori sono responsabili dell’intero sistema e possono in qualsiasi momento intervenire per eseguire gli eventualmente necessari refactoring. Gli sviluppatori dovrebbero inoltre cambiare spesso collega e parte del progetto su cui lavorano, per essere aggiornati sul funzionamento delle altre parti del sistema ed eventualmente per acquisire skill differenti. Lo sviluppo avviene da parte della collettività, senza specializzazioni verticali. 106I rilasci del software sono il risultato di iterazioni molto brevi, dove poche e piccole funzionalità vengono implementate nel sistema e subito rilasciate al cliente per il test di accettazione. 107L’integrazione delle modifiche nel sistema viene fatta frequentemente, in modo da limitare i conflitti che il nuovo codice (ed il codice di test) potrebbe dare. Inoltre, questa procedura avviene in modo strettamente sequenziale: solo uno sviluppatore alla volta integra le sue modifiche con il sistema, testa e rilascia il codice. Questo, assieme alla programmazione collettiva, consente di risolvere in modo semplice le tipiche problematiche di integrazione su una stessa base di codice del lavoro di diverse persone. 108 SCRUM prevede meeting di dieci minuti al giorno e sprint produttivi di un mese. All’interno di questa iterazione, sono presenti sotto-iterazioni di 24 ore, scandite da un meeting di inizio giornata, per far emergere eventuali problemi da gestire e per sincronizzare il team su quanto fatto nel giorno precedente e su quanto si intende fare nel giorno successivo. Alla fine dello sprint, il team di sviluppo fornisce la nuova funzionalità dimostrabile al cliente. 84 È bene notare, che nel passaggio tra XP e SCRUM hanno preso vita un certo numero di metodologie mirate alla modellazione e documentazione dei sistemi software con enfasi sull'obiettivo109, altri che adottano i concetti agili nello sviluppo dei database110, altri ancora che pongono l'enfasi sulle funzionalità richieste dal cliente111. 4.4 Metodologie tradizionali vs Metodologie agili Nel contesto attuale, la gestione della qualità ha assunto un carattere più complesso, concentrandosi sulla cura della soddisfazione del cliente, da cui deriva una particolare attenzione alla riduzione dei difetti nel prodotto. Del resto, anche nel project management vi è stato un cambio di rotta, nella misura in cui, passando per il controllo di tempi e costi, si è consolidato l'obiettivo di massimizzare il valore di business per il cliente. Pertanto, un project manager dovrebbe conoscere ed applicare processi di gestione dei livelli di qualità, mirati a garantire i risultati del progetto. Queste considerazioni spingono verso l'idea che nell'attuale realtà aziendale è necessario mettere in atto sia processi di project management tradizionali, sia i principi delle metodologie agili. Non vi è, infatti, alcun motivo per contrapporre il controllo all'agilità, piuttosto che la prevedibilità alla creatività. In definitiva, sarebbe necessario estrapolare i concetti migliori delle due discipline, così da pervenire ad un approccio più flessibile. Ciò richiede una conoscenza di entrambe le metodologie, in maniera tale da non imporre la soluzione, bensì arrivare ad essa attraverso la comprensione delle caratteristiche dell'ambiente in cui applicarla. In effetti, che si tratti di tradizionali o agili, le metodologie di sviluppo sono applicate per rispondere in modo efficiente alle esigenze del mercato e dei clienti finali; dunque, è necessario conoscere i diversi approcci, così da valutare quale applicare al caso specifico. Sulla scorta di quanto detto, prima di decidere quale metodologia applicare, il Project Manager dovrebbe chiedersi quale possa essere l'impatto di quella Agile sulle metodologie di project management esistenti; quale sia il punto di incontro tra l'approccio adattativo e quello basato sulla pianificazione; quale dei due sia più adeguato al dominio del cliente. Per poter meglio comprendere i concetti appena esposti, mostiamo le principali differenze tra l'approccio agile e le metodologie basate sulla pianificazione preventiva112. Tabella 4: Metodologia a cascata vs Agile (SCRUM) 109Agile Modeling. 110Agile Data. 111Feature Driven Programming. 112Si parla di metodologie Plan-Driven o Waterfall. 85 Metodologia a cascata Definizione dei requisiti Agile (esempio SCRUM) Requisiti dettagliati, definiti prima Definizone di alto livello del dell'avvio del Design e dello Sviluppo prodotto; Requisiti di dettaglio definiti gradualmente, in base all'avanzamento del Design Pianificazione Forte enfasi sulla pianificazione preventiva Pianificazione a finestra mobile; Rinvio delle decisioni finché possibile Controllo del contenuto Approccio al Project Il controllo del contenuto è essenziale per Il contenuto può cambiare ed controllare i costi ed i tempi aumentare, in modo da soddisfare le (schedulazione) esigenze del cliente Enfasi sul controllo di costi e tempi Enfasi sulla flessibilità ed Management adattabilità, così da soddisfare le esigenze di business Come mostrato, l'approccio a cascata si fonda sull'idea di acquisire ed analizzare tutti i requisiti del progetto prima di avviare la fase di disegno dell'applicazione; al contrario, quello Agile è basato sulla pianificazione per fasi successive (sprint), rinviando le decisioni quanto più possibile113. Ancora, nel primo dei due metodi vi è una stima dei tempi e dei costi iniziale, che diventano vincoli di progetto, ai quali è sottoposto anche "il contenuto" (che, per questo, dovrà essere controllato). Quindi, sarebbe necessario eseguire un controllo sui tempi e sui costi nella giusta misura114 [32]. L'approccio adattativo, invece, risulta più flessibile, nella misura in cui i requisiti possano essere modificati, così da soddisfare tutte le necessità di business. Queste diversità mettono in luce, da un canto il controllo esasperato dei tempi e dei costi, dall'altro la spasmodica ricerca della soddisfazione del cliente: aspetti che potrebbero coesistere, evitando l'estremizzazione. Naturalmente, pur avendo una buona conoscenza delle due metodologie, bisogna che essa sia scevra da percezioni errate, poichè, nella realtà, la scelta del metodo da applicare dipende dal livello di controllo desiderato e dal livello di flessibilità che si vuole dare al processo. 113Dato che lo sviluppo del software è sempre associato con qualche incertezza, i risultati migliori dovrebbero essere raggiunti con un approccio basato sulle opzioni, rinviando le decisioni il più possibile fino a che non può essere effettuata sulla base di fatti e non su previsioni ed ipotesi incerte [33]. 114Si consideri che molti progetti non raggiungono il risultato atteso per rispettare i limiti di budget e la schedulazione 86 Tabella 5: Luoghi comuni sugli approcci a cascata e Agile Waterfall Agile Troppa carta Nessun processo Molte checklist Caotico, disordinato Processi sofisticati Non idoneo per progetti complessi Guidano i processi e non le persone Poco professionale, poichè informale Eccessiva attenzione alla schedulazione Eccessiva attenzione alle richieste di modifica e poca schedulazione Un'idea errata è quella che vede l'approccio tradizionale poco orientato alle persone, rispetto a quello Agile: in realtà, un approccio più formale fornisce uno stimolo solo se il team di sviluppo è in grado di svolgere in maniera responsabile il proprio lavoro. Pertanto, la fiducia è strettamente connessa al controllo. Entrambi i metodi si pongono l'obiettivo di gestire i rischi del progetto e rimuovere le incertezze, cosa che necessita di una pianificazione. Dunque, sarebbe erroneo pensare che l'approccio tradizionale sia caratterizzato da un'eccessiva pianificazione preventiva, mentre quello agile non preveda alcun piano. Quest'ultima, infatti, adotta una pianificazione "a finestra mobile115". In definitiva, i potenziali benefici legati all'approccio agile sono: • Maggiore attenzione ai risultati di business, poichè l'utente è più coinvolto nelle attività; • Maggiore produttività e costi ridotti, grazie alla cooperazione massiva tra utente ed esperto; • Maggiore efficienza organizzativa e team più motivato; • Minore time to market, poichè l'approccio iterativo velocizza lo sviluppo; • Qualità (potenzialmente) più alta, poichè il test è parte integrante dello sviluppo. D'altro canto, non esiste un modo standard di avviare lo sviluppo agile e, in alcuni casi, possono verificarsi situazioni in cui è necessario ricorrere ad un approccio più formale: quello tradizionale. Infatti, l'adozione del primo metodo deve tener conto delle difficoltà correlate alla creazione di un ambiente realmente collaborativo116, alla necessità di un forte coinvolgimento del management dell'organizzazione117, ai vincoli posti dal business, ecc. Del resto, l'adozione di un approccio tradizionale, con l'enfasi posta sui controlli, può dar luogo a ritardi nel time to market. Nella realtà dei fatti, l'adozione dell'approccio a cascata resta valido quando, in un ambiente 115 Pianificazione detta anche "just-in-time". 116Non è sempre possibile richiedere la massima disponibilità da parte del cliente, ad esempio. 117 Collaborazione dello Sponsor, adeguata formazione dei partecipanti, cambiamento culturale. 87 prevedibile, l'attenzione debba essere concentrata sul controllo dei costi e schedulazione. Altresì, laddove la spinta principale è data dalla soddisfazione dell'utente, un approccio del genere pone alcune limitazioni al successo del prodotto. È bene notare, infatti, che esistono punti di vista contrastanti rispetto all'adozione dei metodi agili come soluzione a qualsiasi tipo di problema di sviluppo. Infatti, pur presentando indubbi vantaggi se applicati in contesti specifici, in altri la loro applicazione risulta inefficace e/o difficile, se non impossibile. Si ritiene che i Metodi Agili non siano applicabili in contesti quali[34]: • Ambienti distribuiti118; • Produzione di componenti riusabili; • Sviluppo eseguito da gruppi numerosi di persone; • Software Safety-Critical; • Sviluppo di sistemi grandi e complessi Tipicamente, tale approccio viene adoperato nella produzione di software volto alla risoluzione di una specifica esigenza. Infatti, è bene notare che i contenuti tempi di sviluppo possono rappresentare un ostacolo per l'implementazione di soluzioni generiche, quindi riusabili. Del resto, uno dei capisaldi dello sviluppo Agile è: “there is no need to design for change because any change can be effectively handled by refactoring the code” [35]. Gli approcci agili sono focalizzati sullo sviluppo a breve termine, che rappresenta l'attuale commessa, piuttosto che sui benefici che si potrebbero ottenere nei progetti futuri, che rappresentano le commesse di clienti con i quali si dovrà cooperare. Dunque, l'obiettivo della loro applicazione concerne l'ottimizzazione del progetto corrente, quindi concreto, piuttosto che quella di un eventuale progetto futuro. Inoltre, nei sistemi di grandi dimensioni e complessi, gli aspetti legati all'architettura sono di fondamentale importanza, pertanto, il costo di un eventuale cambiamento può essere anche molto alto. In questi casi, prevenire alcune modifiche nel progetto potrebbe costituire un notevole vantaggio in termini economici. Si pensi, ad esempio, ai sistemi legacy, le cui funzionalità risultano fortemente accoppiate e, per i quali, un approccio incrementale potrebbe non risultare idoneo. Infatti, a causa delle dimensioni e della complessità di tali sistemi, il refactoring del codice potrebbe divenire particolarmente costoso e soggetto ad errori. 118Sono in atto alcuni studi che vanno verso questa direzione. 88 Quanto detto, fa nascere l'idea che, probabilmente, bisognerebbe trovare il giusto trade-off tra l'agilità ed il controllo, così da soddisfare le esigenze legate ad un determinato contesto. Naturalmente, a volte è necessario giungere ad un compromesso che possa dar luogo a modifiche nell'ambiente per adeguarlo alla metodologia da adottare ed a modifiche nella metodologia da adottare per adeguarla all'ambiente. 89 Capitolo 5 La piattaforma Metropoolitana Leggera Automatica di AnsaldoBreda: un caso di studio L'Iniziativa Software Finmeccanica, avviata nell'aprile del 2006, vede oggi il coinvolgimento del CINI (Consorzio Interuniversitario Nazionale per l'Informatica), del Consorzio SESM e di alcune aziende del gruppo Finmeccanica, tra le quali, dall'autunno del 2010, anche l' AnsaldoBreda. In particolare, l'attività è coadiuvata dalle Unità di Ricerca CINI delle Università di Firenze, Genova, Napoli "Federico II", Roma "La Sapienza". L'obiettivo del progetto è far incontrare il mondo accademico con quello aziendale, così da proporre ed avviare soluzioni innovative, frutto di una ricerca mirata, che possa costituire un plusvalore per le aziende interessate. Naturalmente, ciò prevede una stretta interazione tra gli esperti industriali, ai quali è richiesto di esplicitare i Piani Tecnologici Aziendali, ed il personale specializzato, che dovrà proporre e formare risorse qualificate da inserire nelle varie realtà industriali. Questo capitolo è frutto di un'attività sostenuta dall'Unità di Ricerca coordinata dal Prof. Ing. Stefano Russo, coadiuvato dall'Ing. Roberto Pietrantuono, e svolta presso la sede napoletana dell'azienda AnsaldoBreda. In particolare, l'ambito della ricerca del quale ci si è occupati riguarda l'esplorazione delle metodologie e strumenti per l'ingegneria dei requisiti applicati alla piattaforma MLA (Metropolitana Leggera Automatica). 5.1 MLA La Commissione Europea, mediante le norme UNI 8379 e l'UITP (Associazione Internazionale del Trasporto Pubblico)119 , ha definito la metropolitana (Rail Rapid Transit) come un 119I trattati dell’Unione Europea considerano la politica comune dei trasporti come uno degli elementi fondamentali del mercato unico europeo. La Commissione europea ha spesso sottolineato i vantaggi competitivi della ferrovia rispetto alle altre modalità di trasporto terrestre o aereo, soprattutto in materia di consumo d’energia, d’impatto sull’ ambiente e di sicurezza. Per la Commissione la rivitalizzazione delle ferrovie e una tariffazione più equilibrata delle infrastrutture dovrebbero determinare un trasferimento notevole di traffico dalla strada verso la ferrovia. Il settore ferroviario soffre sempre per la grande varietà e complessità delle specifiche tecniche e delle modalità di gestione delle differenti reti ferroviarie nazionali, cose che limitano la sua attrazione e producono dei maggiori costi di costruzione e di gestione per le infrastrutture, i veicoli e gli equipaggiamenti. La Commissione cerca dunque di attuare progressivamente una legislazione europea che favorisca l’emergere di un mercato ferroviario unico nell’insieme dell’Unione e contribuisca al suo sviluppo, e ciò privilegiando due concetti: quello dell’apertura del mercato e quello dell’interoperabilità. La norma UNI 8379 fornisce inoltre dei parametri identificativi di massima delle metropolitane: • frequenza media per direzione: 4 minuti 90 "sistema di trasporto rapido di massa, di alta capacità e frequenza, costituito da veicoli automotori o mossi da veicoli automotori circolanti su rotaia, ovvero con altra guida vincolante e completamente svincolata da qualsiasi altro tipo di traffico, con regime di circolazione regolata da segnali ". Una prima caratterizzazione dell'infrastruttura metropolitana vede la contrapposizione di due modelli: la metropolitana leggera e quella pesante, che differiscono per: portata, frequenza delle corse e tipologia di rotabile adoperato. In questa sede ci occuperemo della categoria leggera (Light Rail Transit), definita dall' UNI 8379 come: " un sistema di trasporto rapido di massa che mantiene le caratteristiche della metropolitana, ad eccezione della portata oraria, che è prevista minore, e dei veicoli che, qualora opportunamente attrezzati, possono essere utilizzati su tratti di linea che, avendo caratteristiche tranviarie, non rientrano nella categoria delle metropolitane leggere ", aggiungendo a questa la definizione fornita dalla International Light Rail Commission120: "la metropolitana leggera è una forma di trasporto su rotaia che può essere sviluppata per fasi da un tram moderno ad un sistema di trasporto rapido circolante in sede propria o sotto terra. Ciascuno stadio di sviluppo può essere completo di per sè, ma deve rendere possibile gli sviluppi per passare al successivo ". Dunque, la metropolitana leggera si presenta come un sistema in grado di offrire un servizio intermedio tra quello tranviario e quello del metrò, da un canto fornendo i vantaggi tipici dei sistemi su rotaia (elevate capacità, alta produttività, comfort, affidabilità) e dall'altro introducendo alcune problematiche sostanzialmente connaturate ai riflessi ambientali derivanti da viadotti, rampe di accesso alle gallerie o elementi-barriera, e dai fenomeni d'interferenza con le altre modalità di trasporto in sede promiscua. • capacità di ogni convoglio: 1200 persone • distanza media stazioni/fermate: 600–1000 m • velocità commerciale: 25/30 km/h • lunghezza massima del convoglio: 150 m • portata potenziale media: 18000 pax/h dir 120Light Rail Commition è una commissione nata con lo scopo di promuovere l'interesse dei mezzi di trasporto pubblico MLA attraverso la pubblicazione di documenti e relazioni riguardanti le esperienze a livello internazionali connessi alla metropolitana leggera. 91 Illustrazione 31: Piattaforma MLA 5.1.1 Generalità sui componenti della piattaforma La descrizione dei componenti costituenti la MLA esula dagli scopi di questo lavoro di tesi, per il quale ci limiteremo a descrivere brevemente i sottostistemi prodotti dalla AnsaldoBreda per la suddetta piattaforma. Ciascun veicolo presenta un sistema di monitoraggio e controllo (TCMS), una o più unità di controllo trazione (TCU) e di diagnostica (IDU). Il Train Control and Monitoring System, rappresenta l'unità preposta al controllo ed alla gestione del veicolo. Questa esplica le sue funzioni per mezzo di due sottounità121, una centrale (Central Control Unit) e l'altra locale (Local Control Unit). La gestione delle varie unità del veicolo avviene attraverso il bus MVB122 ed il bus RS485123. 121 Ciascuna sottounità può essere settata come Master del bus MVB e del bus RS485. 122Come avviene per la gestione del sistema freno, ad esempio. 123La trasmissione via RS485 è basata su di un protocollo seriale asincrono, in cui ogni informazione, a seconda del tipo di messaggio scambiato, sarà trasmessa in un frame con un particolare formato. 92 Per mezzo di uno scambio di dati124 con sistemi quali la ATC125 , l'OBS126 e l'IDU, ecc. Illustrazione 32: Architettura del TCMS La Traction Control Unit è articolata in quattro casse e cinque carrelli127, quattro dei quali motorizzati ed uno portante128. 124I dati consistoni in comandi ed informazioni di diagnostica collezionati in dataset. 125 Il treno è equipaggiato con un sistema di sicurezza e operatività del veicolo, noto come ATC. Esso include: • ATO (Automatic Train Operation): è la funzione che sostituisce il macchinista. Esso assicura che il treno si fermi correttamente in stazione, apra le porte, aspetti che i passeggeri siano saliti e scesi dal veicolo, che venga ripresa la corsa. Esso non può modificare alcune funzioni, come il cambiamento degli scambi. • ATP (Automatic Train Protection): sistema per il controllo dei treni, volto ad assicurarne la sicurezza in viaggio. Esso interviene qualora una predeterminata velocità/distanza di sicurezza venga superata e può essere definito come: “monitoraggio continuo della velocità con o senza segnalazione nella cabina di guida”; • ATS (Automati Train Supervision): raccoglie le informazioni di diagnostica del veicolo e dirige le attività per la risoluzione dei problemi riscontrati. Le funzioni ATP offrono una protezione a prova di errore contro collisioni, velocità eccessiva e altre condizioni pericolose. Le funzioni ATO soddisferanno le caratteristiche operative base del treno entro i limiti di sicurezza imposti dal sistema ATP. Le funzioni ATS forniranno informazioni sullo stato del sistema, controlleranno le operazioni del sistema e implementeranno il controllo automatico di varie funzioni del sistema [36] 126 Onboard System è il sistema di comunicazione di bordo che consente: la comunicazione tra l'operatore (magari il conducente) ed i passeggeri in situazioni di emergenza, la diffusione di messaggi in viva voce ai passeggeri, può offrire un sistema di videosorveglianza, ecc. 127 È un elemento indipendente del veicolo, che si monta sulla parte inferiore della cassa, e comprende un sistema di sospensioni per assicurare il comfort e la sicurezza di marcia Può essere fisso o imperniato su pattini, ralle o sistemi a bilanciere, e può montare un numero variabile di assi e ruote. 128 I carrelli si differenziano in 'portanti' e 'motori', a seconda che possano o meno sviluppare sforzi di trazione. Il carrello portante è costituito da due organi di sospensioni: primaria e secondaria. L'organo primario è realizzato con molle ad elica ed il movimento fra gli assi e il telaio ha per vincoli delle guide verticali. Quello secondario è costituito da una trave detta 'oscillante' sospesa al telaio del carrello e appoggiata su molle: su tale asse 93 Ogni veicolo prevede due possibili configurazioni: con singola129 e doppia unità di trazione130 Esso dispone di un certo numero di moduli inverter, attraverso il quali ciascun carrello verrà controllato ed alimentato. La TCU, assieme al Brake Control Unit (BCU), interagendo con il TCMS, realizza la frenatura del veicolo131. Il sistema diagnostico, Integrated Diagnostic Unit, è l'unità diagnostica di bordo, preposta al monitoraggio dell'intero sistema. Oltre a consentire la verifica del corretto funzionamento delle tecnologie presenti a bordo, il suo compito è comunicare al TCMS il verificarsi di situazioni di avaria, così da avviare le operazioni necessarie (riducendo il tempo di fermo del treno). In particolare, le centraline di controllo instaurano una comunicazione con il TCMS attraverso un particolare bus e comandi I/O. 5.2 Il ciclo di sviluppo La normativa di riferimento per lo sviluppo software in ambito ferroviario è la CELENEC EN 50128132, pertanto, in AnsaldoBreda, tutte le attività del processo sono strutturate in maniera tale da garantire il rispetto del modello di ciclo di vita a V. Illustrazione 33: Modello a V adoperato dall'AnsaldoBreda viene poggiata la cassa e la rotazione relativa fra cassa e trave oscillante è resa possibile attraverso una rolla. I carrelli motore presentano soluzioni innovative dovute alla presenza di motori di trazione e relative trasmissioni e sospensioni 129La singola trazione prevede che i due motori in una coppia di rotabili (che solitamente sono disposti in serie) , invece di essere posti sulla stessa vettura, sono montati uno per ciascuna vettura. 130 Consiste nell'impiego di due locomotive per trainare il treno: essa viene adoperata solo nei casi relativi al recupero in linea dei veicoli in avaria. 131 Una caratteristica particolare della frenatura della MLA è l'applicazione della logica Blending. 132 La normativa EN 50128 specifica le procedure ed i requisiti tecnici per lo sviluppo del software nelle applicazioni ferroviarie. 94 5.2.1 Planning La pianificazione del progetto software rappresenta la prima fase del processo di sviluppo adottato dall'AnsaldoBreda. Dopo la fase di raccolta di tutte le informazioni necessarie133, essa consiste nel caratterizzare i modelli standard dei documenti134 da produrre, rispetto alla particolare commessa. Questi verranno sottoposti ad aggiornamento in concomitanza con l'avanzamento del progetto. Illustrazione 34: Planning e Project Review 133 L'avvio della fase di pianificazione presuppone l'esistenza di alcuni documenti di pianificazione: di assicurazione della qualità, di gestione della configurazione, di verifica e validazione, test e di sviluppo del progetto. 134 Software Verification & Validation Plan (SVVP), Software Configuration Management Plan (SCMP), Software Test Plan (STP), Software Development Plan (SDP). 95 5.2.2 Requirements Specification Per ciascuna nuova commessa, il processo di sviluppo parte dal capitolato tecnico, dal quale un sistemista estrapola i requisiti funzionali del Sistema/Veicolo. Tale ruolo è coperto da un rappresentante di un ufficio di AnsaldoBreda (della sede di Napoli o di Pistoia), oppure da un incaricato di una azienda partner di AnsaldoBreda per la particolare commessa. È importante notare che alcuni dei requisiti funzionali Sistema/Veicolo vengono implementati (via hardware e via software) in sottosistemi prodotti dalla stessa AnsaldoBreda, è questo il caso del TCMS, IDU e TCU. Pertanto, la specifica dei requisiti software relativi a questi ultimi verrà effettuata sulla scorta dei requisiti funzionali di sistema e confluirà nei documenti di specifica dei requisiti software (SRS) e di specifica dei casi di test eseguiti sul software (SRTS). La specifica dei requisiti termina con l'ispezione dei due docuementi SRS ed STRS, effettuata nella fase di Requirements Review. Illustrazione 35: Requirements Specification 96 Illustrazione 36: Requirements Review 5.2.3 Architecture and Design A partire dall'SRS, viene prodotto un documento di descrizione di alto livello dell'architettura ed inizia la progettazione del software. La fase termina con una Design Review, un'ispezione in cui si verifica l'adeguatezza della progettazione rispetto ai requisiti software specificati. 97 Illustrazione 37: Archietecture and Design 5.2.4 Module Design and Implementation I moduli software individuati nella fase precedente di progettazione "di massima" vengono progettati ad un livello di dettaglio maggiore. Verrà, quindi, prodotto il documento di Software Module Description, in cui saranno descritti i componenti del modulo135, le interfacce, le dipendenze tra essi. È bene notare, però, che la redazione della documentazione della progettazione di dettaglio è prescritta solo quando essa si riferisce a software il cui SIL è maggiore di 0 (questo caso si presenta solo raramente nei progetti sviluppati da AnsaldoBreda). Solo in tal caso la progettazione di dettaglio si conclude obbligatoriamente con una detailed design review. Durante questa attività si verifica l'adeguatezza della decomposizione in moduli, dei casi di test ed, inoltre, vengono valutati gli aspetti relativi al riuso dei moduli. Il passo successivo consiste nell'implementazione di ciascuno dei componenti software 135 La decomposizione in moduli segue il principio di decomposizione funzionale, così da dominare la complessità del modulo (in termini di macro-funzionalità. 98 individuati; il codice viene generato automaticamente attaverso Matlab/Simulink136 . Illustrazione 38: Module Design and Implementation 136 Matlab è un linguaggio di programmazione per applicazioni scientifiche e numeriche. Simulink è un ambiente grafico di simulazione di sistemi complessi. 99 Illustrazione 39: Detailed Design Review 5.2.5 Analisi Statica L'analisi statica viene eseguita per verificare che lo standard di codifica aziendale sia stato applicato correttamente al codice sorgente. I risultati sono riportati nel documento Static Analysis Report (SAR), che viene redatto solo per i moduli software con SIL>0. 100 Illustrazione 40: Analisi Statica 5.2.6 Module Testing Dopo la fase di implementazione dei moduli software, vengono eseguiti i test (funzionali) sui componenti sviluppati. L'attività eseguita con il tool Cunit (cfr. Appendice), mentre la valutazione della copertura dei requisiti viene effettuata tramite review. Mentre lo svolgimento dei test è obbligatorio per tutti i moduli, la produzione della documentazione – contenente gli esiti – è prescritta solo nei casi in cui il SIL sia maggiore di 0. 101 Illustrazione 41: Module Testing 5.2.7 Integration and Validation Testing Dal test di modulo di passa all'integrazione dei moduli software ed al relativo test, Validation Testing, che si riferisce alla verifica della conformità con la specifica dei requisiti funzionali e con gli aspetti relativi alla sicurezza. In pratica, i test eseguiti in questa fase sono quelli definiti nel documento STRS. È bene notare che non sono prescritti test di integrazione, né test per i requisiti non funzionali137. Bisognerà effettuare test di regressione nel caso di modifiche apportate; in particolare, il progettista avrà il compito di selezionare il set di test (obbligatori o facoltativi) che dovranno essere ripetuti, affinchè la nuova versione del software sia validata. L'analisi di impatto è eseguita manualmente ed è a carico del progettista. 137 Ciò potrebbe dipendere dalla mancanza di una classificazione dei requisiti in base alla tipologia di appartenenza. 102 Illustrazione 42: Integration and Validation Testing 5.2.8 Release A valle della fase di test, il progettista dovrà rilasciare il software; questa operazione consiste: • nell'archiviazione del software e dei relativi documenti138; • produzione o aggiornamento del Software Version Description Document, atto a contenere la descrizione del software, oppure delle modifiche apportate alla precedente versione; • produzione del documento Software Configuration Description. Il rilascio è seguito dalla Configuration Review, in cui vengono ispezionati i documenti di configurazione, verificandone la correttezza. L'output di questa fase è il Software Configuration 138 Supportata dal tool di gestione delle versioni Subversion. 103 Verification Report. Illustrazione 43: Release 5.2.9 Gestione della configurazione del software Al fine di poter distribuire ed installare il prodotto software, esso viene archiviato in un repository ufficiale (Subversion). In particolare, la gestione139 della configurazione viene supportata dall'utilizzo dei seguenti strumenti (cfr. Appendice): • Subversion per il versioning; • LuntBuild per la verifica periodia della corretta generazione degli eseguibili; • Jira, un issue tracker, per la gestione delle modifiche e per la rilevazione di anomalie. 139 Vengono gestiti codice sorgente, script di comandi, file di configurazione, docuementazione. 104 Illustrazione 44: Configuration Review 5.3 Analisi del processo di sviluppo Sulla scorta delle problematiche esposte, la prima attività svolta ha riguardato l'analisi del processo di sviluppo del software in AnsaldoBreda, condotta attraverso lo studio della documentazione relativa. Questa ha indicato gli strumenti140, i modelli standard dei documenti prodotti nella varie fasi dello sviluppo, gli standard adottati141. L'insieme delle informazioni reperite è stato ulteriormente dettagliato dai colloqui svolti con alcuni responsabili della divisione software di AnsaldoBreda. Il primo aspetto sul quale si è concentrata l'attenzione del gruppo di studio è stato quello relativo all'organizzazione aziendale che, in seguito ad un recente cambiamento, ha indicato come ruoli principali, per lo sviluppo del software, le figure del Lead Software Engineer, Software 140Gli strumenti a supporto della progettazione sono Jira, Confluence, Subversion, Doxygen, Cunit, Luntbuild, Salomè TMF, Understand, per la cui descrizione si rimanda alla relativa sezione in Appendice. 141 Gli standard adottati vengono riportati nella relativa sezione in Appendice. 105 Engineer e del Test Engineer. In particolare: il primo mantiene una visione di alto livello dell'intero progetto e svolge attività di coordinamento; il secondo si occupa, invece, di aspetti maggiormente legati allo sviluppo del software, quindi di livello più basso; il terzo è responsabile della fase di test. Un'importante considerazione riguarda l'aspetto della comunicazione tra le persone coinvolte: infatti, se da un canto la dimensione ridotta dell'azienda potrebbe favorire un buon livello di dialogo, di fatto ciò non sembra accadere. Si è riscontrato che, rispetto alle diverse fasi del ciclo di sviluppo, viene fornita una certa libertà di scelta ai singoli. Ciò, se in linea di principio, rappresenta uno stimolo all'ideazione di nuove soluzioni, nella realtà genera un certo disallineamento tra i vari gruppi di lavoro. In tale contesto può capitare, infatti, che un gruppo si trovi a lavorare seguendo una linea sconosciuta ad un altro, penalizzando la giusta condivisione della conoscenza. Dunque, un primo passo verso il miglioramento del processo aziendale è, certamente, l'osservanza obbligatoria, da parte di tutte le figure coinvolte in un progetto, delle convenzioni aziendali e dell'utilizzo condiviso di strumenti e metodi. Un'ulteriore situazione ravvisata riguarda l'assegnazione dei compiti e delle responsabilità, che sembra, talvolta non essere soddisfacente. Infatti, non caita di rado che una stessa persona ricopre più di un ruolo: il progettista, ad esempio, è spesso anche il revisore del proprio lavoro, quindi nella fase di revisone potrebbe non cogliere errori o inesattezze da esso stesso commessi, inficiando così la qualità del prodotto finale. Ancora, le informazioni reperite per la realizzazione di un progetto non hanno mostrato l'esistenza di una procedura rigorosa, sia per l'assegnazione delle risorse da impiegare, sia per la stima preventiva dei costi. Tale attività è, infatti, a carico del capoufficio, sulla base dell'esperienza acquisita, e successivamente valutata da uno specifico ente aziendale. A partire dalle criticità, si è, quindi, ritenuto opportuno avanzare la proposta di una revisione del ciclo di sviluppo, con l'obiettivo di favorire la tracciabilità dei requisiti ed il riuso. 5.4 Problematiche connesse alla piattaforma MLA La piattaforma MLA rappresenta un prodotto nuovo e particolarmente apprezzato dal mercato mondiale che, naturalmente, richiede sempre più il rispetto di alcuni standard e l'adozione di particolari criteri e strumenti di sviluppo. Ciò ha fatto nascere una nuova consapevolezza che ha spronato l'azienda a rivedere l'intero ciclo di sviluppo del prodotto, così da scorgerne le criticità e gli aspetti migliorabili. È facile immaginare che la commessa di una MLA sia rappresentata, in termini concreti, da un 106 capitolato di gara, nel quale sono riportati gli obiettivi/necessità del cliente, le restrizioni e norme di riferimento con le quali il prodotto dovrà essere in linea. D'altro canto, una parte non trascurabile dei requisiti effettivamente implementati prende vita da esigenze, conoscenze e pratiche consolidate in ambito aziendale o, poichè diversi componenti adoperati nella piattaforma MLA sono acquistati dall'esterno, da vincoli dettati dai produttori di COTS142. Infatti, nonostante il cliente mostri conoscenze tecniche – a volte anche molto specifiche – del contesto applicativo, naturalmente, esso non ha la capacità, o comunque la competenza, per prescrivere l'utilizzo di un particolare componente. Nonostante il capitolato di gara rappresenti un vincolo alla "personalizzazione" del prodotto, non dobbiamo dimenticare che la piattaforma MLA appartiene ad una famiglia di prodotti, nella fattispecie, di rotabili ferroviari. Pertanto, essa presenta elementi riusabili, poichè comuni a più realizzazioni. Si tenga conto, però, che rendere un prodotto siffatto aderente alle aspettative di qualunque cliente comporta un costo, talvolta, abbastanza elevato. Pertanto, dovrebbe essere attuata una progettazione mirata al riuso143, così da poter minimizzare i costi derivanti dalla "personalizzazione" della piattaforma. I componenti realizzati da AnsaldoBreda per la piattaforma MLA appartengono alla categoria dei sistemi di controllo ed, in contesti come quello in esame, talvolta non è agevole classificare i relativi requisiti in funzionale, di performance o di safety, poichè il confine tra le tre tipologie è labile. Pertanto, nell'ambito della ristrutturazione dei requisiti software, si è ritenuto opportuno classificare ciascun requisito in base alla tipologia. Una problematica segnalata da AnsaldoBreda, riguarda la difficoltà di far corrispondere i requisiti standard della piattaforma ai requisiti espressi in ciascun capitolato. Pertanto si è adoperato un criterio di tracciabilità dei requisiti, grazie al quale è più agevole capire come e dove essi siano collocati – una volta realizzato il sistema - , per dimostrare la loro effettiva implementazione, per gestirne in modo adeguato l'evoluzione, la manutenzione e per migliorare il riuso. Nell'ambito del ciclo di sviluppo di questo prodotto, il ruolo di stakeholder è coperto da: • il cliente finale, rappresentato dall'amministrazione territoriale che commissiona il progetto; 142COTS, Commercial, Off-The-Shelf, di riferisce a componenti integrati già prodotti e commercializzati; vengono molto adoperati nel progetto di sistemi embedded. Esistono componenti COTS hardware e software. 143Una progettazione orientata al riuso prevede lo sviluppo di componenti riusabili ed il supporto alla scelta ed integrazione di componenti COTS. 107 • Ansaldo STS144, partner di AnsaldoBreda, che rappresenta il main contractor rispetto ai clienti. In particolare, i suoi sistemisti definiscono i requisiti dell'intero sistema di trasporto e, nel caso di prodotti ai quali è associato un SIL145 > 0 (cfr. Appendice), conducono analisi di safety. • I fornitori di componenti COTS. Si noti che costruire grandi sistemi integrando COTS è una strategia abbastanza comune ed efficiente, soprattutto per quei sistemi che presentano funzionalità di base grosso modo comuni. Tipicamente, il loro utilizzo rende più veloce il processo, riducendo i costi di sviluppo e test. La varietà di "punti di vista" introduce un'ulteriore problematica aziendale, relativa alla gestione dei requisiti, che nasce già dalla difficoltà di comprensione e raccolta degli stessi. Pertanto, l'obiettivo da perseguire riguarda lo sviluppo di metodologie e strumenti dell'ingegneria del software per il miglioramento del processo di sviluppo della piattaforma MLA, con particolare enfasi su: • la classificazione dei requisiti; • la strutturazione dei requisiti; • la tracciabilità dei requisiti; • la gestione dei requisiti; • la progettazione mirata alla riusabilità. Nel prosieguo di questo capitolo mostreremo le attività svolte in Azienda, relative al primo dei due obiettivi succitati. 5.5 MetroRiyadh: un caso di studio In accordo con i responsabili della divisione software dell'Azienda, il gruppo di lavoro si è concentrato su di un particolare progetto, attualmente in fase di test, del quale si è fatto un caso di studio: MetroRiyadh. L'obiettivo dell'attività ha riguardato la revisione delle prime fasi del ciclo di sviluppo del software, connesse all'Ingegneria dei Requisiti. In particolare, la sperimentazione è stata svolta: 1) analizzando la documentazione esistente (documenti di specifica dei requisiti funzionali di sistema, documenti di specifica dei requisiti software); 2) ristrutturando i requisiti software, a partire da quelli di sistema; 3) esplicitando le relazioni tra i requisiti e realizzandone la tracciabilità a tutti i livelli. 144STS sta per Sistemi. 145 SIL, acronimo di Security Integrity Level, indica la "classe" di probabilità del danno provocato a cose e/o persone coinvolte nell'interazione con il sistema. I livelli di SIL possono essere valutati in base alla norma EN IEC 62061. 108 Il lavoro è stato condotto sul sistema TCMS, rappresentante la logica di veicolo. Si noti, però, che il progetto MetroRiyadh rappresenta un caso unico rispetto al modo in cui sono stati descritti i requisiti di sistema e, di conseguenza, i requisiti software. Infatti, esso è frutto di un esplicito accordo tra il sistemista ed il progettista del software del TCMS, nel: • descrivere i requisiti di sistema a livello di dettaglio molto basso; Illustrazione 45: Esempio di requisito funzionale di sistema di MetroRiyadh • ricavare i relativi requisiti software come "copia" dei requisiti di sistema di provenienza. Illustrazione 46: Esempio di requisito software 5.5.1 Studio della documentazione esistente Documenti analizzati: Manuale del Processo di Sviluppo del Software 109 Relativamente al Progetto MetroRiyadh: Software documentation plan Software documentation list System Performance Requirements (sistema FRENO) System Performance Requirements (sistema FRENO) Functional Requirement Specification (sistema FRENO, sistema PROPULSIONE, sistema HV, sistema LV) Software Requirement Specification (sistema FRENO, sistema PROPULSIONE, sistema HV, sistema LV) Dataset MetroRiyadh Interface Description MLA Riyadh TCMS Test requirement specification Test requirement report Modello matlab della specifica SRS di riferimento Matrice di tracciabilità dei requisiti L'analisi preliminare svolta sulla documentazione disponibile ha evidenziato un aspetto critico, relativo alla descrizione dei requisiti software, connessa in parte alla scelta di far derivare detti requisiti direttamente da quelli di sistema, ed in parte legata alla complessità del sistema in esame. Innanzitutto, i requisiti del documento di specifica dei requisiti funzionali di sistema descrivono "come" siano implementate le funzionalità, piuttosto che il "cosa". Pertanto, il documento descrive il dominio della soluzione, invece del dominio del problema. 5.5.2 Specifica Attraverso l'analisi preliminare dei documenti di specifica dei requisiti software, relativi al progetto MetroRiyadh, si è potuta riscontrare: • la mancanza di un linguaggio naturale strutturato, i requisiti sono invece descritti con l'uso del linguaggio naturale; • la mancanza di una strutturazione definita per specificare i requisiti, che, al contrario è affidata all'arbitrio del progettista. Questo aspetto non favorisce il riuso; • la mancanza di una separazione dei requisiti in livelli di astrazione; • la mancanza di una classificazione basata sulla priorità dei requisiti; 110 • la mancanca di una classificazione dei requisiti, in base alle tipologie note (di interfaccia, funzionali, di performance, di safety). 5.5.3 Verifica e validazione dei requisiti Lo strumento adoperato in azienda per verificare e validare i requisiti è la review, che consiste nell'ispezionare il documento di specifica, al fine di riscontrarne la qualità. Tipicamente, le figure coinvolte in una requirements review sono l'ispettore e colui che si è occupato di scrivere la specifica dei requisiti. Si è riscontrato però che, almeno nel caso di Riyadh, i due ruoli sono stati coperti dalla stessa persona. Ricordiamo che la fase di convalida richiede l'interazione con chi ha commissionato il prodotto, cosa non prevista nel caso oggetto di studio146. 5.5.4 Tracciabilità e gestione dei cambiamenti Notevole importanza è stata rivolta al processo di tracciabilità previsto in AnsaldoBreda, mostrato attraverso matrici in cui sono stati collegati i requisiti software al relativo codice e casi di test. In effetti, la matrice contiene indicazioni di tracciabilità solo di alcuni requisiti software ed, inoltre, non mostra le relazioni tra essi. Probabilmente, ciò dipende dal modo in cui i requisiti sono descritti. Infatti, la loro caratterizzazione147 – al momento non applicata – consentirebbe la creazione di un database dei requisiti, in cui identificare facilmente quelli riusabili. Utilizzare un adeguato criterio di tracciabilità è fondamentale per due motivi: • per migliorare il riuso dei requisiti; • per l'analisi d'impatto, che è una delle principali attività della gestione dell'evoluzione dei requisiti. In AnsaldoBreda, la gestione dei cambiamenti è affidata alle review di progetto ed a strumenti di gestione delle issue. Pertanto, è stato manifestato un notevole interesse a nuove proposte provenienti dal gruppo di lavoro, mettendo a disposizione lo strumento di gestione dei requisiti IBM Rational DOORS. 146 Le figure che interagiscono appartengono tutte alla stessa Azienda e, solo in alcuni casi vi sono incontri con referenti dell'Ansaldo STS (main contractor verso il cliente). 147 Un requisito dovrebbe essere caratterizzato da una strutturazione, dalla tipologia, dalle relazioni mostrate con altri requisiti. 111 5.6 Interventi A fronte dell'analisi svolta, il gruppo di lavoro all'Iniziativa Software ha proposto alcuni interventi al ciclo di sviluppo del software AnsaldoBreda. In questa sede ci occuperemo di descrivere quelli relativi alla fase di gestione dei requisiti, che rappresenta il primo passo dell'intera attività. 5.6.1 I requisiti software I requisiti software sono derivati, nel caso della MLA, dall' organizzazione architetturale della piattaforma e dai requisiti di sistema. Questi ultimi, in particolare, prendono vita dalle esigenze/obiettivi dell'utente, presentati nel capitolato tecnico. L'architettura di sistema è costituita da un insieme di sottosistemi; pertanto: • i requisiti di sottosistema derivano da quelli di sistema; • i requisiti software derivano dai requisiti di sottosistema. Data la complessità del prodotto, si è ritenuto opportuno strutturare i requisiti per livelli di astrazione. E infatti, a valle della deduzione delle aspettative dell'utente, si ottengono: • i requisiti utente; • i requisiti di sistema; • i requisiti di sottosistema; • i requisiti software di alto livello del sottosistema; • i requisiti software di basso livello del sottosistema. 5.6.2 I livelli di astrazione La strutturazione dei requisiti in livelli di astrazione consente di approcciare il problema della specifica in modo da favorire l'estendibilità ed il riuso. In primo luogo, per mettere in atto la strategia, bisogna identificare gli aspetti più "generici", ad esempio quelli che nell'ambito di una famiglia di prodotti sono ritenuti comuni e che costituiranno i requisiti di alto livello. Successivamente, tali aspetti potranno essere dettagliati, così da caratterizzare il comportamento del singolo prodotto e dare vita ai requisiti di basso livello. La specifica in livelli di astrazione consentirà di raggiungere l'obiettivo per passi successivi: - anticipando l'eventuale feedback dell'utente; - facilitando le verifiche di correttezza; 112 - predisponendo l'estendibilità ed il riuso. A supporto di questa idea viene la norma DO – 178B "Software Considerations in Airbone System And Equipment Certification", che costituisce le linee guida per la certificazione del software safety-critical in ambito avionico. Lo standard offre spunti per il trattamento dei componenti commerciali OTS, per lo sviluppo volto al riuso di componenti software, per la gestione del rischio connesso all'utilizzo degli strumenti di sviluppo. Per poter definire la sicurezza di un sistema Safety Critical è necessario classificare le conseguenze legate alle failure condition148. In campo aeronautico, sono fissate cinque classi149 di "avaria", ciascuna delle quali inficia in una certa misura le funzionalità dell'aeromobile. Poichè l'obiettivo è quello di classificare l' avaria in base alla gravità dell'evento, ciascuna classe sarà associata ad un livello di criticità150 esplicitato sull'insieme delle funzioni (hardware/software) coinvolte. Allo stesso modo, per prevenire errori di progettazione che possano inficiare il funzionamento in sicurezza del sistema, per ogni livello di criticità sarà definito un profilo di "obiettivi di design assurance". La normativa di progetto DO-178B definisce il requisito come un elemento di una specifica con caratteristiche di: • identificabilità: i requisiti devono essere numerabili e numerati; • verificabilità: i requisiti devono essere - espressi in forma positiva; - coerenti tra loro; - concepiti con la strategia di test che li verifichi. In essa viene definito il "requisito derivato", cioè un requisito aggiuntivo, posto dal processo di design, che può non essere direttamente tracciabile da un requisito di livello superiore [38]. Tipicamente, i derived (low-level) requirements specificano gli aspetti relativi alle proprietà del sottosistema. 148 Ci si rende facilmente conto di quanto questa idea sia connessa al campo di applicazione. 149 Le 5 classi di avaria sono: • Catastrophic; • Hazardous/severe- major; • Major; • Monor; • No Effect. 150 I livelli vanno da A ad E. 113 Nel caso della piattaforma MLA la classificazione in alto e basso livello (High Level e Low Level) riguarda i requisiti software di ciascun sottosistema. Da ciò, si evince che esistono più livelli di specifica dei requisiti, ciascuno caratterizzato da un livello di dettaglio incrementale. Illustrazione 47: Processo di definizione dei requisiti La suddivisione in livelli di astrazione richiede, passo dopo passo, una descrizione ad un maggior dettaglio, quindi una conoscenza sempre più approfondita del dominio applicativo. La tecnica esposta richiede competenze specifiche in ciascuna fase di sviluppo; pertanto è richiesta una suddivisione di compiti e responsabilità tra le persone coinvolte nel progetto che, allo stato, l'azienda non opera. 5.6.3 I requisiti di interfaccia I requisiti di interfaccia (cfr. Cap. 1 § Requisiti di interfaccia) specificano in che modo debbano essere realizzate le interazioni tra il sistema ed il mondo esterno151, dettandone le regole. È facile immaginare, infatti, che dato un particolare sottosistema, nei relativi requisiti funzionali vi siano riferimenti al mezzo (requisiti interfaccia) che consentirà la comunicazione con altri sottosistemi. Pertanto, sarà necessario: • scrivere nel requisito funzionale solo il riferimento al/ai requisito/i di interfaccia necessario/i all'interazione; 151 Sappiamo che il sottosistema interagisce con altri sottosistemi e, naturalmente con l'hardware sottostante. 114 • tracciare la/le relazione/i tra i requisiti (funzionale e di interfaccia). Mostriamo ora alcuni esempi che faciliteranno la comprensione di quanto appena esposto. ID: REQ_BRAKE_05 Descrizione: TCMS will provide the above information to TCU and BCU on MVB (dataset 500) […] Il requisito non dettaglia il modo in cui viene realizzato l’interfacciamento, ma rimanda al corrispondente requisito di interfaccia. Esso presenta un riferimento al dataset 500 115 Illustrazione 48: Esempio di requisito di interfaccia di comunicazione: Dataset 500 116 5.6.4 La scrittura dei requisiti La scrittura dei requisiti è un'attività volta al raggiungimento di un documento dei requisiti con le seguenti proprietà (cfr. Appendice): • correttezza: il requisito descrive ciò che ha realmente richiesto il committente; • non ambiguità: il requisito si presta ad una sola interpretazione; • completezza: (misura relativa ad un insieme di requisiti) l'insieme dei requisiti è completo, dunque, descrive tutti le richieste del committente152; • consistenza: ciascun requisito non deve essere in conflitto con altri; • classificabilità: ciascun requisito deve essere classificato in base all'importanza che ha per il committente153 ed in base al livello di stabilità; • verificabilità: possibilità di verificare la corrispondenza del prodotto con il requisito; • modificabilità: possibilità di operare modifiche su di un requisito in modo semplice e coerente, senza impattare eccessivamente gli altri requisiti; • tracciabilità: l'origine di ogni requisito dovrà essere chiara, inoltre, dovrà essere possibile definire una corrispondenza tra il requisito in esame e gli altri requisiti, nonchè con i prodotti dello sviluppo. 5.6.4.1 Linee guida per la scrittura dei requisiti • Scrivere frasi e paragrafi brevi: un requisito dovrebbe essere espresso in poche righe (4, 5 al massimo); • Si consiglia di utilizzare la forma attiva del verbo; • Scrivere frasi complete complete dal punto di vista ortografico, grammaticale (soggetto, verbo, completamento oggetto, ecc.), e della punteggiatura; • Adoperare i termini coerentemente con quanto definito nel glossario; • Accertarsi che il significato dei termini adoperati siano noti e condivisi; • E’ preferibile utilizzare la formula: “il sistema (o l’utente) deve” (la forma SHALL, o MUST, in inglese), a valle della quale esprimere un risultato osservabile (si può utilizzare la forma SHOULD per requisiti opzionali). • I requisiti dovranno essere espressi con frasi che esprimano un risultato osservabile (ad 152Le richiste dell'utente riguardano funzionalità, performance, vincoli di progetto, i dati, le interfacce, ecc. 153La classificazione di un requisito in base all'importanza pone l'accento sul livello di soddisfazione del cliente in relazione alla sua implementazione. 117 esempio: "Il sistema deve visualizzare l'elenco dei container presenti in magazzino"); • Evitare termini che possano aumentare l'ambiguità, come "facile", "accettabile", "robusto", "efficiente", ecc., che esprimono qualità non oggettive e non misurabili; Se vi fosse necessità di adoperarli, accertarsi dell'accezione che il cliente dà al termine specifico; • Evitare termini come: "massimizzare", "migliorare", altrimenti sarebbe opportuno quantificarli e rapportarli ad un parametro fisso; • Evitare di scrivere lunghi paragrafi in cui siano presentati più requisiti; • Se in prima battura, i requisiti sono espressi in maniera ambigua ed ad un alto livello di astrazione, proseguendo l'esplorazione del sistema, essi diventano più specifici e concreti. Pertanto, è necessario scomporre un requisito di alto livello e ambiguo in più requisiti di livello più basso e meno ambigui. • Per poter scrivere i requisiti ad un adeguato livello di granularità bisogna specificarli in maniera tale che siano verificabili individualmente, ovvero sottoponibili a test. Si noti che: - se è sufficiente un esiguo numero di casi di test per verificare che un requisito è implementato correttamente, presumibilmente il esso è scritto al giusto livello di dettaglio. - se i casi di test sono numerosi e diversificati, allora sarà opportuno scindere il requisito in più requisiti. • Evitare di specificare i dettagli di progettazione. • Tracciare le relazioni tra i requisiti. 5.6.4.1.1 Strutturazione del requisito software L'analisi dei documenti di specifica ha mostrato, innanzitutto, la necessità di proporre uno schema di strutturazione dei requisiti154 software, secondo il quale ciascun requisito è descritto dai seguenti campi: • ID: identificativo associato al requisito; • Nome: nome del requisito o della funzione che descrive; • Input: input della funzione offerta; • Precondizioni: condizioni che devono essere verificate affinchè la funzione descritta nel requisito possa essere svolta; • Descrizione: descrizione della funzione (non in termini di "come" viene espletata); • Output atteso: output della funzione, che dovrà essere osservabile; 154 Come vedremo in seguito, tale strutturazione interesserà i requisiti software di alto e basso livello. 118 • Postcondizioni: condizioni che devono verificarsi dopo l'esecuzione della funzione descritta nel requisito; • Stato (opzionale):articolato sulla base del ciclo di vita dei requisiti. N.B. Al momento non è implementato questo attributo. stato di avanzamento del requisito durante il ciclo di sviluppo. Esso potrà assumere i valori155 [cfr. § Gestione dei requisiti, Capitolo II]: - proposto (con eventuale indicazione chi ha proposto il requisito); - concordato; - implementato; - verificato; - eliminato; • Tipologia: indica la tipologia del requisito (cfr. Capitolo 1), la quale può essere classificata come segue: - Funzionale: descrive la funzionalità o il servizio che il sistema deve fornire per soddisfare i bisogni del cliente; esso esprime cosa il sistema deve fare. Non comprende indicazioni su proprietà di performance da soddisfare, che vanno espresse in un ulteriore requisito, non funzionale, di performance; - Non-funzionale di performance: definisce proprietà e vincoli che il sistema deve soddisfare su fattori relativi alle prestazioni attese/richieste (in termini di vincoli temporali e/o di memoria). Non descrive una nuova funzionalità, ma può far riferimento ad una funzionalità già espressa da un altro requisito funzionale - Di interfaccia: descrive le modalità con cui il sistema interagisce con l’esterno (altri sottosistemi, o con l’utente). Tali requisiti andranno nel documento dei requisiti di . 5.6.4.1.2 Osservazioni Secondo il glosssario IEEE, un requisito "è una condizione/ una capacità che deve essere soddisfatta/posseduta [..] da un sistema [..] per adempiere ad un contratto". Pertanto, esso, attravero i suoi campi, dovrà esprimere la singola (una ed una sola) funzionalità offerta. Naturalmente, ciascun requisito software sarà in relazione con almeno un altro requisito: quello di sistema, pertanto bisognerà tracciare tali collegamenti. Una adeguata strutturazione dei requisiti produce importanti risultati in termini di una più 155 Oltre a quelli indicati, lo stato di un requisito potrà ricadere nelle categorie: "Obsoleto", "Sospeso", "Bozza", "Finale". 119 rapida individuazione e risoluzione dei problemi connessi alla definizione dei requisiti stessi. E infatti, è noto che, nelle prime fasi del processo di sviluppo, sia abbastanza comune interpretare in maniera non corretta e/o incompleta un requisito. Un altro aspetto rilevante riguarda il trattamento di quei requisiti "volatili", per cui un approccio strutturato risulta più idoneo. 5.6.4.1.3 Software High Level Requirements Illustrazione 49: Esempio di requisito di sistema Sulla scorta delle linee guida fornite, per il sottosistema Propulsion si ricaverà il seguente requisito software di alto livello, in cui trascuriamo i dettagli legati allo specifico progetto (dataset 500): SR_PROP_1H Nome: Control signal from TCMS Input: Control signals Precondizioni: Descrizione: In each mode, TCMS shall provide to TCU the control signal Output atteso: Control signal sent to TCU Postcondizioni: Tipologia: Functional Si noti che, trattandosi di una specifica ad un alto livello di astrazione, i requisiti non dovranno far riferimento agli aspetti vincolati alle scelte implementative ed alle tecniche di verifica156. Infatti, essi dovranno rappresentare le caratteristiche comuni a prodotti della stessa famiglia, dunque candidati al riuso. Per meglio comprendere questo aspetto, mostriamo l'esempio di un requisito software del sistema freno del progetto MetroRiyadh: 156 Eccetto che per alcuni casi. 120 Illustrazione 50: Esempio di "sovra-specifica" nel requisito software L'insieme delle informazioni relative ai segnali scambiati, così come la prescrizione dell'utilizzo di particolari dataset, non dovrebbe essere indicato a questo punto del ciclo di sviluppo. Nella fase di specifica, infatti, non bisognerebbe far riferimento al dominio della soluzione, tanto meno vincolare le scelte da operare. Inoltre, non bisognerebbe cadere neanche nell'errore opposto: descrivere un requisito in modo troppo generico. Esso potrebbe esprimere funzionalità del sistema già note che non ne giustificano l'esistenza. Ancor peggio, potrebbe accadere che questo esprima in maniera troppo implicita delle funzionalità, dando luogo ad un requisito inutilizzabile. La difficoltà di descrivere un requisito ad un giusto livello di dettaglio può essere mitigata affidandosi da un canto al buon senso, dall'altro a metodi a supporto. Prima di intraprendere la scrittura, bisognerebbe chiedersi se il requisito, così come sarà espresso, sia o meno riusabile. Inoltre, (cfr. § Scrittura dei requisiti) per poter scrivere i requisiti ad un adeguato livello di granularità bisogna specificarli in maniera tale che siano verificabili individualmente, ovvero sottoponibili a test. Un metodo per capire se il requisito sia stato scritto al giusto livello di dettaglio è quello di 121 valutare il numero di casi di test necessari per verificare la correttezza della sua implementazione: − un esiguo numero di casi di test ne indica, presumibilmente, l'idoneità; − un cospicuo e diversificato numero di casi di test indicherà la necessità di scindere il requisito in più requisiti. Un secondo metodo consiste nel provare a confrontare i livelli di dettaglio del requisito "sorgente" (utente/sistema) e del requisito software derivato. La comparabilità tra i due livelli indica che il requisito software sia stato espresso ad un livello di dettaglio troppo alto. Infatti, tipicamente un requisito utente esprime in maniera "grossolana" un servizio, il quale sarà scomponibile in un insieme di funzionalità, ciascuna delle quali attribuibile ad un singolo requisito. Dopo la scrittura sarà necessario tracciare i collegamenti (cfr. Tracciabilità): • orizzontali: collegando l'HLR al/ai requisito/o HLR con cui è in relazione (ad esempio di dipendenza). Questa informazione sarà molto utile per valutare la consistenza del requisito di alto livello e per l'analisi di impatto; • verticale: collegando l'HLR al/ai requisiti di sistema da cui deriva. Si noti che, in base alla definizione di requisito derivato data dalla normativa DO-178B, potrebbero esservi casi in cui non sia possibile tracciare verticalmente il requisito, perchè manca la corrispondenza. La fase che segue la specifica dei requisiti di alto livello è quella di progettazione software, che consentirà di pervenire all'archiettura del software ad ai requisiti di basso livello. 5.6.4.1.4 Low Level Software Requirements La specifica dei requisiti software strutturata in livelli di astrazione ci conduce, a partire da quelli di alto livello, ai Low Level Requirements157 (LLR). A volte capita che un LLR derivi da più requisiti di alto livello. I requisiti software di basso livello esprimono le informazioni omesse nei rispettivi HLR, cioè quelle caratteristiche che specificano in che modo debba essere realizzata una data funzionalità in un particolare progetto. È proprio la specificità rispetto al caso in esame che rende questa classe di requisiti utili per potervi derivare direttamente il codice sorgente. Abbiamo già accennato all'utilità derivante dall'uso dei livelli di astrazione per anticipare il feedback da parte dell'utente. In effetti, anche la scrittura degli LLR può fornire informazioni utili rispetto al potenziale riuso dei relativi HLR. Per meglio comprendere i concetti appena esposti, mostriamo un requisito relativo all'interazione tra il TCMS ed al sistema freno: 157 Ricordiamo che da un HLR possono derivare requisiti descritti a più livelli, sempre più bassi. 122 Req_4: EB status detection, and information sending to ATC Descrizione: TCMS can detect the status of EB Relay Bus loop by means of double breaks digital inputs (EBRB+/-) and will provide on MVB the status of EBRB to ATC (Dataset 201 EB applied). TCMS can detect the cause of EB application by means of the following digital inputs: • Sts_MushRoomA/B (on A or B EDC, active low) • Sts_ObstacleA/B (Obstacle detector on A-Side, active low) • Sts_ DerlRxSensA/B (derailment sensor right side activated on A-Car, active low) • Sts_ DerlLxSensA/B (derailment sensor right side activated on A-Car, active low) Dal requisito di sistema estraiamo due requisiti software di alto livello: ID: HLR_ Req_1 Nome: Cause of EB application_H Input : Cause of EB application Precondizioni : EB Application Descrizione : TCMS can detect the cause of EB application by means of the digital inputs Output atteso : Cause of EB application Postcondizioni : Tipologia : Functional Criteri di verifica : ID: HLR_ Req_2 Nome: EB application cause sent to ATC _H Input : Information about EB application cause Precondizioni : EB application Descrizione : TCMS will provide the information about EB application cause on MVB to ATC even if this information is directly available to ATC (by means of EB loop status). This information will also be recorded by DBU. In case of EB request TCMS will provide (via MVB) the relative information Output atteso : Information about EB application cause on MVB to ATC and recorded by DBU Postcondizioni : 123 Tipologia : Functional Criteri di verifica : ai quali seguiranno I rispettivi requisiti di basso livello: ID: LLR_ Req_1 Nome: Cause of EB application_L Input : Cause of EB application Precondizioni : EB Application Descrizione : TCMS can detect the cause of EB application by means of the following digital inputs: Sts_MushRoomA/B (on A or B EDC, active low) Sts_ObstacleA/B (Obstacle detector on A-Side, active low) Sts_ DerlRxSensA/B (derailment sensor right side activated on A-Car, active low) Sts_ DerlLxSensA/B (derailment sensor right side activated on A-Car, active low) Output atteso : Cause of EB application Postcondizioni : Tipologia : Functional/Safety Criteri di verifica : ID: LLR_ Req_2 Nome: EB application cause sent to ATC _L Input : Information about EB application cause Precondizioni : EB application Descrizione : TCMS will provide the information about EB application cause on MVB to ATC (dataset 201/202) even if this information is directly available to ATC (by means of EB loop status). This information will also be recorded by DBU. In case of EB request TCMS will provide (via MVB dataset 500) this information: Security Braking -> 1. Output atteso : Information about EB application cause on MVB to ATC and recorded by DBU Postcondizioni : Tipologia : Functional/Safety Criteri di verifica : Durante la fase di specifica di ciascun requisito di basso livello bisognerà, naturalmente, 124 tracciare i collegamenti tra quest'ultimo ed il/i requisiti di alto livello con cui sussiste una "relazione di derivazione". Per questa classe di requisiti valgono tutte le considerazioni fatte per gli HLR, ma non è posto alcuna restrizione alla lunghezza158 della descrizione, poichè dovranno rappresentare informazioni più dettagliate. Si noti che, in base alla definizione di requisito derivato data dalla normativa DO-178B, potrebbero esservi casi in cui non sia possibile tracciare un LLR con uno o più HLR, poichè manca la corrispondenza. 5.6.4.1.5 Casi d'uso, scenari di interazione e gerarchie di requisiti Un requisito di alto livello rappresenta una funzionalità richiesta al sistema, che sarà espressa come un flusso di azioni da eseguire. È necessario, però, valutare i casi d'uso in cui il flusso normale subisca delle deviazioni, dando luogo a flussi alternativi. Abbiamo già discusso questa evenienza (cfr. § Scenari di interazione e casi d'uso), indicando come "padre" il caso d'uso che identifica la funzionalità base, mentre come "figli" quelli che esprimono le possibili variazioni (scenari) della stessa funzionalità. Questa relazione di "parentela" si tradurrà in una classificazione gerarchica dei requisiti. Un requisito deve essere numerato e numerabile all'interno di un documento SRS, pertanto, la gerarchia sarà esplicitata assegnando al "requisito padre" un identificativo numerico che rispecchierà la relazione con i "figli". È bene notare che possono esservi casi in cui il flusso normale di eventi segua una piccola variazione, tale per cui non si ritenga necessario derivare un ulteriore requisito che rappresenti questa situazione. Quanto detto è, normalmente, applicabile ai requisiti a tutti i livelli di astrazione. Il flusso normale di eventi descrive le azioni intraprese a seguito di un "esito positivo" ed indica una (post)condizione che, come mostrato, sarà comune ad entrambi i requisiti derivati. Infatti, i controlli eseguiti dal TCMS termineranno, dando luogo ai due possibili esiti "checks KO" e "checks OK". Inoltre, i due requisiti figli esprimeranno ciascuno un flusso alternativo, specificando in quali situazioni possa verificarsi e descrivendo l'azione a seguito intrapresa. Rispetto ai requisiti software di basso livello, vi sono alcune considerazioni che vale la pena approfondire. Come è noto, essi dettagliano gli HLR che potranno essere strutturati gerarchicamente: in tal 158È consigliabile scrivere i requisiti di alto livello in poche righe (4-5) (cfr. § Scrittura dei requisiti). 125 caso, i LLR dovranno particolareggiare159 lo scenario descritto dai requisiti figli di alto livello. Si noti che, al momento della specifica di un requisito di basso livello, si potrà ancora manipolare il relativo requisito HL, scorporandolo in "padre – figlio", qualora se ne avvertisse la necessità. Al contrario, se non vi fosse la possibilità di scorporare il requisito HL di partenza, per non sconfinare nel dominio della soluzione160, l'operazione potrà ancora essere svolta nel corrispondente requisito di basso livello. Naturalmente, in tal caso si perverebbe ad un requisito "padre" di basso livello, al quale seguiranno nella scala gerarchica i requisiti "figli" di basso livello. Quanto detto può essere riscontato nell'esempio che segue, riferito all'interazione tra il TCMS ed il sistema di propulsione, in cui con "nome_requisito_H" sono stati indicati i requisiti del documento di specifica di alto livello, mentre con "nome_requisito_L", quelli relativi al documento di specifica di basso livello. 5.6.4.1.6 Interazioni con altri sottosistemi Un aspetto importante che bisogna tener presente durante la scrittura dei requisiti riguarda il livello di dettaglio con cui devono essere espresse le interazioni tra il sistema a cui si riferisce il requisito che si sta descrivendo e gli altri sottosistemi. Supponiamo di dover specificare un requisito relativo ad un sistema A, in cui le azioni descritte riguardino l'interazione tra A ed un secondo sistema B. Ad esempio, supponiamo che A possa fornire una certa funzionalità a condizione che: −B intraprenda particolari azioni, di sua sola pertinenza; −B fornisca ad A informazioni sull'esito delle azioni intraprese. In tal caso, le azioni di B dovranno essere solo menzionate nella descrizione del requisito di A, così da specificare la sua responsabilità nel flusso di eventi. Piuttosto, tutti gli aspetti tralasciati in questa sede saranno ripresi e dettagliati nella fase di specifica del sistema B. Anche in questo caso sarà necessario tracciare la relazione tra il requisito di A ed il requisito di B (sia nel caso di HLR che di LLR). 5.6.4.1.7 La tracciabilità La tracciabilità fissa la relazione tra i prodotti del processo di sviluppo, ciò comporta che 159 Ad esempio, nei LLR dovranno essere specificati anche i segnali scambiati tra le unità interagenti. 160 Ad esempio, se scorporare il requisito in caso d'uso e scenari alternativi possa comportare la descrizione del "come" , invece del "cosa". 126 ciascun ingresso di una fase dovrà essere posta in relazione con una specifica uscita di questa stessa fase. È questo un concetto tanto importante quanto critico, che deve essere affrontato fissando in maniera chiara quali siano i soggetti coinvolti in questa operazione. Rifacendoci all'approccio strutturato in livelli di astrazione, nell'ambito di questa fase del ciclo di sviluppo, contemporaneamente alla scrittura dei requisiti, sarà necessario: • Tracciare ciascuno requisito funzionale di sistema con i requisiti di interfaccia menzionati; • Tracciare ciascun requisito software di alto livello con il/i corrispondente/i requisiti di sistema da cui deriva; • Tracciare ciascun requisito software di alto livello con il/i requisiti di altri sottosistemi dei quali cita le azioni; • Tracciare ciascun requisito software di basso livello con il/i requisito/i software di alto livello da cui deriva; • Tracciare ciascun requisito software di alto livello con il/i requisiti di altri sottosistemi dei quali cita le azioni. Inoltre, in relazione al contesto in esame, distinguiamo la tracciabilità: • Orizzontale: i collegamenti tra requisiti allo stesso livello di astrazione tra i quali sussiste una relazione. • Verticale: collegamenti tra requisito "derivato" e requisito "sorgente" (ad esempio tra un requisito software di alto livello ed il requisito di sistema da cui deriva). 127 Esempi Esempio 1 Requisito originario: REQ_BRAKE_61 As above described when the train will depart, the following action will be provided (see document [2.11] for more details ): ATO release the Propulsion Cut Out (set High) and commands on MVB (dataset 707/708) Coasting and SHR_ATO_01 SLR_ATO_01 Propulsion Reset, the effort request is set to 0%. TCMS will command the Coasting (dataset 500) and set to 0 Service Brake bit. TCMS set high SHR_TCMS_01 SLR_TCMS_01 the braking Train Line (Cmd_Braking =1) -> service brake set OFF. BCU will send back the status of service and holding brake bits. ATO set traction bit =1 on MVB and Coasting and Propulsion Reset bit = 0 and set the effort request to SHR_ATO_02 SLR_ATO_02 50%. TCMS will replay the traction effort requested by ATO on MVB to BCU and TCU. SHR_TCMS_02 SLR_TCMS_02 If both TCU are active (no fault present), the TCMS will set high the stopping brake command (wired and low on MVB) at the same time when it requests traction effort. If one TCU is not able to provide effort, the TCMS will provide set high (wired and low on MVB) SHR_TCMS_03 SHR_TCMS_03_scen1 SHR_TCMS_03_scen2 SLR_TCMS_03_scen1 SLR_TCMS_03_scen2 the stopping brake when the total train traction effort applied will reach the 10% of the maximum ( 14 kN). 128 The minimum threshold applied effort value can be tuned during integration test with ATC system The BCU will release the brake cylinders and set 0 on MVB the Stopping Brake status. The BCU will use the SHR_BCU_01 SLR_BCU_01 wired or MVB stopping brake command to release the brakes. The train will start to move PASSAGGIO AI REQUISITI SOFTWARE DI ALTO E BASSO LIVELLO Frase originaria: ATO release the Propulsion Cut Out (set High) and commands on MVB (dataset 707/708) Coasting and Propulsion Reset, the effort request is set to 0%. ID: SHR_ATO_01 LINK a REQ_BRAKE_61 Nome: Traction release by ATO Input: Precondizioni: The train is departing Descrizione: ATO shall release the Propulsion Cut Out and shall command Coasting and Propulsion Reset. ATO shall set the effort request to 0% Output: Coasting and Propulsion Reset Postcondizioni: The effort request is set to 0% Tipologia: Functional ID: SLR_ATO_01 Link a SHR_ATO_01 (HLR) Nome: Traction release by ATO Input: Precondizioni: The train is departing Descrizione: ATO shall release the Propulsion Cut Out (set High) and shall command Coasting and Propulsion Reset on MVB (dataset 707/708). ATO shall set the effort request to 0% Output: Coasting and Propulsion Reset on MVB through dataset 707/708 Postcondizioni: The effort request is set to 0% 129 Tipologia: Functional Frase originaria: TCMS will command the Coasting (dataset 500) and set to 0 Service Brake bit. TCMS set high the braking Train Line (Cmd_Braking =1) -> service brake set OFF. BCU will send back the status of service and holding brake bits. ID: SHR_TCMS_01 LINK a REQ_BRAKE_61 Nome: Traction release by TCMS Input: Coasting and Propulsion Reset commands on MVB by ATC Precondizioni: Descrizione: TCMS shall command the Coasting, shall release the Service Brake , and shall set the braking Train Line to high (service brake set to OFF) Output: Coasting commanded, Service Brake released and Braking Train Line set to off. BCU shall send back the status of service and holding brake (Link a SHR_BCU_01) Postcondizioni: Tipologia: Functional ID: SLR_TCMS_01 Link a SHR_TCMS_01 (HLR) Nome: Traction release by TCMS Input: Coasting and Propulsion Reset commands on MVB by ATC through dataset 707/708 Precondizioni: SLR_ATO_1 satisfied TCMS shall command the Coasting (dataset 500), shall set the Service Brake bit to 0, and shall set the braking Train Line to high (service brake set to OFF) Output: Coasting ->1 on MVB, Service Brake ->0, Train Line ->1. BCU shall send back the status of service and holding brake (Link a SHR_BCU_01) Postcondizioni: Tipologia: Functional Frase originaria: ATO set traction bit =1 on MVB and Coasting and Propulsion Reset bit = 0 and set the effort request to 50%. ID: SHR_ATO_02 130 LINK a REQ_BRAKE_61 Nome: Traction command by ATO Input: Precondizioni: SHR_TCMS_01 satisfied Descrizione: ATO shall anable the Traction and disable Coasting and Propulsion and set the effort request to a value greater than 0%. Output: Effort Request to TCMS Postcondizioni: Traction enabled and Coasting/Propulsion disabled. Tipologia: Functional ID: SLR_ATO_02 Link a SHR_ATO_02 (HLR) Nome: Traction command by ATO Input: Precondizioni: Descrizione: ATO shall set traction bit =1 on MVB and Coasting and Propulsion Reset bit = 0 and set the effort request to 50%. Output: Effort Request = 50% to TCMS Postcondizioni: Traction bit =1, Coasting and Propulsion Reset bit=0 Tipologia: Functional Frase originaria: TCMS will replay the traction effort requested by ATO on MVB to BCU and TCU. ID: SHR_TCMS_02 LINK a REQ_BRAKE_61 Nome: Traction effort by TCMS Input: Traction effort by ATO Precondizioni: Descrizione: TCMS shall replay the traction effort requested by ATO to BCU and TCU. Output: Traction effort to BCU and TCU Postcondizioni: Tipologia:Functional ID: SLR_TCMS_02 131 Link a SHR_TCMS_02 (HLR) Nome: Traction effort by TCMS Input: Traction effort =50% by ATO Precondizioni: Descrizione: TCMS shall replay the traction effort requested by ATO on MVB through dataset 500 to BCU and TCU. Output: Traction effort = 50% on MVB through dataset 500 to BCU and TCU Postcondizioni: Tipologia:Functional Frase originaria: TCU will replay on dataset 401, 402 (ED_Actual) the applied effort. ID: SHR_TCU_01 LINK a REQ_BRAKE_61 Nome: Applied effort by TCU Input: Traction effort by TCMS Precondizioni: Descrizione: TCU shall replay the applied effort to the TCMS Output: Applied effort replayed to the TCMS Postcondizioni: Tipologia:Functional ID: SLR_TCU_01 Link a SHR_TCU_01 Nome: Applied effort by TCU Input: Traction effort =50% on MVB by TCMS Precondizioni: Descrizione: TCU shall replay on dataset 401, 402 (ED_Actual) the applied effort. Output: Applied effort via MVB on dataset 401, 402 (ED_Actual) Postcondizioni: Tipologia: Functional Frase originaria: If both TCU are active (no fault present), the TCMS will set high the stopping brake command (wired and low on MVB) at the same time when it requests traction effort. If one 132 TCU is not able to provide effort, the TCMS will provide set high (wired and low on MVB)the stopping brake when the total train traction effort applied will reach the 10% of the maximum ( 14 kN). The minimum threshold applied effort value can be tuned during integration test with ATC system ID: SHR_TCMS_03 Link a REQ_BRAKE_61 Nome: Set Stopping Brake command Input: TCUs conditions Precondizioni: Descrizione: The TCMS shall enable the Stopping Brake Output: Postcondizioni: Stopping Brake enabled Tipologia:Functional ID: SHR_TCMS_03_scenario1 Nome: TCUs are active Input: Precondizioni: TCUs are active (no fault condition) Descrizione:The TCMS shall set the stopping brake command to high at the same time when it requests traction effort. Output: Postcondizioni: Stopping Brake enabled Tipologia:Functional ID: SHR_TCMS_03_scenario2 Nome: One TCU is not active Input: Precondizioni: One TCU is not able to provide effort Descrizione: The TCMS shall enable the Stopping Brake when the total train traction effort applied will reach the fixed value of the maximum. The minimum threshold applied effort value can be tuned during integration test with ATC system Output: Stopping Brake enabled 133 Postcondizioni: Tipologia:Functional ID: SLR_TCMS_03_scenario1 Link a SHR_TCMS_03_scenario1 e REQ_BRAKE_61 Nome: TCUs are active Input: Precondizioni: TCUs are active (no fault condition) Descrizione:The TCMS shall set the stopping brake command to high (wired and low on MVB) at the same time when it requests traction effort. Output: Postcondizioni: Stopping Brake ->1 Tipologia:Functional ID:SHR_TCMS_03_scenario2 Link a SHR_TCMS_03_scenario2 e REQ_BRAKE_61 Nome: One TCU is not active Input: Precondizioni:One TCU is not able to provide effort Descrizione: The TCMS shall set the stopping brake to high (wired and low on MVB) when the total train traction effort applied will reach the 10% of the maximum (14 kN). The minimum threshold applied effort value can be tuned during integration test with ATC system Output: Stopping Brake ->1 Postcondizioni: Tipologia:Functional Frase orginiaria: The BCU will release the brake cylinders and set 0 on MVB the Stopping Brake status. The BCU will use the wired or MVB stopping brake command to release the brakes. The train will start to move ID: SHR_BCU_01 LINK a REQ_BRAKE_61 Nome: Train departure Input: Stopping Brake command by TCMS 134 Precondizioni: Descrizione: The BCU shall release the brake cylinders and shall release the Stopping Brake. The BCU shall release the brake. Output: Stopping Brake released Postcondizioni:Brakes released Tipologia:Functional ID: SLR_BCU_01 Link a SHR_BCU_01 Nome: Train departure Input: Stopping Brake ->1 by TCMS Precondizioni: Descrizione: The BCU shall release the brake cylinders and set 0 on MVB the Stopping Brake status. The BCU shall use the wired or MVB stopping brake command to release the brakes. Output: Stopping Brake ->0 on MVB Postcondizioni: Brakes released Tipologia:Functional Esempio 2 Requisito originario: REQ_BRAKE_13a In case of wheel sliding in traction or braking, the TCU SRH_TCMS_01 SRL_TCMS_01 or BCU (dataset 5x2) will inform about this condition the TCMS. BCU can also directly demand senders activation directly on MVB (dataset 5x3). SRH_BCU_01 SRL_BCU_01 In both cases TCMS will command the sanders in agreement 135 with train direction (Cmd_SandA/B->1) if the sliding is detected for more than 500ms in agreement with train direction or until the sand request is active. SRH_TCMS_01 SRL_TCMS_01 The sander activation will last until the above condition are active and will stop when the vehicle will reach the standstill condition (V <1km/h). The vehicle is equipped with sensors to monitor the sanding level of sanders (Sts_SandLev1/2 for each wheel side). Passaggio ai requisiti software di alto e basso livello: Frase originaria: In case of wheel sliding in traction or braking, the TCU or BCU (dataset 5x2) will inform about this condition the TCMS. BCU can also directly demand senders activation directly on MVB (dataset 5x3). ID: SHR_BCU_01 REQ_BRAKE_13a Nome: Wheel sliding in braking Input: Precondizioni:Wheel sliding in braking Descrizione: The BCU shall inform about this condition the TCMS. BCU could also directly demand senders activation. Output atteso:Wheel sliding information or sanders activation request sent to TCMS Postcondizioni: Tipologia:Functional/Safety ID: SLR_BCU_01 Link a SHR_BCU_01 (HLR) Nome: Wheel sliding in braking Input: Precondizioni:Wheel sliding in braking 136 Descrizione:The BCU (dataset 5x2) shall inform about wheel sliding condition the TCMS on MVB (dataset 502). BCU can also directly demand senders activation directly on MVB (dataset 5x3). Output atteso:Wheel sliding information sent to TCMS on MVB (dataset 5x2) or sanders activation request sent to TCMS on MVB through dataset 5x3 Postcondizioni: Tipologia: Functional/Safety frase originaria: In both cases TCMS shall command the sanders in agreement with train direction if the sliding is detected for more than a fixed value in ms or until the sand request is active. The sanders activation shall last until the above condition are active and shall stop when the vehicle shall reach the standstill condition. ID: SHR_TCMS_01 Link a REQ_BRAKE_13a (FRS) Nome: Wheel sliding in traction or braking Input: Wheel sliding information by TCU or BCU or sanders activation request by BCU Precondizioni: Descrizione: TCMS shall command the sanders in agreement with train direction if the sliding is detected for more than fixed value in ms in agreement with train direction or until the sand request is active. The sander activation shall last until the above condition are active and shall stop when the vehicle will reach the standstill condition. Output atteso:Sanders activation commanded Postcondizioni: Tipologia:Functional/Safety ID: SLR_TCMS_01 Link a SHR_TCMS_01 (HLR) Nome: Wheel sliding in traction or braking Input: Wheel sliding information by TCU or BCU on MVB through dataset 5x2 or sanders activation request by BCU on MVB through dataset 5x3. Precondizioni: 137 Descrizione: TCMS shall command the sanders in agreement with train direction (Cmd_SandA/B>1) if the sliding is detected for more than 500ms in agreement with train direction or until the sand request is active. The sander activation shall last until the above condition are active and shall stop when the vehicle will reach the standstill condition (V <1km/h). Output atteso:Sanders activation commanded. Postcondizioni: Tipologia: Functional/Safety Esempio 3 Requisito originario: REQ_PROP_06 During the train service TCMS will provide enable to run signal high also at each train station departure. If this signal is low, the ATC will not allow train SRH_TCMS_01 SRL_TCMS_01 ID: SRH_ATC_01 departure from stations. PASSAGGIO AI REQUISITI SOFTWARE DI ALTO E BASSO LIVELLO frase originaria: During the train service TCMS will provide enable to run signal high also at each train station departure. ID: SHR_TCMS_01 LINK a REQ_PROP_06 Nome: Enable to run signal Input: Precondizioni: Train in service and at each train station departure Descrizione: TCMS will provide enable to run to ATC. Output atteso: Enable to run sent to ATC Postcondizioni: 138 Tipologia:Functional ID: SLR_TCMS_01 Link a SHR_TCMS_01 (HLR) Nome: Enable to run signal Input: Precondizioni: Train in service Descrizione: During the train service TCMS shall provide enable to run signal high also at each train station departure to ATC on MVB through dataset 202 (active high). Output atteso:Enable to run signal high sent to ATC on MVB through dataset 202 (active high). Postcondizioni: Tipologia:Functional frase originaria: If this signal is low, the ATC will not allow train departure from stations. ID: SHR_ATC_01 Link a REQ_PROP_06 Nome: Enable to run signal Input: Enable to run by TCMS Precondizioni: Descrizione: The ATC shall command or shouldn't command the train departure from stations((Link a SHR_TCMS_01). Output atteso: Train departure commanded Postcondizioni: Tipologia: Functional ID: SLR_ATC_01 Link a SHR_ATC_01 Nome: Enable to run signal Input: Enable to run signal by TCMS on MVB through dataset 202 (active high) Precondizioni: Descrizione: If this enable to run signal is low, the ATC shouldn't allow train departure from stations. 139 Output atteso:Train departure commanded Postcondizioni: Tipologia:Functional Esempio 4 Requisito originario: REQ_PROP_10 In this case of TCU fault, the failed TCU will provide diagnostic SRH_TCU_1 SRL_TCU_1 information to TCMS on MVB (dataset 41X, X=1,2, Autoexlusion bit) and wired (TCU KO, PropA/B_flt active low). The TCMS will provide a diagnostic indication on EDC (Lmp_MajFlt->1). SRH_TCMS_01 SRL_TCMS_01 TCMS will also provide diagnostic information TCU_X Major Fault to ATC (dataset 201). In this case it shall be provide a passenger disembark procedure at the next station. TCU will also provide a life signal on MVB (dataset 43X). SRH_TCU_02 SRL_TCU_02 TCU will detect the HSCB status: if this one is not correctly closed, TCU won’t allow the propulsion. So if TCU is OK, after received the ATC readiness signal the TCMS will command the HSCB1 and HSCB2 to close SRH_TCMS_02 SRL_TCMS_02 (Cmd_HSCB1/2->1) (see document [2.8] for more details about TCMS closing commands. PASSAGGIO AI REQUISITI SOFTWARE DI ALTO E BASSO LIVELLO 140 frase originaria: In this case of TCU fault, the failed TCU will provide diagnostic information to TCMS on MVB (dataset 41X, X=1,2,Autoexlusion bit ) and wired (TCU KO, PropA/B_flt active low). ID: SHR_TCU_01 Link a REQ_PROP_10 Nome: TCU fault Input: Precondizioni:TCU fault Descrizione: The failed TCU shall provide diagnostic information to TCMS Output atteso:Diagnostic information to TCMS and wired Postcondizioni: Tipologia:Functional/Safety ID: SLR_TCU_01 Link a SHR_TCU_01 Nome: TCU fault Input: Precondizioni:TCU fault Descrizione: The failed TCU will provide diagnostic information to TCMS on MVB (dataset 41X, X=1,2,Autoexlusion bit ) and wired (TCU KO, PropA/B_flt active low). Output atteso:Diagnostic information sent to TCMS on MVB (dataset 41X, X=1, 2, Autoexlusion bit ) and wired (TCU KO, PropA/B_flt active low). Postcondizioni: Tipologia:Functional/Safety frase originaria: The TCMS will provide a diagnostic indication on EDC (Lmp_MajFlt->1). ID: SHR_TCMS_01 Link a REQ_PROP_10 141 Nome: Diagnostic information about TCU fault Input: Diagnostic information sent by TCU Precondizioni: Descrizione: The TCMS shall provide a diagnostic indication on EDC. Output atteso: Diagnostic indication on EDC Postcondizioni: Tipologia:Functional/Safety ID: SLR_TCMS_01 Link a SHR_TCMS_01 Nome: Diagnostic information about TCU fault Input: Diagnostic information sent by TCU on MVB (dataset 41X, X=1, 2, Autoexlusion bit ) and wired (TCU KO, PropA/B_flt active low). Precondizioni: Descrizione: The TCMS will provide a diagnostic indication on EDC (Lmp_MajFlt->1). Output atteso:Diagnostic indication on EDC (Lmp_MajFlt->1) Postcondizioni: Tipologia:Functional/Safety frase originaria: TCMS will also provide diagnostic information TCU_X Major Fault to ATC (dataset 201). In this case it shall be provide a passenger disembark procedure at the next station. ID: SHR_TCMS_02 LINK a REQ_PROP_10 Nome: Diagnostic information Input:Diagnostic Information sent by TCU Precondizioni: Descrizione: TCMS shall also provide diagnostic information to ATC. In this case it shall be command passenger disembark at the next station. Output atteso:Diagnostic information sent to ATC. Passenger disembark commanded 142 Postcondizioni: Tipologia:Functional/Safety ID: SLR_TCMS_02 Link a SHL_TCMS_02 Nome: Diagnostic information Input: Diagnostic informationsent on MVB (dataset 41X, X=1, 2, Autoexlusion bit ) and wired (TCU KO, PropA/B_flt active low) Precondizioni: Descrizione: TCMS will also provide diagnostic information TCU_X Major Fault to ATC (dataset 201). In this case it shall be provide a passenger disembark procedure at the next station. Output atteso:Diagnostic information TCU_X Major Fault to ATC on MVB through dataset 201. Passenger disembark procedure provided. Postcondizioni: Tipologia: Functional/Safety frase originaria: TCU will also provide a life signal on MVB (dataset 43X). TCU will detect the HSCB status: if this one is not correctly closed, TCU won’t allow the propulsion. ID: SHR_TCU_02 Link a REQ_PROP_10 Nome: HSCB status Input: HSCB status Precondizioni: Descrizione: TCU shall detect the HSCB status Output atteso: HSCB status detected Postcondizioni: Tipologia:Functional ID: SLR_TCU_02 Link a SHR_TCU_02 Nome: HSCB status 143 Input: HSCB status Precondizioni: Descrizione: TCU shall also provide a life signal on MVB (dataset 43X). TCU shall detect the HSCB status Output atteso:HSCB status detected Postcondizioni: Tipologia: Functional 144 5.7 IBM Rational DOORS: un tool per la Requirements Management IBM Rational DOORS è uno dei più diffusi tool di Requirements Management. Grazie alle funzionalità offerte e ad un’interfaccia web intuitiva, lo strumento consente ad un team di progetto di gestire e controllare requisiti complessi, per questo talvolta multi-livello, superando processi di revisione cartacei. Attraverso l’interazione con il Database del Server, DOORS consente ad un gruppo eterogeneo di utenti di poter lavorare sullo stesso progetto, condividendone i risultati. In questa sezione mostreremo in che modo adoperare il tool, in linea con le prescrizioni relative alla scrittura dei requisiti, con la loro scomposizione in livelli diversi di astrazione, con i criteri di tracciabilità orizzontale e verticale. Si è cercato di favorire l'utilizzo del tool DOORS, evidenziando in che misura una adeguata gestione dei requisiti possa comportare risultati tesi verso un maggior riuso e manutenibilità. Pertanto, è stata ideata una struttura di progetto, il Project Template, attualmete disponibile all’interno del DOORS Database (DOORS AnsaldoBreda), atto a contenere tutta la documentazione relativa ad un progetto. Infatti, esso presenta un insieme strutturato di sottocartelle, ciascuna relativa ad una sezione specifica del progetto ed alla quale le diverse figure coinvolte potranno accedere facilmente. Dunque, a partire dal capitolato tecnico, si è mostrato in che modo ottenere documenti di specifica dei requisiti di sistema, di specifica dei requisiti software di alto e basso livello, collegando in maniera opportuna gli oggetti per ottenere informazioni sulla tracciabilità, analisi di impatto. Creata una struttura di progetto, costituita da sei sezioni, ciascuna della quali atta a contenere una determinata tipologia di documenti, si è proceduto all'applicazione dei concetti illustrati nei precedenti paragrafi. 5.7.1 La struttura del progetto Il progetto è strutturato come un insieme di sezioni: 145 Illustrazione 51: DOORS: Il Project Template 00 – Norme Vigenti Contiene le normative vigenti a cui fare riferimento. 01- Links Contiene i moduli per realizzare i collegamenti tra requisiti, a diversi livelli, dai requisiti di sistema ai requisiti software, sino alla loro mappatura ai moduli ed ai casi di test. In particolare sono presenti i seguenti moduli: FRS_Links, SRS_Links, Moduli_Links, Test_Links. 02 – Contractual Documents Sezione contenente i documenti contrattuali del progetto, ovvero il capitolato tecnico, e le relative appendici, nonché una cartella con gli standard ed i documenti di riferimento. 03 – System Requirements Sezione contenente i requisiti per ogni sottosistema. Essa contiene le informazioni attualmente presenti negli FRS (prefisso EC), come Riepilogo Revisioni, Definizioni ed Acronimi, Standard di riferimento, System Architecture Description, Hardware Interface Description e requisiti non funzionali. I documenti presenti sono: System Requirements Specification, System Requirements Specification Test, System Functional Description, Links. 04 – Software Requirements Sezione contente i requisiti software per ogni sottosistema. Essa contiene i documenti di Software Requirements Specification, High Level Requirements, Low Level Requirements, Interface Requirements, Software Requirements Test Specification, Software Design Description, Software Modules, Software Test, Software Requiremetns Traceability Matrix. 05 – Project Management 146 Sezione contenente la documentazione necessaria alla gestione del progetto: Link, Attributi (di modulo e di oggetto) e Template. Ricordiamo che i concetti relativi alla gestione dei requisiti, discussi nella prima parte di questo capitolo, sono stati applicati al sottosistema TCMS del progetto MetroRiyadh. Il lavoro è stato svolto valutando le interazioni con: il sistema di propulsione, il sistema freno, il sistema High Voltage, il sistema Low Voltage. 5.7.2 Dal capitolato ai requisiti di sistema/veicolo Il punto di partenza del lavoro è stato l'insieme della documentazione dei requisiti funzionali di sistema (FRS – Functional Requirements Specification). Ciascuno di essi è stato importato in un documento DOORS, nominato FRS_nome_sistema, collocato nella sezione System Requirements del Project Template. In particolare, ad un documento siffatto è associato l'attributo "Descrizione", che conterrà, per ciascun requisito, la relativa descrizione. Un'importante osservazione riguarda la caratteristica del tool di associare automaticamente un identificativo161 (l'attributo ID) a ciascun oggetto del documento. Ciò consentirà di pervenire, senza alcuno sforzo, a requisiti numerati e numerabili. Illustrazione 52: Il campo descrizione di un documento FRS Pertanto, il primo passo compiuto ha riguardato l'individuazione delle voci del capitolato tecnico di MetroRiyadh162, dalle quali sono stati identificati alcuni requisiti di sistema. Non ci riferiamo a questi ultimi come requisiti funzionali, poichè alcuni di essi non presentano tale caratteristica. 161 Al momento della creazione del documento, per l'identificativo potrà essere selezionato il prefisso, al quale seguirà un valore numerico. Si potrà, naturalmente, decidere da quale valore associare, all'interno del documento, il primo oggetto. 162 Trattandosi di un esempio, la corrispondenza è stata trovata solo per un piccolo numero di voci. 147 Si noti che, come abbiamo già discusso, un certo numero di requisiti di sistema derivano da scelte progettuali prettamente aziendali, dettate dall'esperienza del dominio applicativo maturata. Pertanto: • sono state tracciate le corrispondenza tra gli oggetti del capitolato ed i requisiti di sistema. Illustrazione 53: Tracciabilità FRS_CapitolatoTecnico 5.7.3 Dai requisiti di sistema/veicolo agli HLR Seguendo le linee guida sulla stesura dei requisiti163 • è stato generato il documento dei requisiti di alto livello, inserito nella sezione Software Requirements della struttura del progetto; • sono stati inseriti i campi necessari alla strutturazione; • sono stati inseriti i requisiti di alto livello, numerati automaticamente dal tool; • sono stati tracciati i collegamenti orizzontali con i requisiti dello stesso livello, specializzando il link con l'attributo "DIPENDE DA"; • sono stati tracciati i collegamenti con il/i requisito/i relativo/i dei sistemi "interagenti" (cfr. § Interazione tra sottosistemi); • sono stati tracciati i collegamenti verticali con i requisiti di sistema da cui derivano, 163 Il documento è stato prodotto dall'Ing. Roberto Pietrantuono. 148 ricavando la corrispondente matrice di tracciabilità. Illustrazione 54: Estratto di una matrice di tracciabilità (riferimento verticale) 5.7.4 Dal requisito HL al requisito LL Come prescritto nelle linee guida: • è stato creato un documento dei requisiti di basso livello, inserito nella sezione Software Requirements; • sono stati creati i campi necessari alla ristrutturazione; • a partire dai requisiti di alto livello, sono stati specificati i requisiti di basso livello; • sono stati tracciati i collegamenti tra i requisiti LL ed i corrispondenti requisiti HL, ricavando la matrice di tracciabilità. Illus trazione 55: Matrice di tracciabilità HLR - LLR 5.7.5 Dai LLR ai Moduli Software I moduli software, così come i documenti relativi ai test effettuati, sono collocati in Subversion. Pertanto, per facilitare la creazione di link tra i requisiti software di basso livello e le rispettive implementazioni, è stato necessario: • creare un documento DOORS collocato nella sezione Software Requirements; 149 • nominare ogni oggetto con l'indirizzo web destinazione, in cui fosse reperibile il modulo software. Infatti, sfruttando la funzionalità del tool di creare link esterni, il modulo non perde il significato di "oggetto", che rappresenta l'unica entità con cui abbia senso creare collegamenti in DOORS. Dopodichè, si sono tracciati i collegamenti tra i requisiti software di basso livello ed i relativi moduli software che li implementano, ottenendo la matrice di tracciabilità. Illustrazione 56: Esempio di tracciabilità tra LH e Moduli software 5.7.6 Moduli Software e Test La sezione relativa ai test di modulo è disponibile in Subversion ed è costituita da File Test e dai relativi Report. Pertanto: • è stato creato un documento per ciascuna tipologia di file in Software Requirements; • come per i moduli software, si è pensato di nominare ogni oggetto con l'indirizzo web destinazione, in cui fosse reperibile il file test ed i Report ; • Dopodichè, si sono tracciati i collegamenti tra i moduli software ed i relativi moduli File Test che li verificano, ottenendo la relativa matrice di tracciabilità; • Ciascun Report è stato linkato al corrispondente File Test. 150 Illustrazione 57: Esempio di tracciabilità tra Modulo Software e File Test 151 Conclusioni Quanto mostrato in questo capitolo rappresenta il risultato della prima fase dell'Inizativa Software Finmeccanica svolta in AnsaldoBreda. Peraltro, nonostante le proposte siano state accettate, non risultano, allo stato, ancora validate dall'azienda. Di conseguenza, alcuni interventi potrebbero essere ancora rivisti per incontrare le esigenze aziendali. Per il momento, l'attività si conclude con la redazione di due documenti (le linee guida per la scrittura dei requisiti ed un manuale sulle modalità operative del tool DOORS) e con l'intento da parte dell'azienda di attuare gli interventi proposti nel prossimo progetto. In particolare, gli sforzi si concentreranno su di un sottosistema scelto dai sistemisti AnsaldoBreda. Come è stato già detto, gli interventi nel progetto MetroRiyadh sono stati operati a scopo esercitativo e dimostrativo, poichè, da un canto vi era la necessità del gruppo di lavoro di approfondire la conoscenza del dominio, dall'altro la necessità dell'azienda di comprendere, attraverso degli esempi, gli interventi proposti. Con il proseguimento dell'attività, nasceranno ulteriori esigenze ed opportunità che dovranno essere colte dall'azienda, al fine di migliorare il processo di sviluppo e, di conseguenza, il prodotto. 152 Appendice Scenari Gli scenari si differenziano in base al punto di vista considerato, pertanto, distinguiamo: • As-is scenario: la descrizione del sistema proviene dall'utente e riguarda una situazione corrente. Un esempio potrebbe essere lo scenario relativo al sistema (attuale) per l'emissione di biglietti ferroviari. • Visonary scenario: la definizione proviene dal cliente164, poichè è utilizzato per descrivere le prospettive future di un sistema già esistente. Infatti, di solito vienedescritto nel greenfield engineering o nel reengineering. Un esempio potrebbe essere lo scenario relativo al (nuovo) sistema per l'emissione di biglietti ferroviari. • Evaluation scenario: descrive i compiti che gli utenti dovrebbero svolgere utilizzando il sistema, poichè è proprio sulla base di questi che verrà valutato il sistema. Un esempio potrebbe essere lo scenario emettere un biglietto, oppure prenotare un treno. • Training scenario: descrivono passo dopo passo, come un utente possa interagire con il sistema. In effetti, rappresentano un tutorial per introdurre nuovi utenti al sistema. Un esempio potrebbe essere lo scenario che descrive come prenotare un treno. Suggerimenti per la scrittura dei casi d'uso 1) I nomi dei casi d’uso dovrebbero includere verbi; 2) I nomi di Attori dovrebbe essere sostantivi; 3) I confini del sistema dovrebbero essere chiari: chiara distinzione delle azioni svolte dall’attore e delle azioni svolte dal sistema; 4) Le relazioni causali tra passi successivi dovrebbero essere chiari; 5) Un caso d’uso dovrebbe descrivere una transazione utente completa; 6) Le eccezioni dovrebbero essere descritte separatamente; 7) Un caso d’uso non dovrebbe descrivere un interfaccia del sistema (meglio usare prototipi mock-up); 8) Un caso d’uso non dovrebbe superare due o tre pagine 164I Visionary scenario spesso non possono essere definiti dagli utenti e dagli sviluppatori. 153 Misure di qualità per la valutazione della specifia dei requisiti software (Standard IEEE 830) • correttezza: il requisito descrive ciò che ha richiesto il committente; • non ambiguità: il requisito si presta ad una sola interpretazione; • completezza (misura relativa ad un insieme di requisiti): l'insieme dei requisiti è completo, dunque, descrive tutti le richieste del committente165; • consistenza: ciascun requisito non deve essere in conflitto con altri; • classificazione: ciascun requisito deve essere classificato in base all'importanza che ha per il committente166 ed in base al livello di stabilità; • verificabilità: possibilità di verificare la corrispondenza del prodotto con il requisito; • modificabilità: possibilità di operare modifiche su di un requisito in modo semplice e coerente, senza impattare eccessivamente gli altri requisiri; • tracciabilità: l'origine di ogni requisito dovrà essere chiara, inoltre, dovrà essere possibile definire una corrispondenza tra il requisito in esame e gli altri requisiti, nonchè con i prodotti dello sviluppo. I dodici principi del software agile Elnchiamo di seguito i principi del Manifesto Agile [30]: 1. "Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage" Bisogna concentrare l'attenzione sulla qualità del software, intesa come capacità di soddisfare le aspettative del cliente, così da renderlo parte integrante del processo di sviluppo. 2. "Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage" Il progetto ed il codice sono impostati per ottenere un buon grado di adattabilità alle modifiche, piuttosto che rispecchiare la pianificazione del soddisfacimento di tutte le specifiche. 165Le richiste dell'utente riguardano funzionalità, performance, vincoli di progetto, i dati, le interfacce, ecc. 166La classificazione di un requisito in base all'importanza pone l'accento sul livello di soddisfazione del cliente in relazione alla sua implementazione. 154 3. "Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale" Il processo di sviluppo deve avere una natura incrementale ed iterativa, con un tempo basso di iterazione. Inoltre, il deliverable principale di ciascuna iterazione deve essere un programma funzionante, col quale l'utente potrà interagire. Le fasi del processo sono eseguite in tempi molto più brevi rispetto alle metodologie tradizionali; infatti, ci si concentrerà sulla risoluzione di pochi problemi, piccoli e ben definiti. Il team di sviluppo è in grado di produrre versioni del software in tempi ridotti, quindi i rilasci saranno più frequenti. 4. "Business people and developers must work together daily throughout the project" Non bisogna dividere in compartimenti stagni il lavoro del team di sviluppo e quello di chi gestisce altri aspetti del progetto, come il project management o la parte commerciale. 5. "Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done" Il compito di un manager è quello di arginare, o rimuovere, le cause che possano ostacolare lo svolgimento del lavoro. In pratica, egli deve ricoprire il ruolo di "facilitatore" che guida con autorevolezza il team. 6. "The most efficient and effective method of conveying information to and within a development team is face-to-face conversation" È necessario rimuovere le barriere che possano ostacolare la comunicazione tra i membri del team di sviluppo. 7. "Working software is the primary measure of progress" A differenza dei metodi tradizionali, i cui artefatti documentali rivestono un ruolo molto significativo nella misura dell'avanzamento del progetto, quello agile conferisce alla documentazione un valore che deriva dalla sua utilità alla comprensione del software. 8. "Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely" Non bisogna sovraccaricare il lavoro di ciascun componente del team, infatti ciò, a lungo 155 termine, pregiudica non solo la qualità del prodotto, ma anche il livello di produttività di ciascun individuo. 9. "Continuous attention to technical excellence and good design enhances agility" Di fondamentale importanza è il modo in cui viene progettato il software, che deve consentire di apportare modifiche facilmente. 10. "Simplicity--the art of maximizing the amount of work not done--is essential" La semplicità della progettazione è una delle caratteristiche alle quali viene data più importanza. 11. "The best architectures, requirements, and designs emerge from self-organizing teams" L'organizzazione del team deve essere informale e flessibile, piuttosto che organizzata in una rigida gerarchia. Il successo conseguibile è basato sull'idea di sfruttare al meglio le abilità, le competenze specifiche di ogni suo membro. In quest'ottica, il singolo non è facilmente intercambiabile, bensì è parte imprescindibile dall'insieme. 12. "At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly". È dalla reale esperienza del team che nascono le proposte di miglioramenti, aggiornamenti e modifiche al processo di sviluppo. SIL – Safety Integrity Level Il concetto di Livello di Integrità della Sicurezza (Safety Integrity Level) nasce in ambito industriale dalla necessità di migliorare l'affidabilità, la tolleranza ai guasti e la standardizzazione delle performance dei sistemi di sicurezza. Il raggiungimento di tali obiettivi richiede l'adozione di opportune misure di protezione per: • Eliminare o ridurre ad un livello accettabile la probabilità di un evento pericoloso; • Ridurre le conseguenze dell'evento, in termini di danni a persone, ambientali ed economici. Sulla scorta di queste considerazioni nasce la norma EN IEC 61508 del 1999 "Sicurezza funzionale dei sistemi elettrici, elettronici ed elettronici programmabili per applicazioni di sicurezza", recepita in Italia come CEI EN 61508, nasce la norma di sicurezza IEC 61508 la quale fornisce un approccio sistematico e metodico per analizzare i rischi 167 associati al processo, allo scopo di realizzare una strategia di riduzione del rischio. 167 I rischi associati al processo intermini di conseguenze e probabilità. 156 Lo standard IEC 61508 introduce il metodo SIL ed è suddiviso in sette sezioni: 1) Parte 1: Requisiti Generali 2) Parte 2: Requisiti per Dispositivi Elettrici, Elettronici, Elettronici Programmabili 3) Parte 3: Requisiti Software 4) Parte 4: Definizoni ed Abbreviazioni 5) Parte 5: Esempi di metodi per la determinazione dei livelli di integrità di sicurezza 6) Parte 6: Linee guida per lìapplicazione delle sezioni 2 e 3 7) Parte 7: Panoramica sulle tecniche e misure Esso interessa in particolar modo i produttori e fornitori dei componenti dei sistemi di sicurezza strumentale(SIS). Al concetto di SIS è legato quello di Funzione di Sicurezza Strumentale (SIF – Safety Instrumented Function), cioè la funzione di sicurezza (di protezione o di controllo) attuata da un SIS. Per ciascuna SIF è calcolata la probabilità di mancata o errata risposta – su domanda di intervento – in particolari condizioni, entro un tempo prestabilito. Si noti che il SIL è ralativo all singola funzione di sicurezza non all'intero impianto o ai singoli componenti che lo costituiscono. La norma EN IEC 61508 definisce quattro livelli ai quali è associato un margine di sicurezza via via crescente: SIL1, SIL2, SIL3, SIL4. Tabella 6: Livelli di SIL nella norma EN IEC 61508 SIL Probabilità media di fallimento su domanda per anno (bassa domanda)168 SIL4 ≥ 10-5 e <10-4 SIL3 ≥ 10-4 e <10-3 SIL2 ≥ 10-3 e <10-2 SIL1 ≥ 10-2 e <10-1 Strumenti di supporto alla progettazione in AnsaldoBreda Issue Tracker utilizzato per gestire le attività relative ai progetti sviluppati in AnsaldoBreda, assegnare task a singoli di un team di progetto, tracciare le anomalie, qualora riscontrate, sino alla risoluzione. 168 Indica la probabilità di non riuscire ad eseguire la funzione di protezione richiesta. 157 Piattaforma non strutturata che consente la costruzione, con il contributo degli utenti, una repository dinamica della conoscenza aziendala. Viene adoperata per oganizzare la documentazione dei progetti sviluppati in AnsaldoBreda in pagine accessibili per mezzo di un browswr http. Lo scopo dell'utilizzo dello strumento è la condivisione delle informazioni tra i componenti del team di progetto. Sistema di controllo versione169, adoperato in AndaldoBreda per gestire le configurazioni del software e la configurazioni dei documenti ad esso relativi. Sistema opensource per praticare la continuous integration. Viene adoperato in AnsaldoBreda per la creazione degli eseguibili e delle directory di installazione degli applicativi automatica su di un server di rete e per la creazione automatica dei report relativo alle modifiche apportate al codice tra due release consecutive. Tool di gestione dei test, viene adoperato in AnsaldoBreda per: progettare ed eseguire test cases, automatici e manuali; generare automaticamente report dii test; per creare lo storico delle prove eseguite e misurare la test coverage170. Norme adottate in AnsaldoBreda CEI EN 50126 Il riferimento principale in tema di valutazione della sicurezza in campo ferroviario è dato dalla Norma Europea EN 50126 – Applicazioni ferroviarie - Specificazione e Dimostrazione di Affidabilità, Disponibilità, Manutenibilità e Sicurezza (RAMS) con particolare considerazione ai concetti di Categorie Qualitative di Rischio e di Matrice dei Rischi (combinazione delle valutazioni su frequenza e conseguenze connesse con i diversi rischi) [39]. CEI EN 50128 Normativa che specifica le procedure ed i requisiti tecnici per lo sviluppo del software in applicazioni ferroviarie 169 Il controllo versione è la gestione di versioni multiple di un insieme di informazioni 170 La test coverage indica la parte di codice coperta da test. 158 CEI EN 50129 Normativa che specifica le procedure ed i requisiti tecnici per lo sviluppo di sistemi elettronici per il segnalamento ferroviario. Le normative CEI EN 50128 e 50129 forniscono dettagli rispetto ai criteri da applicare ai processi di: • Formazione del presonale; • Gestione della sicurezza; • Gestione della qualità; • Specifica dei requisiti di sistema; • Definizione dell'architettura di sistema; • Definizione delle caratteristiche progettuali; • Progettazione; • Valutazione degli effetti dei guasti; • Verifica e validazione. 159 Bibliografia [1] Alan Mark Davis, A. M. Davis, 1993, Software Requirements: Objects, Functions and States, Prentice Hall [2] FURPS http://www.federica.unina.it/smfn/ingegneria-del-software-smfn/ingegneria-requisiti/13/ [3] Ian Sommerville, I. Sommerville, 2007, Software Engineering 8th edition, Addison Wesley [4] Ian Sommerville, I. Sommerville, 2001, Software Engineering, 6th edition, Addison Wesley [5] N. E. Fenton and S. L. Pfleeger, 1997,Software Metrics, a rigorous approach, second edition, PWS publishing company, 1997. [6] ISO 9000 http://it.wikipedia.org/wiki/Norme_della_serie_ISO_9000 [7] P. Zave, 1997, "Classification of Research Efforts in Requirements Engineering", ACM Computing Surveys 29 [9] ISO/IEC 9126 Software engineering – Product quality [10] A.Davis, The Art of Requirements Triage, IEEE Computer 36 [11] A. van Lamsweerde, 2000, "Requirements Engineering in the Year 00: A Research Perspective" in Proceedings of the International Conference of Software Engineering ICSE’00, Limerick [12] E.Hull, K.Jackson, J Dick, 2011, Requirements Engineering, Springer [13] J.C.S.P, Leite,1996, "Viewpoints on Viewpoints", in ACM Joint Proceedings of the SIGSOFT'96 Workshops [14] Viewpoints http://home.dei.polimi.it/ghezzi/_PRIVATE/Colazzo_i-star_final.pdf [15] M. Carrol, 1995, Scenario-based Design, Wiley [16] Jacobson, "Object- Oriented software Engineering. A Use Case Driven Approach" [17] Chirone, Tornincasa, Disegno Tecnico Industriale, Edizione il Capitello [18] N.D'Addea, G.Perotti, 2005, Manuale di manutenzione industriale, Tecniche Nuove [19] Roger S. Pressman, 2008, Ingegneria del software, McGraw Hill [20] Martin Fowler , The New Methodology, http://www.martinfowler.com/articles/newMethodology.htm [21]Kent Beck, 2000, EXtreme Programming Explained: Embrace Change, Addison Wesley Longman Publishing Co. [22] Kent Beck, 1999, Extreme Programming Explained [23] J. Stapleton, 1997, DSDM Dynamic systems development method, Harlow, England: AddisonWesley [24] K.Schwaber, M. Beedle, 2002, Agile Software Development with SCRUM, Prentice Hall [25] Palmer, J. Felsing, 2002, A Pratical Guide to Feature-Driven Development 160 [26] Cockburn, 2001, Agile Software Development [27] Highsmith, 2000, Adaptative Software Development: A Collaborative Approach to Managing Complex System, Dorse House Publishing [28] Ambler, 2002, Agile Modeling [29] Agile Alliance http://agilealliance.org [30] Manifesto del movimento Agile http://agilemanifesto.org/ [31] M. Fowler, 1999, Refactoring : Improving the Design of Existing Code, Addison-Wesley [32] C. G. Cobb, 2011, Making Sense of Agile Management, Balancing Control and Agility, John Wiley & Sons Ltd. [33] Lean Software Development http://it.wikipedia.org/wiki/Lean_software_development [34] D. Turk, R. France and B. Rumpe, 2002," Limitations of agile software processes", Proceedings of 3rd International Conference on eXtreme Programming and Agile Processes in Software Engineering, May 2002, ACM, USA, pp:1-4, [35] M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts, Fowler et al., 1999, Refactoring: Improving the Design of Existing Code, Addison Wesley [36] AnsaldoSTS http://www.ansaldosts.com/AnsaldoSTS/IT/Business/MassTransit/CBTC_based/args/detail/details~ projects~project_detail_0000048.shtml/type/web_project/index.sdo [37] Linee guida per la scrittura dei requisiti http://www.tecnetdati.com/azienda/risorse/tutorial/gestione-dei-requisiti.html#linguida [38] RB/EUROCAE ED-12B Software Considerations in Airborne Systems and Equipment Certification http://www.turma-aguia.com/davi/avionics/TheAvionicsHandbook_Cap_27.pdf [39] Osservazioni sulla normativa EN 50126 http://www.mit.gov.it/mit/mop_all.php?p_id=05324 161 162