Ważnym celem metod formalnych jest udowodnienie poprawności systemów, za pomocą środków automatycznych lub kierowanych przez człowieka. Wydaje się jednak, że nawet jeśli podasz dowód poprawności, NIE będziesz w stanie zagwarantować, że system nie zawiedzie. Na przykład:
- Specyfikacja może niepoprawnie modelować system lub system produkcyjny może być zbyt skomplikowany, aby modelować, lub system może być wadliwy z powodu sprzecznych wymagań. Jakie techniki są znane w celu sprawdzenia, czy specyfikacja ma jakikolwiek sens?
- Proces sprawdzania może być również wadliwy! Kto wie, że te reguły wnioskowania są prawidłowe i zgodne z prawem? Co więcej, dowody mogą być bardzo duże, a skąd wiemy, że nie zawierają błędów? To jest sedno krytyki w „Procesach społecznych oraz dowodach twierdzeń i programów” de Millo, Liptona i Perlisa. Jak badacze nowoczesnych metod formalnych reagują na tę krytykę?
- W czasie wykonywania występuje wiele niedeterministycznych zdarzeń i czynników, które mogą poważnie wpłynąć na system. Na przykład promienie kosmiczne mogą zmieniać pamięć RAM w nieprzewidywalny sposób, a bardziej ogólnie nie mamy żadnych gwarancji, że sprzęt nie ucierpi na błędach bizantyjskich, wobec których Lamport udowodnił, że jest bardzo trudny do pokonania. Tak więc poprawność statycznego systemu nie gwarantuje, że system nie zawiedzie! Czy są jakieś znane techniki, które odpowiadają za omylność prawdziwego sprzętu?
- Obecnie testowanie jest najważniejszym narzędziem, które mamy do ustalenia, czy oprogramowanie działa. Wydaje się, że powinno to być narzędzie uzupełniające w stosunku do metod formalnych. Widzę jednak głównie badania, które koncentrują się na metodach formalnych lub testach. Co wiadomo na temat łączenia tych dwóch elementów?