Kategoria

Ron patton software testing, strona 4


rozdział 14
21 września 2019, 15:11

Część IV Czym wesprzeć testowanie
Gdyby cała armia małp stukała w maszyny do pisania, mogłaby napisać wszystkie książki z Muzeum Brytyjskiego.
- Sir Arthur Eddington, brytyjski astronom i fizyk
W TEJ CZĘŚCI Testowanie automatyczne i narzędzia do testowania Polowanie na błędy i testowanie beta
Rozdział 14  Testowanie automatyczne i narzędzia do testowania
W TYM ROZDZIALE Pożytki z automatyzacji i narzędzi Narzędzia do testowania Automatyzacja testu oprogramowania Testowanie na chybił-trafił: małpy i goryle Użycie narzędzi i automatyzacja testowania w rzeczywistości
Testowanie oprogramowania to ciężka praca. Kto podczas lektury tej książki zajęty był także testowaniem, wie że samo wykonywanie testów to ciężka, fizyczna praca, która zajmuje wiele czasu i kosztuje wiele wysiłku. Oczywiście, można by włożyć jeszcze więcej wysiłku w zmniejszenie ilości klas równoważności, dzięki czemu ilość zadań testowych do wykonania też byłaby mniejsza, ale w ten sposób zwiększyłoby się również poziom ryzyka, zmniejszywszy pokrycie testowe i dokonując wyboru, że pewne - może istotne - funkcje nie zostaną przetestowane. Trzeba testować więcej, ale nie ma na to czasu. Co począć?
Rozwiązaniem jest zastosowanie metody znanej już od dawna z wielu innych dziedzin i przede wszystkim z przemysłu wytwórczego - wynaleźć i zastosować narzędzia, które uczynią pracę łatwiejszą i skuteczniejszą. O tym właśnie traktuje ten rozdział.
Najważniejsze punkty rozdziału: 1. Czemu użycie narzędzi do testowania i automatyzacja są konieczne 2. Przykłady prostych narzędzi 3. W jaki sposób zastosowanie narzędzi przeradza się w automatyzację 4. W jaki sposób karmić i dbać o „małpy” 5. Czemu automatyzacja testowania nie jest lekarstwem na wszystko Pożytki z automatyzacji i z narzędzi
Przypomnijmy sobie, co wiemy o wytwarzaniu oprogramowania. W większości modeli wytwarzania oprogramowania, pętla kodowanie - testowanie - poprawki powtarza się wielokrotnie przed ostatecznym wypuszczeniem oprogramowania. Oznacza to, że każdy test może trzeba będzie wykonać nie jeden raz, ale dziesiątki razy. Sprawdza się, czy błędy znalezione w czasie wykonywania poprzedniej serii testów rzeczywiście zostały naprawione i że nie pojawiły się żadne nowe błędy. Ten proces ponownego wykonywania tych samych zadań testowych nazywany jest testowaniem regresywnym1.
Mały projekt produkcji oprogramowania, mający kilka tysięcy zadań testowych do wykonania, może nie mieć nawet czasu aby wykonać je wszystkie choć jeden raz. Wielokrotne ich wykonywanie jest wobec tego niemożliwe, pomijając już to, że byłoby okropnie monotonne. Narzędzia do testowania i do automatyzacji rozwiązują ten problem stwarzając lepsze metody niż ręczne wykonywanie testów.
Oto najważniejsze zalety narzędzi i automatyzacji: 6. Szybkość. Wyobraźmy sobie, ile czasu zajęłoby ręczne wykonanie paru tysięcy zadań testowych dla Kalkulatora Windowsów. Tester może w najlepszym razie wykonywać jedno zadanie na, powiedzmy, pięć sekund. Automatyzacja może skrócić ten czas 10, 100 a nawet 1000 razy. 7. Skuteczność. Będąc zajętym wykonywaniem testów, nie robi się w tym czasie nic innego. Mając do dyspozycji narzędzie, które skraca czas potrzebny na wykonanie testowania, otrzymuje się więcej czasu do dyspozycji na planowanie i projektowanie zadań testowych. 8. Trafność i precyzja. Zrobiwszy to samo kilkaset razy, człowiek nie jest w stanie dłużej zachować tej samej koncentracji i ryzyko popełnienia błędu wzrasta. Narzędzie wykonuje testy i kontroluje wyniki równie dobrze za każdym razem. 9. Nieustępliwość. Narzędzia do testowania nigdy się nie męczą i nigdy nie rezygnują. Działają jak ten królik na bateryjki z reklamy telewizyjnej: chodzą w kółko i w kółko i…
1 Warto jest odróżniać zadania testowe wykonywane ponownie po to, by sprawdzić, że wykryty wcześniej błąd rzeczywiście został naprawiony od tych, które wykonuje się ponownie po to, by sprawdzić, czy funkcje działające uprzednio działają nadal. Niektóre standardy stosują określenie testowanie ponowne (re-testing) na pierwszy rodzaj, zaś testowanie regresywne (regression testing) wyłącznie na drugi rodzaj (przyp. tłumacza).
Wszystko to brzmi pięknie - można kazać narzędziom wykonać za nas całą pracę, uruchomić je i spokojnie czekać na wyniki. Niestety, nie jest aż tak dobrze. Domów nie da się budować automatycznie, chociaż cieśle mają do dyspozycji piły motorowe i pistolety do wbijania gwoździ. Narzędzia ułatwiają pracę i umożliwiają osiągnięcie lepszej jakości. Tak samo działają narzędzia do testowania.
Narzędzia do testowania nie zastąpią testerów - tylko pomogą testerom lepiej wykonywać swoją pracę.
Warto wziąć pod uwagę, że nie zawsze użycie narzędzi do testowania jest włściwym rozwiązaniem. Czasem nic nie zastąpi testowania ręcznego1. Na razie zapoznamy się z możliwościami i sposobem działania narzędzi, zastanawiając się przy tym, jak można by je zastosować do stojących przed nami zadań testowych. Na końcu rozdziału dowiemy się, jakie są ograniczenia i jak zachować ostrożność, zanim podejmie się próby użycia narzędzi w rzeczywistych projektach. Narzędzia do testowania
Tester oprogramowania spotyka się z wieloma różnymi rodzajami narzędzi. Co będzie przydatne w praktyce zależy od typu testowanego oprogramowania i od tego, czy wykonuje się testowanie metodami czarnej czy szklanej skrzynki.
Piękno narzędzi do testowania polega na tym, że nie zawsze trzeba być specjalistą od tego, jak one działają ani co dokładnie robią, by móc nimi skutecznie się posługiwać. Wyobraźmy sobie, że testuje się oprogramowanie sieći, które umożliwia komputerowi jednoczesny kontakt z milionem innych komputerów. Byłoby trudno lub wręcz niemożliwe przeprowadzić test miliona rzeczywistych połączeń. Mając do dyspozycj narzędzie pozwalające symulować takie połączenia - na przykład dzwoniąc na różne numery telefoniczne od jednego do miliona - dałoby się wykonać taki test bez potrzeby stosowania rzeczywistych scenariuszy. Nie musi się rozumieć, w jaki sposób takie narzędzie działa - wystarczy że działa. Oto testowanie czarnej skrzynki.
Z drugiej strony, można posłużyć się narzędziami do monitorowania i do modyfikowania protokołu komunikacyjnego - między tym milionem komputerów - na niskim poziomie. Aby skutecznie posługiwać się takim narzędziem, trzeba umieć stosować metody szklanej skrzynki i rozumieć działanie protokołu na niskim poziomie.
1 Jest popularne przysłowie - "automatyczny chaos to szybszy chaos" - bardzo stosowne w odniesieniu do automatyzacji testów oprogramowania (przyp. tłumacza).
W tym przykładzie spotykamy się z istotnym rozróżnieniem dwóch rodzajów narzędzi: nieintruzyjnych oraz intruzyjnych1. Jeśli narzędzie używane jest tylko do tego, by by monitorować i badać stan programu nie modyfikując go w żadnen sposób, uważa się je za nieintruzyjne. Jeśłi jednak narzędzie modyfikuje kod programu albo zmienia w jakiś sposób jego środowsiko, nazywa się je intruzyjnym. Można wyróżnić rozmaite stopnie itruzyjności. Testerzy zwykle usiłują posługiwać się narzędziami jak najmniej intruzyjnymi aby zmniejszyć możliwość wpływu narzędzia na uzyskiwane wyniki testów2.
Na kilku najbliższych stronach zostaną opisane najważniejsze rodzaje narzędzi do testowania i sposoby och zastosowania. Niektóre z opisanych narzędzi są zwykle częścią środowiska większości języków programowania, inne są sprzedawane osobno. Może się jednak zdarzyć, że wytwarzany sprzęt lub oprogramowania jest na tyle specyficzne, że potrzebne są specjalne narzędzia na zamówienie - albo wykonane samemu - dostosowane do tych potrzeb. Również te narzędzia dają się zwykle zaliczyć do jednej z opisanych dalej kategorii.
Analizatory i monitory
Analizatory albo monitory to narzędzia pozwalające obserwować szczegóły działania programu, których nie da się zobaczyć gołym okiem. W rozdziale 7-ym „Testowanie oprogramowania pod rentgenem” poznaliśmy analizatory pokrycia testowego, pozwalające na identyfikację wykonanych linii kodu, funkcji oraz ścieżek, przez które program przeszedł podczas wykonywania zadań testowych. Analizator pokrycia testowego jest jednym z przykładów analizatora. Większość analiazatorów pokrycia jest intruzyjnych ponieważ muszą by wkompilowane albo włączone w program, żeby mieć dostęp do dostarczanej informacji.
1 W oryginale non-invasive (nieintruzyjne) oraz invasive (intruzyjne). Częściej spotykane określenia to non-intrusive oraz odpowiednio intrusive (przyp. tłumacza).
2 Nie całkiem tak jest. Użycie narzędzi zwiększa skuteczność i szybkość testów, ale kosztem zastosowania intruzyjnych narzędzi, które powodują, że środowisko testowania różni się od operacyjnego. Celem jest osiągnięcie właściwej rónowagi między tymi dwoma przeciwstawnymi tendencjami oraz w miarę prezycyjne oszacowanie wpływu intruzyjności na wyniki testów (przyp. tłumacza).
Rysunek 14.1 pokazuje inny rodzaj analizatora - analizator komunikacyjny (określany też często angielskim słowem sniffer, „obwąchiwacz”). To narzędzie umożliwia obserwację danych przesyłanych przez sieć albo inne łącze komunikacyjne. Takie narzędzie po prostu podłącza się do linii komunikacyjnej, wychwytuje przesyłane pakiety danych i wyświetla je na innym komputerze. Testując taki system, wprowadziłoby się dane inicjujące zadanie testowe na komputerze nr 1, skontrolowało komunikację na komputerze nr 3 i sprawdziło poprawnośc wyniku na komputerze nr 2. Tym samym systemem posłużylibyśmy się w czasie poszukiowania źródła błędu po odkryciu awarii. Badając przesyłane dane, można by stwierdzić, czy źródłem problemu jest generowanie danych (komputer nr 1), czy też ich interpretacja (komputer nr 2). Ten rodzaj systemu jest nieintruzyjny względem oprogramowania.
Komputer nr 1 Testowane oprgramowanie
Komputer nr 2 Testowane oprgramowanie Łącze komunikacyjne
Podłączenie analizatora
Komputer nr 3 Analizator - narzędzie testowe
Rysunek 14.1 Analizator komunikacji umożliwia obserwowanie danych przesyłanych między dwoma systemami.
Programy śledzące dostępne razem z większością kompilatorów też taktuje się jako analizatory, ponieważ umożliwiają testerom posługującym się metodami szklanej skrzynki na dostęp do wartości zmiennych i śledzenie stanów programu. Każde narzędzie umożliwiające wgląd w dane programu, do których zwykły użytkownik nie ma dostępu, można zaklasyfikować jako analizator.
Sterowniki
Sterowniki to narzędzia stosowane do sterowania i kontrolowania testowanego oprogramowania. Najprostszym przykładem sterownika jest plik wsadowy (batch file), będący prostą listą sekwencyjnie wykonywanych programów lub komend. W czasach MS-DOS była to popularna wśród testerów metoda wykonywania programów testowych. Konstruowało się plik wsadowy zawierający nazwy programów testujących, puszczało się plik i szło do domu. Wpółczesne systemy operacyjne i języki programowania maja bardziej wyrafinowane metody wykonywania programów testowych. Na przylkład, w miejsce starego pliku wsadowego MS-DOS można zastosować skomplikowany skrypt w Perl‘u, zaś Widows Task Scheduler (program szeregujący, rysunek 14.2) można zastosować do puszczania różnych programów testowych o określonych porach dnia.
Rysunek 14.3 pokazuje inny rodzaj sterownika. Załóżmy że testopwane oprogramowanie wymaga wprowadzania wielkich ilości danych testowych. Przy pomocy nieco zmodyfikowanego sprzętu i paru narzędzi programowych, mozna zastąpić klawiaturę i mysz testowanego systemu przy pomocy dodatkowego komuptera, działającego jak strownik. Na tym komputerze można napisać proste programy, automatycznie generujące uderzenia klawiszy i ruchy myszy, które program przekazuje testowanemu oprogramowaniu.
Rysunek 14.2 Program szeregujący umożliwia wyznaczenie kolejności wykonywania programów lub plików komend.
Normalna konfiguracja
Kabel klawiatury
Sterownik testoów
Kabel myszy
Rysunek 14.3 Komputer może działac jako sterownik zastępujący klawiaturę i mysz w testowanym systemie.
Można zadać sobie pytanie, po co zawracać sobie głowę tak skomplikowaym ustawieniem? czemu po prostu nie uruchomić na pierwszym systemie programu, który wysyłalaby uderzenia klawiszy do testowanego oprogramowania? Są tutaj dwa możliwe problemy: 10.System operacyjny może nie być wielozadaniowy, co uniemożliwia jednoczesne wykonywanie obu programów. 11. Wysyłajac uderzenia klawiszy i ruchy myszy z osobnego komputera, stawarzamy system względnie nieintuzyjny. Kiedy zaś sterownik jest wykonywany na tym samym komputerze co testowaney program, jest to intruzyjne, co można uznać za niedozwolony sposób testowania.
Szukając sposobu sterowania testowanuym oprogramowaniem, trzeba wziąć pod uwagę wszelkie techniki zewnętrznego sterowania programem, a potem zacząć szukać sposobu, jak istniejącą kontrolę zastąpic czymś, co będzie automatycznie  wprowadzać dane wejściowe.
Namiastki
Namiastki, tak jak sterowniki, zostały już wspomniana w rozdziale 7-ym, poświęconym technikom szkalnej skrzynki. Namiastki są dokładną odwrotnością sterowników w tym sensie, że że niczym nie kierują, tylko przyjmują i odpowiadają na dane, wysyłane przerz testowane oprogramowania. Rysunek 14.4 ilustruje tę sytuację.

