Testowanie w Agile Część I

Tagi: 0

W ciągu ostatnich kilku lat mogliśmy zaobserwować upowszechnienie się nowej metody pracy, która wtargnęła do świata programowania i testowania z niemałym impetem. Mowa tu o metodyce Agile, zwanej też metodą/techniką zwinną.




Według The 11th Annual State of Agile Report, w roku 2017 94% organizacji biorących udział w badaniu, zadeklarowało korzystanie z metodyki Agile. Jednocześnie respondenci zaznaczyli, iż wiedza na temat techniki nie zawsze jest znana wśród pracowników, co oznacza, że droga do całkowitego zaadaptowania metodyki i świadomego jej wykorzystywania jest jeszcze długa.

Czym właściwie są te zwinne metody i jak się mają do testowania oprogramowania? Dlaczego zyskały tak dużą popularność w tak krótkim czasie? Podejmijmy próbę odpowiedzi na tak postawione pytania.

O zwinnej metodyce

Metoda Agile zaistniała w świecie IT gwałtownie i szybko ugruntowała swoją pozycję, jako „złoty standard”. Należy pamiętać, że Agile to nie jedno, uniwersalne podejście, a wiele sposobów, które rozwinięte zostały na przestrzeni lat i mają wspólne podłoże w postaci 4 fundamentalnych zasad zapisanych w Manifeście Programowania Zwinnego (Agile Manifesto). Metody te są zakorzenione w planowaniu adaptacyjnym, wczesnym dostarczaniu i ciągłym ulepszaniu. Mają stale na uwadze konieczność szybkiego reagowania na zmiany i dostosowywania się do dynamicznie zmieniających się warunków. Nie powinno więc dziwić, że w ww. Raporcie odnotowano, iż 88% badanych uznało „zdolność do przystosowania się do zmian” za największy atut zwinnej metodyki.

W miarę, jak coraz więcej zespołów programistycznych zaadaptowało podejście Agile, testerzy zaczęli mieć trudności z dotrzymaniem im kroku. Kłopoty spowodowane były głównie tym, że zespoły zaczęły wydawać coraz częściej nieudokumentowane w sposób oficjalny oprogramowanie. To zmusiło testerów do wdrożenia zmian w sposobie analizowania oprogramowania, w podejściu do współpracy z programistami i innymi członkami zespołu, a nawet do modyfikacji rodzajów testów.

Według Słownika wyrażeń związanych z testowaniem wersja 2.2 (2012), zwinne wytwarzanie oprogramowania (agile software development) to:

Grupa metodyk wytwarzania oprogramowania oparta na iteracyjnym, przyrostowym modelu wytwarzania oprogramowania, w których wymagania i rozwiązania ewoluują poprzez współpracę w ramach samoorganizujących się, realizujących wiele funkcji zespołów

kubek praca zespołowa, we work, biurko, notatki

Testowanie w zwinnym zespole

Principia metodyki Agile opierają się na współpracy, elastyczności i zdolnościach adaptacyjnych. Model zbudowany został na założeniu, że otaczający nas świat cały czas się zmienia, dynamicznie rozwija. W związku z tym zespoły programistyczne nie mają obecnie tego komfortu, co jeszcze paręnaście lat temu, by pracować nad jakimś projektem wiele lat. W tym czasie oferty konkurencji i oczekiwania klientów zmienią się wiele razy, produkt, nad którym zespół pracował przez długi czas, okaże się po prostu przestarzały. Zwinne podejście minimalizuje tego typu ryzyko, kładąc nacisk na współpracę w grupie i dostosowując ją do tego, co dany zespół powinien osiągnąć, by odnieść sukces. Zachęca załogi do systematycznego prezentowania stopnia zaawansowania prac i zbierania informacji zwrotnych, by szybko dostosować się do zmian.

Zawężając obszar analizy do testowania, szybkie tempo rozwoju podejścia Agile wymusiło zmianę w sposobie podejścia testerów do wykonywanej przez nich pracy.

Nowe wymagania zwinnej metodyki:

  • Skupienie się i uznanie za priorytetowe traktowanie wymagań opartych na ryzyku, ponieważ nie jest możliwe przeanalizowanie wszystkiego
  • Automatyzacja testów w celu zwiększenia wydajności
  • Częstsze wykorzystywanie testów eksploracyjnych, by zmniejszyć czas pomiędzy dostarczeniem kodu a wykonaniem testów, jednocześnie podkreślając potrzebę tworzenia działającego kodu
  • Przystosowanie do zmian od sprintu do sprintu

