Linea guida: Relazione di estensione
La relazione di estensione collega un caso d'uso di estensione con un caso d'uso di base. Questa linea guida descrive come utilizzare questa relazione.
Relazioni
Descrizione principale

Spiegazione

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:

Diagramma descritto nel testo di accompagnamento.

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:

  • La possibilità di aggiungere terze parti a una chiamata (Effettua chiamata di conferenza).

  • Permettere all'interlocutore ricevente di vedere l'identità del chiamante (Mostra identità chiamante).

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.

Esecuzione dell'estensione

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.

Diagramma descritto nel testo di accompagnamento.

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.

Diagramma descritto nel testo di accompagnamento.

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.

Documentazione della relazione di estensione Inizio pagina

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.

Esempio di uso

Si prenda in considerazione il seguente sistema telefonico semplice:

Diagramma descritto nel testo di accompagnamento.

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:

  1. Il chiamante solleva il ricevitore.
  2. Il sistema presenta il segnale di libero.
  3. Il chiamante compone un numero.
  4. Il sistema disattiva il segnale di libero.
  5. Il chiamante immette il resto del numero.
  6. Il sistema analizza le cifre e determina l'indirizzo di rete dell'interlocutore ricevente.
  7. Il sistema analizza le cifre, determinando l'ubicazione all'interno della rete dove è presente l'interlocutore ricevente.
  8. Il sistema quindi determina se è possibile stabilire un circuito virtuale con l'interlocutore ricevente.
  9. 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.
  10. 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.
  11. 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.
  12. 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).