Wszystkim tym, którzy mają cierpliwość czytać tego bloga - bez względu na to czy się ze mną zgadzają czy nie - życzę wszystkiego najlepszego, dużo radości, ciekawych prezentów i miłych chwil.
A na nadchodzący 2008 rok, pełnej dokumentacji :-), ciekawych defektów oraz przede wszystkim zdrowia.
Wszystkiego najlepszego.
niedziela, 23 grudnia 2007
piątek, 7 grudnia 2007
Procesowość procesu
Na rynku dostępne są całe lasy literatury poświęconej procesom. Można je sobie oglądać z punktu widzenia zapewniania jakości, zarządzania projektem, SCM, czy testów.
Nie chcę tutaj pochylać się nad oczywistościami. Z całą pewnością dobrze zdefiniowany proces ułatwia skupienie się na samym projekcie, minimalizując elementy niezaplanowane i nieoczekiwane. Z drugiej strony każdy proces jest pewną generalizacją dokonywaną na podstawie przypadków konkretnych i reprezentatywnych. Oznacza to, że rzeczywistość jest bardziej ciekawa niż to może się wydawać krojniczym takiego procesu. Zawsze!
Bardzo często, mechanizmami obronnymi takiego procesu jest rozrost administracji w skrajnych wypadkach prowadzący do jakiejś formy tego, co Max Weber nazwał "złotą klatką racjonalizmu". W skrajnych przypadkach dla małych projektów, większa część czasu jest przeznaczona na obsługę samego procesu a nie na obsługę projektu.
Nie wchodząc w szczegóły poczyniłem następujące spostrzeżenia:
Nie chcę tutaj pochylać się nad oczywistościami. Z całą pewnością dobrze zdefiniowany proces ułatwia skupienie się na samym projekcie, minimalizując elementy niezaplanowane i nieoczekiwane. Z drugiej strony każdy proces jest pewną generalizacją dokonywaną na podstawie przypadków konkretnych i reprezentatywnych. Oznacza to, że rzeczywistość jest bardziej ciekawa niż to może się wydawać krojniczym takiego procesu. Zawsze!
Bardzo często, mechanizmami obronnymi takiego procesu jest rozrost administracji w skrajnych wypadkach prowadzący do jakiejś formy tego, co Max Weber nazwał "złotą klatką racjonalizmu". W skrajnych przypadkach dla małych projektów, większa część czasu jest przeznaczona na obsługę samego procesu a nie na obsługę projektu.
Nie wchodząc w szczegóły poczyniłem następujące spostrzeżenia:
- Działanie procesu w dużej mierze nie zależy na konstrukcji samego procesu ale na procesie zarządzania nim (np. zmuszanie programistów do pisania dokumentacji).
- Każdy proces powinien być definiowany na potrzeby konkretnej organizacji. Kopiowanie na wprost w tym zakresie zawsze się zemści!
- Każdy proces opracowany na potrzeby konkretnej organizacji musi być skalowalny (mini dla małych projektów, midi dla średnich projektów i maxi dla dużych projektów
- każdy proces musi mieć określony cel i powinien być wykorzystywany tylko w kierunku realizacji tylko tego celu. Każde nadużycie tej zasady może prowadzić do zmiany działającego procesu. W myśl zasady "lepsze" jest wrogiem "dobrego" efekt wcale nie musi być zachwycający.
- Materiał wyjściowy i wejściowy z i do procesu powinien być generowany możliwie najczęściej automatycznie minimalizując nakład ręcznego przygotowywania dokumentów
- Potrzebny jest miernik na jakim poziomie projekt powinien być opisany. Dla projektów run-and-forget powinien być to minimalny opis natomiast dla projektów o szerokim horyzoncie utrzymaniowym taki opis powinien być możliwie szczegółowy
- Role powinny być odseparowane. Developer woli programować niż pisać a technical writter woli pisać niż programować
- Jeden wspólny język dla całego procesu
środa, 7 listopada 2007
Oczywiste oczywistości czyli o podstawach kompletnych testów
Tym razem chciałbym napisać o rzeczach, które uważam za kompletne podstawy... . Chciałem zdanie dokończyć 'testowania oprogramowania' ale uzmysłowiłem sobie, że to nie dotyczy wyłącznie testowania. A więc... chcę napisać o kompletnych i podstawowych zabiegach, stosowanych w szeroko pojętej inżynierii w mocnym kontekście testów oprogramowania, odchylonych - z kolei - mocno w stronę automatyzacji i/lub powtarzalności.
- Parametryzacja - separacja danych od logiki ich przetwarzania. Duża część testów polega na mnipulacji samymi danych (klasy równoważności, wartość graniczne, dziedziny itd). W związku z tym o wiele łatwiej jest zarządzać tymi danymi mając je "na zewnątrz" skryptu.
- Atomizacja - rozbijanie złożonych problemów na proste. Informatyka jest pod tym kątem szczególnie łaskawą dziedziną. Praktycznie każdy złożony problem składa się z mniejszych i prostszych. Trzeba tylko umieć wyłowić powiązania prostych problemów w kontekście złożonego. Dodatkowo, "testowo" obsłużone proste problemy mogą być re-używalne.
- Logika - nie testować w oparciu o nazwy kontrolek ale w oparciu o logiczne przepływy danych. Każde oprogramowanie składa się z warstwy prezentacyjnej (interfejs użytkownika), warstwy przetwarzania (middleware) i warstwy sterowania (sterowniki). Dobrze napisane oprogramowania ma te warstwy mocno odseparowane co pozwala na wydajne testowanie logiki w oderwaniu od kontrolek i zasilaniu logiki bezpośrednio z zestawów danych testowych np. poprzez API.
- Narzędzia - co może za nas zrobić narzędzie to niech to zrobi. Pytanie tylko czy potrafimy tym narzędziem się posłużyć. Narzędzi jest całe mnóstwo i nie problem znaleźć takie, które wydaje się przydatne ale wcześniej trzeba wiedzieć do czego chce się wykorzystać takie narzędzie.
- Abstrakcja - nie związywanie procedur testowych z konkretną wersją (wyglądem) testowanego oprogramowania ale raczej z jego przeznaczeniem. Np. przypadki testowe odwołujące się do konkretnych nazw kontrolek muszą być aktualizowane gdy zmieni się wersja GUI. A z drugiej strony, skoro przypadki już są gotowe to po co czekać i nie uruchomić procedur testowych od razu. Przecież kontrolki na interfejsie użytkownika można potraktować jako swojego rodzaju dane, które się weryfikuje (czy kontrolka jest, wartości kontrolki, funkcjonalności kontrolki).
- Elastyczność - łatwość rozbudowywania i dostosowywania do konkretnych potrzeb. W przypadku automatyzacji chodzi np. o możliwość zestawiania poszczególnych skryptów czy przypadków testowych w różnych sekwencjach.
- Generowalność - generowanie scenariuszy i generowanie rezultatów testów. Wybudowanie środowiska testowego pozwalającego na swobodne generowanie scenariuszy testowych o jasno określonym celu jest bardzo trudne jeśli wręcz nie możliwe. Jakkolwiek, należy budować przypadki testowe w taki sposób aby na ich podstawie móc generować scenariusze. Drugą stroną jest możliwość generowania wyników z testów. Każdy przeprowadzony test kończy się określonym wynikiem. Dobrze jest jeśli takie wyniki odnotowywane są automatycznie w sposób umożliwiający ich dalszą weryfikację.
środa, 24 października 2007
Portal MS o testowaniu
Firma Microsoft uruchomiła na MSDNie "Tester Center", które można znaleźć pod adresem http://msdn2.microsoft.com/en-us/testing/default.aspx.
Interesujące jest to, że to przedsięwzięcie firmują takie nazwiska jak James A. Whittaker czy Michael "The Braidy Tester" Hunter co jest gwarancją zachowania wysokiego poziomu merytorycznego.
Interesujące jest to, że to przedsięwzięcie firmują takie nazwiska jak James A. Whittaker czy Michael "The Braidy Tester" Hunter co jest gwarancją zachowania wysokiego poziomu merytorycznego.
wtorek, 11 września 2007
Pytać czy nie pytać eksperta!?
W życiu każdego testera następuje chwila, w której musi sobie odpowiedzieć na pytanie "zapytać o 'to' czy nie zapytać?". Po przełamaniu pierwszych lodów i odkryciu jak potężnym jest to narzędziem, sięgamy po nie coraz częściej. Chyba, że napotykamy na mur deadlocków... to znaczy, kiedy częściej uzyskujemy odpowiedź "nie teraz", "za chwilę", "teraz nie mam czasu" niż tą o którą nam chodziło.
Z drugiej strony zauważyłem, że istnieje wielu testerów, którzy wolą po prostu grzebać samemu "na czuja" niż zasięgnąć porady u eksperta. Wynika to, zapewne z wcześniejszych doświadczeń typu "nie mam czasu" jak i obietnicy ogromnej satysfakcji, "że sam odkryłem".
Oczywiście wybór drogi należy do każdego testera osobiście. Ja chciałem się tylko podzielić swoimi spostrzeżeniami na ten temat.
Bezpośrednia rozmowa z ekspertem ma niewątpliwie tę ogromną zaletę, że uczy bardzo szybko wielu rzeczy związanych z testowanym systemem. Z drugiej jednak strony ma tę ogromną wadę, że w sposób zasadniczy zależy od 'interfejsu' eksperta. Po prostu, kiedy spotykamy człowieka otwartego i gotowego do pomocy to pracuje się nam z nim przyjemniej niż z człowiekiem, którego trzeba wiecznie "błagać" o skrawek wiedzy. Powoduje to, że 'user-friendly' eksperci są bardziej oblegani niż Ci 'z konsolą znakową'. Często sami eksperci, przeciążeni pracą, zaczynają ograniczać swoją uprzejmość bo po prostu zajęci są swoimi obowiązkami.
Aby rozmowa z ekspertem była owocna, należy przede wszystkim się do niej przygotować (nas też denerwuje jak ktoś ciągle przychodzi do nas i zadaje pytania na które swobodnie możemy odpowiedzieć sławetnym "RTFM"). A jak się przygotować? Przede wszystkim przeczytać dostępna dokumentację aby upewnić się, ze mamy doczynienia z prawdziwym problemem
(zasada taka sama jak przy zgłaszaniu incydentów), następnie sprawdzić logi. Bardzo często ten krok jest pomijany a on tymczasem dostarcza w wielu wypadkach odpowiedzi na nasze pytania. Po to przecież logi są implementowane aby odpowiadać na pytania co poszło źle.
Jeśli pójdziemy do eksperta z pytaniem "dlaczego to nie działa" to jest to tak samo jakbyśmy zgłosili incydent "system nie działa". Zadając pytanie ekspertowi trzeba wiedzieć co konkretnie nie działa, umieć to nazwać. A jeśli nie potrafimy - bo n.p. jesteś w nowej organizacji - to należy zaznaczyć to na wstępie, że nie umiemy tego nazwać ale utknęliśmy na takim to a takim kroku (określić punkt w procesie).
Inną pomocną rzeczą są koledzy obok. Jeśli jest to zespół doświadczonych testerów to na pewno tam znajdziemy odpowiedź a jeśli nie to i tak warto zapytać bo prawdopodobnie, ktoś wcześniej trafił na podobny problem. Przynajmniej powie nam do kogo powinniśmy udać się z podobnym problemem.
Pozostaje jeszcze problem "wydłubywania" czegoś samodzielnie. Testerzy - chyba z natury rzeczy - są ludźmi uwielbiającymi dłubać. Jeśli napotykają problem n.p. z uruchomieniem jakiegoś procesu, to próbują na wszelkie znane im sposoby, uruchomić go. Problem polega na tym że:
Tutaj jednak problemami, które przełamywać powinien przede wszystkim kierownik testów są:
Czasami problemem bywa nieznajomość organizacji. Tester po prostu nie wie do kogo się udać. A nawet jak zdobędzie nazwisko danej osoby to nie wie gdzie może ją znaleźć. Jest to zasadnicze pole działania dla osoby kierującej testami. To ona powinna w takich sytuacjach przejmować obowiązek 'biura matrymonialnego' komunikując testera z odpowiednim ekspertem.
Testerzy nie są wszechwiedzący. Część funkcjonalności systemu znają lepiej na niskim poziomie a część - zwłaszcza tą której nie testowali bezpośrednio - znają na wyższym poziomie. Większość problemów przeważnie dotyczy tego wysokiego poziomu. Mamy więc sytuację kiedy człowiek z oględną wiedza na temat danej dziedziny usiłuje skonsultować się z ekspertem. Powoduje to, ze 'ekspert' czasami wykorzystuje sytuację dając do zrozumienia, ze pytanie jest głupie. Dzieje się tak gdyż 'ekspert' nie potrafi wyobrazić sobie świata bez swojego poletka, któremu przypisuje najprawdopodobniej mistyczne niemal przymioty. Jest to smutna sytuacja, która de facto obróci się przeciw 'ekspertowi'. W efekcie ekspert otrzyma gorzej przetestowany system, co wynika z reglamentowanie informacji.
Rozdzielenie lokalizacji ekspertów i testerów, jest w mojej opinii jednym z najpoważniejszych błędów. Pracowałem w projekcie, w którym testerzy siedzieli w lokacji oddalonej od ekspertów o setki kilometrów. Żadna telefonia, komunikatory ani maile nie są w stanie tego skompensować. Duża porcja informacji ginie co odbija się na jakości systemu.
Jeśli kierownik testów lub inna osoba odpowiedzialna za działa kontrolujące jakość systemów informatycznych jest mało komunikatywna powoduje to, ze i członkowie zespołu nie będą się komunikować z innymi zespołami. W skrajnych przypadkach kierownicy testów budują mit o jakości oprogramowania którą rujnują niedouczeni, niekompetentni, leniwi i gnuśni programiści. Jest to odwrócenie sytuacji eksperta z nieprzyjaznym 'interfejsem'. Skoro testerzy wykorzystują byle pretekst do pomstowania na ekspercie i jego rodzinie 7 pokoleń wstecz to dlaczego tenże ekspert ma być otwarty i uprzejmy. Posunę się nawet do twierdzenia, iż zarząd firmy w której funkcjonuje taki kierownik testów, powinien niezwłocznie usunąć taką osobę zanim ta choroba rozprzestrzeni się na cały zespól testów.
Reasumując chciałem powiedzieć, że wszyscy uczestnicy projektu powinni traktować się z szacunkiem bez względu na zajmowane w nim pozycje. Kierownictwo i zarząd firmy powinny dbać o kreowanie i rozwijanie takich postaw a napiętnować postawy zamknięte.
* Zdarzyło mi się pracować w środowisku, w którym tak zwani eksperci wykorzystywali niedoświadczenie testerów, drwiąc z nich. Zakończyło się to prawie całkowitym zerwaniem komunikacji testerzy - eksperci co z kolei - w mojej ocenie - było jedną z zasadniczych przyczyn niskiej jakości dostarczanego rozwiązania.
Z drugiej strony zauważyłem, że istnieje wielu testerów, którzy wolą po prostu grzebać samemu "na czuja" niż zasięgnąć porady u eksperta. Wynika to, zapewne z wcześniejszych doświadczeń typu "nie mam czasu" jak i obietnicy ogromnej satysfakcji, "że sam odkryłem".
Oczywiście wybór drogi należy do każdego testera osobiście. Ja chciałem się tylko podzielić swoimi spostrzeżeniami na ten temat.
Bezpośrednia rozmowa z ekspertem ma niewątpliwie tę ogromną zaletę, że uczy bardzo szybko wielu rzeczy związanych z testowanym systemem. Z drugiej jednak strony ma tę ogromną wadę, że w sposób zasadniczy zależy od 'interfejsu' eksperta. Po prostu, kiedy spotykamy człowieka otwartego i gotowego do pomocy to pracuje się nam z nim przyjemniej niż z człowiekiem, którego trzeba wiecznie "błagać" o skrawek wiedzy. Powoduje to, że 'user-friendly' eksperci są bardziej oblegani niż Ci 'z konsolą znakową'. Często sami eksperci, przeciążeni pracą, zaczynają ograniczać swoją uprzejmość bo po prostu zajęci są swoimi obowiązkami.
Aby rozmowa z ekspertem była owocna, należy przede wszystkim się do niej przygotować (nas też denerwuje jak ktoś ciągle przychodzi do nas i zadaje pytania na które swobodnie możemy odpowiedzieć sławetnym "RTFM"). A jak się przygotować? Przede wszystkim przeczytać dostępna dokumentację aby upewnić się, ze mamy doczynienia z prawdziwym problemem
(zasada taka sama jak przy zgłaszaniu incydentów), następnie sprawdzić logi. Bardzo często ten krok jest pomijany a on tymczasem dostarcza w wielu wypadkach odpowiedzi na nasze pytania. Po to przecież logi są implementowane aby odpowiadać na pytania co poszło źle.
Jeśli pójdziemy do eksperta z pytaniem "dlaczego to nie działa" to jest to tak samo jakbyśmy zgłosili incydent "system nie działa". Zadając pytanie ekspertowi trzeba wiedzieć co konkretnie nie działa, umieć to nazwać. A jeśli nie potrafimy - bo n.p. jesteś w nowej organizacji - to należy zaznaczyć to na wstępie, że nie umiemy tego nazwać ale utknęliśmy na takim to a takim kroku (określić punkt w procesie).
Inną pomocną rzeczą są koledzy obok. Jeśli jest to zespół doświadczonych testerów to na pewno tam znajdziemy odpowiedź a jeśli nie to i tak warto zapytać bo prawdopodobnie, ktoś wcześniej trafił na podobny problem. Przynajmniej powie nam do kogo powinniśmy udać się z podobnym problemem.
Pozostaje jeszcze problem "wydłubywania" czegoś samodzielnie. Testerzy - chyba z natury rzeczy - są ludźmi uwielbiającymi dłubać. Jeśli napotykają problem n.p. z uruchomieniem jakiegoś procesu, to próbują na wszelkie znane im sposoby, uruchomić go. Problem polega na tym że:
- nawet jeśli uda nam się uruchomić taki proces to i tak nie wiemy do końca czy jest to poprawny sposób uruchamiania
- często po prostu nie udaje nam się go uruchomić bo brakuje nam wiedzy o jednym, małym, sekretnym parametrze
Tutaj jednak problemami, które przełamywać powinien przede wszystkim kierownik testów są:
- zwykła, naturalna nieśmiałość członków zespołu
- nieznajomość organizacji
- obawa przed dyskredytacją lub odsłonięciem naszej niewiedzy*
- przeszkody fizyczne, n.p. oddzielne lokalizacjae testerów i ekspertów
- postawa osoby odpowiedzialnej za testy
Czasami problemem bywa nieznajomość organizacji. Tester po prostu nie wie do kogo się udać. A nawet jak zdobędzie nazwisko danej osoby to nie wie gdzie może ją znaleźć. Jest to zasadnicze pole działania dla osoby kierującej testami. To ona powinna w takich sytuacjach przejmować obowiązek 'biura matrymonialnego' komunikując testera z odpowiednim ekspertem.
Testerzy nie są wszechwiedzący. Część funkcjonalności systemu znają lepiej na niskim poziomie a część - zwłaszcza tą której nie testowali bezpośrednio - znają na wyższym poziomie. Większość problemów przeważnie dotyczy tego wysokiego poziomu. Mamy więc sytuację kiedy człowiek z oględną wiedza na temat danej dziedziny usiłuje skonsultować się z ekspertem. Powoduje to, ze 'ekspert' czasami wykorzystuje sytuację dając do zrozumienia, ze pytanie jest głupie. Dzieje się tak gdyż 'ekspert' nie potrafi wyobrazić sobie świata bez swojego poletka, któremu przypisuje najprawdopodobniej mistyczne niemal przymioty. Jest to smutna sytuacja, która de facto obróci się przeciw 'ekspertowi'. W efekcie ekspert otrzyma gorzej przetestowany system, co wynika z reglamentowanie informacji.
Rozdzielenie lokalizacji ekspertów i testerów, jest w mojej opinii jednym z najpoważniejszych błędów. Pracowałem w projekcie, w którym testerzy siedzieli w lokacji oddalonej od ekspertów o setki kilometrów. Żadna telefonia, komunikatory ani maile nie są w stanie tego skompensować. Duża porcja informacji ginie co odbija się na jakości systemu.
Jeśli kierownik testów lub inna osoba odpowiedzialna za działa kontrolujące jakość systemów informatycznych jest mało komunikatywna powoduje to, ze i członkowie zespołu nie będą się komunikować z innymi zespołami. W skrajnych przypadkach kierownicy testów budują mit o jakości oprogramowania którą rujnują niedouczeni, niekompetentni, leniwi i gnuśni programiści. Jest to odwrócenie sytuacji eksperta z nieprzyjaznym 'interfejsem'. Skoro testerzy wykorzystują byle pretekst do pomstowania na ekspercie i jego rodzinie 7 pokoleń wstecz to dlaczego tenże ekspert ma być otwarty i uprzejmy. Posunę się nawet do twierdzenia, iż zarząd firmy w której funkcjonuje taki kierownik testów, powinien niezwłocznie usunąć taką osobę zanim ta choroba rozprzestrzeni się na cały zespól testów.
Reasumując chciałem powiedzieć, że wszyscy uczestnicy projektu powinni traktować się z szacunkiem bez względu na zajmowane w nim pozycje. Kierownictwo i zarząd firmy powinny dbać o kreowanie i rozwijanie takich postaw a napiętnować postawy zamknięte.
* Zdarzyło mi się pracować w środowisku, w którym tak zwani eksperci wykorzystywali niedoświadczenie testerów, drwiąc z nich. Zakończyło się to prawie całkowitym zerwaniem komunikacji testerzy - eksperci co z kolei - w mojej ocenie - było jedną z zasadniczych przyczyn niskiej jakości dostarczanego rozwiązania.
poniedziałek, 10 września 2007
Polski blog o testowaniu
Dzisiaj znalazłem w sieci polski blog o testowaniu oprogramowania. Można go znaleźć pod http://testerzy.org/.
Z kilkoma artykułami umieszczonymi tam nie zgadzam się z innymi się zgadzam ale to tak naprawdę nie jest istotne... istotne jest, że powstaje kolejna strona o testowaniu w języku polskim.
Oby tak dalej
Z kilkoma artykułami umieszczonymi tam nie zgadzam się z innymi się zgadzam ale to tak naprawdę nie jest istotne... istotne jest, że powstaje kolejna strona o testowaniu w języku polskim.
Oby tak dalej
piątek, 27 lipca 2007
Wakacje
No i sezon ogórkowy! Ale niestety nie u mnie. Mam mnóstwo pracy co niestety powoduje, że trochę zaniedbałem bloga ale mam nadzieję, że niedługo się wykaraskam z opałów i znowu będę mógł coś napisać.
Tym czasem chciałem polecić dwie książki - niestety po angielsku - odnośnie testowania:
Zaletą tych książek jest to, że opisują proces testowania od A do Z i współdzielą doświadczenie testowe.
Tym czasem chciałem polecić dwie książki - niestety po angielsku - odnośnie testowania:
- Rick D. Craig, Stefan P. Jaskiel, Systematic Software Testing
- Marnie L. Hutcheson, Software Testing Fundamentals: Methods and Metrics
Zaletą tych książek jest to, że opisują proces testowania od A do Z i współdzielą doświadczenie testowe.
czwartek, 24 maja 2007
Guide to the SWEBOK
Celem projektu Guide to the Software Engineering Body of Knowledge jest (jak wskazują autorzy):
Ale oczywiście zachęcam do poznania całego dokumentu. Pozwala on na poznanie podstaw takich gałęzi inżynierii oprogramowania jak zarządzanie wymaganiami, projektowanie i konstruowanie oprogramowania, utrzymanie czy zarządzanie konfiguracją lub jakością.
A wszystko to dostępne pod adresem: Guide to the SWEBOK
- opisanie treści dokumentu "Software Engineering Body of Knowledge";
- umożliwienie dostępu tematycznego do dokumentu "Software Engineering Body of Knowledge";
- promowanie spójnego spojrzenia na inżynierię oprogramowania;
- wyjaśnienie miejsca oraz ustalenie granic inżynierii oprogramowania w stosunku do innych dyscyplin takich jako informatyka, zarządzanie projektem, inżynieria informatyczna czy matematyka;
- utworzenie podstaw rozwoju materiałów szkoleniowych, certyfikacyjnych i licencyjnych
Ale oczywiście zachęcam do poznania całego dokumentu. Pozwala on na poznanie podstaw takich gałęzi inżynierii oprogramowania jak zarządzanie wymaganiami, projektowanie i konstruowanie oprogramowania, utrzymanie czy zarządzanie konfiguracją lub jakością.
A wszystko to dostępne pod adresem: Guide to the SWEBOK
czwartek, 17 maja 2007
Data Driven Test Automation Frameworks
Zaczynając budowę automatycznego środowiska testowego, bardzo pomocne jest zdefiniowanie podstaw. Pozwala to na późniejsze uniknięcie błędów związanych z utrzymaniem i rozwojem takiego środowiska co jest jednym z największych zagrożeń związanych z taką architekturą testów. "Data Driven Test Automation Frameworks" jest to dokument zawierający kilka propozycji w jaki sposób można zorganizować sobie to środowisko w sposób pozwalający zminimalizować te zagrożenia. Niestety opis ten zawiera tylko rozwiązania oparte o dane.
środa, 16 maja 2007
Prywatne EuroSTAR :-)
Oprócz amerykańskich konferencji poświęconych jakości oprogramowania STAREAST i STARWEST funkcjonuje ich europejska wersja pod nazwą EuroSTAR. Najbliższa odbywa się pod hasłem "Defining the Profession". Organizatorzy uważają, że do rozwikłania zagadki tego hasła prowadzą odpowiedzi na poniższe pytania:
Mówi się, że dobry tester jest w stanie przetestować wszystko... i rzeczywiście kilka lat pracy w zawodzie formułuje specyficzne podejście charakteryzujące się "testowaniem" otoczenia. Jak słusznie zauważył James Bach, istotne jest umiejętne posługiwanie się sceptycyzmem i krytycyzmem co w mojej ocenie jest wyższym stopniem wtajemniczenia w ten zawód. Łatwo jest bowiem popaść w bezproduktywne narzekanie, że system nie jest doskonałej jakości a bardzo trudno jest ustrzec się przed domniemaniem pewnych oczywistości. I tak np. łatwo jest powiedzieć, że dany obszar funkcjonalny jest źle napisany bo zostało do niego zaraportowanych dużo defektów ale dużo trudniej jest tak skonstruować testy aby przy minimalnym, potrzebnym nakładzie pracy (w sensie czasu i zasobów) przetestować dokładnie ten obszar a następnie efektywnie zweryfikować efekt prac naprawczych.
Jak można zdefiniować profesjonalistę...? Uważam, że profesjonalista to człowiek skupiony na celach, potrafiący je osiągać korzystając z dostępnych środków oraz dobierać nowe środki w sposób optymalny. Ale jednocześnie profesjonalista to taki ktoś, kto dążąc do realizacji tych celów, potrafi dać swój wkład w środowisko pracy... to np. taka osoba, która widzi szerszy kontekst swojej działalności. Osoba, która biorąc cokolwiek od innej osoby (wiedzę, informację, zasoby, czas, itp) potrafi uczynić to we właściwy sposób i jednocześnie dać coś w zamian. To ktoś w towarzystwie kogo przebywając jednocześnie uczymy się, ktoś do kogo ma się zaufanie. To ktoś kto ma misję!
Dla mnie taką misją jest "minimalizowanie ryzyka związanego z realizowanym produktem/projektem". To minimalizowanie realizuję poprzez dostarczanie innym uczestnikom procesu, z jednej strony informacji na temat jak można przy zastanych zasobach i historii projektu zrealizować efektywnie testy a z drugiej strony wiarygodną informację na temat poziomu jakości tego produktu w odniesieniu do czynników zewnętrznych takich jak jakościowe oczekiwania klienta, otoczenie biznesowe, przeznaczenie systemu, itp. W ten sposób chronię zarówno swojego pracodawcę przed utratą renomy a z drugiej strony chronię odbiorcę przed stratami spowodowanymi wadliwym działaniem systemu.
Często spotykam się z mniej lub bardziej jawny antagonizowaniem testera i programisty. Dla mnie takie ujęcie jest zupełnie bezprzedmiotowe. Nie ma znaczenia tak naprawdę kto "bardziej zbawia świat". Znaczenie ma jaki się ma stosunek do wykonywanego zawodu. Testowanie dla osoby zainteresowanej tym zawodem i świadomej możliwości jest takim samym wyzwaniem jak zaprogramowanie testowanego systemu. Co więcej, antagonizowanie działu testów z działem rozwoju w poważny sposób zakłóca komunikację między tymi dwoma działami co w konsekwencji najczęściej powoduje z jednej strony reglamentację wiedzy na temat stosowanych rozwiązań a z drugiej strony nadmierny nakład pracy związanej z testami oraz zbyt detaliczne raportowanie defektów.
Testowanie jako odrębna dziedzina daje duże możliwości wielokierunkowego rozwoju i zdobywania wiedzy weźmy choćby pod uwagę automatyzację testów, projektowanie testów, standaryzację testów, itp.
Do znajdowania, opisywania i klasyfikowania defektów, dysponuje jednocześnie całym wachlarzem narzędzi takich jak techniki testowania, znajomość kontekstu biznesowego, historii system oraz samego systemu.
Nie chcę przez to powiedzieć, że tester jest odpowiedzialny za całość przedsięwzięcia a jedynie chcę podkreślić fakt, iż do obowiązków testera nie należy tylko samo testowanie ale także osadzanie wiedzy o testowanym systemie w jego kontekście w takim zakresie w jakim jest to dla niego osiągalne w zależności od jakości komunikacji w projekcie, zakresu odpowiedzialności (analityk testów, wykonawca testów, lider/manager testów, lider/manager do spraw jakości procesów).
Same umiejętności podzieliłbym na kilka poziomów: warsztatowe, produktowe techniczne, produktowe nietechniczne oraz społeczne.
Umiejętności warsztatowe to przede wszystkim biegła znajomość technik projektowania przypadków testowych. To jest warunek sine qua non bycia testerem. To właśnie od tego zależy to czy wykonujemy testy w sposób kontrolowalny, wiarygodny, weryfikowalny i jednoznaczny. Skonstruowanie i uruchomienie przypadku testowego bez jednej z tych cech często okazuje się pracą bezcelową, nie przynoszącą odpowiedzi na podstawowe pytanie.
Umiejętności produktowe techniczne to wszystkie te informacje, które są związane ze sposobem w jaki dany produkt powstaje. Mam na myśli tutaj technologię, sposób implementacji danych funkcjonalności, znajomość ograniczeń technicznych systemu, itp.
Umiejętności produktowe nietechniczne to generalnie znajomość i zrozumienie celu, dla którego powstaje produkt. Innych funkcji oczekujemy przecież od sytemu księgowego a innych od systemu przetwarzania sygnału telewizji cyfrowej, inaczej będzie działał wygaszacz ekranu na komputerze a zupełnie inaczej na dekoderze telewizji cyfrowej. Bez znajomości kontekstu w jakim osadzony jest produkt trudno jest mówić o "dobrym testowaniu".
Umiejętności społeczne to przede wszystkim umiejętności komunikacji i współpracy. Bardzo istotne jest z punktu widzenia testera zrozumienie chociażby tak prostego faktu, że defekty w oprogramowaniu nie wynikają ze złej woli programisty lub uporu architekta ale z faktu, że każdy z nas jest człowiekiem i popełnia błędy. I oczywiście odwrotnie, ważne jest aby osoba odpowiedzialna za całość przedsięwzięcia była świadoma, że testowanie jest sztuką szacowania opartym na krytycznym podejściu do oprogramowania dostarczonego do testów oraz na sceptycznym podejściu do deklarowanej jakości tego systemu, zakresu zmian, możliwych efektów pobocznych, itp.. (Nad wyraz często spotykam się z sytuacją, w której raporty defektów są po prostu ignorowane lub przetwarzane wsadowo co tak naprawdę przynosi gorszy efekt niż po prostu pozostały by one w statusie początkowym).
Te cztery warstwy "zanurzone" są w czymś co nazwałbym "intuicją testera". Rodzi się ona i rozwija się z czasem i doświadczeniem (udziałem w różnych projektach, w różnych organizacjach, w różnych kontekstach biznesowych itp.). Pozwala ona testerowi na wydajne czerpanie z wszystkich czterech warstw w zależności od etapu procesu testowego (analizy wymagań, projektowania przypadków testowych, wykonywania testów lub raportowania defektów, oraz od etapu produkcji oprogramowania.
Jest ona również bardzo istotna w procesie wyjaśniania wszelkich niejasności jakie powstają w trakcie czytania dokumentacji. Warto tutaj dodać, iż w sytuacji kiedy reputacja testerów jest umniejszana jako "tych co nie programują" to wtedy, bardzo skuteczną bronią jest stawianie odpowiednich pytań przez testerów. Jeśli charakter zadawanych pytań będzie zdradzał ignorancję testera lub niezrozumienie działania i celu systemu, negatywna postawa programisty utrwali się. Jeśli natomiast pytania testera przyniosą tę korzyść programiście, że zwrócą mu lub jej uwagę na szczegóły, które są istotne a nie zostały uwzględnione w analizie, bardzo szybko testerzy staną się ośrodkiem wiedzy na temat całościowego działa testowanego systemu. Testerzy - w naturalny niejako sposób - stają się jedynym ośrodkiem w procesie wytwarzania oprogramowania, który posiada w miarę całościową wiedzę na temat rzeczywistego działania produktu. Wynika to właśnie z faktu konieczności zrozumienia zasady działa i celowości całego systemu a nie tylko jej fragmentu. Konieczność ta, z kolei jest warunkiem istotnym do prawidłowego przetestowania systemu.
Na tej podstawie, jako swoją najbardziej cenną umiejętność w tym zawodzie określiłbym otwartość. Otwartość rozumianą jako rozumienie zarówno potrzeb projektu jak i klienta oraz znajdowanie kompromisu pomiędzy tymi dwoma żywiołami.
Na pewno doświadczenie jest tym co bardzo pomaga w realizacji zadań testowych. Ale to nie jest, żadna myśl odkrywcza gdyż doświadczenie jest wszędzie przydatne. Jeśli natomiast jest to pytanie o profil wykształcenia oraz wynikającego w konsekwencji doświadczenia zawodowego to nie potrafię na to odpowiedzieć. Spotykałem wielu testerów. Byli wśród nich i absolwenci filozofii jak i absolwenci fizyki czy informatyki. Ale nie umiem powiedzieć czy wykształcenie ma jakikolwiek wpływ na to czy jest się dobrym lub złym testerem. Z całą pewnością znajomość i wiedza z zakresu inżynierii oprogramowania, programowania, czy generalnie informatyki jest czymś niezbędnym. Z moich obserwacji wynika, że testerzy o informatycznym profilu wykształcenia doskonale sobie radzą z problemami czysto technicznymi takimi jak zrozumienie działania skomplikowanej funkcjonalności ale z drugiej strony często spotykałem tutaj tendencje do poprawiania a nie testowania tej funkcjonalności co zżerało czas i zasoby. I nie chodzi mi tutaj o to, że doszukiwali się źródeł problemu ale o to, że często zamiast poświęcać czas na identyfikację defektów poświęcali czasz na poszukiwanie odpowiedzi na pytanie "jak to naprawić" co jest powinnością programisty.
Ludzie o wykształceniu nie technicznym są znacznie bardziej wyczuleni na defekty. Powoduje to, że czasami przesadzają z oceną wagi defektu oraz zajmują sztywniejsze stanowisko w procesie weryfikacji naprawionych defektów. Często także - powodowani swoją niepewnością wynikającą ze świadomości braku wykształcenia informatycznego - komplikują zagadnienia w fazie analizy co utrudnia im znacznie zrozumienie podstawowych kwestii.
Nie wiem, która opcja jest lepsza... Ale wiem, że za każdym razem kiedy pracowałem w zespole testerów, to tworzył się inny niż u programistów świat... świat, w którym ludzie otwarci są na wiedzę i dzielenie się nią, w którym czują się spojeni misją, którą mam nadzieję każdy z nich potrafi sobie zdefiniować. Świat który jest jednak mocno sceptyczny. Z drugiej jednak strony powstaje wiele patologii takich jak tworzenie "mitycznej jakości" lub zbyt szczegółowe podejście do zagadnień testowych co powoduje niepotrzebne wydłużenie cyklu testowego.
Reasumując, definiowanie profesji testera z całą pewności jest pożądane. Dobrze, że powstają firmy certyfikujące i standaryzujące. Dobrze, że jest mnóstwo wolnych strzelców i ludzi pracujących na własnymi metodykami. Taka dychotomia jest symptomem tego, że jest to jeszcze bardzo młoda dziedzina. Ale bez względu na to czy pracujemy w środowisku extreme, agaile, V, W, iteracyjnym czy w modelu kaskadowym, z całą pewnością powinniśmy w naszych codziennych obowiązkach testera zapewniać spełnienie podstawowych warunków takich jak kontrolowalność, wiarygodność, weryfikowalność i jednoznaczność przy optymalnym stosowaniu technik testowych.
Ponieważ próba odpowiedzi na te pytania wydała mi się wyzwaniem, postanowiłem zmierzyć się z nim. Ale postanowiłem to zrobić na ogólnym poziomie nie wchodząc w szczegóły, chyba że jest to uzasadnione.
- Czy uważasz siebie za testera i profesjonalistę? Czy inni uważają Cię za takiego?
- Co pozwala Ci na takie stwierdzenie?
- Czy istnieje podstawowy zbiór umiejętności? Czy są to umiejętności techniczne czy społeczne, a może dwojakie?
- Jaka jest Twoja jedna, najbardziej cenna umiejętność? Czy potrafisz ją objaśnić innym?
- Czy kwalifikacje mogą określać profesjonalnego testera?
- Czy Twoja organizacja wnosi dobre praktyki do profesji?
Czy uważasz siebie za testera i profesjonalistę?Kto może nazwać siebie testerem...? Czasami jako testera określa się osobę zawodowo zajmującą się weryfikowaniem czy to co miało być zrobione zostało rzeczywiście zrobione! Jednak w mojej opinii nie jest to definicja kompletna. Tester bowiem, to osoba, która nie tyle zajmuje się weryfikowaniem czy to co zaplanowane zostało zaimplementowane - jest to produkt bardzo ważny ale pośredni pracy testera. Tester to osoba, która z pełną świadomością przepuszcza oprogramowanie przez specjalnie w tym celu zaprojektowane procedury, których celem jest weryfikacja czy został osiągnięty określony i zdefiniowany poziom jakości i która to osoba do projektowania procedur testowych korzysta w wielu technik! Gdy poziom jakości nie jest określony i zdefiniowany formalnie to i tak bardzo pomocne jest nieformalne określenie tego parametru.
Mówi się, że dobry tester jest w stanie przetestować wszystko... i rzeczywiście kilka lat pracy w zawodzie formułuje specyficzne podejście charakteryzujące się "testowaniem" otoczenia. Jak słusznie zauważył James Bach, istotne jest umiejętne posługiwanie się sceptycyzmem i krytycyzmem co w mojej ocenie jest wyższym stopniem wtajemniczenia w ten zawód. Łatwo jest bowiem popaść w bezproduktywne narzekanie, że system nie jest doskonałej jakości a bardzo trudno jest ustrzec się przed domniemaniem pewnych oczywistości. I tak np. łatwo jest powiedzieć, że dany obszar funkcjonalny jest źle napisany bo zostało do niego zaraportowanych dużo defektów ale dużo trudniej jest tak skonstruować testy aby przy minimalnym, potrzebnym nakładzie pracy (w sensie czasu i zasobów) przetestować dokładnie ten obszar a następnie efektywnie zweryfikować efekt prac naprawczych.
Jak można zdefiniować profesjonalistę...? Uważam, że profesjonalista to człowiek skupiony na celach, potrafiący je osiągać korzystając z dostępnych środków oraz dobierać nowe środki w sposób optymalny. Ale jednocześnie profesjonalista to taki ktoś, kto dążąc do realizacji tych celów, potrafi dać swój wkład w środowisko pracy... to np. taka osoba, która widzi szerszy kontekst swojej działalności. Osoba, która biorąc cokolwiek od innej osoby (wiedzę, informację, zasoby, czas, itp) potrafi uczynić to we właściwy sposób i jednocześnie dać coś w zamian. To ktoś w towarzystwie kogo przebywając jednocześnie uczymy się, ktoś do kogo ma się zaufanie. To ktoś kto ma misję!
Dla mnie taką misją jest "minimalizowanie ryzyka związanego z realizowanym produktem/projektem". To minimalizowanie realizuję poprzez dostarczanie innym uczestnikom procesu, z jednej strony informacji na temat jak można przy zastanych zasobach i historii projektu zrealizować efektywnie testy a z drugiej strony wiarygodną informację na temat poziomu jakości tego produktu w odniesieniu do czynników zewnętrznych takich jak jakościowe oczekiwania klienta, otoczenie biznesowe, przeznaczenie systemu, itp. W ten sposób chronię zarówno swojego pracodawcę przed utratą renomy a z drugiej strony chronię odbiorcę przed stratami spowodowanymi wadliwym działaniem systemu.
Często spotykam się z mniej lub bardziej jawny antagonizowaniem testera i programisty. Dla mnie takie ujęcie jest zupełnie bezprzedmiotowe. Nie ma znaczenia tak naprawdę kto "bardziej zbawia świat". Znaczenie ma jaki się ma stosunek do wykonywanego zawodu. Testowanie dla osoby zainteresowanej tym zawodem i świadomej możliwości jest takim samym wyzwaniem jak zaprogramowanie testowanego systemu. Co więcej, antagonizowanie działu testów z działem rozwoju w poważny sposób zakłóca komunikację między tymi dwoma działami co w konsekwencji najczęściej powoduje z jednej strony reglamentację wiedzy na temat stosowanych rozwiązań a z drugiej strony nadmierny nakład pracy związanej z testami oraz zbyt detaliczne raportowanie defektów.
Testowanie jako odrębna dziedzina daje duże możliwości wielokierunkowego rozwoju i zdobywania wiedzy weźmy choćby pod uwagę automatyzację testów, projektowanie testów, standaryzację testów, itp.
Czy inni uważają Cię za takiego?Nie jestem w stanie odpowiedzieć na to pytanie! Nie znam myśli innych ludzi. Ale mogę odwrócić to pytanie i sformułować je tak "co powoduje, że myślisz o innych jak o profesjonalnych testerach?" Jako profesjonalnego testera określam taką osobę, która potrafi pomóc kierownikowi projektu lub innej osobie odpowiedzialnej za realizację przedsięwzięcia określając, jak i które obszary powinny być testowane w zależności od takich czynników jak czas, historia produktu/projektu oraz historia testów, dostępne zasoby, jakość tych zasobów, itd. Jednym zdaniem, według mnie profesjonalny tester to taki, który potrafi trafnie i wiarygodnie odpowiedzieć na pytanie "jak powinien być przetestowany" system, program, moduł czy jednostka. "Trafnie" oznacza tutaj sposób pozwalający w świadomy sposób wyeliminować ryzyko czyli taki, który umożliwi znalezienie istotnych defektów. Wymaga to z kolei umiejętności klasyfikowania defektów nie tylko z punktu widzenia systemu ale także całego projektu.
Do znajdowania, opisywania i klasyfikowania defektów, dysponuje jednocześnie całym wachlarzem narzędzi takich jak techniki testowania, znajomość kontekstu biznesowego, historii system oraz samego systemu.
Nie chcę przez to powiedzieć, że tester jest odpowiedzialny za całość przedsięwzięcia a jedynie chcę podkreślić fakt, iż do obowiązków testera nie należy tylko samo testowanie ale także osadzanie wiedzy o testowanym systemie w jego kontekście w takim zakresie w jakim jest to dla niego osiągalne w zależności od jakości komunikacji w projekcie, zakresu odpowiedzialności (analityk testów, wykonawca testów, lider/manager testów, lider/manager do spraw jakości procesów).
Co pozwala Ci na takie stwierdzenie?Przystępując do nowego projektu, jako jeden z moich "prywatnych" celów wyznaczam sobie rolę źródła pomocy kierownikowi projektu w realizacji zadań projektowych. Nie każdy kierownik projektu, jest świadom tego, że "oszczędzając czas i zasoby" na testach tak naprawdę oszczędza na zapobieganiu ryzyka. Dostarczenie oprogramowania z dużym opóźnieniem do testów i następnie wymaganie zrealizowania pierwotnego planu testów, w żaden sposób nie zaowocuje dobrymi rezultatami. W najgorszym wypadku, raport z testów może pokazywać, że wszystkie funkcjonalności zostały przetestowane. Ale żaden raport nie pokaże jakiej jakości były te testy. Nie odpowie na pytanie czy mała liczba defektów jest wynikiem znakomitej pracy programistów, czy testów dokonywanych w pośpiechu i pobieżnie. Dlatego uważam, ze każdy odpowiedzialny kierownik testów dużo uwagi powinien poświęcać monitorowaniu realizacji harmonogramu projektu aby wcześnie reagować na ograniczanie czasu przeznaczonego na testy jak najwcześniej. Jednocześnie powinien być świadom, iż skracanie czasu testów oznacza w swojej istocie zmniejszenie zakresu testów a więc zwiększenie ryzyka związanego z produktem.
Czy istnieje podstawowy zbiór umiejętności? Czy są to umiejętności techniczne czy społeczne, a może dwojakie?Groucho Marx powiedział kiedyś "Zamierzam żyć wiecznie lub umrzeć próbując". Z całą pewnością istnieje podstawowy zbiór umiejętności wyróżniający testera spośród innych inżynierów. Przede wszystkim - u dojrzałego testera - jest to świadomość "że świat nie jest taki piękny jak się wydaje a nawet jeśli jest to należy to sprawdzić".
Same umiejętności podzieliłbym na kilka poziomów: warsztatowe, produktowe techniczne, produktowe nietechniczne oraz społeczne.
Umiejętności warsztatowe to przede wszystkim biegła znajomość technik projektowania przypadków testowych. To jest warunek sine qua non bycia testerem. To właśnie od tego zależy to czy wykonujemy testy w sposób kontrolowalny, wiarygodny, weryfikowalny i jednoznaczny. Skonstruowanie i uruchomienie przypadku testowego bez jednej z tych cech często okazuje się pracą bezcelową, nie przynoszącą odpowiedzi na podstawowe pytanie.
Umiejętności produktowe techniczne to wszystkie te informacje, które są związane ze sposobem w jaki dany produkt powstaje. Mam na myśli tutaj technologię, sposób implementacji danych funkcjonalności, znajomość ograniczeń technicznych systemu, itp.
Umiejętności produktowe nietechniczne to generalnie znajomość i zrozumienie celu, dla którego powstaje produkt. Innych funkcji oczekujemy przecież od sytemu księgowego a innych od systemu przetwarzania sygnału telewizji cyfrowej, inaczej będzie działał wygaszacz ekranu na komputerze a zupełnie inaczej na dekoderze telewizji cyfrowej. Bez znajomości kontekstu w jakim osadzony jest produkt trudno jest mówić o "dobrym testowaniu".
Umiejętności społeczne to przede wszystkim umiejętności komunikacji i współpracy. Bardzo istotne jest z punktu widzenia testera zrozumienie chociażby tak prostego faktu, że defekty w oprogramowaniu nie wynikają ze złej woli programisty lub uporu architekta ale z faktu, że każdy z nas jest człowiekiem i popełnia błędy. I oczywiście odwrotnie, ważne jest aby osoba odpowiedzialna za całość przedsięwzięcia była świadoma, że testowanie jest sztuką szacowania opartym na krytycznym podejściu do oprogramowania dostarczonego do testów oraz na sceptycznym podejściu do deklarowanej jakości tego systemu, zakresu zmian, możliwych efektów pobocznych, itp.. (Nad wyraz często spotykam się z sytuacją, w której raporty defektów są po prostu ignorowane lub przetwarzane wsadowo co tak naprawdę przynosi gorszy efekt niż po prostu pozostały by one w statusie początkowym).
Te cztery warstwy "zanurzone" są w czymś co nazwałbym "intuicją testera". Rodzi się ona i rozwija się z czasem i doświadczeniem (udziałem w różnych projektach, w różnych organizacjach, w różnych kontekstach biznesowych itp.). Pozwala ona testerowi na wydajne czerpanie z wszystkich czterech warstw w zależności od etapu procesu testowego (analizy wymagań, projektowania przypadków testowych, wykonywania testów lub raportowania defektów, oraz od etapu produkcji oprogramowania.
Jest ona również bardzo istotna w procesie wyjaśniania wszelkich niejasności jakie powstają w trakcie czytania dokumentacji. Warto tutaj dodać, iż w sytuacji kiedy reputacja testerów jest umniejszana jako "tych co nie programują" to wtedy, bardzo skuteczną bronią jest stawianie odpowiednich pytań przez testerów. Jeśli charakter zadawanych pytań będzie zdradzał ignorancję testera lub niezrozumienie działania i celu systemu, negatywna postawa programisty utrwali się. Jeśli natomiast pytania testera przyniosą tę korzyść programiście, że zwrócą mu lub jej uwagę na szczegóły, które są istotne a nie zostały uwzględnione w analizie, bardzo szybko testerzy staną się ośrodkiem wiedzy na temat całościowego działa testowanego systemu. Testerzy - w naturalny niejako sposób - stają się jedynym ośrodkiem w procesie wytwarzania oprogramowania, który posiada w miarę całościową wiedzę na temat rzeczywistego działania produktu. Wynika to właśnie z faktu konieczności zrozumienia zasady działa i celowości całego systemu a nie tylko jej fragmentu. Konieczność ta, z kolei jest warunkiem istotnym do prawidłowego przetestowania systemu.
Jaka jest Twoja jedna, najbardziej cenna umiejętność? Czy potrafisz ją objaśnić innym?James Bach w jednej ze swoich prezentacji zadaje pytanie; "jaka jest Twoja misja?", "Czy potrafisz opisać ją w 5 minut?" Moją misję zdefiniowałbym jako; "wsparcie kierownictwa projektu w zakresie określania i eliminowania zagrożeń związanych z dostarczeniem wadliwego oprogramowania". Chodzi o to aby mieć świadomość, że kiedy kierownik projektu przychodzi do nas z pytaniem "na kiedy mogę mieć to przetestowane", to tak naprawdę zadaje on pytanie "w jaki sposób - mając do dyspozycji określony czas i zasoby - mogę się dowiedzieć jak najszybciej jakie ryzyko niesie ze sobą wyprodukowane oprogramowanie". To tester musi wiedzieć co, jak długo i w jaki sposób przetestować tak samo jak programista musi wiedzieć co, jak i jak długo będzie programował.
Na tej podstawie, jako swoją najbardziej cenną umiejętność w tym zawodzie określiłbym otwartość. Otwartość rozumianą jako rozumienie zarówno potrzeb projektu jak i klienta oraz znajdowanie kompromisu pomiędzy tymi dwoma żywiołami.
Czy kwalifikacje mogą określać profesjonalnego testera?Na tak postawione pytanie nie da się chyba odpowiedzieć... wszystko zależy od ludzi. Posiadanie certyfikatów nie dowodzi niczego choć na pewno jest pomocą w poszukiwaniu pracy oraz w zdobywaniu zawodowej pewności siebie, co także jest istotne. Czy tester z kilkuletnim doświadczeniem powinien robić certyfikat z testowania? Jeśli chce "ulepszyć" swoje CV to na pewno tak, ale jeśli chce się czegoś nauczyć to nie ma to sensu bo dowie się o podstawowym zakresie stosowania technik, które zna biegle (a jeśli ich nie zna to nie wykonywał pracy testera).
Na pewno doświadczenie jest tym co bardzo pomaga w realizacji zadań testowych. Ale to nie jest, żadna myśl odkrywcza gdyż doświadczenie jest wszędzie przydatne. Jeśli natomiast jest to pytanie o profil wykształcenia oraz wynikającego w konsekwencji doświadczenia zawodowego to nie potrafię na to odpowiedzieć. Spotykałem wielu testerów. Byli wśród nich i absolwenci filozofii jak i absolwenci fizyki czy informatyki. Ale nie umiem powiedzieć czy wykształcenie ma jakikolwiek wpływ na to czy jest się dobrym lub złym testerem. Z całą pewnością znajomość i wiedza z zakresu inżynierii oprogramowania, programowania, czy generalnie informatyki jest czymś niezbędnym. Z moich obserwacji wynika, że testerzy o informatycznym profilu wykształcenia doskonale sobie radzą z problemami czysto technicznymi takimi jak zrozumienie działania skomplikowanej funkcjonalności ale z drugiej strony często spotykałem tutaj tendencje do poprawiania a nie testowania tej funkcjonalności co zżerało czas i zasoby. I nie chodzi mi tutaj o to, że doszukiwali się źródeł problemu ale o to, że często zamiast poświęcać czas na identyfikację defektów poświęcali czasz na poszukiwanie odpowiedzi na pytanie "jak to naprawić" co jest powinnością programisty.
Ludzie o wykształceniu nie technicznym są znacznie bardziej wyczuleni na defekty. Powoduje to, że czasami przesadzają z oceną wagi defektu oraz zajmują sztywniejsze stanowisko w procesie weryfikacji naprawionych defektów. Często także - powodowani swoją niepewnością wynikającą ze świadomości braku wykształcenia informatycznego - komplikują zagadnienia w fazie analizy co utrudnia im znacznie zrozumienie podstawowych kwestii.
Nie wiem, która opcja jest lepsza... Ale wiem, że za każdym razem kiedy pracowałem w zespole testerów, to tworzył się inny niż u programistów świat... świat, w którym ludzie otwarci są na wiedzę i dzielenie się nią, w którym czują się spojeni misją, którą mam nadzieję każdy z nich potrafi sobie zdefiniować. Świat który jest jednak mocno sceptyczny. Z drugiej jednak strony powstaje wiele patologii takich jak tworzenie "mitycznej jakości" lub zbyt szczegółowe podejście do zagadnień testowych co powoduje niepotrzebne wydłużenie cyklu testowego.
Reasumując, definiowanie profesji testera z całą pewności jest pożądane. Dobrze, że powstają firmy certyfikujące i standaryzujące. Dobrze, że jest mnóstwo wolnych strzelców i ludzi pracujących na własnymi metodykami. Taka dychotomia jest symptomem tego, że jest to jeszcze bardzo młoda dziedzina. Ale bez względu na to czy pracujemy w środowisku extreme, agaile, V, W, iteracyjnym czy w modelu kaskadowym, z całą pewnością powinniśmy w naszych codziennych obowiązkach testera zapewniać spełnienie podstawowych warunków takich jak kontrolowalność, wiarygodność, weryfikowalność i jednoznaczność przy optymalnym stosowaniu technik testowych.
Subskrybuj:
Posty (Atom)