W budowie
Materiał edukacyjny · Informatyka

MODUŁ 02

Kontrakt i przypadki brzegowe

Kontrakt funkcji opisuje, jakie dane funkcja przyjmuje, jaki wynik ma zwrócić i jakie warunki obowiązują. Nie zakładaj zachowania, którego nie opisano. Rozróżniaj:

W skrócie

Kontrakt funkcji opisuje, jakie dane funkcja przyjmuje, jaki wynik ma zwrócić i jakie warunki obowiązują. Nie zakładaj zachowania, którego nie opisano. Rozróżniaj:

  • normalne przypadki, np. liczbę większą od zera;
  • wartości brzegowe, np. 0, 1, pustą kolekcję;
  • niepoprawne dane, jeśli kontrakt je dopuszcza;
  • ograniczenia wydajnościowe, np. wymóg działania w O(√n).

Testy przykładowe nie wystarczają. Dobre rozwiązanie powinno wynikać ze specyfikacji, a nie z zapamiętanych przykładów.

Przykład

Dzielenie, które nie boi się zera — kontrakt załatwia sprawę jednym ifem.

double bezpieczneDzielenie(double a, double b) {
    if (b == 0.0) return 0.0;
    return a / b;
}
  • Najpierw przypadek szczególny, potem zwykłe działanie.
  • Kontrakt obejmuje tylko skończone argumenty — reszty nie testujemy.
Brzeg to też testDzielnik zero, pusta kolekcja, n == 0 — tam najczęściej pęka.

Ćwiczenia