163
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

Metodologie e strumenti dell'Ingegneria dei Requisiti ... Daria Capuano_885_223.pdf · Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica tesi di laurea specialistica

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Facoltà di IngegneriaCorso di Studi in Ingegneria Informatica

tesi di laurea specialistica

Metodologie e strumenti dell'Ingegneria dei Requisiti della piattaforma MLA

Anno Accademico 2010/2011

relatoreCh.mo Prof. Stefano Russo

correlatoreCh.mo Ing. Roberto Pietrantuono

candidatoEmanuela Daria Capuanomatr. 885/223

i

A chi mi ha indicato la strada, tenendomi per mano.

A mia madre e mio padre

ii

Indice generaleMetodologie e strumenti dell'Ingegneria dei Requisiti della piattaforma MLA...................................1Introduzione..........................................................................................................................................7Capitolo 1...........................................................................................................................................101. I requisiti.........................................................................................................................................10

1.1 Pseudo requisiti...................................................................................................................111.2 Requisiti funzionali.............................................................................................................111.3 Requisiti non funzionali......................................................................................................12

1.3.1 Requisiti non funzionali di Prodotto.......................................................................141.3.1.1 Usability Requirements..............................................................................161.3.1.2 Efficency Requirements.............................................................................161.3.1.3 Reliability Requirements............................................................................161.3.1.4 Portability Requirements............................................................................17

1.3.2 Process Requirements.............................................................................................171.3.2.1 Requisiti di consegna.................................................................................171.3.2.2 Requisiti di implementazione.....................................................................181.3.2.3 Standards Requirements ............................................................................18

1.3.3 Requisiti Esterni.....................................................................................................181.4 Requisiti di dominio............................................................................................................181.5 Considerazioni ...................................................................................................................191.6 I requisiti utente e di sistema...............................................................................................201.7 Requisiti di interfaccia........................................................................................................211.8 La scrittura dei requisiti......................................................................................................221.9 Documento dei requisiti......................................................................................................241.10 La qualità del software......................................................................................................27

1.10.1 Lo standard ISO....................................................................................................28Capitolo 2...........................................................................................................................................32Requirements Engineering.................................................................................................................32

2.1 I rischi.................................................................................................................................322.2 L'ingegneria dei requisiti: definizioni ed attività................................................................342.3 Studio di fattibilità..............................................................................................................382.4 Elicitazione ed analisi dei requisiti.....................................................................................39

2.4.1 La scoperta dei requisiti..........................................................................................422.4.1.1 Sorgenti di informazioni.............................................................................422.4.1.2 Ingegneria dei requisiti basata sui punti di vista........................................432.4.1.3 Tecniche di elicitazione dei requisiti..........................................................44

2.4.1.3.1 Le interviste...................................................................................442.4.1.3.2 Scenari di interazione e casi d'uso.................................................45

2.4.1.3.2.1 Considerazioni sui casi d'uso.............................................492.4.2 L'analisi...................................................................................................................51

2.5 Specifica dei requisiti..........................................................................................................512.6 La tracciabilità dei requisiti.................................................................................................532.7 Convalida dei requisiti........................................................................................................562.8 La gestione dei requisiti......................................................................................................58

Capitolo 3...........................................................................................................................................61Sistemi emdebbed e metodologie di sviluppo....................................................................................61

3.1 Caratteristiche dei sistemi embedded..................................................................................63

iii

3.2 Vincoli dei sistemi embedded.............................................................................................653.3 I requisiti di un sistema embedded......................................................................................66

3.3.1 I requisiti funzionali................................................................................................663.3.2 Requisiti temporali ................................................................................................673.3.3 Requisiti di affidabilità...........................................................................................673.3.4 Consumo.................................................................................................................683.3.5 Prestazioni..............................................................................................................683.3.6 Costo.......................................................................................................................68

3.4 Lo sviluppo dei sistemi embedded......................................................................................683.4.1 Il modello di sviluppo a cascata.............................................................................693.4.2 Un approccio di tipo evolutivo...............................................................................743.4.3 Modello a V............................................................................................................75

3.4.3.1 Le fasi del modello a V..............................................................................76Capitolo 4...........................................................................................................................................79Le metodologie agili...........................................................................................................................79

4.1 Il processo Agile..................................................................................................................814.2 Il Manifesto Agile...............................................................................................................824.3 Alcune metodologie agili....................................................................................................834.4 Metodologie tradizionali vs Metodologie agili...................................................................84

