testowanie wartości brzegowych i klas równoważności
Wyznaczanie klas równoważności i wartości brzegowych (przykłady)

Taki przykład prostego testu wartości granicznych w praktyce przyszedł mi do głowy. Całkiem niedawno mieliśmy wybory do europarlamentu. Ogólna i najważniejsza zasada mówi, że każdy pełnoletni obywatel unii europejskiej może wziąć udział w głosowaniu. Czy zatem jeśli 26 maja mam 18 urodziny, mogę wziąć w nim udział? Jeśli przyjrzeć się dokładnie to prawo to przysługuje każdemu, kto najpóźniej w dniu głosowania ukończył 18 lat. System tworzący spis wyborców powinien zatem dodać do listy wszystkich, którzy do dnia 26 maja osiągnęli pełnoletność. Natomiast testy wartości granicznych dla tego konkretnego warunku powinny dotyczyć następujących przypadków.

Czy na liście uprawnionych są osoby urodzone 25 maja 2001?
Czy znajdują się na niej osoby urodzone 26 maja 2001?
Czy nie ma na niej osób urodzonych 27 maja 2001?

Testy klas równoważności

Jak pewnie już się domyślasz, testy wartości granicznych polegają na weryfikacji aplikacji na styku warunków w niej przyjętych. Zanim jednak przystąpimy do testów wartości brzegowych, powinniśmy zastanowić się nad tym, jakie zbiory danych o tych samych właściwościach możemy wyznaczyć dla aplikacji, by prawidłowo pokryć ją testami. I tak dochodzimy do tego, że konieczne jest określenie klas równoważności. Podział zbioru danych na klasy równoważności polega na pogrupowaniu danych wejściowych na elementy o takich samych własnościach. W wyniku tego procesu otrzymujemy klasy. Teoretycznie jeśli prawidłowo wyznaczyliśmy sobie te klasy, to wystarczy wziąć jedną wartość (dowolną) z każdej klasy, by przetestować czy system działa poprawnie dla każdego warunku.

Przykładowo dla funkcji generowania listy wyborców na dzień 26 maja powinniśmy wyznaczyć dwie klasy równoważności.

  • Klasa Urodzony przed i w dniu 26 maja 2001 roku (włącznie z 26 maja).
  • Klasa Urodzony 27 maja 2001 i po tym dniu.

Wówczas otrzymujemy dwie grupy danych, w których jedną stanowią osoby uprawnione do głosowania. Przechodząc do testów funkcji tworzenia listy wyborców, należałoby utworzyć dwa przypadki testowe z dowolnie wybranymi datami urodzenia tak, by zawierały się one w odpowiednich zbiorach. Moglibyśmy zatem wykonać testy dla wartości „3 grudnia 1980” i „3 grudnia 2014” i powiedzieć, że testy są zakończone.

Testy wartości brzegowych na podstawie klas równoważności

Praktyka pokazuje, że większość błędów znajdowanych w aplikacjach dotyczy testów wartości na pograniczu zmiany zachowania systemu. Dlatego po wykonaniu jedynie testów na klasach równoważności nie możemy być pewni czy zadziała ona prawidłowo dla wartości 26 maja 2001. W tym celu przechodzimy do wykonywania testów wartości granicznych. Które wykonywane są dla danych znajdujących się właśnie na granicy wyznaczonej przez klasy. Dobierając wartości brzegowe do testów, bierzemy w tym wypadku wyznaczone wcześniej klasy równoważności, a następnie wyznaczamy wartości znajdujące się na granicy tych klas i tuż przed i po nich. Czyli dla podanego przykładu z tworzeniem listy wyborców powinniśmy przeprowadzić testy dla wartości 25 maja 2001, 26 maja 2001 i 27 maja 2001. W ten sposób otrzymujemy trzy przypadki testowe do weryfikacji.

Dlaczego używamy klas równoważności i wartości brzegowych?

Zarówno testy metodą klas równoważności, jak i wartości brzegowych stosowane są dla testów czarno skrzynkowych. Czyli takich, w których tester nie ma dostępu do kodu aplikacji, którą testuje, ma natomiast dostęp do dokumentacji.

korepetycje z testowania oprogramowania teoria praktyka i przygotowanie do rozmowy rekrutacyjnej

Przystępując do testów aplikacji mamy zwykle do dyspozycji jakiś skończony czas oraz nieskończoną kombinację danych, jakie aplikacja może przyjąć. Klasy równoważności oraz testowanie wartości brzegowych stosuje się po to, by ograniczyć ilość danych, na jakich powinno się wykonać testy. Obie te techniki służą do projektowania przypadków testowych i zoptymalizowania ilości wykonywanych testów.

Podział na klasy równoważności jest częstym pytaniem na rozmowach rekrutacyjnych. Ważne zatem byś był w stanie sobie te klasy określić w zasadzie od ręki na wszystkim.

Przykład – Wyznaczanie klas równoważności i wartości brzegowych podczas testów koszyka sklepu online

Zmieńmy może tematykę z wyborczej na sklepową. Przyjmijmy, że mamy do testów koszyk sklepu internetowego. W dokumentacji czytamy, że przy zakupie do 5 sztuk towaru cena nie ulega zmianie. Natomiast przy zakupie powyżej 5 sztuk przysługuje darmowa dostawa, ale jeśli zamówienie jest na co najmniej 50 sztuk, to klient dostaje dodatkowo 10% zniżki. Przy tym wszystkim istnieje warunek, że nie można zamówić więcej niż 99 sztuk towaru.

