Domanda

Ho preso uno scorcio su Hoare Logic al college. Quello che abbiamo fatto è stato davvero semplice. La maggior parte di quello che ho fatto è stato che attestano l'esattezza dei programmi semplice che consiste di cicli while, dichiarazioni if, e sequenza di istruzioni, ma niente di più. Questi metodi sembrano molto utile!

Sono metodi formali utilizzati nell'industria ampiamente?

Sono questi metodi usati per dimostrare il software mission-critical?

È stato utile?

Soluzione

Questa è una domanda a cuore (io sono un ricercatore nel software di verifica utilizzando logiche formali), per cui è probabile non essere sorpreso quando dico penso queste tecniche hanno un posto utile, e non sono ancora abituato abbastanza nel settore.

Ci sono molti livelli di "metodi formali", quindi darò per scontato si intende coloro che poggia su una base matematica rigorosa (a differenza, ad esempio, a seguito di un processo stile 6-Sigma). Alcuni tipi di metodi formali hanno avuto un grande successo - sistemi di tipo è un esempio. strumenti di analisi statica sulla base di analisi del flusso di dati sono anche popolari, model checking è quasi onnipresente nella progettazione hardware e modelli computazionali come pi-calcolo e CCS sembrano ispirare qualche reale cambiamento nel design linguaggio pratico per la concorrenza. Analisi terminazione è uno che ha avuto un sacco di stampa di recente -. Il progetto SDV di Microsoft e il lavoro da Byron Cook sono esempi recenti di ricerca / Crossover pratica in metodi formali

Hoare ragionamento non ha, finora, fatto grandi incursioni nel settore - questo è per più motivi che posso elencare, ma ho il sospetto è per lo più intorno alla complessità della scrittura specifiche, allora provano per i programmi veri e propri (che tendono a ottenere < em> big , e non riescono ad esprimere proprietà di molti ambienti del mondo reale). Vari sottocampi in questo tipo di ragionamento sono ora facendo grandi strada in tali problemi -. Separazione logica essendo uno

Questo è in parte la natura della continua ricerca (duro). Ma devo confessare che noi, come i teorici, abbiamo completamente fallito per educare l'industria sul perché le nostre tecniche sono utili, per tenerli rilevanti per le esigenze del settore, e per renderli accessibile agli sviluppatori di software. A un certo livello, non è questo il nostro problema - siamo ricercatori, spesso matematici, e il loro utilizzo pratico non è tutto nelle nostre menti. Inoltre, le tecniche in fase di sviluppo sono spesso troppo embrionale per l'impiego in sistemi di grandi dimensioni - lavoriamo su piccoli programmi, sui sistemi semplificati, ottenere il lavoro per la matematica, e andare avanti. Non tanto compro queste scuse anche se -. Dovremmo essere più attivi nel portare le nostre idee, e ottenere un circuito di feedback tra l'industria e il nostro lavoro (uno dei motivi principali sono tornato alla ricerca)

E 'probabilmente una buona idea per me di far risorgere il mio weblog, e fare qualche più post su questa roba ...

Altri suggerimenti

Bene, Sir Tony Hoare è entrato in Microsoft Research circa 10 anni fa, e una delle cose che ha iniziato era una verifica formale del kernel di Windows NT. In effetti, questo è stato uno dei motivi per il lungo ritardo di Windows Vista: a partire da Vista, gran parte del kernel sono WRT in realtà formalmente verificato. a talune proprietà, quali assenza di deadlock, assenza di informazioni perdite, ecc.

Questo non è certamente tipico, ma è probabilmente la più importante applicazione di verifica formale del programma, in termini di impatto (dopo tutto, quasi ogni essere umano è, in qualche modo, forma o influenzato da un computer che esegue Windows ).

Non posso commentare molto sul software mission-critical, anche se so che l'industria avionica utilizza una vasta gamma di tecniche per convalidare il software, compresi i metodi di stile Hoare.

I metodi formali hanno sofferto perché i suoi primi sostenitori come Edsger Dijkstra insistito sul fatto che essi dovrebbero essere utilizzati in tutto il mondo. Né i formalismi né il supporto software sono stati all'altezza del compito. sostenitori più sensibili ritengono che questi metodi devono essere utilizzati sui problemi che sono difficili. Essi non sono ampiamente utilizzati nell'industria, ma l'adozione è in aumento. Probabilmente i più grandi incursioni sono stati in l'uso di metodi formali per verificare le proprietà sicurezza del software. Alcuni dei miei esempi preferiti sono il SPIN model checker e il codice a prova di trasporto di George Necula.

Allontanandosi dalla pratica e nella ricerca, Singularity del sistema operativo di Microsoft progetto è sull'utilizzo di metodi formali di fornire garanzie di sicurezza che di solito richiedono il supporto hardware. Questo a sua volta porta a prestazioni più veloci e maggiori garanzie. Ad esempio, nella singolarità hanno dimostrato che se un driver di periferica di terze parti è consentita nel sistema (il che significa che le condizioni di verifica di base sono stati rivelati), allora non può eventualmente portare giù tutto quel sistema operativo, lui peggiore che può fare è tubo sua proprio dispositivo.

I metodi formali non sono ancora ampiamente utilizzati nell'industria, ma sono più ampiamente usati di quanto lo fossero 20 anni fa, e 20 anni da oggi saranno più ampiamente utilizzati ancora. Così si è a prova di futuro: -)

