Важной целью формальных методов является доказательство правильности систем, либо автоматизированными, либо управляемыми человеком средствами. Тем не менее, кажется, что даже если вы можете предоставить подтверждение правильности, вы НЕ МОЖЕТЕ гарантировать, что система не выйдет из строя. Например:
- Спецификация может некорректно моделировать систему, или производственная система может быть слишком сложной для моделирования, или система может иметь недостатки по своей природе из-за противоречивых требований. Какие методы известны для проверки, имеет ли спецификация какой-либо смысл?
- Процесс доказательства тоже может быть ошибочным! Кто знает, что эти правила вывода являются правильными и законными? Кроме того, доказательства могут быть очень большими, и как мы узнаем, что они не содержат ошибок? В этом суть критики де Милло, Липтона и Перлиса «Социальные процессы и доказательства теорем и программ». Как современные формальные методы исследователи реагируют на эту критику?
- Во время выполнения существует много недетерминированных событий и факторов, которые могут серьезно повлиять на систему. Например, космические лучи могут изменять ОЗУ непредсказуемым образом, и в целом у нас нет никаких гарантий, что аппаратное обеспечение не пострадает от византийских ошибок, которые, как доказал Лампорт, очень трудно противостоять. Таким образом, правильность статической системы не гарантирует, что система не выйдет из строя! Известны ли какие-либо методы, позволяющие объяснить ошибочность реального оборудования?
- В настоящее время тестирование является наиболее важным инструментом для определения того, что программное обеспечение работает. Кажется, это должен быть дополнительный инструмент с формальными методами. Тем не менее, я в основном вижу исследования, которые либо сосредоточены на формальных методах или тестировании. Что известно об объединении двух?