I teraz tworzymy klasy :

wykaz przykładowych wartości brzegowych i podziału na klasy równoważności
Przykładowy podział na klasy równoważności
  • 0 sztuk – brak zakupu
  • <1,6) sztuk – normalna cena,
  • <6, 50) sztuk – darmowa dostawa,
  • <50,99> sztuk – darmowa dostawa i 10% zniżki,
  • >99 sztuk – brak możliwości zamówienia towaru.

*Nawias zamknięty „<” oznacza, że wartość zawiera się w danym zbiorze.

W ten sposób otrzymaliśmy pięć klas.

I wybieramy wartości do testów dla tych klas: 0, 1, 5, 6, 49, 50, 99, 100.

Jeśli masz pomysł na inny podział i inne wartości brzegowe dla tego przykładu wpisz w komentarzu, chętnie się z nimi zapoznam.

Inne przykłady

  • Winda przewozi załadunek do 800kg.
  • Przy zakupie dwóch produktów na jeden z nich otrzymasz 50% zniżki.
  • Wiadro pomieści 24 litry wody.

Tak naprawdę, jeśli się zastanowić to przykładów z życia codziennego może być naprawdę dużo. Zazwyczaj po przeczytaniu dokumentacji aplikacji bez problemu wyznaczamy (często nieświadomie) klasy i wartości brzegowe dla nich. A już na pewno nie myśli się o tym na zasadzie „dobra to teraz wypiszę sobie klasy, a potem wartości brzegowe i zabieram się do testów”. A przynajmniej ja tak nie mam :). 

Waldemar Szafraniec

Nazywam się Waldemar Szafraniec. Karierę testera rozpocząłem w 2012 roku. Od początku pracy w zawodzie wiedziałem, że będzie to coś więcej niż tylko praca. Obecnie praca jest również moim hobby. Jednym z moich obowiązków w obecnym miejscu pracy jest rekrutowanie nowych testerów oraz szkolenie ich. Sam stale podnoszę swoje kwalifikacje uczestnicząc w szkoleniach (ISTQB, ISTQB Advanced Level – Test Analyst). Szkolę ludzi w dziedzinie testów manualnych od 2014 roku. Jestem trenerem, ponieważ wiem, że dobrze mi wychodzi przekazywanie wiedzy, wiem jak praca testera wygląda oraz mam doświadczenie w rekrutacji.

Ten post ma 8 komentarzy

  1. Kamil

    Mam takie zadnie, czy mogę prosić o pomoc z poprawną odpowiedzią ?: System ewidencji kontenerów przyjmuje ładunki o masie pomiędzy 0,5 kg oraz 1050 kg (poniżej
    tego zakresu system zwraca alarm tarowania, powyżej alarm przeciążenia). Dodatkowo system
    wymaga, aby kontener był zamknięty zamkiem rozpoznawanym przez czujnik systemowy oraz,
    9
    żeby posiadał numer ID odpowiadający opisanemu osobno standardowi.
    Jeśli powyższe wymogi nie są spełniane, uruchamia się odpowiedni alarm.
    Jako tester chcesz zastosować przy testowaniu tego systemu klasy równoważności –
    indywidualnie do tych potrzeb.
    Jaka jest liczba klas równoważności do pokrycia?
    a. 3
    b. 5
    c. 7
    d. 15
    e. 21

  2. Alex

    Rozumiem że 2, 7, 51 oraz 101 można przetestować?
    Są to wartości przy lewych granicach.
    Czy ma to znaczenie czy wybieramy przy prawej czy przy lewej granicy?

    1. Waldemar Szafraniec

      Nie wiem, czy dobrze zrozumiałem. Jeśli chcesz przetestować „klasy równoważności”, to dla klasy „<1,6) sztuk – normalna cena", możesz sobie wybrać wartość dowolną w danej klasie czyli 1,2,3, 4, 5. Testy te jednak zwykle łączy się z testami wartości brzegowych, dlatego wybiera się wartości z brzegu, czyli tutaj dla tej konkretnej klasy 1 i 5.

  3. Radek

    Próbuję zrozumieć Twoje przykłady.
    Możesz mi wyjaśnić jak skąd wzięły się 4 przypadki w przykładzie z koszykiem sklepu online i co one pokrywają?
    Czy w danych do wartości granicznych nie powinno być również 0 i 1?
    Co pokrywa dana 4, 51 i 58?

    1. Waldemar Szafraniec

      Rzeczywiście pominąłem 0 i 1, które też są do testów.
      Co do czterech przypadków jest to przejęzyczenie spowodowane szybkim pisaniem – chodziło o klasy
      Co do 4, 51 i prawdopodobnie chodziło Ci o 98? To w sumie zgadza się, że jest już weryfikacja „czy zawiera się w klasie w momencie sprawdzenia np 5, 50 oraz 99 – poprawione
      Dzięki za super komentarz 🙂

      1. Radek

        Brakuje jeszcze 5.

      2. kamil

        Czy Klassa normalna cena nie powinna byc 1-5 a nie 1-6

      3. Waldemar Szafraniec

        Jest 1-5. Sztuki towaru sprzedawane są w całości. Zatem jeśli klasa jest opisana <1,6), to nawias zamknięty "<" oznacza, że liczba 1 jest w klasie, nawias otwarty ")" oznacza że w klasie jest liczba przed 6 czyli 5 w tym wypadku. Kwestia zapisu. Tą samą klasę można było zapisać jako <1,5>. Dla obu zapisów chodzi o te same liczby.

Dodaj komentarz