Capitolo 5...........................................................................................................................................89La piattaforma Metropoolitana Leggera Automatica di AnsaldoBreda: un caso di studio................89

5.1 MLA....................................................................................................................................905.1.1 Generalità sui componenti della piattaforma..........................................................92

5.2 Il ciclo di sviluppo...............................................................................................................945.2.1 Planning..................................................................................................................955.2.2 Requirements Specification....................................................................................965.2.3 Architecture and Design.........................................................................................975.2.4 Module Design and Implementation......................................................................985.2.5 Analisi Statica.......................................................................................................1005.2.6 Module Testing.....................................................................................................1015.2.7 Integration and Validation Testing........................................................................1025.2.8 Release .................................................................................................................1035.2.9 Gestione della configurazione del software.........................................................104

5.3 Analisi del processo di sviluppo........................................................................................1055.4 Problematiche connesse alla piattaforma MLA................................................................1065.5 MetroRiyadh: un caso di studio........................................................................................108

5.5.1 Studio della documentazione esistente.................................................................1095.5.2 Specifica................................................................................................................1105.5.3 Verifica e validazione dei requisiti........................................................................1115.5.4 Tracciabilità e gestione dei cambiamenti..............................................................111

5.6 Interventi...........................................................................................................................1125.6.1 I requisiti software................................................................................................1125.6.2 I livelli di astrazione.............................................................................................1125.6.3 I requisiti di interfaccia.........................................................................................1145.6.4 La scrittura dei requisiti........................................................................................117

5.6.4.1 Linee guida per la scrittura dei requisiti...................................................1175.6.4.1.1 Strutturazione del requisito software...........................................1185.6.4.1.2 Osservazioni.................................................................................1195.6.4.1.3 Software High Level Requirements.............................................1205.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............1255.6.4.1.6 Interazioni con altri sottosistemi..................................................1265.6.4.1.7 La tracciabilità.............................................................................126

Esempi.....................................................................................................................................128Esempio 1......................................................................................................................128Esempio 2......................................................................................................................135Esempio 3......................................................................................................................138Esempio 4......................................................................................................................140

5.7 IBM Rational DOORS: un tool per la Requirements Management.................................1455.7.1 La struttura del progetto.......................................................................................145

5.7.2 Dal capitolato ai requisiti di sistema/veicolo..............................................1475.7.3 Dai requisiti di sistema/veicolo agli HLR...................................................1485.7.4 Dal requisito HL al requisito LL.................................................................1495.7.5 Dai LLR ai Moduli Software......................................................................1495.7.6 Moduli Software e Test...............................................................................150

Conclusioni.............................................................................................................................152Appendice.........................................................................................................................................153

Scenari.....................................................................................................................................153Suggerimenti per la scrittura dei casi d'uso.............................................................................153

Misure di qualità per la valutazione della specifia dei requisiti software (Standard IEEE 830)154I dodici principi del software agile.........................................................................................154SIL – Safety Integrity Level....................................................................................................156Strumenti di supporto alla progettazione in AnsaldoBreda....................................................157Norme adottate in AnsaldoBreda............................................................................................158

Bibliografia.......................................................................................................................................160

Indice delle illustrazioniIllustrazione 1: Esempio di requisito funzionale................................................................................12Illustrazione 2: Classificazione dei requisiti non funzionali .............................................................14Illustrazione 3: Misure dei requisiti non funzionali...........................................................................15Illustrazione 4: Esempio di requisito di usabilità...............................................................................16Illustrazione 5: Esempio di requisiti di sistema..................................................................................21Illustrazione 6: Modello di qualità ISO/IEC 9126.............................................................................29Illustrazione 7: Valutazione della maturità del processo....................................................................30Illustrazione 8: Attività dell'ingegneria dei requisiti..........................................................................32Illustrazione 9: Evasione dei progetti IT nell'anno 2009 secondo una stima dello Standish Group. .33Illustrazione 10: Principali cause di fallimento di un progetto...........................................................34Illustrazione 11: Modello a spirale dell'Ingegneria dei Requisiti.......................................................35Illustrazione 12: Le fasi del processso di ingegneria dei requisiti......................................................38Illustrazione 13: Il processo di deduzione ed analisi dei requisiti......................................................41Illustrazione 14: Processo di ricerca dei requisiti...............................................................................42Illustrazione 15: Casi d'uso e ciclo di vita del software.....................................................................48Illustrazione 16: Esempio di matrice di tracciabilità (orizzontale).....................................................54Illustrazione 17: Tracciabilità Pre-RS e Post-RS................................................................................55 Illustrazione 18: Mutabilità dei requisiti nel tempo......................................................................58Illustrazione 19: Evoluzione controllata dei requisiti.........................................................................60Illustrazione 20: Incidenza percentuale dei sistemi emebedded sul costo complessivo dei prodotti. 62Illustrazione 21: Fasi dello sviluppo software secondo il modello a cascata.....................................70Illustrazione 22: Metodologia di sviluppo per sistemi embedded......................................................71Illustrazione 23: Partizionamento HW/SW........................................................................................72

