Poprawność (informatyka) - Correctness (computer science)
W teoretycznej An algorytm jest prawidłowe w odniesieniu do specyfikacji , jeśli zachowuje się w określony sposób. Najlepiej zbadana jest poprawność funkcjonalna , która odnosi się do zachowania wejścia-wyjścia algorytmu (tj. dla każdego wejścia generuje wyjście spełniające specyfikację).
W drugim pojęciem, częściowego poprawności i oznacza, że jeśli odpowiedź jest zwrócony będzie prawidłowa, różni się od całkowitego poprawności , dodatkowo wymaga, że odpowiedź jest powrócił, tj zakończone jest algorytmem. Odpowiednio, aby udowodnić całkowitą poprawność programu, wystarczy udowodnić jego częściową poprawność i jego zakończenie. Ten ostatni rodzaj dowodu (dowód zakończenia ) nigdy nie może być w pełni zautomatyzowany, ponieważ problem zatrzymania jest nierozstrzygnięty .
Częściowo poprawny program C do znalezienia najmniej nieparzystej liczby doskonałej, jego całkowita poprawność jest nieznana od 2021 r. |
// return the sum of proper divisors of n
static int divisorSum(int n) {
int i, sum = 0;
for (i=1; i<n; ++i)
if (n % i == 0)
sum += i;
return sum;
}
// return the least odd perfect number
int leastPerfectNumber(void) {
int n;
for (n=1; ; n+=2)
if (n == divisorSum(n))
return n;
}
|
Na przykład, przeszukując kolejno liczby całkowite 1, 2, 3, …, aby zobaczyć, czy możemy znaleźć przykład jakiegoś zjawiska — powiedzmy nieparzystą liczbę doskonałą — całkiem łatwo jest napisać częściowo poprawny program (patrz ramka). Ale stwierdzenie, że ten program jest całkowicie poprawny, byłoby stwierdzeniem czegoś, co obecnie nie jest znane w teorii liczb .
Dowód musiałby być dowodem matematycznym, przy założeniu, że zarówno algorytm, jak i specyfikacja są podane formalnie. W szczególności nie oczekuje się, że będzie to stwierdzenie poprawności dla danego programu implementującego algorytm na danej maszynie. Wiązałoby się to z takimi rozważaniami jak ograniczenia pamięci komputera .
Głęboko wynik w teoria dowodu The korespondencja Curry-Howard , stwierdza, że dowód poprawności funkcjonalnej w konstruktywnych logicznych odpowiada pewnej programu w rachunku lambda . Konwersja dowodu w ten sposób nazywana jest wyodrębnianiem programu .
Logika Hoare'a to specyficzny formalny system rygorystycznego wnioskowania o poprawności programów komputerowych. Wykorzystuje techniki aksjomatyczne do definiowania semantyki języka programowania i argumentowania na temat poprawności programów poprzez twierdzenia znane jako trójki Hoare'a.
Testowanie oprogramowania to każda czynność mająca na celu ocenę atrybutu lub możliwości programu lub systemu i ustalenie, czy spełnia on wymagane wyniki. Chociaż kluczowe dla jakości oprogramowania i szeroko stosowane przez programistów i testerów, testowanie oprogramowania nadal pozostaje sztuką ze względu na ograniczone zrozumienie zasad oprogramowania. Trudność w testowaniu oprogramowania wynika ze złożoności oprogramowania: nie możemy całkowicie przetestować programu o umiarkowanej złożoności. Testowanie to coś więcej niż debugowanie. Celem testowania może być zapewnienie jakości, weryfikacja i walidacja lub szacowanie niezawodności. Testowanie może być również używane jako ogólna metryka. Testowanie poprawności i testowanie niezawodności to dwa główne obszary testowania. Testowanie oprogramowania to kompromis między budżetem, czasem i jakością.
Zobacz też
- Weryfikacja formalna
- Projekt według umowy
- Analiza programu
- Sprawdzanie modelu
- Poprawność kompilatora
- Wyprowadzenie programu
Uwagi
Bibliografia
- " Technologia języka ludzkiego. Wyzwania dla informatyki i lingwistyki ." Książki Google. NP, nd Web. 10 kwietnia 2017 r.
- „ Bezpieczeństwo w informatyce i komunikacji ”. Książki Google. NP, nd Web. 10 kwietnia 2017 r.
- „ Problem zatrzymania Alana Turinga – najweselsze i ilustrowane wyjaśnienie ”. Problem zatrzymania Alana Turinga - najbardziej wesołe i ilustrowane wyjaśnienie. NP, nd Web. 10 kwietnia 2017 r.
- Turner, Raymond i Nicola Angius. „ Filozofia informatyki ”. Stanford Encyclopedia of Philosophy . Uniwersytet Stanforda, 20 sierpnia 2013 r. Sieć. 10 kwietnia 2017 r.
- Dijkstra, EW „Prawidłowość programu”. U of Texas w Austin, Wydziały Matematyki i Informatyki, Automatic Theorem Proving Project, 1970. Sieć.