Konkurs Testwarez 2015 [rozwiązanie]

6445
wyświetleń
Konkurs Testwarez 2015 [rozwiązanie]
Testwarez dla uczestników konferencji przygotowało niezmiernie ciekawy konkurs. My postanowiliśmy rozszerzyć jego zasięg.

O konkursie możecie poczytać tutaj >>

Pytania wraz z odpowiedziami >>

 

Konkurs wygrał Pan Michał z Olsztyna i to on dostaje nagrodę niespodziankę w formie trzech książek i kompletu gadżetów.

 

W puli konkursowych pytań znajdowało sie  kilka, które szczególnie zwróciły naszą uwagę. Cechują się ciekawą treścią i nie są typowymi pytaniami konkursowymi. Do pytań dopisaliśmy zgłoszone do nich błędy.

 

Zadanie 2. SMS – Szatańska Maszyna Stanowa. Testem w maszynie stanowej nazywamy każdą ścieżkę biegnącą – zgodnie z kierunkiem strzałek – od stanu początkowego (na rysunku lewy górny) do stanu końcowego (na rysunku prawy dolny). Długość ścieżki to liczba jej przejść, czyli strzałek. Kryterium pokrycia n-switch wymaga, aby dla każdej istniejącej w maszynie ścieżki o długości n+1 istniał przynajmniej jeden test, który przechodzi po tej ścieżce.

Jaka jest minimalna liczba testów dla maszyny z poniższego rysunku potrzebna do spełnienia kryterium 4-switch?

SMS_TW

 

Błędy zadania:

1. Graf jest niepoprawny ponieważ ze stanu końcowego nie da się wydostać.

2. Brak tłumaczenie dla "n-switch" http://sjsi.org/slowo/pokrycie-n-przelaczen/

3. Niepoprawne użycie pojęcia "przejść" zamiast "przełączeń".

 

Zadanie 4. Zapętlone pętle. Jaka jest minimalna liczba testów, które pokryją wszystkie decyzje w poniższym programie? Symbol := oznacza podstawienie, a == operator porównania. Załóż, że parametry wejściowe a, b, c są liczbami całkowitymi. Wcięcia w kodzie oznaczają bloki kodu. Składnia instrukcji for rozumiana jest tak, jak w językach typu C++ czy Java.

input a, b, c
d := a*b*c
e := a+b+c
for (i := 0; i < e; i++) do
  while (d > 0) do
    if (a == b) then
      c := c - 1
    end if
    d := d - 1
    for (j := 0; j < d; j++) do
      while (b > 0) do
        while (c > 0) do
          if (a > b) then
            a := a – 1
            c := c - 1
          else
            b := b – 1
            c := c – 1
          end if
        end while
        b := b – 1
      end while
    end for
  end while
end for
return a+b+c+d

Błąd: pętla jest źle skonstruowana i przykładowo dla wartości a = b = c = - 1, nigdy się nie wykona.

 

Zadanie 6. UFO porywa testerów. W systemie każdy użytkownik opisany jest trzema cechami: rodzajem najwyższego posiadanego certyfikatu ISTQB (brak, FL, AL lub EL), tym, czy jest uczestnikiem TestWarez (tak lub nie) oraz tym, czy jest członkiem SJSI (tak lub nie). W zależności od kombinacji tych czynników program decyduje, czy dana osoba ma prawo nazywać sie testerem (tak lub nie) oraz czy zostanie porwana przez UFO. Reguły biznesowe są następujące: każdy członek SJSI posiadający jakikolwiek certyfikat nie będzie porwany przez UFO wtedy i tylko wtedy, gdy nie jest na TestWarezie. Miano testera przysługuje jedynie tym, którzy nie posiadają certyfikatu FL jako najwyższego zdobytego certyfikatu i jednocześnie prawdziwe (w sensie logicznym) jest wobec nich stwierdzenie, że jeśli są na TestWarezie to są członkami SJSI. Osoby nie będące członkami SJSI będą porwane przez UFO tylko jeśli nie posiadają certyfikatu EL. Osoby, co do których nie można na podstawie powyższych reguł stwierdzić czy będą porwani przez UFO są testerami wtedy i tylko wtedy, gdy będą porwani przez UFO.

