Specifica (ingegneria del software)
Il termine specifica, nell'ingegneria del software, viene usato in diversi contesti con significati diversi. In genere si può definire come un accordo tra un produttore di servizi ed un utente. A seconda del contesto il produttore e l'utente saranno diversi.
Il termine specifica, nell'ingegneria del software, viene usato in diversi contesti con significati diversi. In genere si può definire come un accordo tra un produttore di servizi ed un utente. A seconda del contesto il produttore e l'utente saranno diversi.
Specifica dei requisiti
Si avrà una specifica dei requisiti tra sviluppatore e committente o utente finale, una specifica di progetto tra progettista e implementatore e una specifica di modulo tra i programmatori che hanno prodotto il modulo e programmatore che lo integra.
La Specifica dei Requisiti è usata per
Definire le necessità dell'utente
Definire le caratteristiche del sistema implementato
Comprendere il sistema nelle attività di manutenzione
La fase di specifica dei requisiti è molto critica, se i requisiti non prendono in esame alcuni aspetti il progetto rischierebbe degli inutili ritardi e inevitabili manutenzioni.
Per questo motivo è necessario effettuare la validazione della specifica, ossia sottoporla alla approvazione dell'utente.
Non esiste un unico modo di scrivere una specifica
Dipende dalla tipologia del sistema
Dipende dal livello di formalità
Dipende dallo stile di specifica che si vuole adottare
Caratteristiche della specifica
Una specifica deve essere
Chiara, precisa e comprensibile
Coerente
Completa
Chiarezza
L'uso della lingua naturale (come l'italiano, l'inglese, ...) fa sì che spesso le qualità di chiarezza, precisione e comprensibilità non siano presenti.
Tipicamente c'è la tendenza ad essere imprecisi.
L'uso di tecniche formali consente di scoprire le ambiguità.
Ci sono formule diverse che definiscono lo stesso comportamento informale.
Coerenza
La coerenza è l'assenza di contraddizioni.
Più il sistema è complesso più è facile che vi siano delle inconsistenze.
L'uso di tecniche formali può permettere l'individuazione di inconsistenze.
Completezza
La completezza riguarda la presenza di tutte le informazioni necessarie ad una corretta comprensione. Vi sono due tipi di completezza:
Interna
Rispetto ai requisiti
Una specifica è internamente completa se definisce tutti i concetti di cui fa uso e si può ottenere mediante l'uso di glossari.
La completezza rispetto ai requisiti richiede che tutti gli aspetti siano definiti.
Se il sistema è complesso un approccio incrementale può essere utile.
Linguaggi di specifica
Le specifiche possono essere poste in maniera formale o in maniera informale.
Le specifiche informali fanno uso di linguaggio naturale per descrivere i requisiti. Possono essere utilizzati diagrammi e tabelle per aumentare le informazioni. La sintassi e la semantica non sono formalmente definite.
Le specifiche formali usano linguaggi che hanno sintassi e semantica definite in modo formale e sono usate principalmente per sistemi safety-critical. Consentono animazione, simulazione e verifica di proprietà. Esistono anche le specifiche semiformali:
Fanno uso di sintassi formalmente definita, ma la semantica è informale
Molto spesso sono linguaggi grafici
La seconda distinzione è tra specifiche operazionali e specifiche descrittive. La prima descrive il sistema desiderato specificando il comportamento desiderato, fornendo di solito un modello del sistema, le seconde esprimono le proprietà desiderate in modo puramente dichiarativo.
Notazioni
Data Flow Diagram
Semiformale, operazionale
Efficace per descrivere le funzionalità di un sistema
Tipico del mondo dei Sistemi Informativi
Macchine a stati finiti
Formale, operazionale
Descrive gli stati in cui un sistema può trovarsi e le transizioni di stato
Molto usato per i protocolli di telecomunicazione, interfacce, etc
Diagrammi entità-relazioni
Formale, Descrittivo
Permette di descrivere i dati gestiti da un sistema e le loro relazioni
È usatissimo dai databasisti
UML
Un insieme di notazioni grafico/testuali che permette di specificare-progettare i sistemi
Adotta una filosofia orientata agli oggetti
È lo standard attuale degli sviluppatori di software
Reti di Petri
Formale, operazionale
Adatto alla specifica di sistemi concorrenti
Descrive gli stati in cui un sistema (concorrente) può trovarsi
Estensioni per i sistemi in tempo reale
MCMX
