Esta es una pregunta muy cercana a mi corazón (soy un investigador de la verificación de software usando lógicas formales), por lo que probablemente no te sorprenderá cuando digo que creo que estas técnicas tienen un lugar útil, y todavía no usado lo suficiente en la industria.
Existen muchos niveles de "métodos formales", así que supongo que se refiere a aquellos que descansan sobre una base matemática rigurosa (en lugar de, digamos, seguir un proceso de estilo de 6-Sigma). Algunos tipos de métodos formales han tenido gran éxito, siendo los sistemas de tipo un solo ejemplo. Las herramientas de análisis estático basadas en análisis de flujo de datos también son populares, la verificación de modelos es casi omnipresente en el diseño de hardware, y los modelos computacionales como Pi-Cálculo y CCS parecen inspirar algún cambio real en el diseño de lenguaje práctico para la concurrencia. El análisis de terminación es uno que ha tenido mucha prensa recientemente: el proyecto SDV en Microsoft y el trabajo de Byron Cook son ejemplos recientes de crossover de investigación/práctica en métodos formales.
El razonamiento de Hoare hasta ahora no ha tenido grandes avances en la industria; esto es por más razones de las que puedo enumerar, pero sospecho que es sobre todo la complejidad de escribir y luego probar especificaciones para programas reales (tienden a grande, y no se pueden expresar las propiedades de muchos entornos del mundo real). Diversos subcampos en este tipo de razonamiento ahora están haciendo grandes avances en estos problemas: la lógica de separación es uno.
Esto es parte de la naturaleza de la investigación en curso (difícil). Pero debo confesar que nosotros, como teóricos, no hemos logrado educar a la industria sobre por qué nuestras técnicas son útiles, para mantenerlas relevantes para las necesidades de la industria, y para que sean accesibles para los desarrolladores de software. En cierto nivel, ese no es nuestro problema: somos investigadores, a menudo matemáticos, y el uso práctico no está en nuestras mentes. Además, las técnicas que se están desarrollando a menudo son demasiado embrionarias para su uso en sistemas a gran escala: trabajamos en programas pequeños, en sistemas simplificados, hacemos funcionar las matemáticas y seguimos adelante. Aunque no creo que compremos estas excusas: deberíamos ser más activos al impulsar nuestras ideas y obtener un ciclo de retroalimentación entre la industria y nuestro trabajo (una de las razones principales por las que volví a investigar).
Es probablemente una buena idea para mí para resucitar mi weblog, y hacer algo más puestos en estas cosas ...
Algunas lecturas ligeras: http://formalmethods.wikia.com/wiki/Z_notation –
Aprendí Zed o "Z" en la universidad. La clase fue muy divertida, pero no he tenido que aplicar más que el conocimiento básico obtenido en esa clase a cualquier cosa en la industria. Su comentario de software de misión crítica es intrigante, pero creo (corríjanme si está mal) que la mayoría dependerá más de las herramientas de análisis de código estático, las revisiones e inspecciones de código intensas y otras cosas de esa naturaleza para verificar el software. –
Gracias, voy a echar un vistazo :) – AraK