En tant qu’ingénieur logiciel, j’écris beaucoup de code pour les produits industriels. Trucs relativement compliqués avec des classes, des threads, des efforts de conception, mais aussi des compromis sur les performances. Je fais beaucoup de tests, et j'en ai marre, alors je me suis intéressé aux outils de preuve formels, tels que Coq, Isabelle ... Pourrais-je en utiliser un pour prouver formellement que mon code est sans bug et qu'il est prêt avec ça? - mais chaque fois que je vérifie l'un de ces outils, je ne suis pas convaincu qu'ils soient utilisables pour le génie logiciel au quotidien. Maintenant, ça ne peut être que moi, et je cherche des pointeurs / opinions / idées à ce sujet :-)
Plus précisément, j’ai l’impression que, pour que l’un de ces outils fonctionne, il faudrait un investissement considérable pour bien définir les objectifs, les méthodes ... du programme considéré. Je me demande alors si le prouveur ne s'essoufflerait pas compte tenu de l'ampleur de tout ce qui lui incomberait. Ou peut-être devrais-je me débarrasser des effets secondaires (ces outils de démonstration semblent bien fonctionner avec les langages déclaratifs), et je me demande si cela aurait pour résultat un "code éprouvé" qui ne pourrait pas être utilisé car il ne serait pas rapide ou assez petit. De plus, je n'ai pas le luxe de changer le langage avec lequel je travaille, il faut que ce soit Java ou C ++: je ne peux pas dire à mon supérieur que je vais coder en OXXXml à partir de maintenant, car c'est le seul langage en ce que je peux prouver l'exactitude du code ...
Est-ce que quelqu'un avec plus d'expérience des outils de preuve formels pourrait commenter? Encore une fois - j'adorerais utiliser un outil de démonstration formel, je les trouve géniaux, mais j'ai l'impression qu'ils se trouvent dans une tour d'ivoire que je ne peux pas atteindre depuis le petit fossé de Java / C ++ ... (PS: I J'AIME aussi Haskell, OCaml ... ne vous méprenez pas: je suis un fan des langages déclaratifs et des preuves formelles, j'essaie simplement de voir comment je pourrais concrètement rendre cela utile au génie logiciel)
Mise à jour: Puisque c'est assez large, essayons les questions plus spécifiques suivantes: 1) existe-t-il des exemples d'utilisation de prouveurs pour prouver l'exactitude des programmes industriels Java / C ++? 2) Coq conviendrait-il à cette tâche? 3) Si Coq convient, dois-je d'abord écrire le programme en Coq, puis générer C ++ / Java à partir de Coq? 4) Cette approche pourrait-elle gérer les optimisations de threading et de performance?