SCRUM brainstorming

Scrum - lepsza jakość tworzenia oprogramowania

Po wdrożeniu scrum w naszej agencji drupalowej zaobserwowaliśmy rewelacyjne efekty, jeśli chodzi o jakość projektów. Naszym zdaniem scrum nie tylko wspomaga utrzymanie jakości, a wręcz je wymusza. Jak to robi? Kładzie nacisk na jak najwcześniejsze testowanie. Konieczne staje się pisanie dobrego kodu, który da się rozwijać. Wspiera testy automatyczne i automatyzacje procesu tworzenia kodu. Redukuje zbędne koszty i zwiększa elastyczność biznesową. Nie wierzysz? Koniecznie przeczytaj ten tekst i powiedz nam, co o tym myślisz!

Jakość

Jeśli zapytalibyśmy dużą grupę ludzi, z czym kojarzy im się jakość projektu, uzyskalibyśmy z pewnością wiele różnych odpowiedzi. Mnie osobiście najbardziej podoba się definicja Josepha Phillipsa, który uważa, że “jakość jest potencjałem projektu w zakresie możliwości spełniania wymagań oczekiwanych i zdefiniowanych przez klienta projektu. Jakość jest dobrem, wartością i źródłem zysków czerpanych z odpowiednio przeprowadzonej realizacji projektu”. 

Jest to stwierdzenie może dość ogólne, ale sprowadza się do prostej rzeczy - dobre jakościowo oprogramowanie powinno robić dokładnie to, czego od niego oczekiwaliśmy jako klient i końcowy użytkownik. Możemy sobie te definicje rozszerzyć, mówiąc też, że dobre jakościowo oprogramowanie nie powinno robić tego, czego od niego nie oczekiwaliśmy. 

Czym jest scrum?

Scrum to iteracyjno-przyrostwy sposób prowadzenia projektu, realizowany na podstawie zasad zawartych w manifeście Agile, a więc:

  • Ludzie i interakcje ponad procesy i narzędzia.
  • Działające oprogramowanie ponad szczegółową dokumentacją.
  • Współpraca z klientem ponad negocjowanie umów.
  • Reagowanie na zmiany ponad realizację założonego planu.

Jeśli chcielibyście się dokładniej zaznajomić z tematem scruma, polecam przeczytać Scrum Guide lub uważnie śledzić naszego bloga, bo zapewne w najbliższej przyszłości pojawi się tutaj jeszcze kilka wpisów na ten temat.

Jak scrum pomaga utrzymać jakość?

W scrumie, podobnie jak w innych metodykach zwinnych, kładzie się dość duży nacisk na jakość, czego świadomi są nasi programiści. Jednak czy naprawdę pomaga on w podnoszeniu jakości? Mam nadzieję, że poniższe argumentu przekonają Cię, drogi czytelniku, że tak jest.

Częste wydania wymagają dobrego kodu

Scrum na końcu każdego okresu musimy mieć wersję, którą można wdrożyć i pokazać użytkownikowi końcowemu. Wyobraźmy sobie w takim razie, że piszemy kod słabej jakości. Po kilku wydaniach narasta nam dług technologiczny i utrzymywanie takiej architektury zacznie nam blokować pracę, z czego nasz klient na pewno nie będzie zadowolony. Model scrumowy wymaga od nas pisania kodu, który da się łatwo utrzymywać i rozwijać.

Testy już od początku trwania projektu

W scrumie projekt podzielony jest na sprinty (od tygodniowych, do maksymalnie miesięcznych okresów), na których koniec musimy dostarczyć jakiś działający fragment kodu. Wymusza to prowadzenie testów już od pierwszego sprintu i to możliwie jak najwcześniej, aby móc zaprezentować klientowi sprawdzone rozwiązanie. Sprawia to, że tester przestaje być kontrolerem, który stoi na końcowej “bramce” i odrzuca brzydkie rozwiązania. Staje się natomiast graczem zespołu developerskiego, któremu pomaga w dbaniu o jakość projektu. Przestaje istnieć typowa rola testera, a jej miejsce zajmuje jeden zespół, który dąży do realizacji celu na zakończenie sprintu.

Już podczas planowania sprintu może przydać się “testerskie” spojrzenie na projekt i dociekanie jak system zachowa się w określonych przypadkach.

Innym ciekawym rozwiązaniem może być pisanie testów jeszcze zanim powstanie kod. Wówczas tester będzie musiał przemyśleć przypadki użycia i dopytać się o te, na które programista mógłby nie wpaść podczas pisania danej funkcji.

