Важлива мета формальних методів - довести правильність систем, або автоматизованими, або людськими способами. Однак, схоже, що навіть якщо ви зможете надати підтвердження правильності, ви, можливо, НЕ зможете гарантувати, що система не вийде з ладу. Наприклад:
- Специфікація може не моделювати систему належним чином, або виробнича система може бути надто складною для моделювання, або ж система може бути помилковою через суперечливі вимоги. Які методи відомі для перевірки, чи специфікація має сенс взагалі?
- Процес доказування може бути помилковим! Хто знає, що ці правила умовиводу є правильними та законними? Крім того, докази можуть бути дуже великими, і як ми можемо знати, що вони не містять помилок? Це серце критики "Мільто, Ліптона та Перліса" "Соціальні процеси та докази теорем і програм". Як дослідники сучасних формальних методів реагують на цю критику?
- Під час виконання існує багато недетермінованих подій та факторів, які можуть серйозно вплинути на систему. Наприклад, космічні промені можуть змінювати оперативну пам’ять непередбачуваними способами, і в цілому ми не маємо гарантій, що обладнання не зазнає візантійських помилок, проти яких Лампорт виявився дуже важким. Тож правильність статичної системи не гарантує, що система не вийде з ладу! Чи існують якісь методи, які пояснюють помилковість справжнього обладнання?
- В даний час тестування є найважливішим інструментом для встановлення того, що працює програмне забезпечення. Схоже, це має бути додатковим інструментом з формальними методами. Однак я в основному бачу дослідження, які орієнтовані або на формальні методи, або на тестування. Що відомо про поєднання двох?