Il Processo e gli Stakeholder

L'ingegneria dei requisiti è un processo iterativo articolato in quattro fasi fondamentali, il cui scopo è assicurare che il software sviluppato risolva i veri problemi del cliente.

Il Processo a 4 Fasi
  • 1. Elicitazione (Scoperta): Scoprire e raccogliere i requisiti parlando con gli stakeholder. La sfida principale è che gli esperti di dominio fanno fatica ad articolare conoscenze per loro "ovvie".
  • 2. Specifica: Trasformare le idee in documenti. A causa dell'ambiguità del linguaggio naturale, si usano specifiche strutturate (es. tabelle condizionali) o si fa riferimento a Standard industriali (es. IEEE 830, template VOLERE).
  • 3. Convalida (Validation): Assicurarsi che i requisiti siano coerenti, realistici e verificabili prima di scrivere codice. Si usano revisioni, prototipazione e Generazione di test-case.
  • 4. Gestione (Management): Tracciare e valutare i costi e gli impatti dei cambiamenti ai requisiti.
Stakeholder Complessi

Non si ascoltano solo gli utenti finali. Uno Stakeholder è chiunque abbia un interesse legittimo nel sistema.

  • Visibili: Chi usa il sistema quotidianamente (es. in un sistema medico: pazienti, medici, infermieri).
  • Strutturali: Chi è coinvolto indirettamente ma detta le regole (es. IT staff per le compatibilità, manager dell'etica medica, responsabili normativi/legali).

Approcci, Tipi di Requisiti e Anti-Pattern

I due approcci: Agile vs Plan-based

Sebbene Agile domini lo sviluppo moderno, i metodi guidati dai piani (Plan-based) restano obbligatori per sistemi critici o grandi appalti governativi, dove i requisiti sono contratti rigidi suddivisi in:

User Requirements

Scritti in linguaggio naturale o diagrammi, sono rivolti direttamente ai clienti.

System Requirements

Specifiche tecniche dettagliatissime per gli sviluppatori (System Architect), che fissano funzioni e vincoli operativi.

Funzionali vs Non Funzionali
  • Requisiti Funzionali: Descrivono i servizi offerti dal sistema, le reazioni agli input e cosa il sistema non deve fare.
  • Requisiti Non Funzionali: Vincoli sul sistema globale. Si classificano in:
    • Prodotto: Velocità, Usabilità (FURPS+).
    • Organizzativi: Policy aziendali (es. usare Git, Docker).
    • Esterni: Rispetto delle leggi (es. GDPR, privacy medica HStan-03), Interoperabilità.
Regola d'oro: I requisiti non funzionali devono sempre essere verificabili usando specifiche Metriche: transazioni/secondo (Speed), tempo di apprendimento (Usability), o Mbytes massimi (Size).

Anti-Pattern (Come NON scrivere i requisiti)

Errori semantici che costano caro in fase di sviluppo e manutenzione:

La Trappola dell'Or

L'uso di "oppure" rende il requisito ambiguo e impossibile da testare deterministicamente.

Sbagliato
"Il sistema deve generare un segnale visivo O uditivo"
Corretto (Atomico)
"1. Deve generare un segnale visivo"
"2. Deve generare un segnale uditivo"
Il Mostro dell'And

Fondere funzioni slegate viola il principio del requisito atomico (una sola funzione alla volta).

Sbagliato
"Accendere la luce E salvare il database"
Corretto
Scrivere due requisiti separati, da tracciare individualmente.
Dettagli Implementativi

Prescrivere l'hardware o la UI (il come) anziché definire l'obiettivo (il cosa).

Sbagliato
"Usare font 14pt Swiss su schermo LCD"
Corretto (Obiettivo)
"Il testo deve essere leggibile da 1 metro di distanza"

User Stories e Criteri INVEST

Le User Stories sono il formato preferito dalle metodologie Agile per catturare i requisiti. Sono descrizioni brevi, scritte dal punto di vista dell'utente finale.

Il template classico per una User Story è:

Il Template della User Story
"Come ruolo o persona,
voglio obiettivo o azione,
affinché ragione, beneficio o valore"

Per essere considerata di alta qualità e pronta per lo sviluppo, una User Story dovrebbe rispettare l'acronimo INVEST introdotto da Bill Wake:

I
Independent

La storia dovrebbe essere completabile in modo indipendente dalle altre, per facilitare la ripianificazione.

N
Negotiable

Una User Story non è un contratto rigido, ma un promemoria per avviare una conversazione tra il team e il Product Owner.

V
Valuable

Deve consegnare un reale valore di business all'utente o al cliente finale. Non ci sono storie puramente "tecniche" senza un beneficio tangibile.

E
Estimable

Il team deve avere abbastanza informazioni (e la storia non deve essere troppo grande) per poter stimarne la complessità (ad esempio in Story Points).

S
Small

Deve essere sufficientemente piccola da poter essere completata entro una singola iterazione (Sprint). Se è troppo grande (una Epic), va suddivisa.

T
Testable

Devono esistere criteri chiari per stabilire quando la storia è completata in modo soddisfacente (Criteri di Accettazione).

Esempi Pratici (Da un simulatore City Builder)

US 1: Creazione mappa
User Story

"Come giocatore, voglio inizializzare una mappa logica a griglia, affinché io possa avere uno spazio dedicato per gestire la crescita della mia città."

Criteri di Accettazione
  • Viene visualizzata una griglia vuota di dimensioni 50x40 al momento dell'avvio della simulazione.
  • Ogni cella della griglia deve poter ospitare un'entità o essere vuota.
US 2: Costruzione entità
User Story

"Come giocatore, voglio poter costruire diversi tipi di entità come edifici o strade, affinché io possa sviluppare la mia città."

Criteri di Accettazione
  • L'utente può posizionare un oggetto (edificio o strada) solo cliccando su una cella attualmente vuota.
  • L'interfaccia permette di selezionare e distinguere visivamente tutte le categorie richieste (Residenziale, Industriale, Commerciale, Centrale elettrica, parco, strada).
  • Il sistema impedisce il posizionamento e non modifica lo stato se la cella selezionata è già occupata.
US 3: Sistema filtro visivo della mappa
User Story

"Come giocatore, voglio poter applicare diversi filtri visivi alla mappa, affinché possa analizzare rapidamente lo stato dei servizi e i problemi delle varie zone senza dover cliccare sui singoli edifici."

Criteri di Accettazione (Stile BDD)
AC 1: Mappa inquinamento
  • Dato che sulla mappa sono presenti zone con differenti livelli di inquinamento,
  • Quando il giocatore attiva il "Filtro Inquinamento",
  • Allora il sistema deve evidenziare le zone della mappa con una scala cromatica proporzionale al valore di inquinamento.
AC 2: Mappa collegamenti idrici e elettrici
  • Dato che la città contiene edifici collegati e non collegati alle centrali di base,
  • Quando il giocatore attiva il "Filtro Collegamenti",
  • Allora il sistema deve evidenziare chiaramente gli edifici serviti dalle centrali.

Behavior Driven Development (BDD), Gherkin e Criteri di Accettazione

I Criteri di Accettazione stabiliscono i confini di una User Story e i requisiti minimi di qualità. Il Behavior-Driven Development (BDD) incoraggia a scrivere questi criteri nel formato Gherkin, un linguaggio strutturato (Given-When-Then) che funge da ponte tra le logiche di business e l'automazione dei test.

Sintassi Gherkin
  • Given (Dato): Definisce le precondizioni o lo stato iniziale del sistema prima dell'azione dell'utente.
    Es: "Dato che l'utente ha degli articoli nel carrello..."
  • When (Quando): Descrive l'azione principale che l'utente compie o l'evento che si verifica.
    Es: "Quando l'utente clicca sul pulsante 'Procedi al pagamento'..."
  • Then (Allora): Descrive il risultato atteso o le postcondizioni verificabili.
    Es: "Allora viene mostrata la pagina di checkout sicura."
  • And / But (E / Ma): Permettono di concatenare più clausole per mantenere la leggibilità.
Definition of Done (DoD)

Superare i criteri di accettazione Gherkin non è sufficiente per dichiarare una User Story finita. Deve anche rispettare la Definition of Done del team di sviluppo.

  • In ambienti maturi e critici si applica una Stringent DoD, che obbliga il codice a rispettare vincoli ingegneristici ferrei, come: Code Coverage dei test unitari superiore all'85%, Zero errori nei controlli degli standard di codifica (Linting), nessuna introduzione di Debito Tecnico non giustificato e superamento di test di penetrazione automatici.

Casi d'Uso (Use Cases Formali)

A differenza delle brevi User Stories, per i sistemi complessi o plan-based bisogna conoscere l'anatomia di uno Use Case Formale strutturato.

Anatomia dello Use Case
  • Attori: Entità esterne (persone, timer, o altri sistemi IT) che interagiscono col sistema.
  • Trigger: L'evento scatenante che avvia l'interazione.
  • Pre-condizioni: Lo stato certificato in cui deve trovarsi il sistema prima che il caso possa iniziare.
  • Normal Flow (Flusso Base / Happy Path): La sequenza ottimale di interazioni in cui tutto procede senza intoppi e l'obiettivo viene raggiunto.
  • Flussi Alternativi ed Eccezioni: Percorsi varianti e gestione degli errori (es. "Cosa succede se la carta di credito viene rifiutata?").
  • Post-condizioni: Garanzie sullo stato del database e del sistema alla conclusione del caso.

L'Aiuto dell'IA (TuringBots)

Nell'ingegneria dei requisiti moderna, l'Intelligenza Artificiale Generativa e i TuringBots stanno colmando il divario di comunicazione tra business e tecnici.

Applicazioni AI nell'Analisi
  • Simulatore di Stakeholder: I modelli LLM possono assumere il ruolo ("persona") di specifici utenti finali per evidenziare bisogni o edge cases che gli umani non avevano considerato.
  • Analisi Semantica: I TuringBots analizzano decine di requisiti testuali per individuare "Bad smells" (come la Trappola dell'Or), ambiguità o conflitti di logica.
  • Generazione Automatica Gherkin: A partire dalla trascrizione di un meeting, l'AI è in grado di estrarre autonomamente le User Stories e abbozzarne i Criteri di Accettazione in sintassi Given-When-Then pronta per l'automazione dei test.
02 · Ciclo di Vita 04 · Architettura