Normalna konfiguracja
Konfiguracja namiastkowa
Rysunek 14.4 Komputer może działać jako namiastka, zastępując drukarkę i umożliwiając skuteczniejszą analizę danych wyjściowych z testów.
Testując oprogramowanie, które wysyła dane na drukarkę, można je przetestować rzeczywiście drukując dane na drukarce i kontrolując wydruk na papierze. Będzie to działać, ale dość wolno, nieefektywnie i będzie się narażonym na dowolność. Czy da się zauważyć, że brakuje jednego piksela albo minimalną różnicę w kolorze? Gdyby zamiast tego zastąpić drukarkę innym komputerem z programem (namiastką) czytającą i intrepretującą dane wysyłane do drukarki, dałoby się skontrolować wyniki znacznie szybciej i precyzyjniej.
Namiastki często używa się, gdy programowanie musi komunikować się z zewnętrznym sprzętem. W czasie wytwarzania oprogramowania często sprzęt jeszcze nie istnieje albo jest trudno go zdobyć. Użycie namiastki pozwala rozpocząć test oprogramowania zanim jeszcze powstał sprzęt, a ponadto czyni testowanie skuteczniejszym.
Czasem używa się terminu emulator na określenie urządzenia, które zastępuje inne urządzenie. Na przykład PC zastępujący drukarkę w ten sposób, że interpretuje kody wysyłane przez program do drukarki i odpowiada programowi tak jakby to robiła drukarka, jest właśnie emulatorem. Różnica między emulatorem a namiastką jest taka, że namiastka umożliwia także dostęp i analizę wysyłanych do niej danych.1
Narzędzia do testowania przeciążającgo i na obciążenie
Te narzędzia - jak sama nazwa wskazuje - służą do obciążania i przeciążania testowanego oprogramowania. Na przykład testowany program do przetwarzania tekstu działa poprawnie kiedy jest jedyną działającą na systemie w danej chwili aplikacją, z dostępem do całej pamięci i przestrzeni na dysku. Ale kiedy tych zasobów zacznie brakować w systemie, zwiększa się szansa awarii. Żeby to spowodować, można oczywiście skopiować na dysk wiele plików, żeby go zapełnić, albo uruchomić wiele programów jednocześnie, żeby wypełniły pamięć komputera, ale takie metody są mało skuteczne i nieprecyzyjne. Narzędzie specjalnie zaprojektowane do takiego testowania znacznie je ułatwia.
1 Różnica między emulatorem, symulatorem i namiastką to zawsze atrakcyjny temat do dsykusji w czasie przerw na kawę. Słowo namiastka (ang. stub) zwykle - inaczej niż w tej książce - używane jest na oznaczenie kodu (rutyny), która zstępuje kod jeszcze nie gotowy z trakcie integracji odgórnej.
Rysunek 14.5 przedstawia program Microsoft Stress, wchodzący w skład środowiska pracy dla programistów, tej samej firmy. Inne systemy operacyjne też mają podobne narzędzia. Program przeciążający pozwala ustawiać ilość pamięci wewnętrznej, powierzchni dysku, plików i innych zasobów dostępnych dla testowango programu.
Rysunek 14.5 Program Microsoft Stress umożliwia ustawianie ilości zasobów dostępnych dla testowanego oprogramowania.
Ustawienie wartości zasobów na poziom zerwoy lub bardzo niski wymusi na oprogramowaniu wykonywanie innych niż zwykle ścieżek, obsługujących sytuacje tego rodzaju ograniczeń. Oprogramowanie powinno w tej sytuacji działać bez awarii i bez utraty danych. Może pracować wolniej, wyświetlać komunikaty o braku zasobów itp, ale powinno działać poprawnie i degradacja funkcjonalności powinna następować w sposób kontrolowany.
Narzędzia obciążające są podobne do narzędzi przeciążających w tym sensie, że służą do stwarzania sytuacji trudno osiągalnych w inny sposób. Na przykład dostępne są w handlu programy do obciążania serwerów WWW symulujące wybraną ilość jednoczesnych sesji i trafień. Specyfikacja wymagań może żądać, by serwer był w stanie obsłużyć 10000 jednoczesnych użytkowników i 1 milion trafień dziennie bez widocznego wzrostu czasu odpowiedzi. Mając do dyspozycji narzędzie do obciążania, wystarczy wstukać żądany poziom obciążenia, przeprowadzić testy i skontrolować wyniki.
Generatory zaburzeń i szumu
Kolejną klasę narzędzi stanowią generatory zaburzeń i generatory szumu1. Podobne są w działaniu do narzędzi obciążających, ale funkcjonują bardziej losowo. Na przykład narzędzie przeciążające może mieć tryb działania losowo zmieniający ilość dostępnych zasobów. Testowany program może działać dobrze zarówno wtedy, kiedy dostępne jest dużo pamięci jak i wtedy, kiedy pamięci jest mało, ale zawodzić, jeśli ilość dostępnej pamięci nieustannie się zmienia. Ten rodzaj błędu mógłby zostać odkryty przez program przeciążający działający w trybie losowym.
Podobnie, dokonawszy małej zmiany w ustawieniu analizatora z rysunku 14.1 tworzy się konfigurację taką jak na rysunku 14.6. W tym ustawieniu analizator zastąpiony jest przez system (sprzęt plus oprogramowanie) który umożliwia nie tylko analizę danych przepływających łączem, ale także ich modyfikowanie. Takie ustawienie może służyc do symulowania wszelkiego rodzaju błędów w komunikacji polegających na gubieniu danych, szumie, wadliwych połączeniach itp.
Komputer nr 1 Testowane oprogramowanie
Komputer nr 2 Testowane oprogramowanie Łącze komunikacyjne
Rysunek 14.6 Generator zaburzeń podczepiony do łącza komunikacyjnego może służyć do testowania, jak oprogramowanie radzi sobie z błędami wynikającymi z szumu na łączu.
Przy podejmowaniu decyzji jak można zastosować generatory zaburzeń i szumu, bierze się pod uwagę jakie zewnętrzne warunki wpływają na testowane oprogramowanie, a następnie projektuje sposoby manipulacji tymi wpływami tak, żeby sprawdzić jak oprogramowanie sobie z nimi radzi.
Narzędzia analityczne
1 Klasyfikowanie narzędzi do testowania to zadanie, które - jak każdą klasyfikację - można przeprowadzić na wiele sposobów. W praktyce istnieje olbrzymia ilość różnych kombinacji funkcji narzędzi. Wiele dostępnych na rynku narzędzi łączy w sobie szereg zintegrowanych funkcji, a producenci często lansują specjalne nazwy dla tego typu agregatów. Dlatego dla ułatwienia orientacji najlepsze byłoby klasyfikowanie funkcji narzędzi, nie zaś samych narzędzi. Autor niestety wybrał wariant przeciwny i w tym podrozdziale opisuje wręcz sposób zastosowania narzędzi jako osobny "typ" narzędzia. Warto pamiętać, że na dobrą sprawę nie istnieje żadna powszechnie przyjęta terminologia w tej dziedzinie (przyp. tłumacza).
Do tej kategorii zaliczy się całą resztę narzędzi1. Wielu testerów ułatwia sobie pracę stosując powszechnie stosowane aplikacje. Nie zawsze są one tak wymyślne jak opisane dotąd, ale dobrze służą i oszczędzają wiele pracy i czasu. 12.Programy do przetwarzania tekstu 13.Arkusze kalkulacyjne 14.Bazy danych 15.Programy do porównywania ze soba plików 16.Programy do przechwytywania i porównywania zawartości ekranu 17.Programy śledzące 18.Kalkulatory binarne i heksadecymalne 19.Stopery 20.Magnetowid i kamera wideo
Oczywiście, złożoność i charakter istniejących programów zmienia się nieustannie. Każdą sytuację trzeba zanalizować oddzielnie, aby móc wybrać pasujące do niej narzędzia i najlepszy sposób ich zastosowania. Automatyzacja testu oprogramowania
Chociaż narzędzia do automatyzacji testowania to po prostu jeszcze jedna kategoria narzędzi do testowania, jednak zasługują one na specjalne potraktowanie. Narzędzia omówione dotąd są bardzo skuteczne, ale nadal wymagają bezpośredniej, ręcznej obsługi i obserwowania wyników. A gdyby tak dało się te narzędzia połączyć, uruchomić i posługiwać się nimi bez konieczności ludzkiej interwencji? Mogłyby wykonywać testy, szukać błędów, analizować i logować wyniki. To jest właśnie automatyzacja testowania.
W kilku następnych częściach tego rozdziału opisane są różne rodzaje automatyzacji, od najprostszej do najbardziej złożonej.
Nagrywanie i odtwarzanie
1 Rzeczywiście, autor wrzucił tutaj do jednego worka między innymi narzędzia używane do zarządzania testami (bazy danych, arkusze kalkulacyjne), do porównywania wyników testów z oczekiwanymi poprawnymi wynikami (komparatory) oraz rozmaite narzędzia do wyliczania oczekiwanych poprawnych wyników (tzw. wyrocznie, ang. oracle).
Najabrdziej podstawową formą automatyzacji testowania jest nagrywanie wszelkich czynności wykonywanych przy pomocy myszy i klawiatury w czasie pierwszego, ręcznego testowania, a następnie odtwarzanie tego nagrania, kiedy potrzeba wykonać te same testy ponownie. Jeśii testowanye oprogramowanie działa na systemie Windows lub na Micintoshu, nagrywanie i odgrywanie będzie bardzo proste. Na Macintoshu używa się QuicKeys; na Windows można posłużyć się otwartym programem Macro Magic1. Wiele tego typu narzędzi jest dostępnych, niektóre typu shareware (otwarte, darmowe).
Tego typu programy są rodzajem sterowników2. Jak juz było opisane, sterowniki są to narzędzia stosowane do kontrolowania i kierowania testowanym oprogramowaniem. To właśnie robi program nagrywający/odgrywający: nagrane działania są odgrywane, powtarzając to, co zostało wcześniej zrobione w celu przetestowania oprogramowania.
Rysunek 14.7 pokazuje ekran asystenta ustawień Macro3, porwadzącego użytkownika krok po proku przez wszystkie czynności potrzebne do skonfigurowania i nagrywania testowych sekwencji.
Rysunek 14.7 Aystent ustavień Macro umożliwia skonfigurowanie w jaki sposób nagrane makro jest wywoływane i odtwarzane (ilustracja za zgodą Iolo Technologies, www.iolo.com).
Asystent ustawień Macro pozwala na ustawienie następujących opcji:
1 Istnieją dziesiątki, jeśli nie setki tego typu programów (zwanych narzędziami nagrywania/odgrywania, ang. capture/playback albo capture/replay) - przyp. tłumacza.
2 Można tę definicję przyjąć wobec zastosowania narzędzia w trakcie odtwarzania, natomiast w trakcie nagrywania działają raczej jak analizator czy program śledzący z możliwością nagrywania zaobserwowanych zjawisk (przyp. tłumacza).
3 Macro - to nazwa programu nagrywania/odtwarzania Microsoftu. Ta myląca nazwa bierze się stąd, że nagranie zapisywane jest w postaci programu "makropoleceń", czyli po prostu programu w specjalnie do takich zastosowań dopasowanym języku (przyp. tłumacza).
Nazwa. Nadanie makroprogramowi nazwy pozwala na jego późniejszą identyfikację. Setki makroprogramów mogą być potrzebne nawet do przetestowania małego programu. 22.Powtórzenia. Testowanie powtórzeniami jest świetnym sposobem znajdowania błędów. Można ustawic ile razy makroprogram zostanie wykonany. 23.Wyzwalacze. Można ustawić, co spowoduje wykonanie makroprogramu. Może to być gorący klawisz (np. Ctrl+Shift+T), komenda (np. wykonaj makro 1), kliknięcie na skrót, pojawienie się jakiegoś okna (np. zawsze gdy wystartuje Kalkulator), albo jeśli system przez jakiś czas nie zanotował żadnej aktywności użytkownika. 24.Co ma być przechwytywane. Można wybrać, czy przechwytywane (i nagruwane) ma być tylko naciskanie klawiszy klawiatury, czy również czynności wykonywane myszą. 25.Szybkość odtwarzania. Makroprogram może być odgrywany od 20% do 500% szybkości oryginalnego nagrania. Jest to istotne jeśli szybkość działania testowanego programu jest zmienna. Co się stanie, jeśli program będzie wykonywany w zmienionych okolicznościach nieco wolniej i przyciks, na który makroprogram miał właśnie kliknąć, jeszcze nie pojawił się na ekranie? 26.Pozycja odtwarzania. Ta opcja określa, czy ruchy i kliknięcia myszy mają być bezwzględne czy w stosunku do wybranego okna na ekranie. Testując aplikację której położenie na ekranie może się zmienić, należy wybrać opcję aktywności myszy w sotsunku do okna tej aplikacji, w przeciwnym razie odtwarzany program może klikać w zupełnie inne elementy aplikacji (lub poza nią), niż w czasie nagrywania.
Teraz warto poćwiczyć torchę nagrywanie i odtwarzanie makroprogramów. Wystarczy w tym celu znaleźć i załadować jakiś program do nagrywania/odtwarzania i wypróbować go na prostej aplikacji, np. na Kalkulatorze albo na Notatniku. Ćwicząc, starajmy się myśleć jak testerzy!
Okaże się, że chociaż nagrane makroprogramy mogą wykonać za testera pewne testy automatycznie, co ułatwia i przyśpiesza testowanie, metoda nie jest jednak doskonała. Największy problem to brak weryfikacji. Makroprogramy nie potrafią skontrolować, czy uzyskane wyniki są poprawne1. Makroprogram potrafi wpisać do Kalkulatorz 100-99, ale nie potrafi skontrolować czy wynik jest 1 - nadal musi się to robić samemu. To oczywiście kłopot, ale wielu testerów ceni sobie nawet samo pozbycie się uciążliwego pisania i poruszania myszą. O wiele prościej jest tylko obserwować wykonywany makroprogram i sprawdzać, czy wyniki są zgodne z oczekiwanymi2.
Szybkość odwarzania to kolejna trudność z zastosowaniem makroprogramów. Nawet ustawiając szykbość odtwarzania nie zawsze uda się zachować synchronizację makroprogramu i testowanego programu. Na przykład strona WWW może raz załadować się w sekundę, a innym razem w 10 sekund. Można spowolnić makroprogramy dopasowując je do najgorszego wariantu, ale będą wtedy wykonywane powoli nawet jeśli oprogramowanie działa szybko. Jeśłi któregoś dnia dana strona ładowałaby się wyjątkowo powoli - całe 15 sekund - wtedy makroprogram i tak by się pogubił i klikał niewłaściwe elementy w nieodpowiednim czasie.
Trzeba zachować ostrożnośc nagrywając ruchy i klikanie myszą. Programy nie zawsze pojawiją się w tym samy miejscu na ekranie. Ustawienie pozycji odtwarzania względem okna programu zamiast całego ekranu oże rozwiązać tę trudność, ale nawet wówczas niewielka chocby ziana GUI może unieważnić całe wcześniejsze nagranie.
Mimo tych ograniczeń, nagrywanie i odtwarzanie makroprogramów jest popularną metoda automatyzacji prostszych zadań testowych. Jest to również dobry sposób rozpoczęcia nauki automatyzacji testowania.
Programowane makroprogramy
Programowanie to krok w górę w porównaniu z prostymi nagrywanymi makroprogramami. Programy testowe tworzy się nie nagywając ręczne testowanie, lecz programując. Prosty program mógłby wyglądać tak jak przykład na listingu 14.1. Ten rodzaj programu można - używając Asystenta Macro - zbudować wybierając poszczególne instrukcje z automatycznej listy - nie trzeba nawet ich pisać samemu.
Listing 14.1 Prosty makroprogram do wykonywania testu na Kalkulatorze Windows. 1: Test Kalkulatora nr 2 …
1 Natomiast doskonale potrafią to zrobić dostępne na rynku programy do nagrywania/odtwarzania.
2 Bardzo niebezpieczne rozwiązanie - taka połowiczna automatyzacja może uśpić czujność testerów i spowodować przepuszczenie większej ilości błędów niż przy testowaniu w całości ręcznym.
5: <<PROMPT:Wynik powoinien być 23>> …
Linijka 1-a jest komentarzem. Linijka 2-a wywołuje program calc.exe, Kalkulator w Windows. Linijka 3-a czeka do 5 sekund na wystartowanie kalkulatora. Progra zatrzymuje się dopóki na ekranie nie pojawi się okno ze słowem Kalkulator na swoim pasku tytułowym. Linijka 4-a wpisuje 123-100=. Linijka 5-a wyświetla infomrację, że wynik ma być 23. Linijka 6a zamuka Kalkulator i zakańcza test.
Zwróćmy uwagę jaką przewagę mają tego rodzaju programy nad nagrywanyi. Nadal nie da się dokonać weryfikacji poprawności wyników, można jednak wprowadzić przerwy i kazać testerowi potwierdzić poprawność (lub nie) wyniku (rysunek 14.8).
Rysunek 14.8 Proste programy testowe nie są w stanie zweryfikować wyników testów, ale mogą  zażądać od testera potwierdzenia (rysunak za zgodą Iolo Technologies, www.iolo.com).
Możliwe jest również - zamiast stosowania ogólnego spowolnienia odtwarzania - zastosować synchronizację polegającą na oczekiwaniu na spełnienie zdefiniowanego warunku przez dalszy wykonywaniem programu. W podanym przykładzie z Kalkulatorem, program czeka na wystartowanie Kalkulatora - o wiele bardziej niezawodna metoda.
Jak na razie wszystko jest dobrze, posunęliśy się krok do przodu w stronę automatyzacji testowania. Ma się do dyspozycji prosty język programowania zawierający gotowe akrokomendy do sterowania testowanym programem i metodę prostego dialogu z testerem. Dla wielu zadań jest to najzupełniej wystarczające i niejedno można w ten sposób zautomatyzować.
Brakuje jednak nadal dwóch istotnych elementów, bez których niemożliwe jest wykonywanie bardziej skomplikowanych testów. Po pierwsze, takie programy są wyłącznie sekwencyjne - nie da się zaprogramować rozwidleń w przebiegu programu. Zmienne i instrukcje decyzyjne dostępne w ogólnych językach programowania nie są dostępne. I nadal nie ma się możności autoatycznego zweryfikowania wyników. Aby te możliwości uzyskć, trzeba sastosować bardziej zaawansowane narzędzie do automatycznego testowania.
W pełni programowalne automatyczne narzędzia do testowania
Gdyby tak mieć do dyspozycji pełny język programowania, połaćzony z makrokomendami ułatwiającymi sterowanie testowanym oprogramowaniem i z możliwościa dokonywania weryfikacji wyników? Miałoby się wtedy najdoskonalsze narzędzie do znajdowania błędów! Rysunek 14.9 pokazuje przykład takiego narzędzia.
Rysunek 14.9 Visual Test został skonstruowany przez Microsoft, obecnie zaś sprzedawany jest przez Rational Software, jest przykładem narzędzia które zawiera środowisko do programowania, makrokomendy i możliwości weryfikowania wyników złożone w jednen zintegrowany pakiet.
Automatyczne narzędzia do testowania, takie jak Visual Test, dają możliwośc tworzenia bardzo skutecznych testów. Wiele z nich ma język programowania oparty na języku BASIC, dzięki czemu nawet nieprogramiści mogą pisać kod do testowania.
Gdyby chcieć wypróbować pisanie ciągu znaków Hello World! 10000 razy, trzeba by napisać następujące linie kodu: FOR i=1 TO 10000 PLAY „Hello World!” NEXT I Chcąc zaś spowodować przesunięcie kursora yszy z górnego lewego rogu ekranu 640x480 i wykonać podwójne kliknięcie, możnaby to zrobić tak:
PLAY „{MOVETO 0,0}” PLAY „{OVETO 640, 480}” play „{DBLCLICK}” Ten język daje teżlepsze mozliwości niż klikanie w określony punkt ekranu albo wysyłanie pojedynczych naciśnięć klawisza. Na przykład, aby kl;iknąć na przycisk OK, ożna posłużyć się komnedą wButtonClick („OK”) Nie trzeba wiedzieć gdzie na ekranie znajduje się przycisk OK. Program testujący poszukałby go, znalazł i kliknął - tak samo jak użytkownik. Istnieją komendy tego saego rodzaju do obsługi menu, pól wyboru i tak dalej. Takie komendy  zapewniaja wielką elastyczność w pisaniu programów testowych i zarazem czynią je łatwiejszyimi do zrozumienia i bardziej niezawodnymi.
Najważniejsza cecha takich automatycznych narzędzi to możliwość dokonywania weryfikacji, sprawdzania czy testowany program podał prawidłowy wynik lub wykonał prawidłową czynność. Można to robic na kilka sposobów: 27.Przechwycenie treści ekranu. Wykonując testy po raz pierwszy, można przechwycić i zapisać poprawne fragenty ekranu. W czasie odtwarzania testów, automatyczny program porównywałby zapisane fragmenty z aktualnym fragmentem ekranu. Znajdując różnicę, automatyczny program mógłby zasygnalizować prawdopodobny błąd. 28.Wartości kontrolne. Zamiast przechwytywać fragmenty ekranu, można sprawdzać wartość poszczególnych kontrolek w oknie testowanego oprogramowania. Testując Kalkulator, program mógłny odczytać wartość w polu wyświetlającym wynik i porównać ją z wartościa oczekiwaną. Daje się też skontrolować, czy przycisk był przyciśnięty, a pole wyboru - wybrane. Autoatyczne narzędzie pozwala dokonać tego przy pomocy programu. 29.Pliki i inne dane na wyjściu. Podobnie, jeśli testowany program zapisuje dane na pliku - na przykład program do przetwarzania tekstu - program testowy mógłby otowrzyc ten plik i porónać ze znanym o poprawnej zawartośći. Tę samą technikę możnaby zastosować wobec danych przesyłanych przez modem albo przez sieć. Program testowy mógłby odczytac te dane i porównać z oczekiwanyi.
Weryfikacja była ostatnią poważną przeszkodą na drodze to automatycznego testowania oprogramowania. Pokonawszy ją, można skonstruować program wykonujący niemal każde zadanie testowe1 - całkiem albo przynajmniej częściowo automatycznie.
Więcej danych a temat znanych programów do automatyzacji testowania można między innymi znaleźć na: 30.Mercury Interactive, www.merc-int.com 31.Rational Software Corporation, www.rational.com 32.Segue Software, www.segue.com
Takie oprogramowanie jest przeznaczone głównie dla zespołów programistów w przedsiębirstwach i dla osoby  prywatnej jest raczej kosztowne. Można jednak spróbować dostać licencję - ograniczoną w czasie - dla wypróbowania, albo - będąc studente - zniżkę studencką. Wiele firm odnosi się do takich propozycji życzliwie w nadziei, że to dobry sposób reklamy. Testowanie na chybił-trafił: małpy i goryle
Poznane przez nas dotąd narzędzia i techniki miały na celu ułatwić pracę testerów i uczynić ją efektywniejszą. Miały uławtwić wykonywanie zadań testowych, a w najlepjej zautomatyzować je zupełnie.
Ten sposób użycia automatycznych narzędzi przyczynia się do znajdowania błędów. Narzędzia pracowicie wykonują testowanie regresyjne, a testerzy mają więcej czasu na planowanie pracy i na projektowanie nowych zadań testowych. Istnieje też inny rodzaj autoatycznego testowania, którego celem jest symulowanie tego, co z programem mogą zrobić użytkownicy. Ten rodzaj tesowania nazywany jest niekiedy testującą małpą.
Określenie testująca małpa bierze się ze starego pomysłu, że jeśli posadzić milion małp piszących na milionie maszyn do pisania przez milion lat, to statystycznie jest prawdopodobne, że napisane zostanie przez nie jakieś wielkie dzieło literackie. Waląc w klawiaturę na chybił-trafił, można przypadkowo trafić na właściwą kombinację liter i małpa przez chwilę mogłaby robic wrażenie niezwykle zdolnej - tak jak ta na rysunku 14.10.
1 Ściślej, każde zadanie testowe wykonywane za pośrednictwem GUI (przyp. tłumacza).

