4.2 Progettazione basata su contratto
4.2.3 Strumenti
Ocra
Ocra (Othello Contracts Refinement Analysis) (Cimatti et al., 2013a) è un nuo-vo strumento che fornisce supporto automatizzato per la progettazione basata su contratto con logiche temporali. Il linguaggio di specifica consente di esprimere sia vincoli discreti che vincoli metrici in tempo reale. In Ocra, ma più in generale negli approcci di progettazione basati sul contratto, un componente è compatibi-le con l’architettura se i suoi contratti sono soddisfatti sia dall’ambiente che dal componente.
Lo strumento consente il controllo della composizione delle specifiche graduale. Nel raffinamento graduale, i componenti e le specifiche sono scomposti, il che significa che la correttezza di una specifica dipende dai suoi raffinamenti. Ocra consente di verificare se la scomposizione è valida, generando un insieme di dimostrazioni, come spiegato in Cimatti and Tonetta (2012a), cioè un insieme di formule logiche temporali, soddisfacibili se e solo se il il raffinamento del contratto è corretto (Vedere la Sezione 5.4 per ulteriori dettagli).
Ocra prende come input una descrizione testuale del sistema, cioè le interfac-ce dei componenti, i raffinamenti, le connessioni, i contratti e la scomposizione dei contratti. I contratti sono specificati in Othello (Cimatti et al., 2013b), che è un lin-guaggio di facile utilizzo che descrive le formule temporali. I contratti possono essere interpretati su tracce temporali discrete o tracce ibride. Di default, la composizione del sistema è sincrona, ma è anche possibile la composizione asincrona. La figura 4.2 mostra un esempio di una specifica di sistema.
Inoltre, al momento solo per l’interpretazione discreta delle tracce, gli utenti possono fornire implementazioni Smv di componenti foglia e verificare se soddisfano il loro contratto. Ciò consente il riutilizzo dei componenti in quanto la prova del raffinamento è valida per qualsiasi implementazione che soddisfa il contratto delle foglie. In modo da verificare le implementazioni, Ocra è integrato con NuXmv.
Possiamo riassumere le principali funzionalità di Ocra come segue.
• Verifica dei raffinamenti dei contratti - Lo strumento visita in modo ricorsivo tutti i componenti del sistema, generando dimostrazioni per ciascun contrat-to e poi verificando se sono tutti validi. Se non è valido, viene fornicontrat-to un controesempio per ciascuna dimostrazione non valida.
• Verifica dell’implementazione - Dato un componente foglia, Ocra controlla se la corrispondente specifica Smv soddisfa i contratti del componente foglia.
COMPONENT example1 system INTERFACE
INPUT PORT in_data: boolean; OUTPUT PORT out_data: boolean; CONTRACT reaction
assume: in the future in_data;
guarantee: always (in_data implies in the future out_data); REFINEMENT
SUB a: A; SUB b: B;
CONNECTION a.in_data := in_data; CONNECTION b.in_data := a.out_data; CONNECTION out_data:= b.out_data;
CONTRACT reaction REFINEDBY a.reaction, b.pass; COMPONENT A
INTERFACE
INPUT PORT in_data: boolean; OUTPUT PORT out_data: boolean; CONTRACT reaction
assume: in the future in_data;
guarantee: always (in_data implies in the future out_data); COMPONENT B
INTERFACE
INPUT PORT in_data: boolean; OUTPUT PORT out_data: boolean; CONTRACT pass
assume: true;
guarantee: always (in_data implies out_data);
• Stampa dell’implementazione del sistema - Date tutte le descrizioni Smv dei componenti foglia, Ocra genera la corrispondente descrizione complessiva del modello in Smv. Può essere utilizzato per la verifica monolitica.
Strumenti basati su Ocra Chess (Cicchetti et al., 2012) è uno strumento di modellazione interdominio per sistemi industriali complessi. Utilizza il formalismo SysML e Uml. Chess è stato esteso per specificare contratti Othello su compo-nenti a livello di sistema SysML o compocompo-nenti a livello di software UML e per interagire con Ocra per verificare i raffinamenti dei contratti. Lo strumento non presenta capacità di simulazione, né possibilità di definire le implementazioni dei componenti foglia. Autofocus (Huber et al., 1996) è uno strumento basato su Eclipse per le specifiche di sistemi integrati e distribuiti. AF3fornisce funzionalità avanzate per supportare l’utente nel garantire la qualit‘a dela progettazione, come ad esempio analisi formali, metodi di sintesi e visualizzazione dell’esplorazione dello spazio. Dispone di strumenti per la modellazione e limitate capacità di simulazione. I componenti foglia possono essere progettati utilizzando semplici macchine a stati. Per quanto riguarda l’analisi formale, Autofocus supporta il model checking con modelli di verifica delle specifiche, con un’integrazione con NuSmv e ragionamento su assunzioni-garanzie basato su Ocra.
Altri strumenti
È importante notare che, nella progettazione basata su contratto, e in particolare nel framework di Ocra, i contratti devono essere soddisfatti sia dall’ambiente che dal componente. Negli approcci tradizionali di ragionamento assunzioni-garanzie, c’è una debole concetto di assunzione, il che significa che se le assunzioni sono valide, anche le garanzie devono essere valide. Masaccio è uno strumento per componenti integrati che fornisce tradizionali capacità di ragionamento assunzione-garanzia.
Gli strumenti per le specifiche basate sul contratto che usano logiche temporali sono Mio (Bauer et al., 2011), Ticc (Adler et al., 2006) e Agree (Cofer et al., 2012), i quali usano logiche temporali per il ragionamento assunzione-garanzia con ipotesi deboli.
Uno strumento esterno basato su contratto per Simulink è presentato in Boström (2011). Questo approccio converte i blocchi di Simulink in grafi Synchronous Data Flow (SDF) come passo intermedio per ottenere istruzioni di programma sequenzia-li da anasequenzia-lizzare usando tecniche di verifica tradizionasequenzia-li basate sul raffinamento. Il tipo di contratto che propongono considera essenzialmente le precondizioni e le post-condizioni su entrambi su porte e stati interni. Le prove di verifica generate sono
ottenute dal risolutore SMT chiamato Z3 (De Moura and Bjørner, 2008). Boström (2011) supporta un sottoinsieme dei blocchi di Simulink, ma in particolare i modelli di Stateflow non sono supportati. FSV (Ferrante et al., 2012) ha affermato di supportare la progettazione basata su contratto dei modelli di Simulink.