La relazione di estensione collega un caso d'uso di estensione con un caso d'uso di base. E' possibile definire in che
punto della base inserire l'estensione facendo riferimento ai punti di estensione nel caso d'uso di base (consultare Linee guida per il prodotto di lavoro: Caso d'uso, la discussione sui punti di
estensione). Il caso d'uso di estensione è spesso astratto, ma non è necessario che lo sia.
Si possono utilizzare le estensioni per diversi scopi:
-
Per mostrare che una parte di un caso d'uso è una funzionalità del sistema facoltativa o potenzialmente
facoltativa. In questo modo, all'interno del modello, si separa la funzionalità facoltativa dalla funzionalità
obbligatoria.
-
Per mostrare che un flusso secondario viene eseguito solo in determinate condizioni (a volte eccezionali), come
l'attivazione di un allarme.
-
Per mostrare che vi può essere una serie di segmenti di funzionalità di cui uno o diversi segmenti possono essere
inseriti presso un punto di estensione in un caso d'uso di base. I segmenti di funzionalità inseriti (e l'ordine in
cui vengono inseriti) dipenderanno dall'interazione con gli attori durante l'esecuzione del caso d'uso di base.
L'estensione è condizionata, il che significa che l'esecuzione è dipendente dalle attività svolte durante l'esecuzione
del caso d'uso di base. Il caso d'uso di base non controlla le condizioni per l'esecuzione dell'estensione - le
condizioni sono descritte all'interno della relazione di estensione. Il caso d'uso di estensione può accedere e
modificare gli attributi del caso d'uso di base. Tuttavia, il caso d'uso di base non può rilevare le estensioni e non
può accedere ai relativi attributi.
Il caso d'uso di base viene modificato implicitamente dalle estensioni. Inoltre, è possibile affermare che il caso
d'uso di base definisce un framework modulare in cui le estensioni vengono aggiunte, ma la base non dispone di alcuna
visibilità sulle estensioni specifiche.
Il caso d'uso di base dovrebbe essere già autonomamente completo, il che vuole dire che dovrebbe essere comprensibile e
significativo senza alcun riferimento alle estensioni. Tuttavia, il caso d'uso di base non è indipendente dalle
estensioni, poiché non può essere eseguito senza la possibilità di seguire le estensioni.
Esempio:
I casi d'uso Effettua chiamata di conferenza e Mostra identità chiamante sono entrambe estensioni del caso d'uso di
base Effettua chiamata.
In un sistema telefonico, il servizio principale fornito agli utenti è rappresentato dal caso d'uso Effettua chiamata.
Esempi di servizi opzionali:
E' possibile rappresentare le funzionalità richieste per questi servizi facoltativi come casi d'uso di estensione del
caso d'uso di base Effettua chiamata. Si tratta di un uso corretto della relazione di estensione: poiché la funzione
Effettua chiamata è già significativa, non è necessario leggere le descrizioni dei casi d'uso di estensione per
comprendere lo scopo primario del caso d'uso di base e i casi d'uso di estensione hanno caratteri facoltativi.
Se sia per il caso d'uso di base che per il caso d'uso "base più estensione" è necessario creare l'istanza in modo
esplicito oppure se si desidera aggiungere la modifica della funzionalità nel caso d'uso di base, invece occorre
utilizzare la generalizzazione del caso d'uso (consultare Linee
guida per il prodotto di lavoro: Generalizzazione del caso d'uso).
Il caso d'uso di estensione può essere composto da uno o più segmenti di inserimento, con ciascun segmento che può
avere percorsi alternativi incorporati. Questi segmenti di inserimento modificano in modo incrementale la funzionalità
del caso d'uso di base. Ciascun segmento di inserimento in un caso d'uso di estensione può essere inserito in una
diversa posizione del caso d'uso di base. Ciò significa che la relazione di estensione dispone di un elenco di
riferimenti ai punti di estensione, di numero pari al numero dei segmenti di inserimento nel caso d'uso di estensione.
Ciascun punto di estensione deve essere definito nel caso d'uso di base.
Un caso d'uso di base è costituito da diverse relazioni di estensione, il che significa che l'istanza di un caso d'uso
può seguire più di un'estensione durante il relativo ciclo di vita. Un caso d'uso di estensione può estendersi in
diversi casi d'uso di base, ma ciò non implica una dipendenza tra i casi d'uso di base. Possono esistere anche più
relazioni di estensione tra lo stesso caso d'uso di estensione e il caso d'uso di base, a patto che l'estensione sia
inserita in diverse posizioni nella base. Ciò significa che le diverse relazioni di estensione devono fare riferimento
a diversi punti di estensione nel caso d'uso di base. Lo stesso caso d'uso di estensione può essere la base in una
relazione di estensione, inclusione o generalizzazione. Ad esempio, questo vuol dire che i casi d'uso di estensione
possono estendere altri casi d'uso di estensione in una modalità nidificata.
Quando l'istanza di un caso d'uso che esegue il caso d'uso di base raggiunge una posizione in quest'ultimo in cui è
stato definito un punto di estensione, viene valutata la condizione presente sulla corrispondente relazione di
estensione. Se la condizione è true o non presente, l'istanza del caso d'uso seguirà l'estensione (o il segmento di
inserimento in essa che corrisponde al punto di estensione). Se la condizione della relazione di estensione è false,
l'estensione non viene eseguita.
Il caso d'uso di estensione può avere, come tutti i casi d'uso, un flusso di eventi base e flussi di eventi alternativi
(consultare Linee guida per il prodotto di lavoro: Caso d'uso, la discussione sulla struttura
del flusso di eventi). Stabilire quale preciso percorso l'istanza del caso d'uso utilizzerà attraverso l'estensione
dipende dalle azioni avute prima dell'esecuzione (lo stato dell'istanza del caso d'uso) e anche da quelle
nell'interazione con gli attori quando l'estensione è stata eseguita. Una volta che l'istanza del caso d'uso ha
eseguito l'estensione, l'istanza ripristina l'esecuzione del caso d'uso di base nel punto in cui l'ha lasciata.
L'istanza di un caso d'uso che segue un caso d'uso di base e la relativa estensione.
Un caso d'uso di estensione può avere più di un segmento di inserimento, ciascuno associato al proprio punto di
estensione nel caso d'uso di base. Se questo è lo scenario, l'istanza del caso d'uso ripristinerà il caso d'uso di base
e continuerà al successivo punto di estensione specificato nella relazione di estensione. A quel punto eseguirà il
successivo segmento di inserimento del caso d'uso di estensione. Ciò viene ripetuto finché l'ultimo segmento di
inserimento è stato eseguito. Si noti che la condizione per la relazione di estensione viene controllata solo al primo
punto di estensione - se la condizione è true, l'istanza del caso d'uso deve eseguire tutti i segmenti di inserimento.
L'istanza di un caso d'uso che segue un caso d'uso di base e un caso d'uso di estensione, il secondo con due segmenti
di inserimento.
La molteplicità della relazione di estensione limiterà il numero di ripetizioni dell'intera estensione che si
potrebbero verificare. Si noti che è l'intera estensione che viene ripetuta (e limitata dalla molteplicità) non
soltanto un segmento di inserimento.
Descrivere la condizione dell'estensione in termini di attributi del caso d'uso di base. E' anche possibile omettere la
condizione; in tal caso l'estensione verrà sempre eseguita.
Ciascuna relazione di estensione ha un elenco di riferimenti ai punti di estensione (uno o più) nel caso d'uso di base.
I punti di estensione vengono indicati per nome. Se il caso d'uso di estensione ha più segmenti di inserimento, è
necessario specificare quali segmenti corrispondono ai punti di estensione. Inoltre, è necessario specificare quali
fasi o flussi secondari del caso d'uso di estensione costituiscono ciascun segmento di inserimento.
Esempio:
In un sistema telefonico, il caso d'uso Effettua chiamata può essere esteso dal caso d'uso astratto Mostra identità
chiamante. Si tratta di un servizio facoltativo, spesso indicato come "ID chiamante", che può essere stato o meno
richiesto dall'interlocutore ricevente. Una descrizione della relazione di estensione da Mostra identità chiamante a
Effettua chiamata può essere simile al seguente:
Condizione: L'interlocutore ricevente deve avere ordinato il servizio "ID chiamante".
Punto(i) di estensione: Mostra identità - inserire tutto il caso d'uso Mostra identità chiamante.
E' possibile fornire una molteplicità alla relazione di estensione; se viene omessa la molteplicità assume il valore
uno.
Si prenda in considerazione il seguente sistema telefonico semplice:
Il caso d'uso astratto Effettua chiamata di conferenza è un'estensione del caso d'uso Effettua chiamata.
In questo modello, una semplice rappresentazione del nostro sistema telefonico familiare, il servizio base di chiamata
è descritto nel caso d'uso Effettua chiamata. Una descrizione dettagliata del flusso di eventi base può essere simile
al seguente:
-
Il chiamante solleva il ricevitore.
-
Il sistema presenta il segnale di libero.
-
Il chiamante compone un numero.
-
Il sistema disattiva il segnale di libero.
-
Il chiamante immette il resto del numero.
-
Il sistema analizza le cifre e determina l'indirizzo di rete dell'interlocutore ricevente.
-
Il sistema analizza le cifre, determinando l'ubicazione all'interno della rete dove è presente l'interlocutore
ricevente.
-
Il sistema quindi determina se è possibile stabilire un circuito virtuale con l'interlocutore ricevente.
-
Se è possibile stabilire un circuito virtuale, il sistema attiva lo squillo del telefono dell'interlocutore
ricevente e presenta il segnale di chiamata sul telefono del chiamante.
-
Quando l'interlocutore ricevente risponde al telefono, il sistema disabilita il segnale di chiamata sul telefono
del chiamante, arresta lo squillo sul telefono dell'interlocutore ricevente e completa il circuito virtuale.
-
Il sistema avvia un record di fatturazione, registrando l'orario d'inizio della chiamata, i punti finali della
chiamata e le informazioni sul cliente del chiamante.
-
La chiamata continua secondo la propria durata. Quando il chiamante o l'interlocutore ricevente si disimpegna dalla
chiamata, il sistema registra l'orario di fine della chiamata e libera tutte le risorse richieste per supportare il
circuito virtuale. Il caso d'uso quindi termina.
Per aggiungere funzionalità a questo sistema che consentirebbe al chiamante o all'interlocutore ricevente di collegare
terze parti alla chiamata (definito spesso "chiamata di conferenza"), è necessario aggiungere una funzione al flusso di
eventi. Un'alternativa (la prima che si prende in esame) è di inserire le differenze direttamente nel caso d'uso
Effettua chiamata. E' possibile modellare queste differenze utilizzando dei flussi di eventi alternativi, come
descritto in Linee guida per il prodotto di lavoro: Caso d'uso. Questa soluzione si adatta alla
maggior parte delle aggiunte semplici, dove la funzionalità aggiunta non confonderà o nasconderà il significato
originale del caso d'uso. L'altra alternativa è di separare le differenze all'interno di un caso d'uso di estensione
astratto definito Effettua chiamata di conferenza che estende il caso d'uso di base.
Il caso d'uso Effettua chiamata avrà la seguente aggiunta:
Punti di estensione:
Chiamata di conferenza si verifica dopo la fase 11.
Il caso d'uso di estensione, Effettua chiamata di conferenza, può quindi essere descritto come:
Caso d'uso Effettua chiamata di conferenza
Questo caso d'uso estende Effettua chiamata. Viene inserito nel punto di estensione Chiamata di
conferenza.
Flusso base:
1. Il chiamante preme e rilascia il pulsante di interruzione, collegamento o flash.
2. Il sistema genera 3 brevi segnali acustici di conferma.
3..12.<queste fasi sono identiche alle fasi 3..12 del caso d'uso di base>
13. Il chiamante è ricollegato all'interlocutore ricevente dal caso d'uso Effettua chiamata.
L'associazione delle fasi 3..12 con il caso d'uso base non è desiderata. Un modo per risolvere questo problema è
di estrarre la parte comune come caso d'uso di inclusione (consulare Linee guida
per il prodotto di lavoro: Relazione di inclusione).
|