W systemie jest zarejestrowanych dokładnie 16 osób, każda określona inną konfiguracją trzech warunków (rodzaj certyfikatu, czy jest na TestWarezie, czy jest członkiem SJSI). Ile spośród tych osób jest godnych miana testera lub nie zostanie porwanych przez UFO?

Błąd: kufel piwa dla człowiek, który rozumie logikę systemu. Przykładowo: czy jeśli jesteś na Testwarez to automatycznie jesteś członkiem SJSI?

 

Zadanie 7. Bankomaty. System bankowy składa się z serwera, sieci i bankomatów. Serwer i sieci (zwane dalej systemem) są dostępne w 100%, poza zaplanowaną konserwacją między 2 a 4 w nocy w każdą niedzielę. Warunkiem koniecznym poprawnej pracy bankomatu jest dostępność systemu. Średnio 25% bankomatów ulega awarii średnio raz w miesiącu, przy czym naprawa zajmuje średnio cały dzień (24 godziny). Jaka jest oczekiwana dostępność usług bankomatowych w listopadzie 2015 roku z punktu widzenia pojedynczego, losowo wybranego klienta, który korzysta z bankomatów? Załóż, że klient oczekuje od systemu ciągłej dostępności (24h/dobę), co oznacza, że nawet planowe wyłączenie systemu z punktu widzenia klienta traktowane jest jak niedostępność usługi. W obliczeniach przyjmij dokładność do drugiego miejsca po przecinku.

Dla dociekliwych – metryka dostępności definiowana jest jako D = MTTF / (MTTF + MTTR), gdzie MTTF = średni czas do awarii, MTTR = średni czas do naprawy, ale nie musisz z niej korzystać wprost w rozwiązaniu zadania. Dostępność systemu to po prostu procent czasu, w którym system działa poprawnie, dla zadanego interwału czasowego.

 

Błąd czy rozwiązanie? Z treści wynika, że klient oczekuje 100% dostępności.

 

Zadanie 8. Nieprzystępny rok przestępny. W pewnym programie znajduje się następująca instrukcja warunkowa (decyzja) sprawdzająca, czy zmienna całkowita rok reprezentuje rok przestępny:

if ((rok%4==0 && rok%100!=0) || rok%400==0)

Składa się z trzech warunków: rok%4==0, rok%100!=0, rok%400==0, z których każda może przyjąć wartość logiczną prawdy lub fałszu. W zadaniu && oznacza koniunkcję, || alternatywę, a%b zwraca resztę z dzielenia a przez b, == to operator porównania, a != oznacza operator „różne od”.

Chcesz przetestować ten fragment kodu pod kątem kryterium pełnego pokrycia kombinatorycznego. W kryterium tym wymagane jest, aby dla każdej możliwej kombinacji wartości logicznych warunków istniał co najmniej jeden test, który spowoduje przyjęcie przez warunki tych właśnie wartości. Jaka jest minimalna liczba testów, aby spełnić to kryterium dla naszej decyzji? Załóż, że podczas sprawdzania wartości logicznej decyzji nie zachodzi tzw. zwarcie, to znaczy zawsze obliczane są wartości logiczne wszystkich warunków w decyzji, a następnie na tej podstawie obliczana jest wartość logiczna całej decyzji.

 

Błędy:

1. w odniesieniu do nomenklatury ISTQB - nie istnieje coś takiego jak pokrycie kombinatoryczne. 

2. zgodnie z komentarzem nie uda się nigdy sprawdzić kombinacji warunków if((False && False) || True)

6445
wyświetleń

To powinno Cię zainteresować