Metody zapewnienia jakości

Stale udoskonalamy nasz wewnętrzny system zapewnienia jakości oraz poprawiamy procedury, aby zapewnić możliwie wysoką jakość wszelkich przekazywanych Klientowi produktów.
Na nasz system zapewnienia jakości składają się:

Wykonujemy też testy wydajnościowe pozwalające na zasymulowanie określonego obciążenia serwisu, usługi czy bazy danych, ze środowiska lokalnego lub rozproszonego (JMeter).
Najważniejszym elementem systemu zapewnienia jakości oprogramowania jest koncepcja wbudowania jakości w tworzone oprogramowanie. Jest ona ściśle związana z podejściem programowania sterowanego testami (Test Driven Development). Wpierw tworzone są mechanizmy testujące danego elementu, a dopiero później następuje faza jego implementacji. W późniejszych etapach rozwoju oprogramowania testy te są cały czas utrzymywane i wykonywane. Pozwala to na upewnienie się, że żadna z nowo wprowadzonych zmian nie spowoduje występowania blędów w już istniejących fragmentach systemu.

Innym ważnym elementem utrzymania jakości jest koncepcja ciągłej integracji. Korzystamy z serwera ciągłej integracji, który po każdej zatwierdzonej w repozytorium kodów źródłowych zmianie wykonuje kompilacje/instalację , pełna konfigurację (w tym bazy danych) i wykonuje serie testów automatycznych. Jeżeli testy wykażą jakiekolwiek odstępstwa od normy, programiści muszą je naprawić. Jesteśmy też informowani o każdym odstępstwie od normy.
Opisywany mechanizm nie tylko zapewnia ciągłą kontrolę jakości naszego oprogramowania lecz także pozwana na znacznie szybsze dostarczanie nowych wersji.

Automatyzacja procesu testowania

Manualne wykonywanie testów oprogramowania jest czynnością monotonną i czasochłonną. Dodatkowo konieczność wykonywania testów regresyjnych (sprawdzających poprawność wcześniej realizowanych funkcjonalności) przy każdej nowej funkcjonalności zwiększa narzut pracy na testerów.  Nie można ich pomijać, gdyż grozi to obniżeniem jakości testowania. Automatyzacja czynności wykonywanych przez testera wydaje się więc rozwiązaniem idealnym. Pełne wdrożenie systemu automatyzacji testów w 3e nie było proste i wymagało zmiany całego cyklu budowy aplikacji. W pierwszych podejściach próby z wykorzystywaniem samego narzędzia automatyzacji (wówczas Selenium 1.0.3) kończyły się tylko częściowym sukcesem, gdyż testy były trudne w budowie gdy tylko funkcjonalność aplikacji była bardziej złożona. Dodatkowo mieliśmy pewne problemy z odtwarzaniem określonego stanu aplikacji. Rozwiązaniem było wdrożenie mechanizmów wersjonowania bazy danych. Wykorzystujemy do tego pakiet dbMaintain, który w prosty sposób pozwala na odtwarzanie stanu bazy danych od zera dla środowiska testowego oraz jej aktualizacje dla środowisk developerskich i produkcyjnych.  Również nowa wersja systemu Selenium 2 (projekt połączony z biblioteką Webdriver) umożliwił usprawnienie procesu. Warto dodać, że nasza firma jest autorem popularnej otwarto źródłowej biblioteki pozwalającej na tworzenie testów opartych na Selenium2/Webdriver z wykorzystaniem PHP. Ostatnim elementem było spięcie wszystkiego w ramach skryptu ant oraz skonfigurowanie serwera ciągłej integracji Hudson. Ostatecznie proces budowy i automatycznego testowania wygląda następująco:

Metody automatyzacji testów 3e

Etap 1. Pobranie kodów źródłowych z repozytorium.

Wszystkie kody źródłowe przechowywane są w repozytorium kodu. Każdy programista po zakończeniu pracy wgrywa do repozytorium swoje zmiany.. Serwer repozytorium kodu wersjonuje pliki kodów źródłowych, dzięki czemu wiadomo kto, kiedy i co dodał lub zmienił w kodach źródłowych. Proces budowania wersji aplikacji opiera się zawsze na aktualnym kodzie z repozytorium. Dzięki temu jest pewność, że testowana jest prawidłowa wersja oraz, że później na produkcje zostanie wgrana ta sama wersja.

Etap 2. Wyczyszczenie i odtworzenie testowej bazy danych projektu

Baza danych jest dynamicznie zmieniającym się elementem systemu. Podczas develomentu zmianie ulega często jej struktura, natomiast dane ulegają nieustannym modyfikacjom w wyniku prowadzenia testów. Większość testów niezależnie od tego czy są automatyczne, czy manualne, wymaga aby przed rozpoczęciem testu istniały jakieś dane konfigurujące system lub proces który ma ulec testowaniu. Dlatego ważne jest aby przed każdym rozpoczęciem testów doprowadzić bazę danych do ustalonej postaci zarówno w sensie aktualnych struktur jak również testowych danych. Do osiągnięcia tego celu wykorzystujemy narzędzie dbMaintain, które pozwala na sprawne wersjonowanie zarówno struktur bazy danych jak i wgrywanych testowych danych. Wymusza ono przechowywanie wszystkich plików SQL w strukturze kodu aplikacji i podczas aktualizacji wgrywa tylko wymagane skrypty. W procesie odtwarzania całej bazy, dbMaintain najpierw czyści ją a później wgrywa początkowe struktury a następnie po kolei każdą aktualizację oraz testowe dane.  Dzięki takiemu podejściu nie tylko uzyskuje się zawsze ten sam najnowszy stan bazy danych, ale również testowane są skrypty aktualizujące poprzednie wersje bazy danych (co ma znaczenie przy aktualizacji produkcyjnych baz danych).

Etap 3 i 4. Uruchomienie testów automatycznych

Automatyzacja testów jest kluczową technologią pozwalającą na tworzenie niezawodnych aplikacji internetowych czy intranetowych.  Mechanizmy autotestowania podobnie jak w systemach zainstalowanych w samolotach po kolei sprawdzają czy poszczególne elementy aplikacji działają oraz czy prawidłowo współdziałają ze sobą. Testy jednostkowe to mechanizmy testujące wewnętrzne komponenty systemu, natomiast testy funkcjonalne symulują prawdziwe akcje wykonywane przez użytkowników i weryfikują czy rezultaty akcji są zbieżne z oczekiwanymi. Tworzone przez nas testy funkcjonalne można porównać do zaprogramowanego robota kilkającego w przeglądarkę i sprawdzającego poszczególne funkcje aplikacji.

Etap 5 i 6.  Generowanie statystyk i wysłanie powiadomienia

Z perspektywy kierownika projektu informatycznego istnieje wiele wskaźników pozwalających określić mu zarówno poziom realizacji projektu jak i potencjalną niezawodność tworzonej aplikacji. Wśród tych wskaźników wymienić można:

Wszystkie powyższe techniki wykorzystujemy w 3e internet software house tak, aby jakość tworzonego oprogramowania była jak najwyższa i aby nasi Klienci mogli być spokojni o dostarczane przez nas aplikacje.

Autor: Łukasz Kolczyński, 3e internet software house