Wykorzystuj narzędzia automatyzujące proces testowania w swoich projektach programistycznych
Rozwój oprogramowania polega obecnie na wykorzystywaniu zwinnych praktyk i metod, umożliwiających uniknięcie dużych niedociągnięć oraz promujących pracę zespołową. Testowanie jest nieodłączną częścią procesu rozwoju, już od wstępnego etapu definiowania. W nowoczesnym zespole projektowym zadania zazębiają się, a informacje przepływają swobodnie. Testerjest członkiem zespołu i nie jest już postrzegany jako posłaniec złych wieści.
„Dawno temu, testerzy byli uważani za malkontentów, niszczących zabawę w ostatecznej fazie rozwoju oprogramowania. Często to właśnie wtedy nadchodził czas na ich krytyczne uwagi. W najgorszym wypadku, na tydzień przed terminem pojawiał się najgorszy koszmar kierownika projektu - długa lista niedopuszczalnych błędów”, mówi Jukka Lappalainen z lekkim uśmiechem. Jukka jest głównym konstruktorem w Etteplanie. Testuje oprogramowanie i systemy wbudowane od 2004 roku.
„Testowanie oprogramowania oraz produktu docelowego musi być wzięte pod uwagę już w wymaganiach definiujących. Zapewnienie płynności procesu automatyzacji testowania jest bardzo istotne podczas rozwoju produktu. Doświadczony tester często już na starcie jest w stanie przewidzieć, gdzie można spodziewać się problemów” - wskazuje Jukka Lappalainen.
„Właściwe zaprojektowanie i zaimplementowanie metod testowania na początku powstawania projektu pomaga osiągnąć wysoką jakość. Umożliwia także dalsze mierzenie i monitorowanie jej w trakcie rozwoju produktu”, mówi Jukka.
Ciągła integracja (z ang. CI - continuous integration) jest praktyką polegającą na kompilowaniu, integracji i testowaniu całości oprogramowania w krótkich cyklach - za każdym razem, gdy coś zostanie zmienione lub dodane. Oznacza to, że oprogramowanie może być opublikowane bardzo szybko, w dowolnej chwili - przynajmniej w teorii. Celem jest automatyzacja procesu produkcji i testowanie oprogramowania w jak największym stopniu.
Umacnianie procedur
Dostępne są dziesiątki narzędzi do automatyzacji. Jednym z nich, który Etteplan uznał za dobry, jest Jenkins. System Jenkins to platforma umożliwiająca automatyzację tych etapów procesu rozwoju oprogramowania, które nie wymagają ludzkiej interwencji. Jenkins jest zwykle zaprogramowany do tego, by pobierać z systemu kontroli wersji najnowsze fragmenty kodu, wyzwalać asemblery, sygnalizować wystąpienia błędów i ostrzeżeń, a także ładować kod programu maszynowego do docelowego systemu. Z pomocą wtyczek Jenkins analizuje, czy kod programu jest zgodny z ustalonymi regułami, a także informuje o wszelkich odchyleniach. Raporty zwiększają czytelność kodu oraz ułatwiają jego utrzymanie.
Wiele osób sądzi, że testowanie polega na wciskaniu przycisków, wprowadzaniu komend i wartości. „W istocie, ludzie dobrze sobie radzą w testowaniu eksperymentalnym. Są pomysłowi. Łączą różne aspekty i zauważają więcej niż maszyny. Jednak większość z nas nudzi się wciskaniem przycisków najdalej po dziesięciu rundach testowania”, wskazuje Jukka Lappalainen.
Na szczęście większą część procesu testowania da się zautomatyzować. By to zrobić, konfigurowane są programy testujące. Istnieje również wiele gotowych narzędzi umożliwiających automatyzację testów. Platforma Robot Framework, stworzona i spopularyzowana w Finlandii, jest uznawana przez Etteplan za dobrze nadającą się do automatyzacji. Innymi słowy, sprawdza się do implementacji konkretnych przypadków testowych. Definicje testów w Robot Framework składają się z jasnych poleceń, takich jak „otwórz przeglądarkę”, „rozpocznij operację X przy parametrze Y” lub „czy to się udało?”. Każdy użytkownik, nawet nieposiadający umiejętności programowania, zrozumie te polecenia i będzie mógł dostosować testy bez pisania ani jednej linijki kodu.
Nie ma potrzeby wymyślać koła na nowo - w łatwy sposób można połączyć Robot Framework z dostępnymi bibliotekami dla różnych zastosowań. Odpowiednie biblioteki umożliwiają testowanie między innymi: internetowych interfejsów użytkownika (z ang. Web UI - Web User Interface), platform i aplikacji mobilnych. Mimo że zawierają dużą liczbę poleceń, konieczne bywa tworzenie własnych bibliotek testowych za pomocą Pythona. Dotyczy to na przykład testów danego urządzenia podczas testowania systemów wbudowanych.
Testowanie zapobiegawcze gwarantuje dotrzymanie harmonogramu prac i utrzymanie wyników
Maszyny i testowanie zautomatyzowane działają najlepiej, gdy mamy do czynienia z dużymi liczbami testów i wieloma powtórzeniami. „Dobrym pomysłem jest rozwój testów i oprogramowania w jednym czasie za pomocą małych kroków. Warto wykonywać zautomatyzowany test za każdym razem, gdy wdrażana jest jedna, niewielka zmiana lub dodatek do programu, by sprawdzić, czy wszystko wciąż działa. Innymi słowy, by upewnić się, że nie nastąpiła regresja. Małymi krokami, testując zapobiegawczo, redukujemy presję czasu, gdy nadciąga ostateczny termin. Projekt i oprogramowanie są pod kontrolą. A sam program na dłuższą metę staje się łatwiejszy w utrzymaniu” - przypomina Jukka.
„Nawet najbardziej doświadczeni projektanci mogą czegoś nie zauważyć. Nasza perspektywa zwęża się, gdy jesteśmy skupieni na zadaniu. Inny członek zespołu, a zwłaszcza tester, wnosi świeże spojrzenie, które pomaga zauważać błędy tak wcześnie, jak tylko możliwe”.