v

Illustrazione 24: Costo necessario per risolvere bug durante il CVS.................................................72Illustrazione 25: Sviluppo di sistemi embedded basati su piattaforma..............................................73Illustrazione 26: Metodologia di sviluppo software a spirale............................................................74Illustrazione 27: Modello a V.............................................................................................................76Illustrazione 28: Fasi dei modelli iterativi..........................................................................................80Illustrazione 29: Fasi del waterfall model..........................................................................................80Illustrazione 30: Fasi del processo di sviluppo Agile.........................................................................82Illustrazione 31: Piattaforma MLA....................................................................................................92Illustrazione 32: Architettura del TCMS............................................................................................93Illustrazione 33: Modello a V adoperato dall'AnsaldoBreda..............................................................94Illustrazione 34: Planning e Project Review......................................................................................95Illustrazione 35: Requirements Specification.....................................................................................96Illustrazione 36: Requirements Review..............................................................................................97Illustrazione 37: Archietecture and Design........................................................................................98Illustrazione 38: Module Design and Implementation.......................................................................99Illustrazione 39: Detailed Design Review........................................................................................100Illustrazione 40: Analisi Statica........................................................................................................101Illustrazione 41: Module Testing......................................................................................................102Illustrazione 42: Integration and Validation Testing.........................................................................103Illustrazione 43: Release...................................................................................................................104Illustrazione 44: Configuration Review...........................................................................................105Illustrazione 45: Esempio di requisito funzionale di sistema di MetroRiyadh................................109Illustrazione 46: Esempio di requisito software...............................................................................109Illustrazione 47: Processo di definizione dei requisiti......................................................................114Illustrazione 48: Esempio di requisito di interfaccia di comunicazione: Dataset 500......................116Illustrazione 49: Esempio di requisito di sistema.............................................................................120Illustrazione 50: Esempio di "sovra-specifica" nel requisito software.............................................121Illustrazione 51: DOORS: Il Project Template.................................................................................146Illustrazione 52: Il campo descrizione di un documento FRS..........................................................147Illustrazione 53: Tracciabilità FRS_CapitolatoTecnico....................................................................148Illustrazione 54: Estratto di una matrice di tracciabilità (riferimento verticale)..............................149Illustrazione 55: Matrice di tracciabilità HLR - LLR.......................................................................149Illustrazione 56: Esempio di tracciabilità tra LH e Moduli software...............................................150Illustrazione 57: Esempio di tracciabilità tra Modulo Software e File Test....................................151

Indice delle tabelleTabella 1: Destinatari del documento dei requisiti.............................................................................24 Tabella 2: Protitype SRS outline................................................................................................25Tabella 3: La struttura di un documento dei requisiti.........................................................................26Tabella 4: Metodologia a cascata vs Agile (SCRUM)........................................................................85Tabella 5: Luoghi comuni sugli approcci a cascata e Agile...............................................................86Tabella 6: Livelli di SIL nella norma EN IEC 61508.......................................................................157

vi

6

IntroduzioneNel 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 requisitiIl 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 utente3, che

rappresentano l'entità (bisogni/necessità dello stakeholder4) 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 stakeholder4 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 requisitiUna 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' implementazione7,

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 funzionaliI 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

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 funzionaliI 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

Illustrazione 1: Esempio di requisito funzionale

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

1.3.1 Requisiti non funzionali di ProdottoUn 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

Illustrazione 2: Classificazione dei requisiti non funzionali

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.

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

Illustrazione 3: Misure dei requisiti non funzionali

Usabilità, Efficienza, Affidabilità, Portabilità sono le principali caratteristiche richieste ad un

prodotto.

1.3.1.1 Usability RequirementsI 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.

