Questa è una domanda vicino al mio cuore (sono un ricercatore in Software Verification utilizzando le logiche formali), quindi probabilmente non sarai sorpreso quando dico che penso che queste tecniche abbiano un posto utile, e non sono ancora usato abbastanza nel settore.
Esistono molti livelli di "metodi formali", quindi suppongo che intendiate quelli che poggiano su una base matematica rigorosa (al contrario, per esempio, seguendo un processo in stile 6-Sigma). Alcuni tipi di metodi formali hanno avuto un grande successo - i sistemi di tipo sono un esempio. Anche gli strumenti di analisi statica basati sull'analisi del flusso di dati sono popolari, il model checking è quasi onnipresente nella progettazione dell'hardware e modelli computazionali come Pi-Calculus e CCS sembrano ispirare alcuni reali cambiamenti nella progettazione del linguaggio pratico per la concorrenza. L'analisi della terminologia è stata recentemente oggetto di molta stampa: il progetto SDV di Microsoft e il lavoro di Byron Cook sono esempi recenti di crossover di ricerca/pratica in metodi formali.
Hoare Il ragionamento non ha fatto grandi progressi nel settore - questo è per più motivi di quanti ne possa elencare, ma sospetto che sia per lo più intorno alla complessità della scrittura e quindi alla dimostrazione di specifiche per programmi reali (tendono ad essere grande e non riescono a esprimere le proprietà di molti ambienti del mondo reale). Diversi sotto-campi in questo tipo di ragionamento stanno ora facendo grandi progressi in questi problemi - Separation Logic essendo uno.
Questa è parzialmente la natura della ricerca (difficile) in corso. Ma devo confessare che noi, come teorici, non abbiamo completamente educato il settore a spiegare perché le nostre tecniche sono utili, per tenerle pertinenti alle esigenze del settore e renderle accessibili agli sviluppatori di software. A un certo livello, non è questo il nostro problema: siamo ricercatori, spesso matematici, e l'uso pratico non è il massimo nelle nostre menti. Inoltre, le tecniche sviluppate sono spesso troppo embrionali per l'uso in sistemi su larga scala: lavoriamo su piccoli programmi, su sistemi semplificati, facciamo lavorare la matematica e andiamo avanti. Non comprando molto queste scuse però - dovremmo essere più attivi nel promuovere le nostre idee e ottenere un circuito di feedback tra l'industria e il nostro lavoro (uno dei motivi principali per cui 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 ...
fonte
2009-07-28 22:02:52
Leggera lettura: http://formalmethods.wikia.com/wiki/Z_notation –
Ho imparato Zed o "Z" al college. La lezione è stata molto divertente, ma non ho dovuto applicare più delle conoscenze di base ottenute in quella classe a qualcosa del settore. Il tuo commento software mission-critical è intrigante, ma penso che (correggimi se sbagliato) la maggior parte si baserà maggiormente su strumenti di analisi del codice statico, intense revisioni del codice e ispezioni e altre cose di tale natura per verificare il software. –
Grazie, darò un'occhiata :) – AraK