Rysunek 14.10 Małpy testujące będą testować tak długo, jak długo mają proąd i od czasu do czasu - banana.
Kiedy oprogramowanie zostanie rozpowszechnione, będzie miało tysiące, a może nawet miliony użytkowników walących w nie - czasem bez ładu i składu. Mimo najlepszych starań przy konstruowaniu i wyborze zadań testowych, niektóre błędy prześlizgną się przez sieć zastawioną przez testrów i zostaną znalezione przez użytkowników. A gdyby tak uzupełnić zadania testowe przy pomocy symulacji tego, co mogą zrobić użytkownicy? Można by w ten sposób znaleźć niekiedy błędy, które w przeciwnym razie by się nam wymknęły. Do tego właśnie służy małpa testująca.
Użycie testującej małpy do symulowania tego, co użytkownicy być może będą robić z programem nie jest insynuoacją, że użytkownicy komputerów są małpami.
Głupie małpy
Najprostszym rodzajem małpy testującej jest głupia małpa. „Głupia małpa” niczego nie wie o testowanym przez siebie programie; po prostu losowo wybiera klawisze i kliknięcia myszą. Listing 14.2 pokazuje przykład kodu w VisualTest który losowo klika i pisze tekst 10000 razy.
Listing 14-2  Kilka linijek kodu wystarcza, aby stworzyć „głupią małpę”. 1: RANDOMIZE TIER 2: FOR i=1 TO 10000 3: PLAY „{CLICK „+STR$(INT(RND*640)) +”, „+STR$(INT(RND*480)) +”}” 4: PLAY CHR$(RND*256) 5: NEXT i Linijka 1-a inicjalizuje liczby losowe. Linijka 2-a otwiera pętlę od 1 do 10000 razy. Linijka 3-a wybiera losowo punkt na ekranie między 0,0 a 640,480 (rozdzielczość VGA) i klika w niego. Linjka 4-a wybiera losowo znak między 0 a 255 i pisze go.
Testowany program nie odróżnia skutków działania takiego programu od pracy prawdziwego użytkownika - prócz tego że wykonanie jest o wiele szybsze. Na dość szybkim PC wykonanie całego programu zajmie ledwo kilka sekund. Łatwo sobie wyobrazić, ile losowych czynności dałoby się uzyskać, gdyby taki program pracował przez całą noc!
Zwróćmy uwagę, że ta „małpa” nie dokonuje żadnej weryfikacji. Ona tylko klika i wpisuje znaki aż do momentu, kiedy albo pętla się skończy, albo program czy system operacyjny ulegnie awarii.
Kto nie wierzy, że „głupia małpa” może znaleźć poważny błąd, niech zastosuje taki program na swojej ulubionej grze komputerowej. Najprawdopodobniej najpóźniej po paru godzinach nastąpi awaria.
Może wydawać się dziwne, że proste losowe klikanie i pisanie jest w stanie znaleźć błędy. Jednak tak jest - z następujących powodów: 33.Mając dość czasu i wykonując dostatecznie wielką ilość prób, losowe wprowadzanie danych w końcu trafi na ten ciąg czynnośći, o któym nie śniło się ani programistom, ani testerom. Może małpa wprowadzi jakieś dane a następnie natychiast je usunie, albo wpisze olbrzymi ciąg znaków tam, gdzie program oczekuje krótkeigo. Kto wie? Coś się na pewno znajdzie. 34.„Głupia małpa” przez samo nieustanne powtarzanie wprowadzania danych może ujawnić błędy - takie jak np. przecieki pamięci - które wychodzą na jaw dopiero po wielu godzinach czy nawet dniach użytkowania. Kto posługoiwał się programem, który stawał się coraz mniej stabilny im dłużej się go używało, spotkał się z problemem, który dałoby się odkryć stosując „głupią małpę”.
Półgłupie małby
„Głupie małpy” mgą być bardzo skuteczne. Łatwo je zaprogramować i mogą znajdować poważne błędy powodujące zupełną awarię programu. Jednak kilka dodatkowych funkcji mogłoby uczynić je jeszcze skuteczniejszymi. Dodanie tych funkcji podniesie odrobinę poziom inteligencji naszej małpy, czyniąc ją „półgłupią”.
Powiedzmy że małpa pracowała przez kilka godzin, aplikując tysiące losowych danych wejściowych, zanim program uległ awarii. Wiadmomo, że znalazło się jakiś problem, ale nie da się pokazać programiście, jak można ten problem odtworzyć. Można by powtórzyć odkładnie tę samą pracę małpy (z tymi samymi danymi losowymi, jeśli to możliwe), ale oznaczałoby to ponowne zmarnowanie kilku godzin. Rozwiązaniem jest dodanie do małpy logowania, tak że wszelkie wykonane czynności zostałyby zapisane na pliku. Kiedy małpa znajduje błąd, wystarczy zajrzeć do pliku logowego żeby zobaczyć, co poprzedziło awarię.
Warto też zaprogramować małpę tak, żeby działała tylko na testowanym oporogramowaniu. Jeśli małpa losowo klika po całym ekranie, w końcu trafi na komendę zakańczającą program. Ponieważ małpa nie wie, czy program działa, będzie pracowała dalej. Wyobraźmy sobie, co może się stać, jeśli małpa będzie klikała i pisała po całym ekranie komputera - oj! Na szczęście większość dających się zaprogramować narzędzi do automatycznego testowania pozwala ustawić testy na wybraną aplikację i przerwać pracę, kiedy aplikacja przestała działać.
Kolejną funkcją, która podniesie inteligencję małpy, jest rozpoznawanie awarii programu. Uruchomiwszy małpę na całą noc straci się wiele cennych godzin, jeśli program ulegnie awarii, ledwo się zamknie za sobą drzwi. Jeśli dodać do małpy możliwość rozpoznawania awarii i ponowngo uruchomienia programu w tej sytuacji, zwiększy się znacznie skuteczność jej działania.
Bystre małpy
Kolejnym krokiem na drabinie ewolucyjnej jest „bystra małpa”. Taka małpa dziedziczy po swoich mniej inteligentnych braciach korzyści testowania losowego, ale wspomaga je zrozumieniem trybu działania testowanej aplikacji. „Bystra małpa” nie wali już całkiem losowo w kalwiaturę - ona wali w nią celowo.
Naprawdę „bystra małpa” wie”: 35.gdzie jest 36.co tam można zrobić 37.dokąd można stamtąd pójść 38.gdzie była wcześniej 39.czy to co widać jest poprawne.
Brzmi to znajomo? Powinno. Bystra małpa zna mapę stanów programu - taką mapę jak opisana w rozdziale 5-ym „Testowanie oprogramowania z klapkami na oczach”. Jeśli cała informacja na temat stanów testowanego oprogramowania znana jest małpie, może ona posługiwać się programem podobnie jak użytkownik, tylko o wiele szybciej, po drodze weryfikując poprawność działań programu.
„Bystra małpa” testująca Kalkulator Windows (zob. rysunek 14.11) będzie wiedzieć, jakie przyciski można nacisnąć, jakie są dostępne wybory menu, gdzie można wpisywać liczby. Kliknąwszy opcję „O Kalkulatorze” z menu „Pomoc”, będzie wiedzieć, że jedynym sposobem wyjścia stamtąd jest kliknięcie przycisku OK albo Zamknij. Nie będzie więc losowo klikać po całym ekranie.
Rysunek 14.11 „Bystra małpa” wie, jak zamknąć okno dialogowe „O Kalkulatorze”.
„Bystra małpa” nie musi szukać tylko błędów powodujących zupełną awarię programu. Może również po drodze weryfikować dane, kontrolować wyniki i szukać różnic między wynikami rzeczywistymi a oczekiwanymi. Mając zaprogramowane zadania testowe, można polecić małpie ich losowe wykonywanie, szukanie błędów i logowanie wyników. Odlotowo!
Rysunek 14.12 pokazuje „bystrą małpę” imieniem Koko, ochrzczoną tak na pamiątkę goryla, którego nauczono posługiwania się językiem znaków. Aby zaprogramować Koko, wprowadza się w nią tablicę stanów programu, czynności dające się wykonać w każdym ze stanów oraz sposoby odróżniania poprawnych od niepoprawnych wyników działania programu.
Rysunek 14.12 „Bystra małpa” Koko daje się zaprogramować tak, że wie gdzie jest i co może zrobić.
Kiedy Koko działa, doprowadza testowany program do znanego stanu, a następnie wybiera losowo kolejną czynność na podstawie rozkładu prawdopodobieństwa rzeczywistego użycia1, wykonuje tę czynność i kontroluje jej wynik. Jeśli czynność powoduje zmianę stanu programu, Koko wie o tym i posługuje się nowym zestawem możliwych wyborów czynności, odpowiednim dla tego nowego stanu.
W taki sposób daje się symulować rzeczywisty sposób użytkowania testowanego oprogramowania, symulując tysiące godzin jego działania w ciągu kilku godzin. „Bystre małpy” to naprawdę maszyny do znajdowania błędów! Użycie narzędzi i automatyzacja testowania w rzeczywistości
Zanim jednak, zafascynowani nowymi możliwościami, rzucimy się, żeby zacząć stosować automatyzację w naszych testach, należy przeczytać ten podrozdział i wziąć sobie jego treść do serca. Automatyzacja testowania nie jest uniwersalnym lekiem na wszystko. Następujące trudności z automatyzacją testowania trzeba wziąć pod uwagę: 40.Oprogramowanie zmienia się. Specyfikacje nie są zamknięte. Nowe funkcje dodaje się pod koniec projektu. Nazwa produktu zmienia się w ostatniej chwili. Co będzie, jeśli zaprogramuje się tysiące makroprogramów aby móc wykonać wszystkie testy na tydzień przed wypuszczenie produktu i wtedy okaże się, że oprogramowanie zostało w ostatniej chwili zmodyfikowane tak, że wyświetla zaraz po starcie zupełnie nowy ekran? Wszystkie nagrane programy zawiodą, bo nie będą wiedzieć nic o istnienieu tego nowego ekranu. Dlatego automatyzację należy zaprojektować tak, aby była elastyczna i dawała się łatwo i szybko dostosować do takich zmian w oprogramowaniu. 41.Nic nie jest w stanie w pełni zastąpić ludzkiego oka i ludzkiej intuicji. „Bystre małpy” można uczynić bystrymi tylko do pewnej granicy. Mogą testować tylko to, do czego zostały zaprogramowane. Nigdy nie będą mogły powiedzieć „Oj, to dziwne. Musze sprawdzić to dokładniej”. Przynajmniej jeszcze nie dziś.
1 Koko realizuje w ten sposób strategię zwaną Statystcznym testowaniem (Statistical Usage-Based Testing), która w tej książce nie jest szczegółowo opisana (przyp. tłumacza).
42.Weryfikacja jest trudna. Testując interfejs użytkownika, najprostszym sposobem weryfikacji wyników jest przechytywanie, a następnie porównywanie całych ekranów. Ale przechwycone ekrany są olbrzymimi plikami, a poza tym wygląd i układ ekranów zwykle nieustannie się zmienia w trakcie projektu. Dlatego trzeba zaprogramować narzędzia tak, by weryfikowały tyko to co najważniejsze i żeby zmiany interfejsu dało się łatwo uwzględniać. 43.Nie należy zdać się wyłącznie na autoatyzację. Nigdy nie można zakładać, że ponieważ automatyczny program nie znajduje żadnych błędów, to nie a już żadnych błędów. One tam na pewno są - to opisany wcześniej „paradoks pestycydów”. 44.Poświęcając zbyt wiele czasu automatyzacji, można nie mieć już czasu na samo testowanie. Pisanie makroprogramów i programowanie „bystrej małpy” to świetna zabawa, ale to nie jest testowanie. Te narzędzia pomogą w pracy, ale trzeba zdążyć zastosować je na oprogramowaniu i wykonać rzeczywiste testowanie by móc znaleźć błędy. 45.Pisząc makroprogramy, budując narzędzia albo programując „małpę”, wykonuje się pracę będącą wytwarzaniem oprogramowania. Należy przy tym przestrzegać tych samych zasad i stosować te same metody co we właściwym projekcie. To, że się jest testerem, nie upoważnia do lekceważenia zasad metodyki. 46.Niektóre narzędzia są intruzyjne i mogą spowodować awarię testowanego oprogramowania. Kiedy znalazło się błąd w trakcie testów automatycznych, warto spróbować ponownie wywołać ten błąd - tym razem ręcznie. Może się czasem okazać, że błąd spowodowany był działaniem narzędzia do testowania.
Podsumowanie
Narzędzia do testowania i automatyzacja testowania daja się zastosować do każdego typu oprograowania. Większość przykładów w tym rozdziale dotyczyła testów interfejsu użytkownika, ale te same sposoby można zastosować do testowania kompilatorów albo serwerów WWW. Trzeba przypatrzyć się swoim testom pod kątem tego, jak użycie innych programów może je ułatwić.
Czasem używa się dłoni, czasem packi na muchy, a czasem (może niesłusznie) - młotka. Tester powinien wiedzieć, kiedy i jakie narzędzia warto zastosować. Lonstruowanie i używanie narzędzi i automatyzacja testowania może być swietną zabawą. Wgląda bojowo, kiedy komputer dzaiała sam, kursor lata po całym ekranie, a znaki wprowadzane są do testowanej aplikacji automatycznie. Jest wielką frajdą leżeć w domu w łożku albo popijajać kawę wiedząc, że automatyczny program pracuje w ty czasie za nas, znajdując błędy. Pytania
Pytania mają na celu ułatwienie zrozumienia. W aneksie A „Odpowiedzi na pytania” znajdują się prawidłowe rozwiązania – ale nie należy ściągać! 1. Wymień kilka korzyści stosowania narzędzi do testowania i automatyzacji testowania. 2. Jakie są możliwe wady automatyzacji i jakie możliwe trudności trzeba wziąć pod uwagę przy podejmowaniu decyzji o zastosowaniu narzędzi i o automatyzacji? 3. Jaka jest różnica między narzędziem a automatyzacją? 4. Jakie są podobieństwa i różnice między analizatorem a generatorem zaburzeń? 5. Prawda czy fałsz: narzędzie intruzyjne jest najlepsze, ponieważ działa najbliżej testowanego oprogramowania. 6. Jaki jest jeden z najprostszych, ale skutecznych, sposobów automatyzacji testowania? 7. Wymień kilka funcji, które warto dodać do rozwiązania opisanego jako odpowiedź na porzednie pytanie, aby uczynić automatyczne testy jeszcze skuteczniejszymi. 8. Na czym polega wyższość „bystrych małp” nad „głupimi małpami” i nad nagranymi automatycznie makroprogramami?