Właśnie to ostatnie wymaganie – adaptacyjność – jest szczególnie ważne, ponieważ zobowiązuje testerów do wykazania się szerszymi, interdyscyplinarnymi umiejętnościami. Stanowi to odejście od wąskich umiejętności testerskich tak często wykorzystywanych w środowiskach kaskadowych. Ponadto, w przeciwieństwie do modelu kaskadowego, testerzy korzystający z metodyki Agile pozostają w ścisłym kontakcie z programistami, by współpracować przy testowaniu przez cały cykl życia projektu. W metodykach kaskadowych testerzy zwykle zaznajomieni są z dokumentem zawierającym wszystkie wymagania projektu. Dokument ten nie ulega zbyt częstym zmianom, dlatego w takim środowisku testerzy mogą pracować dość niezależnie od programistów. Jednocześnie większość zwinnych metod nie wymaga prowadzenia takiej dokumentacji, a zobowiązania dotyczące nowych funkcji, mogą istnieć tylko w systemie śledzenia wymagań, nieposiadającym wszystkich kryteriów projektu. W takim środowisku testerzy muszą dobrze komunikować się z zespołami programistycznymi i biznesowymi, jako że testy, które napisali parę tygodni wcześniej, mogą okazać się przestarzałe w stosunku do aktualnych wymagań projektu. By osiągnąć sukces, muszą wykazać się elastycznością i umiejętnie dostosowywać się do zmiennych celów.

zespół, komputery, praca

Metodyka Agile nie jest gotowym remedium na wszystko…

Każda organizacja jest wyjątkowa i zmaga się z innymi czynnikami środowiska wewnętrznego (liczba pracowników, udziałowcy, zaplecze technologiczne, etc.) oraz otoczenia zewnętrznego (regulacje prawne, kontekst społeczny, etc.). By sprostać wszystkim tym wyzwaniom, istnieje wiele różnych metodyk zwinnych, tak jak wiele metod testowania, które z tymi metodykami współgrają.

Przyjrzyjmy się dwóm najpopularniejszym metodom Agile.

Przykłady zwinnych metod

Scrum

Scrum to jedna z najpopularniejszych metodyk zwinnych; stosowanie jej zadeklarowało we wspomnianym już raporcie aż 58% organizacji. Scrum charakteryzuje się wysoce iteracyjnym podejściem, koncentrującym się na definiowaniu kluczowych funkcji i celów przed każdym sprintem. Została zaprojektowana tak, by zmniejszyć ryzyko, jednocześnie zapewniając odpowiedni poziom jakości.

Scrum zaczyna się od wymogów, które określają, w jaki sposób funkcje powinny być wykonywane i testowane. Następnie zespół przechodzi przez serię sprintów, której celem jest uzyskanie kolejnych wersji produktu. Po każdym odbytym sprincie wersja produktu jest ulepszana. Ważne, by zmiany były namacalne dla użytkownika i wnosiły wartość funkcjonalną. By taki tryb pracy był w ogóle możliwy, by grupy nie musiały ciągle przewartościowywać priorytetów w projekcie, metoda Scrum wymaga, by odpowiadać na pojawiające się kwestie od samego początku i na bieżąco. Zespół wykorzystujący tą metodą, w swoim założeniu jest organizmem samoorganizującym się; nie występuje w nim odgórne przypisywanie zadań, a raczej samodzielne dokonywanie wyboru realizowanych zadań, według wspólnych ustaleń.

Czym się różni od techniki kaskadowej?

Podczas gdy metodyki kaskadowe wymagają kilku cykli testowania i naprawiania błędów przed wypuszczeniem produktu na rynek, Scrum jest o wiele bardziej nastawiony na współpracę na każdym etapie i na iterację. Jedną z najważniejszych różnić między metodykami, jest to, że od samego początku trwania projektu technika kaskadowa wymaga szczegółowej i rzetelnej dokumentacji. Utrudnia ona wprowadzenie jakichkolwiek zmian funkcji w trakcie trwania procesu,  co może z jednej strony okazać się sporym utrudnieniem dla realizacji projektu w niektórych środowiskach, a z drugiej może stanowić ogromną zaletę w innych przypadkach. Niektórzy proponują, by metodykę Scrum traktować jako zbiór wielu małych technik kaskadowych, jako że wymagania ustalone są na początku każdego sprintu i nie powinny się zmieniać w trakcie jego trwania. Różnica tkwi w szczegółowych wymaganiach określanych dla następnego etapu – w przypadku Scruma nie są one ustalane w wielomiesięcznym wyprzedzeniem, a określane bezpośrednio przed kolejnym sprintem.

Scrum opiera się na regularnej współpracy między testerami, programistami czy zespołami biznesowymi, zwykle przybierającej formę codziennych standupów i omawiania odbytych sprintów. Wszystko po to, by zapewnić odpowiedni przepływ informacji i współpracy. Co więcej, w zespołach scrumowych istnieje przewodnik grupy, nazywany Scrum Masterem, który pomaga w zachowaniu ciągłości projektu. Usuwa wszelkie przeszkody, które uniemożliwiają grupie wykonanie zdania, by mieć pewność, że praca wykonywana jest w sposób najbardziej efektywny. Dba o poprawną implementację procesu i metod. Stanowisko to objąć może właściwie każdy członek zespołu.