1.3.1.2 Efficency RequirementsL'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 RequirementsLa 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

Illustrazione 4: Esempio di requisito di usabilità

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 RequirementsI 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 RequirementsAltra 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 consegnaI 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 implementazioneI 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 EsterniCosì 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 dominioI 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 requisiti26 termina con la redazione di un documento, il

Software Requirements Specification, il quale dovrebbe mostrare caratteristiche di completezza27 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 funzionali29,

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 sistemaI 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 utente31 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

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 interfacciaSolitamente, 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

Illustrazione 5: Esempio di requisiti di sistema

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 requisitiSebbene i requisiti utente possano essere espressi in un linguaggio naturale35, 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" "Le scarpe devono essere indossate"

"Dogs must be carried" " 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 requisitiLa 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 Overview2. Overall description 2.1 Product prospective 2.2 Product functions 2.3 User characteristics 2.4 Assumption and dependencies3. Specific Requirements AppendixesIndex

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 softwarePer 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 ISOLa 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

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 6: Modello di qualità ISO/IEC 9126

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

Illustrazione 7: Valutazione della maturità del processo

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

2.1 I rischiIl 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

Illustrazione 8: Attività dell'ingegneria dei requisiti

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.

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 9: Evasione dei progetti IT nell'anno 2009 secondo una stima dello Standish Group

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 real-

world 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

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 flessibile43 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

Illustrazione 11: Modello a spirale dell'Ingegneria dei Requisiti

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 ampio44 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 raffinamenti45 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à.

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

Illustrazione 12: Le fasi del processso di ingegneria dei requisiti

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 requisitiNella 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 stakeholder49

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 sistema52

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.

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

Illustrazione 13: Il processo di deduzione ed analisi dei requisiti

2.4.1 La scoperta dei requisitiLa 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.

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 informazioniPer 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

Illustrazione 14: Processo di ricerca dei requisiti

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 vistaLa 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 attori55 (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 requisitiDefinito 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 intervisteLe 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'usoL'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.

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

Illustrazione 15: Casi d'uso e ciclo di vita del software

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'usoFino 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'analisiUna 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 requisitiLo 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.

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

Illustrazione 16: Esempio di matrice di tracciabilità (orizzontale)

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.

73 Un esempio di tool di gestione dei requisiti è IBM Rational DOORS.

55

Illustrazione 17: Tracciabilità Pre-RS e Post-RS

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 test75, 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.

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

Illustrazione 18: Mutabilità dei requisiti nel tempo

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.

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

Illustrazione 19: Evoluzione controllata dei requisiti

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 sviluppoUn 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.

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

Illustrazione 20: Incidenza percentuale dei sistemi emebedded sul costo complessivo dei prodotti

è 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 embeddedPer 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 funzionaliI 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 cascataIl 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

70

Illustrazione 21: Fasi dello sviluppo software secondo il modello a cascata

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.

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

Illustrazione 22: Metodologia di sviluppo per sistemi embedded

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.

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 23: Partizionamento HW/SW

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.

73

Illustrazione 25: Sviluppo di sistemi embedded basati su piattaforma

Illustrazione 24: Costo necessario per risolvere bug durante il CVS

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 evolutivoNei 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.

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

Illustrazione 26: Metodologia di sviluppo software a spirale

• 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 VLaddove 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.

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

Illustrazione 27: Modello a V

3.4.3.1 Le fasi del modello a V1) 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 agiliL'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.

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

Illustrazione 29: Fasi del waterfall model

Illustrazione 28: Fasi dei modelli iterativi

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

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

Illustrazione 30: Fasi del processo di sviluppo Agile

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 agiliQuello 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 agiliNel 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 Agile (esempio SCRUM)

Definizione dei requisiti Requisiti dettagliati, definiti prima

dell'avvio del Design e dello Sviluppo

Definizone di alto livello del

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 Il controllo del contenuto è essenziale per

controllare i costi ed i tempi

(schedulazione)

Il contenuto può cambiare ed

aumentare, in modo da soddisfare le

esigenze del cliente

Approccio al Project

Management

Enfasi sul controllo di costi e tempi Enfasi sulla flessibilità ed

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 AgileTroppa 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 MLALa 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 rotaiache 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

5.1.1 Generalità sui componenti della piattaformaLa 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

Illustrazione 31: Piattaforma MLA