rozdział 13
08 września 2019, 22:13

Rozdział 13 Testowanie witryn WWW
W TYM ROZDZIALE Podstawowe wiadomości na temat stron WWW Testowanie metodami czarnej skrzynki Testowanie metodami szarej skrzynki Testowanie metodami szklanej skrzynki Testowanie konfiguracji i kompatybilności Testowanie użyteczności Wprowadzanie automatyzacji
Poznane w poprzednich rozdziałach techniki testowe były ogólne. Zostały zilustrowane przykładami zastosowania wobec małych programów takich jak Notatnik Word, Kalkulator albo prosty program graficzny Paint. W tym rozdziale zajmiemy się testowaniem szczególnego typu oprogramowania - stron WWW. Jest to temat na czasie, przypuszczalnie nieźle znany, i dobry, praktyczny przykład zastosowania poznanych wcześniej technik.
W tym rozdziale dowiemy się, że testowanie Internetu obejmuje wiele różnych dziedzin, w tym testowanie konfiguracji, kompatybilności, użyteczności, dokumentacji oraz - jeśli mamy do czynienia z witryną o zasięgu światowym - testowanie ulokalnienia. Oczywiście, stosuje się - jak zwykle - testowanie czarnej skrzynki, szklanej skrzynki, statyczne i dynamiczne.
Niniejszy rozdział nie jest wyczerpującym przewodnikiem po testowaniu Internetu (to wymagałoby osobnej książki)1 , ale znajduje się w nim nieskomplikowane, praktyczne przykłady testowania czegoś rzeczywistego. Ponadto - jeśli czyjaś pierwsza praca będzie właśnie szukaniem błędów w witrynie Internetowej - ułatwi znacznie start.
Najważniejsze punkty w tym rozdziale to: 124.Jakie glówne części strony WWW wymagają testowania? 125.Testowanie Internetu metodami czarnej i szklanej skrzynki 126.Testowanie konfiguracji i kompatybilności 127.Czemu testowanie użyteczności jest szczególnie istotne dla stron WWW
1 Rozdział poświęcony jest testowaniu stron i witryn (głównie statycznych), natomiast testowanie Internetu - czy aplikacji internetowych - obejmuje również m.in. testowanie skryptów w Jawie, testowanie serwerów WWW, komunikacji, serwera aplikacji i bazy danych wspierających daną witrynę, i wiele innych elementów (przyp. tłumacza).
Strona 80 (99) 128.Jak przy pomocy narzędzi można ułatwić testowanie witryn. Podstawowe wiadomości na temat stron WWW
Mówiąc najprościej, strony WWW to są dokumenty składające się z tekstu, rysunków, dźwięków, wideofilmów i hiperpołączeń - podobnie jak popularne w połowie lat 90-ych multimedialne kompakty. Tak samo można tutaj przemieszczać się między stronami klikając będące hiperpołączeniami fragmenty tekstu lub rysunki, szukać słów i zwrotów i przeglądać znalezioną informację.
Jendak Internet dodał do koncepcji mulitmedialnego dokumentu dwie rewolucjonizujące tę technikę możliwości: 129.W przeciwieństwie do danych zgromadzonych wyłącznie na dysku CD, strony WWW nie są ograniczone tylko do jednego komputera. Użytkownicy mogą łączyć się i przeszukiwać Internet na całym świecie. 130.Tworzenie stron nie jest domeną programistów posługujących się kosztownymi narzędziami. Przeciętna osoba może zwykle równie łatwo stworzyć stronę WWW, co napisać dokument w programie do przetwarzania tekstu.
Jak danie komuś do ręki pędzla nie robi z nikogo automatycznie artystymalarza, tak umiejętność tworzenia stronic WWW nie robi z nikogo specjalisty od wydawnictw multimedialnych. Połączywszy to z eksplozją nowych technik tworzenia zupełnie nowych funkcji na internetowych witrynach, mamy wymarzoną okazję dla testerów oprogramowania.
Rysunek 13.1 przedstawia pewna popularną witrynę WWW, która przedstawia wiele możliwych funkcji stron WWW. Oto ich niepełna lista: 131.Teskty w różnych wielkościach, rodzajach czcionek i kolorach (OK, nie da się zobaczyć kolorów na czarno-białym rysuku) 132.Grafika i fotografie 133.Hiperpołącznia tekstu i grafiki 134.Różne reklamy 135.Okna do selekcji 136.Pola, w które użytkownik może wpisywać dane
Strona 81 (99)
Rysunek 13.1 Typowa strona WWW ma wiele dających się przetestować funkcji.
Sporą część funkcjonalności trudno jest zauważyć, ale ona właśnie czyni strony WWW znacznie bardziej skomplikowanymi: 137.Układ strony dający się przystosować do potrzeb klienta 138.Dostosowująca się do potrzeb klienta zawartość, pozwalająca użytkownikom dokonać wyboru, jakie wiadomości i jaką infomrację pragną oglądać 139.Listy rozwijane do dokonywania wyboru 140.Dynamicznie zmieniające się zadania testowe 141.Dynamiczny układ strony i dodatkowa informacja zależna od rozdzielczości ekranu 142.Kompatybilność z różnymi przglądarkami, wersjami przeglądarek, systemami operacyjnymi i sprzętem 143.Ukryte formatowanie, znaczniki i inne rodzaje niewidocznej informacji, podnoszące wygodę korzystania ze strony
Oczywiście, pominąwszy portale do bezpiecznego handlu internetowego, witryna na rysunku to jedna z bardziej złożonych i obfitych treściowo witryn na Internecie. Dla osoby o mentalności testera - jakimi zapewne są czytelnicy tej książki - widok tej strony powinien pobudzić apetyt na jej przetestowanie i znajdowanie błędów. W pozostałej części rozdziału znajdują się wskazówki, gdzie najlepiej tych błędów szukać. Testowanie metodami czarnej skrzynki
Strona 82 (99) W rozdziałach od 4-ego do 7-ego, daleko na początku książki, omawiane były podstawy testowania. W tych ogromnie istotnych rozdziałach opisane zostały główne techniki testowania: czarnej skrzynki, szklanej skrzynki, statyczne i dynamiczne - stanowiące podstawowy arsenał każdego testera. Na stronach WWW można doskonale zacząc ćwiczyć swe nowonabyte umiejętności. Nie trzeba kupować żadnych nowych programów ani specjalnych narzędzi - wystarzy rzucić się na jakąś stronę, ulubioną albo zupełnie nieznaną - i można zaczynać testowanie.
Najprościej zacząc od tego, że stronę WWW - albo nawet całą witrynę - potraktuje się jak czarną skrzynkę. Nie wiemy nic o tym, jak ma działać, nie mamy specyfikacji - jest tylko witryna przed nami. Czego zacząć szukać?
Na rysunku 13.2 pokazany jest obraz ekranu witryny Macintosha, www.apple.com. Jest to dość prosta i typowa witryna. Ma wszystkie podstawowe elementy - tekst, grafikę, hiperpołączenia do innych stron na tej samej witrynie oraz hiperpołączenia do innych witryn. Kilka stron witryny ma pola do wypełnienia, gdzie użytkownik może wprowadzić informację, a kilka innych zawiera sekwencje wideo. Jedna interesująca, rzadziej spotykana cecha tej witryny to jej lokalizacja - w 27 różnych miejscach, od Azji aż po Wielką Brytanię.
Mając dostęp do Internetu, warto teraz poświęcić trochę czasu na eksplorację witryny Apple. Jak przystąpić do jej testowania? Jakie zastosować klasy równoważności? Czego nie warto testować?
Rysunek 13.2 Co trzeba przetestować w prostej witrynie jak ta na rysunku?
Po krótkiej eksploracji, do jakich dochodzi się wniosków? Przypuszczalnie każdy zdał sobie sprawę, że to będzie spore zadanie. Na mapie witryny (www.apple.com/find/sitemap.html) pokazane są połączenia do ponad 60ciu różnych „pod-witryn”, z których każda słada się z kilku stron WWW.
Testując witrynę WWW, należy zacząc od skonstruowania tabeli stanów (rozdział 5-y, „Testowanie z klapkami na oczach”), gdzie każdą stronę potraktuje się jak odrębny stan, a hiperpołczenia - jak przejścia między stanami. Gotowa mapa stanów pozwoli zdać sobie sprawę z rozmiarów przedsięwzięcia.
Strona 83 (99) Na szczęście większość stron jest dość prosta, składają się tylko z tekstu, grafiki, połączeń, a gdzieniegdzie z formularzy do wypełnienia. Nie jest trudno je przetestować. Dalej dowiemy się, czego szukać.
Tekst
Stronę WWW należy traktować tak jak dokumentację i testować tak, jak opisane zostało w rozdziale 12-ym, „Testowanie dokumentacji”. Trzeba sprzwdzić, dla kogo strona jest przeznaczona, jaki jest poziom tej grupy, terminologię, zawartość, tematykę, dokładność - zwłaszcza informację która się starzeje - oraz zawsze, zawsze pisownię.
Nie należy zakładać, że programy do kontroli pisowni są doskonałe, zwłaszcza zastosowane do zawartości stron WWW. Program sprawdzi tylko zwykły tekst, ale nie zawartość tekstową grafiki, rozwijanych ramek, formularzy itp. Po dokonaniu kontroli pisowni, na stronie nadal mogą znajdować się błędy.
Dane na temat adresu poczty komputerowej, numeru telefonu, adresu należy sprawdzić. Sprawdza się również poprawność - w tym datę - informacji o prawach autorskich.
Trzeba skontrolować czy każda strona ma właściwy tytuł. Ten tekst pojawia się w pasku tytułowym przeglądarki (górny lewy róg na rysunku 13.2) i wchodzi w skład list ulubionych stron albo zakładek.
Tekstem, który łatwo przeoczyć podczas kontroli, jest tekst ALT, czyli tekst zastępczy. Rysunek 13.3 przedstawia przykład tekstu ALT. Kiedy użytkownik ustawia kursor nad elementem graficznym, ukazuje się wyskakujący napis, wyjaśniający jego znaczenie. Tekst ALT wykorzystywany jest też przez przeglądarki nie wyświetlające grafiki. Niewidomi użytkownicy mogą dzięki tekstom ALT korzystać ze stron obficie wykorzystujących grafikę - głosowy czytnik przekazuje teksty ALT przez głośnik komputera.
Ewentualne problemy z układem strony można skontrolować zmniejszając albo powiększając stronę. W ten sposób wychodzą na jaw błędy wynikłe z tego, że projektant lub programista założyli stałą wysokość lub szerokość strony. Ujawnią się też błędy układu polegające na wkodowaniu na stałe zmiany wiersza, która wygląda doskonale przy pewnym układzie strony, ale nie przy innych.
Hiperpołączenia
Połączenia mogą być przyłączone do tekstu lub do elementów graficznych. Należy skontrolować każde połączenie, czy prowadzi do właściwego celu i czy otwiera się we właściwym oknie. Nawet nie mając do dyspozycji specyfikacji strony, można skontrolować poprawność wykonanego skoku.
Strona 84 (99) Hiperpołączenia sprawdza się rownież pod kątem tego, na ile są widoczne. Połączenie tekstowe są zwykle podkreślone, a kursor ma zmienić kształt ze strzałki na dłoń, kiedy znajduje się nad połączeniem - zarówno tekstowym jak i graficznym.
Jeśli połączenie otwiera list poczty komputerowej, należy go wypełnić, wysłać i sprawdzić czy otrzymało się stosowną odpowiedź.
Rysunek 13.3 Tekst ALT jest tekstowym opisem elementów graficznych na stronie WWW.
Szukamy osieroconych stron, istniejących wprawdzie w danej witrynie, ale nie dających się osiągnąć przez żadne połączenie, ponieważ zapomniano je podłączyć. Być może uda się uzyskać listę istniejących stron od projektanta witryny i porównać ją nastąpnie z własną tabelą stanów. Jeszcze lepiej, można wykorzystać listę faktycznie istniejących stron z serwera WWW i dokonać analizy pokrycia kodu, żeby sprawdzić czy przetestowało się wszystkie strony, że żadnej nie brakuje i że nie istnieją żadne dodatkowe strony.
Grafika
Wiele możliwych błędów związanych z grafiką omówione zostanie w części poświęconej testowaniu użyteczności, ale pewne najbardziej oczywiste rzeczy można sprawdzić przy pomocy prostego podejścia „czarnoskrzynkowego”. Na przykład, czy wszystkie elementy graficzne są ładowane i wyświetalne poprawnie? Jeśli plik graficzny nie istnieje albo ma błędną nazwę, nie uda się go załadować i przeglądarka wyświetli komunikat błędu tam, gdzie powinien był pojawić się element graficzny.
Jaka jest wydajność ładowania strony? Jeśli strona ma zbyt wiele grafiki, co wymaga przesłania i wyświetlenoia wielkiej ilości danych, wtedy tempo ładowania strony jest zbyt niskie. A co się stanie, jeśli strona będzie ładowana przez powolne połączenie przez modem na lini telefonicznej o niskiej jakości?
Strona 85 (99)
Rysunek 13.4 Kiedy nie daje się załadować elementu graficzngo, na jego miejscu przeglądarka wyświetla okno z komunikatem o błędzie.
Formularze
Formularze to są okna tekstowe i inne typy pól służących do wprowadzania i wybierania informacji na stronie WWW. Rysunek 13.5 przedstawia prosty przykład wzięty z witryny Apple. Jest to formularz do zapisywania się, przeznaczony dla programistów dla platformy Macintosha. Są tam pola żeby wprowadzić imię, drugie imię, nazwisko i adres poczty komputerowej. Mamy na tej stornie oczywisty błąd - miejmy nadzieję, że będzie naprawiony zanim czytelnicy zdążą zapoznać się z tym rozdziałem.
Rysunek 13.5 Formularze na stronie WWW powinny być umieszczone we właściwym miejscu. Warto zwrócić uwagę na błąd ma tej stronie.
Formularze testuje się dokładnie tak samo, jak pola w zwykłym programie - czas ponownie przypomniec sobie rozdział 5-y. Czy pola mają właściwe rozmiary? Czy przyjmują wszelkie poprawne dane i czy odrzucają niepoprawne? Czy uzyskuje się stosowne potwierdzenie po naciśnięciu Enter? Czy pola opcjonalne rzeczywiście są opcjonalne, a wymagane rzeczywiście wymagane? Co się stanie jeśli wprowadzić 9999999999999999999999999999?
Obiekty i inne elementy złożone
Strona 86 (99) Wityrna może mieścić takie funkcje jak licznik odwiedzin, rozwijane ramki tekstowe, zmienne ogłoszenia, albo wewnętrzne przeszukiwarki systemu (nie mylić z przeszukiwarkami ogólnosieciowymi, przeszukującymi całą WWW). Planując testowanie witryny WWW, trzeba zidentyfikować funkcje występujące na każdej stronie. Każdą z nich traktuje się jak funkcję zwykłego programu i testuje osobno poznanymi technikami testowymi. Czy ma różne stany? Jak przetwarzane są dane? Czy da się zidentyfikować przedziały i wartości graniczne? Jakie można znaleźć zadania testowe i na jakie podzielić je klasy równoważności? Testowanie metodami szarej skrzynki
Poznaliśmy już testowanie metodami czarnej i szklanej skrzynki, ale jest trzecia metoda - mieszniana obu poprzewdnich - stąd jej nazwa. Stosując testowanie szarej skrzynki, stoi się na granicy obu pozostałyh metod. Nadal testuje się oprogramowanie jak czarną skrzynkę, ale uzupelnia się tę pracę zerkając (ale nie zaglądając otwarcie, jak w metodach szklanej skrzynki) na to, jak oprogramowanie działa w środku.
Stronice WWW nadają się bardzo dobrze do testowania szarej skrzynki. Większość stron WWW zbudowanych jest z HTML (Hypertext Markup Language, Hipertekstowy Język Znaczników). Listing 13.1 pokazuje rzędy kodu HTML definiujące stronę pokazaną na rysunku 13.6.
Listing 13.1 Próbka HTML pokazujący kod źródłowy strony WWW
Strona 87 (99)
Rysunek 13.6 Część tej strony WWW tworzy kod HTML z Listingu 13.1.
Kto z czytelników nie umie stworzyć własnej witryny WWW, może chcieć poczytać trochę na ten temat. Książka dla początkujących, taka jak „Sam uczy w 24 godziny jak samemu stworzyć stonę WWW” pozwoli nauczyć się podstaw i ułatwi zrozumienie jak zastosować metody szarej skrzynki .
HTML i strony WWW możńa testować jako „szarą szkrzynkę”, ponieważ HTML nie jest językiem programowania - jest językiem znaczników. W epoce wczesnych programów do przetwarzania tekstu, nie dało się po prostu wybrać fragmentu teksu i zamienić jego format na tłusty druk albo na kursywę. Trzeba było używać znacznikóew, zwanych też czasem znacznikami pól. Aby na przykład napisać zdanie
To jest tekst tłustym drukiem.
pisze się coś takiego
[begin bold]To jest tekst tłustym drukiem.[end bold]
Tak samo działa HTML. Aby napisać to samo w HTML, pisze się
<b>To jest tekst tłustym drukiem</b>
Strona 88 (99) HTML ma obecnie setki różnych znaczników i opcji, co widać na Listingu 13.1. Niemniej, w grucie rzeczy HTML nie jest niczym innym jak podrasowanym, staroświeckim językiem znaczników. Różnica między HTML a programem polega na tym, że HTML nie jest wykonywane, tylko określa jak tekst i grafika są wyświetlane na ekranie.
Aby zobaczyć w przeglądarce Internet Explorer, jak wygląda kod HTML dla danej strony, klika się prawym klawiszem myszy gdzieś na stronie (nie na elemencie graficznym) i wybiera Kod Źródłowy (View Source) z menu. Inne przeglądarki działają torchę inaczej, ale większość daje możliwość obejrzenia kodu HTML, z którego zbudowana jest oglądana w danej chwili strona.
Ponieważ tak łatwo dotrzeć do kodu źródłowego HTML, można to wykorzystać w trakcie testowania. Dla testera stosującego metody czarnej skrzynki jest to doskonała okazja, by zacząc przesuwać się w stronę metod szklanej skrzynki.
Najlepiej zacząć od tego, by nauczyć się samemu budować proste strony WWW. Nauczywszy się znaczenia podstawowych znaczników, można zacząć badać jak zrobione są różne strony WWW dostępne na Intenecie. Poznawszy HTML, jest się w stanie patrzeć na strony WWW w nowy sposób i stać się bardziej skutecznym testerm. Testowanie metodami szklanej skrzynki
Na rysunku 13.1 widzieliśmy przykład strony WWW mającej statyczną zawartość w formie tekstu i grafiki. Tego typu strony zwykle tworzy się przy pomocy prostego kodu HTML. Strony HTML mogą też mieć elementy zmienne, dynamicznie dostosowaywane do potrzeb. Trzeba cały czas pamiętać, że HTML nie jest językiem programowania, tylko systemem znaczników dla tekstu i grafiki. Aby stworzyć elementy zmienne, trzeba uzupełnić HTML przy pomocy kodu, który może być wykonywany i wybierać różne ścieżki zależnie od warunków decyzji.
Strona 89 (99) Najczęściej spotykane języki programowania1 stosowane do tego to DHTML, Java, JavaScript, ActiveX, VBScript, Perl, CGI, ASP i XML. Jak powiedziano w rozdziale 6-ym „Badanie kodu” i w 7-ym „Test oprogramowania z rentgenem na oczach”, nie trzeba koniecznie być specjalistą w dziedzinie danego języka programowania, aby zastosować testowanie metodą szklanej skrzynki - wystarczy znać go na tyle, by móc go czytać i rozumieć, oraz konstruować zadania testowe na podstawie znajomości kodu.
W tym rozdziale nie ma miejsca, aby wdać się we wszelkie szczegóły testowania witryn metodami szklanej skrzynki. Niektóre funkcje dają się najlepiej przetestować przy pomocy metod szklanej skrzynki. Oczywiście, można by je też przetestować metodami czarnej skrzynki, ale złożoność bywa tak duża, że aby na pewno zdołać znaleźć najważniejsze błędy, powinno się mieć pewną znajomość struktury witryny i programowania: 144.Treść dynamiczna. Treść dynamiczna to grafika i tekst, które zmieniają się zależnie od warunków - na przykład od pory dnia, preferencji użytkowanika albo tego, co zrobił użytkownik. Programowanie zmian treści może być zrobione w prostym języku jak JavaScript i wbudowane wprost w kod HTML. Nazywa się to programowaniem po stronie klienta. Sprawdzając skrypt i kod HTML, posługujemy się metodami szarej skrzynki. Jednak ze względu na wydajność, zwykle programy umieszca się serwerze WWW; nazywa się to programowaniem po stronie serwera. Aby móc zbadać kod, musiałoby się mieć dostęp do serwera.
1 Nie wszystkie wymienione tu programy są dosłownie "językami programowania", ale nie ma to znaczenia w tym kontekście (przyp. tłumacza).
Strona 90 (99) 145.Strony WWW sterowane przez bazę danych. Wiele stron WWW stosowanych w handlu internetowym, które pokazują katalogi towarów, jest sterowanych przez bazy danych. HTML stwarza prosty układ strony, zaś ilustracje, opisy tekstowe, cenniki itd. ściąga się z bazy danych na serwer WWW i następnie wkleja na odpowiednia stronę HTML. 146.Strony WWW stwarzane przez program. Wiele stron WWW z dynamiczną treścią jest tworzonych przez programy - to znaczy kod HTML, niekiedy nawet kod skryptowy - wytwarza program. Projektant strony WWW wprowadza odpowiednie dane do bazy danych, przeciąga i upuszcza elementy do programu robiącego skład strony, naciska guzik i po chwili program dostarcza gotowy kod HTML do wyświetlenia danej strony. Brzmi to groźnie, ale naprawdeę nie różni się niczym od np. kompilatora produkującego kod maszyny1. Testując taką stronę, należy sprawdzić czy wygenerowany kod jest zgodny z oczekiwaniami projektanta. 147.Wydajność i ładowanie. Popularne witryny WWW dostają miliony trafień dziennie. Każde trafienie powoduje konieczność załadowania strony WWW z serwera WWW do przeglądarki na komputerze klienta2. Aby przetestować wydajność i zachowanie systemu pod obciążeniem, należy znaleźć sposób zasymulowania milionów połączeń i ładowań3.
1 A nawet jeszcze "zwyczajniej": dokument - razem z ilustracjami, tabelami itp. - napisany np. w powszechnie znanym programie Word można zlecić programowi zapisać w formacie HTML i strona WWW jest gotowa. Innym przykładem takiego programu jest Composer, będący częścią populanej przeglądarki Netscape Navigator (przyp. tłumacza).
2 Zwykle o wiele więcej niz załadowanie jednej strony. W systemach do handlu Internetowego każde odwiedziny mogą spowodować ładowanie wielu różnych stron, uruchomić poszukiwanie w bazie danych i inne transakcje (przyp. tłumacza).
3 Istnieje wiele programów, które to umożliwiają (więcej na ten temat w rozdziale o automatyzacji), a nawet firmy, wykonujące na zlecenia tego rodzaju testowanie (przyp. tłumacza).
Strona 91 (99) 148.Bezpieczeństwo. Zagadnienia bezpieczeństwa witryn WWW często trafiają na pierwsze strony gazet, gdy hakerzy na różne sposoby usiłują dostać się do wewnętrznych danych witryny. Witryny zawierające dane finansowe, medyczne i inne wymagające ochrony są szczególnie narażone i wymagają drobiazgowej znajomości techniki pracy serwera WWW, aby móc je przetestować pod kątem bezpieczeństwa.
Mitologia testowania bezpieczeństwa
Na pierwsze strony gaet często trafiają historie o hakerach, którzy włamali się do superbezpiecznych witryn i uzyskali poufne informacje. Artykuły prasowe podkreślają, że hakerzy zrobili to przy pomocy programu składającego się z trzech linijek kodu albo przez niezamknięte tylne wejście. Nie dajmy się oszukać - hakerzy musieli pracować długo i ciężko, aby znaleźć możliwość wejścia. Oczywiście, wynikiem  tej pracy mógł być program mający zaledwie trzy linijki, ale e=mc2 ma ledwo pięć znaków, a Einsteinowi zajęło wiele lat, by to sformułować. Będąc testerm, trzeba być przygotowanym na to, że poszukiwanie niezabezpieczonych dróg dostępu do witryny jest czasochłonne i trudniejsze niż się na pierwzy rzut oka wydaje. Testowanie konfiguracji i kompatybilności
Czas powrócić do testowania stron WWW. Przypomnijmy sobie najpierw z rozdziałów 8-ego i 9-ego, co to jest testowanie konfiguracji i kompatybilności. Testowanie konfiguracji polega na sprawdzaniu, jak oprogramowanie działa na różnych rodzajach platform programowych i sprzętowych i na ich rozmaitych konfiguracjach. Testowanie kompatybilności to sprawdzian działania oprogramowania razem z innymi programami. Strony WWW dają szerokie pole do zastosowania obu tych typów testowania.
Załóżmy, że mamy do przetestowania witrynę WWW. Zastanówmy się, jakie aspekty konfiguracji sprzętu i oprogramowania mogą wpłynąć na działanie lub wygląd witryny. Oto lista propozycji: 149.Platforma sprzętowa. Czy to jest Macintosh, PC, wbudowana w telewizor przeglądarka, telefon czy zegarek na rękę? Każde urządzenie na swój własny system operacyjny, układ ekranu, oprogramowanie komunikacyjne itd. Każdy z tych aspektów wpływa na wygląd stron WWW na ekranie.
Strona 92 (99) 150.Rodzaj i wersja przeglądarki. Istnieje wiele różnych typów przeglądarek - a każda ma wiele wersji. Niktóre działają tylko na jednej platformie sprzętowej, inne na wielu. Przykłady: Netscape navigator 3.04 i 4.05, Internet Explorer 3.02, 4.01 i 5.0, Mosaic 3.0, Opera, Emacs.
Każda przeglądarka i każda wersja ma nieco inny zestaw możliwości. Strona WWW może wyglądać świetnie w jednej przeglądarce, a nie dać się wyświetlić w ogóle w innej. Projektanci witryn mają do wyboru dwie drogi: albo zaprojektować witrynę używając najmniejszego wspólnego mianownika, tak żeby wyglądała bardzo podobnnie na wszystkich przglądarkach, albo napisać kod wykorzystujący wszelkie ciekewe możliwości jednej z nich. Jakie ma to znaczenie dla testowania? 151.Wtyczki programowe. Wiele przeglądarek stosuje wtyczki programowe albo inne rozszerzenia, aby uzyskać dodatkowe możliwości, na przykład aby móc odgrywać muzyke lub wyświetlać wideo. 152.Opcje przeglądarki. Wiele przegladarek ma wiele rożnych ustawień. Na rysunku 13.7 znajduje się przykład. Można wybrać opcje dotyczące bezpieczeństwa, wybrać sposób działania tekstu ALT, uaktywnić wybrane wtyczki programowe itd. Każda opcja może wpłynąć na to, jak będzie się zachowywać i wyglądać przegądana witryna - co stwarza nowe możliwe scenariusze do przetestownania.
Rysunek 13.7 Przykład ilustrujący możliwości różnorakiego skonfiguraowania przeglądarki Internet Explorer.
Strona 93 (99) 153.Rozdzielczość ekranu i wielkość skali kolorów. Na wielu platformach można wybrać różne rozdzielczości ekranu i kolory. Na przykład na PC pod Windows można wybrać rozmiary ekranu 640x480, 800x600, 1024x768, 1280x1024 i jeszcze większe. Strona WWW może prezentować się dobrze tylko przy pewnej rozdzielczości, a nie przy innej. Tekst i grafika mogą mieś inaczej zawinięte wiersze, być obcięte albo nie pojawiać się wcale.
Dostępna skala kolorów też może wpłynąć na wygląd witryny. Ilość kolorów może być bardzo różna - od 15 do 224. Czy testowana witryna daje się oglądać tylko w 16-u kolorach? 154.Wielkość tekstu. Użytkownik może zmieniać wielkość tekstu używanego przez przeglądarkę. Czy strona da się oglądać, kiedy wybrana czcionka jest szczeólnie mała lub szczególnie wielka? Co się stanie, jeśli ogladać ją na małym ekranie z niska rozdzielczością i dużą czcionką? 155.Szybkość modemu. Nie da się przecenić znaczenia wydajności. Kiedyś, w przyszłości, każdy będzie mieć połączenie do Internetu wysokiej szybkości, dostarczające nowe dane tak szybko, jak tylko zdoła się je przeczytać. Zanim to nastąpi, trzeba sprawdzać, jak witryna funkcjonuje dla różnych szybkości modemów.
Wziąwszy pod uwagę wszystkie powyższe możliwości, przetestowanie nawet najprostszej stroniczki WWW staje się olbrzymim przedsięwzięciem. Nie wystarczy, by wyglądała dobrze na PC projektanta. Musimy mieć pewność, że będzie poprawnie działać i wyglądać dla wszystkich, do kogo chcemy dpotrzeć. W tym celu trzeba uwzlędnić, jakie użytkownicy mogą mieć konfiguracje. Mając tę wiedzę, można wybrać klasy równoważności dla konfiguracji najważniejszych do przetestowania. Testowanie użyteczności
Użyteczność i witryny WWW zdają się niekiedy wykluczać. Każdy spotkał się z witrynami na których nawigacja jest trudna, które są nieaktualne, powolne albo po prostu brzydkie. Nic dziwnego, że te witryny zapewne nigdy nie przeszły przez ręce testera oprogramowania. Programista albo ktoś inny z niedostateczną znajomością zasad projektowania i wzornictwa (albo ze zbyt wielką wiedzą na temat wzornictwa) skonstruował strony i załadował, nie dbając o to czy są użyteczne.
Strona 94 (99) Jak powiedziane zostało w rozdziale 11-ym, testowanie użyteczności niełatwo jest zdefiniować. Co nie podoba się jednemu, podoba się drugiemu - niektórzy uważają że jeleń na rykowisku1 to wielka sztuka. Na szczeście, przestrzegając kilku prostych zasad - i testując ich użycie - można uczynić witryny WWW użyteczniejszymi.
Jakob Nielsen, www.useit.com, znany ekspert w zakresie wzornictwa i użyteczności witryn WWW, dokonał wielu badań w tej dziedzinie. Poniższe punkty przystosowane są z jego książki Dziesięć głównych błędów projektowania witryn WWW2: 156.Nieuzasadnione użycie „najostrzejszych” technologii. Witryna nie ma usiłować przyciągnąć uwagi użytkowników ostentacyjnym stosowaniem najnowszych dostępnych technologii. Będzie to aktrakcyjne dla kilku technologicznych fanatyków, ale dla większości użytkowników najważniejsza jest zawartość strony i dobra jakość oferowanego wsparcia i serwisu. Użycie najnowszych technologii zanim jeszcze się rozpowszechniły jest pewną receptą na zniechęcenie użytkowników. Jeśli ich system ulegnie awarii podczas odwiedzin takiej witryny, niewielu będzie próbowało powrócić. Wyjąwszy firmy sprzedające internetowe produkty lub serwis, lepiej jest zaczekać aż zastosowana technologia będzie już dostatecznie rozpowszechniona. W czasach, kiedy skład komputerowy był nowością, niektórzy potrafili zastosować i dwadzieścia różnych typów czcionek w swoim dokumnecie. Unikajmy podobnych pułapek przy projektowaniu stron WWW. 157.Rozwijany tekst, ruchome ramki, nieustannie poruszjące się animacje. Nie wolno dopuścić elementów strony będących w ciągłym ruchu. Poruszające się obiekty przyciągaja zawsze ludzkie tak zwane widzenie peryferyjne. Strona WWW nie powinna naśladować neonowej tablicy ogłoszeniowej w nieustannym ataku na zmysł wzroku - dajmy użytkownikom chwilę spokoju, żeby mogli przeczytać znajdujący się na stronie tekst!
1 W oryginale "Elvis on velvet" - tyz piknie! (przyp. tłumacza).
2 W oryginale: Top Ten Mistakes in Web Design (przyp. tłumacza).
Strona 95 (99) 158.Długie, przewijane strony. Użytkownicy zwykle nie lubią przewijania poza infromację widoczną na ekranie po pierwszym otwarciu strony. Kluczowe informacje i opcje do nawigacji powinny być dostępne w górnej części strony. Ostatnie badania wskazują, że dzisiejsi użytkownicy są bardziej skłonni przewijać strony niż w początkowym okresie Internetu, ale nadal warto minimalizować przewijanie. 159.Niestandardowe kolory połączeń. Hiperpołączenia do stron, których użytkownik nie odwiedził powinny byc niebieskie, zaś do stron wcześniej odwiedzonych purpurowe lub czerwone. Nie powinno się niczego z tymi kolorami wydziwiać - spójność jest konieczna, żeby użytkownicy nauczyli się znaczenia tych kolorów. Odróżnianie połączeń już wcześniej wykorzystanych od jeszcze niewykorzystanych jest jedną z nielicznych pomocy nawigacyjnych dostępnych we wszystkich niemal typach przeglądarek. 160.Przestarzała informacja. Zespół projektowy powinien mieć do dyspozycji „ogrodnika WWW” - kogoś zajmującego się usuwaniem chwastów i przesadzaneim kwiatów kiedy kształt strony się zmienia. Niestety, wiele zespołów woli wytwarzać nowe strony niż zajmować się pielęgnacją starych. W rzeczywistości, pielęgnacja jest tanim sposobem na poprawienie zawartości witryny. Większość starych stron zachowuje swą wartość i podłącza się je do nowych stron. Oczywiście, zdezaktualizowane strony najlepiej usunąć z serwera jak najszybciej. 161.Zbyt długi czas ładowania. Szacuje się, że około 0,1 sekundy to maksyamalny czas reakcji, przy którym użytkownicy mają wrażenia, że system reaguje bezzwłocznie. Jedna sekunda to górna granica czasu, do której bieg myśli pozostaje nienaruszony. Dziesięć sekund to najdłuższy możliwy czas zatrzymania zainteresowania użytkownika. Użytkownicy Internetu tylekroć byli narażeni na długie czasy ładowania, że przypuszczalnie mają nieco większą odporność, tak że być może wolno przedłużyć ten limit czasu do 15 sekund przez kika stron. Niemniej nie należy się tym zadowalać - poprzeczkę należy umieścić o wiele niżej.
Strona 96 (99) 162.Brak wsparcia dla nawigacji. Nie wolno zakładać, że użytkownicy znają witrynę tak samo dobrze, jak jej autorzy. Zawsze będzie im trudno znaleźć właściwą informację, więc trzeba im pomóc, dając silne, wyraźne oparcie w strukturze i orientacji w położeniu. Projektowanie witryny należy zacząć od zrozumienia struktury informacji. Tę samą orientację trzeba jakoś przekazać użytkownikom. Najlepiej sporządzić mapę witryny, na której użytkownicy moga śledzić gdzie są i dokąd mogą pójść. Witryna powinna także dysponować dobrą przeszukiwarką, gdyż sama pomoc w nawigacji zwykle nie wystarcza. 163.Osierocone strony. Każda strona powinna byc oznaczona, do jakiej witryny należy, bo użytkownicy moga przecież wejśc na nią wprost, pomijając stronę domową. W tego właśnie podou, każda strona witryny powinna mieć połączenie powrotne, prowadzące do strony domowej oraz wyjaśnienie, gdzie w strukturze witryny w danej chwili się znajdujemy. 164.Złożone adresy witryn WWW (URL-e). W zasadzie "maszynowy" adres URL nie powinien w ogóle pojawiać się w interfejsie użytkownika, ale każda przeglądarka go wyświetla, a praktyka i badania dowodzą, że użytkownicy często przy jego pomocy usiłują domyslić się struktury witryny. Przyczyną tego stanu rzeczy jest brak wspomagania dla nawigacji i orientacji we wspólczesnych przeglądarkach. Tak więc należy to brać pod uwagę i używać w URL-ach czytelnych dla ludzi nazw, tak by odzwierciedlały naturę zawartości danej strony.
Użytkownicy często piszą również adresy URL, tak więc należy starać się minimalizować ryzyko pomyłek używąc krótkich nazw, tylko małych liter i żadnych znaków specjalnych - wiele osób nie wie, jak przy pomocy klawiatury napisać znak ~.
Strona 97 (99) 165.Używanie ram. Ramy to technika HTML umożliwiająca wyświetlanie stron WWW wewnątrz storn WWW, ska nazwa rama - jak rama obrazu. Podzielenie strony na ramy myli użytkowników, gdyż sprzeniewierza się intuicyjnemu modelowi strony większości użytkowników. Znienacka nie można oznaczyć bieżącej strony zakładką i powrócić do niej (zakładka wskazuje na inną część systemu ram), adresy URL przestają działać, a wydruki stają się utrudnione. Co gorsza, znika też przewidywalność działań - kto wie, co się stanie, kiedy kliknie się na połączenie?
Testując witrynę, warto wykorzystać przysługujące testerom prawo składania również donosów na błędy użyteczności. Warto poczytać na temat podstawowych zasad projektowania interfejsu i dowiedzieć się, na czym polega użyteczność. Dobrym źródłem informacji jest wydana przez Microsoft praca pod tytułem "Poprawa użyteczności i atrakcyjności witryn WWW" (Improving Web Site Usability and Appeal). Jej adres na WWW jest msdn.microsoft.com/workshop/management/planning/improvin gsiteusa.asp.  W tym dokumencie znajduje się obszerna lista doświadczeń, jakie Microsfot zdobył w trakcie opracowywania swojej własnej witryny MSN. Niech nikogo nie zniechęci data - 1997 - tego dokumentu. Dobre wzory się nie starzeją. Wprowadzanie automatyzacji
Ostatnia część tego rozdziału wprowadza w pewnym sensie do następnego rozdziału książki, rozdziału 14-ego "Testowanie automatyczne i narzędzia do testowania".
Czytając ten rozdział można było się czasem zastanawiać, w jaki sposób jest w ogóle możliwe zdążyć przetestować dużą i skomplikowaną witrynę WWW. Zwykłe klikanie wszystkich połączeń w celu sprawdzenia, czy są poprawne może zając mnóstwo czasu. Jeśli dodać do tego testowanie podstawowych funkcji, test konfiguracji i kompatybilności oraz wymyślenie sposobów na przetestowanie osiągów i obciążenia poprzez symulowanie tysięcy czy nawet milionów użytkowników, ma się naprawde sporo pracy.
Strona 98 (99) Na szczęście nie trzeba tego wszystkiego robić ręcznie. Dostępne są narzędzia do testowania, zarówno darmowe jak i do kupienia, które moga znacznie ułatwić pracę. Darmowe narzędzia można znaleźć pod www.netmechanic.com lub pod websitegarage.netscape.com. W obu tych witrynach znajdują się łatwe w użyciu narzędzia do automatycznej analizy witryny i testowania pod kątem niekompatybilności z przeglądarkami, kłopotów z wydajnością, pękniętych hiperpołączeń, zgodności ze standardem HTML i błędów pisowni. Mogą nawet powiadomić, które grafiki witryny sa zbyt duże i mogą spowodować zbyt powolne ładowanie. Te narzędzia potrafią zaoszczędzić wiele godzin mozolnej, ręcznej pracy. Warto im się przyjrzeć żeby zorientować się, o czym będzie mowa w rozdziale 14-ym. Podsumowanie
Ten rozdział zamyka część III-ą "Zastosowanie umiejętności w praktyce". Zapoznaliśmy się w niej z tematyką bardzo obszerną: począwszy od ustawień karty wideo, poprzez węgierskie ulokalnienie programu, aż do brzydkich witryn WWW. Te tematy to jedynie fragment całego świata oprogramowania. Ta różnorodność powoduje, że testowanie oprogramowania jest nieskończonym wyzwaniem. Każdego dnia wytwarza się nowe, fascynujące programy, technologia robi kolejny krok naprzód i pojawiają się do rozwiązania nowe interesujące problemy w dziedzinie testowania. Testowanie witryn WWW jest dzisiaj stosownym tematem do tej części książki, ale kto wie, co będzie nim w przyszłości.
Mijemy nadzieje, że po przeczytaniu rozdziałow w części III-ej zdajemy sobie sprawę, że nawet przetestowanie małej witryny czy niewielkiego programu bywa zadaniem przekraczającym możliwości jednego testera czy nawet zespołu testerów. Przetestowanie napisanego przez jednego programistę, liczącego kilkaset rzędów programu może wymagać dziesiątek albo nawet setek testerów, aby mogli oni dokładnie przetestowąc wszelkie możliwe platformy, konfiguracje, języki i typy użytkowników. Ilość kombinacji i permutacji jest bezkresna i nawet przy zastosowaniu podziału na klasy równoważności ilość pracy może przekraczać nasze możliwości.
W następnych dwóch rozdziałach dowiemy się, jak - przy pomocy zarówno ludzkich sił jak i narzędzi - zredukować to zadanie do rozsądniejszych wymiarów. Pytania
Pytania mają na celu ułatwienie zrozumienia. W aneksie A „Odpowiedzi na pytania” znajdują się prawidłowe rozwiązania – ale nie należy ściągać! 1.Jakie podstawowe elementy strony WWW można łatwo przetestować technikami czarnej skrzynki? 2.Co to jest testowanie metodami "szarej skrzynki"?
Strona 99 (99) 3.Dlaczego możliwe jest zastosowanie metod szarej skrzynki do testowania witryn WWW? 4.Dlaczego program do wyszukiwania błędów pisowni nie gwarantuje poprawnej pisowni na stronie WWW? 5.Wymień parę ważnych zagadnień, które trzeba wziąć pod uwagę przy testowaniu konfiguracji i kompatybilności witryn WWW. 6.Które z opisanych przez Jakoba Nielsena 10 głównych błędów witryn WWW spowodowałyby błędy kompatybilności i konfiguracji?