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.