Per mezzo di uno scambio di dati124 con sistemi quali la ATC125 , l'OBS126 e l'IDU, ecc.

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 scesidal 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

Illustrazione 32: Architettura del TCMS

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 sviluppoLa 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.

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

Illustrazione 33: Modello a V adoperato dall'AnsaldoBreda

5.2.1 PlanningLa 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.

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

Illustrazione 34: Planning e Project Review

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.

96

Illustrazione 35: Requirements Specification

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 36: Requirements Review

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

Illustrazione 37: Archietecture and Design

individuati; il codice viene generato automaticamente attaverso Matlab/Simulink136 .

136 Matlab è un linguaggio di programmazione per applicazioni scientifiche e numeriche. Simulink è un ambiente grafico di simulazione di sistemi complessi.

99

Illustrazione 38: Module Design and Implementation

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 39: Detailed Design Review

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 40: Analisi Statica

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 41: Module 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

Illustrazione 42: Integration and Validation Testing

Verification Report.

5.2.9 Gestione della configurazione del softwareAl 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 43: Release

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

Illustrazione 44: Configuration Review

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 MLALa 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;

• ricavare i relativi requisiti software come "copia" dei requisiti di sistema di provenienza.

5.5.1 Studio della documentazione esistente

Documenti analizzati:

Manuale del Processo di Sviluppo del Software

109

Illustrazione 46: Esempio di requisito software

Illustrazione 45: Esempio di requisito funzionale di sistema di MetroRiyadh

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 requisitiLo 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 InterventiA 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 softwareI 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 astrazioneLa 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.

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 interfacciaI 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

Illustrazione 47: Processo di definizione dei requisiti

• 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

116

Illustrazione 48: Esempio di requisito di interfaccia di comunicazione: Dataset 500

5.6.4 La scrittura dei requisitiLa 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 softwareL'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 OsservazioniSecondo 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

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 49: Esempio di requisito di sistema

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

Illustrazione 50: Esempio di "sovra-specifica" nel requisito software

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 RequirementsLa 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 requisitiUn 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 sottosistemiUn 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

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

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

50%.

TCMS will replay the traction effort requested by

ATO on MVB to BCU and TCU.

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)

the stopping brake when the total train traction effort

applied will reach the 10% of the maximum ( 14 kN).

128

SHR_ATO_01 SLR_ATO_01

SHR_TCMS_01SLR_TCMS_01

SHR_ATO_02SLR_ATO_02

SHR_TCMS_02SLR_TCMS_02

SHR_TCMS_03 SHR_TCMS_03_scen1 SHR_TCMS_03_scen2SLR_TCMS_03_scen1 SLR_TCMS_03_scen2

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

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

SHR_BCU_01SLR_BCU_01

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

or BCU (dataset 5x2) will inform about this condition

the TCMS.

BCU can also directly demand senders activation

directly on MVB (dataset 5x3).

In both cases TCMS will command the sanders in agreement

135

SRH_TCMS_01SRL_TCMS_01

SRH_BCU_01SRL_BCU_01

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 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

SRH_TCMS_01 SRL_TCMS_01

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

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

SRH_TCMS_01SRL_TCMS_01

ID: SRH_ATC_01

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_10In 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).

The TCMS will provide a diagnostic indication on

EDC (Lmp_MajFlt->1).

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).

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

(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

SRH_TCU_1SRL_TCU_1

SRH_TCMS_01 SRL_TCMS_01

SRH_TCU_02SRL_TCU_02

SRH_TCMS_02SRL_TCMS_02

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

f rase 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

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

Illustrazione 51: DOORS: Il Project Template

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.

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

Illustrazione 52: Il campo descrizione di un documento FRS

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.

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

Illustrazione 53: Tracciabilità FRS_CapitolatoTecnico

ricavando la corrispondente matrice di tracciabilità.

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à.

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

Illustrazione 54: Estratto di una matrice di tracciabilità (riferimento verticale)

Illustrazione 55: Matrice di tracciabilità HLR - LLR

• 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à.

5.7.6 Moduli Software e TestLa 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 56: Esempio di tracciabilità tra LH e Moduli software

151

Illustrazione 57: Esempio di tracciabilità tra Modulo Software e File Test

ConclusioniQuanto 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

ScenariGli 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'uso1) 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 agileElnchiamo 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 LevelIl 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 rischi167 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 domandaper 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 AnsaldoBredaCEI 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 informazioni170 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: Addison-

Wesley

[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.sd o

[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