To po prostu bzdura!
Transkrypt
To po prostu bzdura!
To po prostu bzdura! © NewQuality Wyznania sfrustrowanego trenera jakości Ludzie przychodzą na zajęcia z testowania oprogramowania, aby nauczyć się czegoś nowego o tym jak wykonywać swoją pracę testera. Takie nowe umiejętności to albo metody, techniki lub podejścia, o których nie mieli pojęcia, że istnieją, albo nowe perspektywy tego, co już właściwie znają, ale o lepszej strukturze, bardziej spójne, prawdziwsze – a więc bardziej użyteczne. My, instruktorzy, powinniśmy zrobić to, co w naszej mocy, aby dać im to czego chcą i czego potrzebują. Czasem nie mamy pełnej kontroli nad naszym programem nauczania: tak się dzieje wtedy, kiedy uczymy na kursach akredytowanych, które się odbywać według z góry określonego programu zajęć. Jak do tej pory jest nieźle: w mojej opinii, międzynarodowe programy zajęć – czy to prawdziwie międzynarodowe, jak ISTQB, czy de facto akceptowane na forum międzynarodowym, jak ISEB – są wspaniałe. Rzeczywiście ich istnienie wymusza podnoszenie umiejętności testowania na wyższy poziom akredytacja zapewnia homogeniczne poziomy jakości pomiędzy sprzedawcami szkoleń, i w końcu, certyfikacja ma także pewną liczbę pozytywnych efektów. Podczas nauczania, najgorsza rzecz, jaka może się przytrafić, to zobaczyć jak uczestnicy kursu ziewają. Druga, najgorsza rzecz to zobaczyć rodzaj sennego, zamglonego spojrzenia w ich oczach, co wskazuje, że to, co tłumaczysz jakoś nie pasuje do ich ram odniesienia. To spojrzenie może oznaczać dwie rzeczy: ocenę „zbyt teoretycznie” na twoich arkuszach ocen i, oczywiście, nieumiejętność uczestników kursu zastosowania ich nowych umiejętności w praktyce. Pozwólcie mi na szczerość: widziałem to spojrzenie w oczach moich słuchaczy wiele razy. Niespodzianka! To się zdarza szczególnie często, kiedy tylko próbuję uczyć czegoś, co po prostu nie jest prawdziwe. A co jest takiego nieprawdziwego w programie zajęć, zarówno w ISEB jak i ISTQB? Przykro to stwierdzić, ale pewne bardzo podstawowe rzeczy. To nie jest po prostu prawdą, co oni mówią! Według ISEB i ISTQB… …rzeczywistość – w kilku słowach – wygląda następująco. Strona 1 (9) Istnieją dwa podstawowe obszary testowania: dynamiczne techniki testowania i testowanie statyczne (ISEB). ISTQB stoi trochę wyżej, przynajmniej nie musisz tłumaczyć swoim zdziwionym słuchaczom (których masz, kiedy trzymasz się programu zajęć ISEB ), że: • „dynamiczne” nie koniecznie oznacza „wysoką adrenalinę”; • dlaczego dynamiczne testowanie ma swoje techniki a statyczne najwyraźniej ich nie ma; • że „techniki testowania” nie oznaczają technik wykonania testu, lecz wyłącznie techniki projektowania testu. W terminologii ISTQB istnieją „techniki statyczne” i „techniki projektowania testu”. Zdecydowanie ładniejsze nazwy, niemniej jednak możesz ciągle być zmuszony do zapewniania ludzi, że termin „statyczne techniki” nie oznacza po prostu nie robienia niczego. Czyściutko, schludnie bloki budowli wpadają ładnie na swoje miejsce: przeglądy i statyczna analiza, czarna skrzynka i biała skrzynka, podział na klasy równoważności i analiza wartości granicznych, zgadywanie błędu (ISEB) i techniki uwzględniające doświadczenie (ISTQB). Ja zdecydowanie wolę terminologię ISEB, ponieważ zawsze mamy sporo zabawy zgadując czy to w rzeczywistości oznacza zgadywanie awarii, zgadywanie pomyłki czy naprawdę zgadywanie defektu. W obu przypadkach, czy to u ISEB czy też u ISTQB, te techniki są schowane na samym dnie polecenia: opisz OSTATNIĄ spośród technik, co w rzeczywistości oznacza PIERWSZĄ. Nieźle. Jednak, kiedy przyjrzysz się lepiej programowi zajęć ISTQB, ten mały zły duszek powraca: Pod dumną postacią „testowania z uwzględnieniem doświadczenia” ukrywa się „pisanie przypadków testowych z uwzględnieniem […] wiedzy o […] defektach”. Ponieważ „defekty” w języku ISTQB są tym samym, co „błędy” w języku ISEB, jakiś śmielszy uczeń zawsze podniesie swoją małą rączkę i zapyta mnie: „Proszę Pana, ostatnio projektowałem kilka przypadków testowych opartych na mojej wiedzy o niepowodzeniach, a nie defektach. Proszę Pana, czy to było źle?” Zapewniam go, że nie. W ten sposób więcej ośmielonych małych rączek podnosi się do góry. Lekko onieśmielona dziewczynka pyta: „Proszę pana, kiedyś projektowałam przypadek testowy w oparciu o moją wiedzę, że stos programu był przechowywany w rejestrze na mikroprocesorze, i było 256 rejestrów, i kiedy potrzeba było więcej stosu, został zamieniony w RAM…Proszę Pana, jaki kolor miało to testowanie? Czy to było być może testowanie bezbarwne, proszę Pana? Bo w przeciwnym wypadku, co może być bielsze niż białe?”. Strona 2 (9) Zanim zdołałem upomnieć ją za zadawanie niewłaściwych pytań, niezbyt bystry chłopiec wymamrotał: „Co za głupek ze mnie, przepraszam Pana, szczerze,…nie wiedziałem, że to było źle, zastosowałem partycjonowanie klasy równoważności do zaprojektowania pewnych przypadków testowych żeby sprawdzić czy moja obsługa parametru C++ była OK., ale nie widziałem, że to jest niedozwolone ponieważ to była technika czarnej skrzynki,… naprawdę, będę się starał pamiętać o tym następnym razem…” Gdyby ta klasa była prowadzona zgodnie z programem ISTQB, mógłbym mu tylko powiedzieć żeby był bardziej uważny w przyszłości („ niektóre techniki wpadają wyraźnie do pojedynczej kategorii; inne mają elementy więcej niż jednej kategorii”). Ale ponieważ było to według ISEB, powiedziałem mu żeby przyprowadził swoich rodziców do szkoły następnego dnia na rozmowę. Obawiam się, że trochę mnie poniosło z moją narracją. Na te kursy uczęszczają dorośli profesjonaliści w dziedzinie testowania i oni nie mówią do mnie „Proszę Pana”. Na tym etapie, oni przestają być zainteresowani, robią się śpiący, zdezorientowani, źli, a ja stoję tam przed grupą ludzi tak samo przestraszony ich znudzeniem (złe arkusze ocen!) i ich złością (jest ich więcej i zazwyczaj są dwa razy młodsi ode mnie). Ale to, co mnie naprawdę paraliżuje to, to, że zawsze znajdzie się ktoś kto może mnie spytać: „No cóż, Panie Mądralo, my właściwie nie używamy żadnej z twoich pięknych technik. Nie zgadujemy żadnych błędów, jakie by nie były, ponieważ nie jesteśmy czarodziejami, więc nie mamy pojęcia gdzie one mogą być. My po prostu projektujemy przypadki testowe, które pokryją wymagania naszego systemu, ale one są czystym tekstem, a nie praktycznymi przypadkami lub automatami skończonymi. I teraz, niech Pan mi powie Panie Mądralo, jakie my wykonujemy testowanie?” Będąc tchórzem, używam starej sztuczki wszystkich tchórzy i próbuję przyłączyć się do moich dręczycieli i stać się jednym z nich. Dlatego też mamroczę coś o programie nauczania będącym kompromisem, albo koniecznym uproszczeniem. Prawdopodobnie, mógłbym odnieść się do potrzeby pewnych zabawnych wyborów, żeby pytania egzaminacyjne mogły być sformułowane prościej (jeśli to jest kurs ISEB, całkowita i kompletna bezużyteczność włączenia indeksu McCabe’a do programu stanowi dla mnie dużą pomoc w osiągnięciu tego celu). Jednak, nawet tchórze mogą mieć dosyć i zechcą stawić czoła rzeczywistości zamiast jej unikać. Spójrzmy prawdzie w oczy: zawiłe klasyfikacje obu programów nauczania obejmują wiele użytecznych faktów i technik, ale one wyjątkowo źle odzwierciedlają rzeczywistość przemysłu oprogramowania. To nie jest po prostu tak jak oni mówią! Jak wybiera się przypadki testowe w rzeczywistości? Tak, testowanie naprawdę uwzględnia ryzyko, nawet, jeśli nienawidzę powtarzania tego stereotypu. Projektowanie przypadków testowych oznacza wybór stu lub tysiąca Strona 3 (9) najważniejszych z 101000 teoretycznie możliwych przypadków. A co naprawdę oznacza „najważniejszy”? Kompletny schemat jak podejmować decyzję o ważności możliwych przypadków testowych znajduje się poniżej na rysunku. 1. Ważność przypadku testowego 2. Testowalność 4. Koszty i wykonalność 3. Ważność awarii 5. Konsekwencje awarii 6. Prawdopodobieństwo awarii 7. Profil użycia 8. Prawd. defektu 9. Wiedza biznesowa 10. Modele zastosowania 11. Domyślanie się błędów i defektów Ilustracja 1 Estymacja wagi testu A oto wyjaśnienie rysunku, z odniesieniami do numerów węzłów. Pod warunkiem, że przypadki testowe są w przybliżeniu jednakowo łatwe do wykonania [2], ważniejsze [1] są te, które stanowią zabezpieczenie przed ważniejszymi awariami [3], gdzie całe drzewo poniżej [3] wyjaśnia, od czego naprawdę zależy „ważna awaria”. Jednak, kiedy awarie mają w przybliżeniu równe znaczenie [3], raczej przedłożysz przypadki testowe [1], które można łatwiej przetestować [2] nad te, które nie dają wiarygodnych rezultatów z powodu trudności wykonania lub możliwości obserwacji[4], albo tych, których wykonanie jest zbyt drogie [5]. Znaczenie awarii [3] jest, tak samo jak w tradycyjnym podejściu, funkcją jej konsekwencji lub ceny [5] i jej prawdopodobieństwa [6]. W jaki sposób znamy cenę awarii? No cóż, w zasadzie to nie jest rzecz do testowania, to dotyczy biznesu [9]. Jeśli ładnie zapytasz, na pewno ci powiedzą, … ale strzeż się, mogą odpłacić się pytając ciebie, jakie awarie są możliwe. Prawdopodobieństwo awarii[6] jest funkcją prawdopodobieństwa błędu [8] i prawdopodobieństwa użycia [7] ( zwanego częściej częstością użycia). Prawdopodobieństwo błędu [8] jest określone przez pewną liczbę Strona 4 (9) czynników[11], które są skrzętnie wymienione w wielu książkach na temat testowania. A propos, „ zgadywanie błędu” (ISEB) czy „zgadywanie defektu” ( ISTQB) jest po prostu: szacowaniem prawdopodobieństwa błędu [8]. Faktyczne „techniki uwzględniające doświadczenie” (ISTQB) oznaczałyby estymację całego, powyższego drzewa: oszacowania wszystkich wartości i sił (kształty funkcji) ich niezależności. Z jakiegoś powodu, niedającego się zrozumieć, ISTQB wybrał jeden mały listek [11] z całego drzewa i nazwał go „testowanie uwzględniające doświadczenie”! Nie mogę się oprzeć pokusie gry słownej: „zgadywanie błędu” wg ISEB, jeżeli potraktujesz znaczenie słowa „błąd” zgodnie z jego definicją BS 7925-1, zdecydowanie byłoby częścią faktycznego „zgadywania defektu”. No wiesz, tak jak zgadywanie czy wszystko jest w porządku z małżeństwem Jane (jeżeli nie jest, to jest bardziej prawdopodobne, że ona zrobi błąd), itd. Pozbądźmy się ostatniej części rysunku, o której jeszcze nie wspominałem: żeby oszacować prawdopodobieństwo użycia [7] potrzebujesz pewnego rodzaju wymyślonego lub opartego na doświadczeniu – modelu użycia dla tej konkretnej funkcji, dla której obliczasz znaczenie awarii. Zauważ: rysunek powyżej ( zdecydowanie może potrzebować uzupełnienia o kilka szczegółów w najniższym poziomie) jest jedyną zasadą, której potrzebujesz, aby rozmawiać o priorytetyzacji przypadków testowych.Całe pozostałe oratorstwo na ten temat, tak powszechne do tej pory, nie jest już potrzebne. Po prostu powiedz swojemu klientowi żeby kupił narzędzie BBN (Bayesian Relief Nets) i rozpoczął zbieranie danych! Znajdź w wyszukiwarce co to jest BBN, jeśli tego nie wiesz. Pełny obraz Rozwiązanie opisane wcześnie ma jeden mały haczyk w sobie: powinno być stosowane do „ wybierania stu albo tysiąca najważniejszych przypadków spośród 101000 teoretycznie możliwych”. Jedno takie drzewo jak na Rysunku 1 dla każdego z nich i wkrótce jesteśmy gotowi! Dlatego dodatkowe metody wybierania przypadków testowych są konieczne. I oto nagle nasze dumne drzewo z wszechmocnego i ostatecznego narzędzia do projektowania testowania zostaje zredukowane – z powodu wagi liczb – do ostatecznego narzędzia dla dużo bardziej ograniczonego obszaru, mianowicie do priorytetyzacji tych przypadków testowych, które zostały wybrane w inny sposób. Wobec tego, w jaki sposób? Są dwa podejścia: intuicyjne i systematyczne. Z jakiegoś powodu ISEB i ISTQB opisują tylko systematyczne techniki projektowania testów, odsyłając intuicyjne w zapomnienie ( całkowicie lekceważąc fakt, że ponad 70% Strona 5 (9) światowej populacji przypadków testowych jest zaprojektowana przy pomocy środków intuicyjnych), albo redukując je do maleńkiej partykuły zwanej albo „zgadywaniem błędu” albo testowaniem z uwzględnieniem doświadczenia”, w rzeczywistości mając na myśli „oszacowanie prawdopodobieństwa awarii”, co z kolei jest patetycznie nieadekwatne. Dla zarówno intuicyjnego jak i systematycznego podejścia istnieją dwie podstawowe filozofie projektowania testów: czarna skrzynka i biała skrzynka. Zdecydowanie, czarno-biała skala jest jednakowo ważna dla intuicyjnego jak i systematycznego podejścia, w przeciwieństwie do wrażenia, jakie odnosisz z programów nauczania ISEB/ISTQB, w których taki podział występuje tylko w technikach systematycznych. Zauważ również, że czarne- białe jest zaledwie dwuwartościową dyskretną skalą, jak to jest często prezentowane. To jest raczej skala, która rozpoczyna się od 100% czerni (coś się kryje za tą ścianą, co daje odpowiedzi na twoje pytania, a ty nie wiesz lub jest ci wszystko jedno czy to istota ludzka czy komputer) do 100% bieli projektujesz przypadki testowe biorąc pod uwagę poziom elektronicznego wejścia), poprzez różne odcienie szarości. W każdym razie, poprawna (nieco uproszczona) macierz podejścia/filozofii testowania wygląda jak na poniższym rysunku: Systematyczne Intuicyjne Czarnej skrzynki Białej skrzynki Ilustracja 2 Klasyfikacja metod projektowania testów Strzałki na slajdzie symbolizują fakt, że nie ma technik czysto czarno-skrzynkowych i czysto biało-skrzynkowych, lecz jest to pewne kontinuum. Podobnie rzecz ma się z kontinuum na skali intuicyjne – formalne. To nie jest koniec historii. W przeciwieństwie (znowu) do tego, co udaje program nauczania, nie ma żadnego pojęciowego kanionu pomiędzy statycznym i Strona 6 (9) dynamicznym testowaniem. Nazywanie ”przeglądu” techniką statyczną jest tym samym, co nazywanie „wykonania testu” techniką dynamiczną. Bez wątpienia projekt przypadku testowego jest wymagany nawet w testowaniu statycznym, chociaż oczywiście to, co tworzy ważny przypadek testowy, różni się. W testowaniu statycznym, tak samo jak w dynamicznym, musisz najpierw przejść przez etap projektowania testu – na przykład, decydując wystarczająco szczegółowo, co przeglądać i jak – przed wykonaniem faktycznego przeglądu. Dlatego też, ostateczny, kompletny i pozbawiony jakichś sztucznych granic, zestaw klas projektów testów jest trójwymiarowy, składający się z ośmiu elementów, jak pokazano na rys.2. static systematic black-box dynamic systematic black-box static intuitive black-box dynamic intuitive black-box static systematic white-box dynamic systematic white-box static intuitive white-box dynamic intuitive white-box Ilustracja 3 Pełna klasyfikacja metod projektowania i wykonywania testów Zauważ, że słowa „techniki testowania” nie zostało jeszcze wypowiedziane, ponieważ prawdziwym zagadnieniem są klasy projektu testu, których jest około ośmiu (…około, ponieważ, jak wspomniałem uprzednio, w rzeczywistości jest więcej niż tylko dwie wartości na czarno-białej skali). Przyczyna, dla której ISEB/ISTQB kładą nacisk na techniki testowania ma oczywiście charakter dydaktyczny: zasadniczym celem podstawowego kursu testowania jest nauczenie testerów technik projektowania testów, które będą potrafili zastosować w tym, w co najczęściej stosują, tj. w testowaniu dynamicznym. Jednakże, nie ma powodu, żeby konstruować całą fałszywą, koncepcyjną strukturę, aby osiągnąć ten praktyczny cel! Poza tym, praktyka i zdrowy rozsądek są i tak złożone na ołtarzu… trudno powiedzieć, czego, ponieważ techniki intuicyjne, z którymi większość testerów pracuje na co dzień, są całkowicie odrzucone. Znów, można domyśleć się, jakie racjonalne uzasadnienie się za tym kryje: i tak wszystkie projekty testują intuicyjnie, ale w wielu z nich brakuje zastosowania niektórych, rozsądnych technik Strona 7 (9) systematycznych. I znowu, to racjonalne uzasadnienie jest wątpliwe: nie ma potrzeby budowania modelu, który nie jest prawdziwy w porównaniu z rzeczywistością, aby osiągnąć bardziej rozpowszechnione zastosowanie systematycznych technik testowania. I ostatni, choć nie najmniej ważny wniosek: testowanie intuicyjne również potrzebuje ulepszenia, tak, więc dlaczego zaniedbywać je zupełnie? W końcu: przykład Zobaczmy jak model przedstawiony na rys.3 działa w prawdziwych technikach projektowania testowania. Weźmy trzy techniki: (1) testowanie stanu przejścia, (2) testowanie z uwzględnieniem doświadczenia z przeszłości, związanego z rozkładem błędów podobnego systemu i (3) testowanie oparte na instrukcji albo innym pokryciu kodu. Przejście staanu Doświadczenie Pokrycie kodu Obszar najbardziej powszechnego użycia Nie do zastosowania Sprawdzenie czy używane są wszystkie metody (ale nie, czy wszystkie kody wewnątrz metod). OK., to jest szare, a nie zdecydowanie czarne Dynamiczna systematyczna biała skrzynka Np. testowanie obiektu w pewnej liczbie stanów Nie do zastosowania Obszar najbardziej powszechnego użycia Dynamiczna intuicyjna czarna skrzynka Nie do zastosowania Podobne raporty były złe w przeszłości Nie do zastosowania Nie do zastosowania Znalezienie błędu w podobnym, sortującym algorytmie zabrało nam 3 dni Nie do zastosowania Dynamiczna systematyczna czarna skrzynka Dynamiczna intuicyjna biała skrzynka Statyczna systematyczna czarna skrzynka Projektowanie state machine do weryfikacji napisanych wymagań Strona 8 (9) Inspekcja kodu, aby upewnić się, że będące w przygotowaniu środowisko testowe będzie w stanie przywołać wszystkie stany; znowuto jest szare, a nie zdecydowanie czarne. Statyczna systematyczna biała skrzynka Statyczna intuicyjna czarna skrzynka Projektowanie state machine do weryfikacji opisu funkcji niższego szczebla Inspekcja kodu, aby zmierzyć możliwe pokrycie trudnej do wykonania części kodu. Nie do zastosowania W tym obszarze wymagania użytkownika były bardzo mgliste Nie do zastosowania Nie do zastosowania Spójrz, ten facet używa trampoliny zamiast ponownego przywołania właściwej funkcji! Nie do zastosowania Statyczna intuicyjna biała skrzynka Tabela 1 Przykłady testów wg powyższej klasyfikacji To działa! I jesteśmy dumni z dokonania małego odkrycia, nawet, jeżeli jest dość oczywiste (chociaż jakoś odmienne od programu nauczania ISEB/ISTQB): oczywiście nie ma „czarnych” technik czy „białych” technik, ale są techniki systematyczne albo intuicyjne. Jakaś technika nie może być jednocześnie niesystematyczna i systematyczna. Miejmy nadzieję, że ten artykuł nie będzie przeszkodą w żadnej przyszłej akredytacji dla mojej firmy1. 1 Nie było - 2008 Strona 9 (9)