Pomyłka nie jest aż tak kosztowna

W tradycyjnym modelu biznesowym zespołowi programistów dostarczana jest specyfikacja, zgodnie z którą powstaje projekt. Możemy więc wyobrazić sobie przypadek, w którym z dobrze przygotowanej specyfikacji tworzymy projekt w 100% zgodny ze wszystkimi zawartymi tam wymaganiami. Projekt trwa pół roku i po tym czasie trafia do użytkownika końcowego, ale temu nie podoba się to, co wymyślił projektant. Wydawałoby się, że dostarczony przez nas projekt jest doskonały jakościowo, bo był zgodny z tym, czego chciał od nas klient. Jednak rynek nie zapamięta tego jako naszego sukcesu.

W scrumie na koniec każdego sprintu dostarczamy działający fragment, który - jeśli tylko klient sobie tego życzy - wdrażamy i pokazujemy użytkownikowi końcowemu. Dzięki czemu, jeśli podążamy w złym kierunku, tracimy co najwyżej prace z jednego sprintu. 

Szybkie dostarczanie wspiera automatyzowanie

Z jednej strony co sprint musimy dostarczać nowy fragment działającego kodu, z drugiej - nie psuć funkcji już działającej. W efekcie liczba rzeczy do przetestowania zaczyna narastać w takim tempie, że bez zautomatyzowania tego procesu, musielibyśmy zwiększyć liczbę osób, które będą sprawdzały stronę przed wdrożeniem. A ponieważ za jakość projektu nie jest odpowiedzialny tylko tester, a cały zespół, to programiści chętniej pomagają we wprowadzeniu frameworka testującego.

Komunikacja, komunikacja i jeszcze raz komunikacja

Codzienne spotkania zespołu developerów, wśród którego są też testerzy, wspierają komunikację w zespole. W przypadku wykrycia błędu wie o nim cały zespół i może zareagować odpowiednio szybko.

W scrumie nie tylko zespół musi się ze sobą komunikować, ale wymuszone są też rozmowy z przedstawicielem klienta (Product Owner). Ma to duże znaczenie, ponieważ zespół nie tylko informuje go o postępie swoich prac, ale również dostaje odpowiedzi od niego w sprawie zadań, co do których są wątpliwości (np. jak pewna funkcja ma działać).

Oczywiście klient mówi z reguły językiem biznesowym, a programiści technicznym, ale z naszego doświadczenia wynika, że podczas kolejnych spotkań zaczynają się oni coraz lepiej dogadywać. Eliminuje to przypadki, w których programista musi się domyślać, jak powinien działać system oraz takie, w których to klient chciałby się czegoś dowiedzieć o postępie pracy, ale w sumie nie wie, od kogo mógłby takie informacje uzyskać.

Reaguj szybko i łap okazje

Jak już wcześniej wspominałem, w projektach zwinnych (a więc także scrumowych), staramy się możliwie często dostarczać wersje projektów gotowe do wdrożenia i pokazania użytkownikowi. Dzięki temu możemy szybciej niż w tradycyjnym sposobie tworzenia, sprawdzać nasze koncepcje biznesowe i wcześniej zacząć czerpać z nich korzyści. 

Tak samo sprawa ma się ze zmianami, które wymusza na nas rynek. Ponieważ nasz projekt musi powstawać w sposób, który pozwala na jego łatwiejsze modyfikacje, możemy w szybszy sposób przystosować nasz projekt do nowych warunków.  

Myślę, że przytoczone tutaj argumenty są wystarczające, żeby przemyśleć czy nie warto przypadkiem spróbować prowadzić projekt w scrumie. Jeśli chcesz dowiedzieć się więcej o scrumie koniecznie sprawdź inne nasze artykuły na ten temat:


Zachęcam również do śledzenia naszego bloga, bo na pewno nie jest to nasz ostatni wpis, poświęcony tej tematyce.

Na zakończenie chciałbym przytoczyć motto rodziny Gucci: “Jakość pamięta się o wiele dłużej niż cenę”. Nie chodzi tutaj jednak o wskazanie, że tylko drogie projekty są dobre, ale o to, że jeżeli nie zadbamy o właściwą jakość projektu, nasi użytkownicy szybko nam tego nie zapomną. Starajmy się więc - w kontekście projektów - zawsze myśleć o ich odpowiedniej jakości, a z pewnością nasi klienci docenią takie podejście.

3. Najlepsze praktyki zespołów programistycznych