karteczki to-do lista

Kanban

Kanban to bardzo prosta metoda oparta na założeniach zwinnej metodyki. Technika wywodzi się z  fabryk koncernu Toyoty, gdzie miała na celu zwiększenie wydajności w zakładach. Samo słowo kanban w kontekście metodyki pracy przetłumaczyć można, jako „spis widoczny”. W bezpośrednim tłumaczeniu japońskie kanban oznacza: szyld, tabliczkę z informacją, billboard.

Generalizując, metodę tę określić można, jako ogromną, uszeregowaną pod względem ważności listę. Tak jak w przypadku Scruma, wymagania w Kanbanie są śledzone poprzez etap, w jakim znajdują się w danym momencie (zadanie [to-do], rozwój [in development], test [in test], wykonane [done]).

Jednak w przeciwieństwie do Scruma, metoda Kanban nie jest osadzona w czasie. Nacisk położony jest tu priorytet. Jeśli programista jest gotowy, by rozpocząć nowe zdanie, pobiera je z listy zadań (to-do), kierując się jego priorytetem. Ponieważ Kanban zakłada mniej spotkań planistycznych, to konieczna jest bardzo bliska współpraca między członkami zespołu. W środowisku tego typu, jeśli programiści pracują o wiele szybciej, niż testerzy, mogą pojawić się problemy z tzw. wąskim gardłem. W takich przypadkach każdy członek zespołu powinien wkroczyć i udzielić pomocy w danym obszarze. Sprostanie takiemu mechanizmowi wymaga od członków grupy dużej elastyczności i zdolności do adaptacji.

Czym się różni od techniki kaskadowej?

Wymagania w metodzie Kanban mogą się zmieniać, ponieważ zespół testujący nie rozpocznie pracy, dopóki programista nie zabierze się za zadanie z listy. Technika waterfall opiera się na czasie i na planowaniu z dużym wyprzedzeniem. Tak solidna planistyka dobrze sprawdza się w niektórych przypadkach, ale nie zawsze jest konieczna. Stosując technikę Kanban, wypuszczenie produktu na rynek też jest zaplanowane, ale zespoły zwykle nie obiecują nikomu przedstawienia konkretnego elementu projektu wykonanego na dany termin, chyba że funkcja znajduje się na szczycie listy zadań.

Kanban oferuje jedną z najszybszych metod na wprowadzenie produktu na rynek, ale kod prawdopodobnie będzie zawierał jakieś błędy. Wynika to z tego, że programowanie bez wiedzy na temat całości projektu, tego, jakie są następne kroki w projekcie, niekoniecznie jest najlepszą metodą do tworzenia kodów wielokrotnego użytku.

 

Rodzajów zwinnych metodyk jest oczywiście znacznie więcej. Istotne jest, by dobrać taką technikę lub stworzyć spersonalizowaną mozaikę elementów z różnych technik, by jak najlepiej odpowiadała ona rodzajowi projektu, wymaganiom i zespołowi. Tylko rozważne dobieranie metod pracy okaże się skuteczne i zaowocuje efektywną pracą całej grupy.

Jeśli jesteście ciekawi, jakie metody testowania najlepiej sprawdzają się w zwinnych metodykach, to śledźcie naszego bloga! Już niedługo ukaże się druga część naszego wpisu „Testowanie w Agile” 🙂 .

 

człowiek, ściana, notatki

Pomocnik:

Iteracja – to zamknięty cykl wytwórczy dający w wyniku gotową do wydania wersję produktu (wewnętrzną lub zewnętrzną) będącą podzbiorem finalnego produktu, który rozrasta się z iteracji na iterację aż do powstania produktu końcowego

Słownika wyrażeń związanych z testowaniem wersja 2.2 (2012)

Metoda kaskadowa (The Waterfall Model) – jedno z najczęściej stosowanych podejść w środowisku programistycznym. W nim wyniki (dane wyjściowe) każdego etapu stają się danymi wejściowymi następnego etapu. To podejście jest najłatwiejsze do planowania etapowego, ponieważ każdy etap jest ściśle zależne od poprzednika […]

Encyclopedia of Computer Science Technology

Sprint – określony przedział czasowy, inaczej przebieg, którego efektem jest dostarczenie za każdym razem kolejnej działającej wersji produktu

Wąskie gardło – wąski przekrój – […] określenie dysproporcji powstającej w procesie produkcji w wyniku wzajemnego niedostosowania ilości (wielkości) czynników produkcji

Interia Encyklopedia

DYSKUSJA

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

wypróbuj

Zarejestruj się i zacznij działać!