Sì, sono utilizzati, ma non ampiamente in tutte le aree. Ci sono più metodi di logica solo Hoare, alcuni sono usati più, chi meno, a seconda della idoneità determinato compito. Il problema comune è che sofware è biiiiiiig e verificando che tutto questo è corretto è ancora troppo difficile un problema.

Ad esempio il teorema-cella (un software che aiuta l'uomo nel dimostrare la correttezza del programma) ACL2 è stato utilizzato per dimostrare che una certa unità di elaborazione in virgola mobile non ha un certo tipo di insetto. E 'stato un grande compito, per cui questa tecnica non è troppo comune.

Il model checking, un altro tipo di verifica formale, viene utilizzato piuttosto ampiamente al giorno d'oggi, ad esempio, Microsoft fornisce un tipo di modello checker nel kit di sviluppo dei driver e può essere utilizzato per verificare il driver per una serie di bug comuni. model checker sono spesso utilizzati nella verifica circuiti hardware.

Test rigorosi può essere anche pensato di verifica di formali -. Ci sono alcune specifiche formali dei quali percorsi di programma dovrebbero essere testati e così via

"sono metodi formali utilizzati nell'industria?"

Sì.

La dichiarazione assert in molti linguaggi di programmazione è legato ai metodi formali per la verifica di un programma.

"sono metodi formali utilizzati nell'industria ampiamente?"

No.

"Sono questi i metodi usati per dimostrare il software mission-critical?"

A volte. Più spesso, sono abituati a dimostrare che il software è sicuro. Più formalmente, sono abituati a dimostrare certe affermazioni relative alla protezione di software.

Ci sono due approcci diversi per metodi formali nel settore.

Un approccio è quello di cambiare completamente il processo di sviluppo. La notazione Z e il metodo B che sono stati menzionati sono in questa prima categoria. B è stata applicata allo sviluppo della linea metropolitana driverless 14 a Parigi (se si ha la possibilità, salire sul carro davanti. Non capita spesso che si ottiene la possibilità di vedere le rotaie di fronte a voi).

Un altro, più incrementale, approccio è quello di preservare i processi di sviluppo e di verifica esistenti e sostituire solo uno dei compiti di verifica alla volta da un nuovo metodo. Questo è molto interessante, ma significa lo sviluppo di strumenti di analisi statica per uscire, lingue utilizzate, che spesso non sono facili da analizzare (perché non sono stati progettati per essere). Se si va a (per esempio)

http: //dblp.uni -trier.de/db/indices/a-tree/d/Delmas:David.html

(mi dispiace, solo un collegamento ipertestuale permesso per i nuovi utenti :()

troverete esempi di applicazioni pratiche di metodi formali per la verifica dei programmi C (con gli analizzatori statici Astrée, Caveat, Fluctuat, Frama-C) e un codice binario (con gli attrezzi da AbsInt GmbH).

A proposito, dal momento che lei ha citato Hoare Logic, nella suddetta lista di strumenti, unica avvertenza è basato sulla logica Hoare (e Frama-C ha una logica plug-in Hoare). Gli altri si basano su interpretazione astratta, una tecnica diversa con un approccio più automatica.

La mia area di competenza è l'uso di metodi formali per l'analisi statica del codice per dimostrare che il software sia privo di errori di runtime. Questo è implementato utilizzando una tecnica nota metodi formali "interpretazione astratta". La tecnica consente in sostanza di dimostrare certe atributes di un programma di s / w. Per esempio. dimostrare che a + b non trabocchi o x / (x-y) non comporterà una divisione per zero. Uno strumento di analisi statica esempio che utilizza questa tecnica è Polyspace.

Per quanto riguarda la tua domanda: "? I metodi formali utilizzati nell'industria ampiamente" e "? Sono questi metodi usati per dimostrare il software mission-critical"

La risposta è sì. Il presente parere si basa sulla mia esperienza e sostenere l'utensile Polyspace per le industrie che si basano sull'uso di software incorporato per controllare sistemi critici di sicurezza quali acceleratore elettronico in un'automobile, sistema di frenatura di un treno, controllo di motore a getto, pompa di infusione somministrazione di farmaci, ecc queste industrie effettivamente utilizzano questi tipi di metodi formali strumenti.

Non credo che tutti al 100% di questi segmenti di mercato stanno utilizzando questi strumenti, ma l'uso è in aumento. La mia opinione è che le industrie aerospaziale e automotive conducono con il settore dei dispositivi medici dilagare rapidamente l'uso.

Polyspace è AA (terribilmente costoso, ma molto buono) prodotto commerciale basato sul programma di verifica. E 'abbastanza pragmatico, in quanto scalabile su da 'unit testing avanzata che sarà probabilmente trovare alcuni bug' a 'i prossimi tre anni della vostra vita saranno spesi mostrando questi 10 file hanno zero difetti'.

Si basa più sulla verifica negativa ( 'questo programma non danneggerà il vostro stack') la verifica invece positivo ( 'questo programma farà esattamente ciò che queste 50 pagine di equazioni dire che sarà').

Per aggiungere al di Jorg risposta , ecco un intervista con Tony Hoare. Gli strumenti di Jorg di riferimento a, credo, sono PREfast e prefisso. Vedere qui per ulteriori informazioni.

Oltre di altri approcci più procedurali, la logica Hoare era nella base di Design by Contract , presentato come una tecnica orientata oggetto da Bertrand Meyer in Eiffel ( vedi l'articolo del Meyer del 1992 , pagina 4). Mentre Design by Contract non è la stessa come i metodi di verifica formale (per dirne una, DBC non si dimostrare nulla fino a quando viene eseguito il software), a mio parere fornisce un uso più pratico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top