Testowanie

Zbigniew Jurkiewicz, Instytut Informatyki MIMUW

Testowanie

Testowanie polega na uruchamianiu systemu lub aplikacji w kontrolowanych warunkach i ocenie wyników. Należy uwzględnić zarówno normalne, jak i anormalne warunki pracy.

Testujący powinni być nastawieni na pokazanie, że w programach istnieją błędy, a nie na wykazanie poprawności programów.

Zasady [na podstawie Glenford J.Myers Software Reliability. Principles and Practices]:

Fazy testowania

Testy jednostkowe (unit tests):

Testy integracyjne:

Testy systemu:

Testy akceptacyjne u klienta. Sprawdza się zgodność systemu z wymaganiami. Kombinacja trzech metod:

Specjalne odmiany testowania:

Dodatkowe zalecenia

Automatyzacja testowania

Polega na tworzeniu skryptów testowych. Są to schematyczne procedury, zawierające w treści wywołania akcji -- metod pozwalających programowo sterować interfejsem użytkownika, np.

Takie wywołanie jak Click() sprawdza wiele rzeczy równocześnie, np.

Dodatkowe akcje do pisania skryptów, np. RaiseError("...").

Plany i skrypty

Plan testów jest to wykaz skryptów (scenariuszy) testowych wraz z opisem.

Skrypt to ciąg przypadków testowych, wynikiem każdego przypadku testowego jest tak/nie (,,zdał/nie zdał'').

script Test-Application-Functionality() {
  for each test-case in List-of-test-cases
  do perform(test-case);
}

Przypadek testowy

Własności:

Typowy schemat pojedynczego przypadku testowego:

  1. Ustanów stan bazowy
  2. Wykonaj akcje składowe
  3. Zweryfikuj wyniki
  4. Przywróć stan bazowy

Przykład przypadku testowego

Dla

DialogBox Student {
  PushButton Add, Delete, Cancel, Help;
  TextField Nazwisko, Indeks, Pesel;
  Radiobox Rodzaj;
}

przypadek testowy mógłby wyglądać następująco

testcase Enter-Valid-Student(nazwisko, indeks, rodzaj) {
  Student.Nazwisko.SetText(nazwisko);
  Student.Indeks.SetText(index);
  Student.Rodzaj.Select(rodzaj);
if Student.Add.IsActive()
then Student.Add.Click()
else RaiseError("Nie można dodać studenta, przycisk Add nieaktywny");
}

Testować należy nie tylko poprawne, ale także błędne odpowiedzi

testcase Enter-Invalid-Student(indeks, rodzaj) {
  Student.Nazwisko.SetText(" ");
  Student.Indeks.SetText(index);
  Student.Rodzaj.Select(rodzaj);
if Student.Add.IsActive()
then RaiseError("Nie powinno akceptować pustego nazwiska");
}

Narzędzia do testowania

Warto korzystać z dobrych narzędzi