en

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ę:

  • Dział Jakości (Quality Gate) – przez który przechodzą wszelkie artefakty przekazywane klientowi, dział jakości musi zatwierdzić każdą nową wersję serwisu WWW, tworzonego systemu czy nawet specyfikacji
  • scenariusze testowe – utrzymywane dla każdego z większych systemów opisy sekwencji testów dla testera z Działu Jakości
  • system rejestracji zgłoszeń o błędach i usterkach (mantis)
  • moduły automatycznego testowania zatopione w systemach (koncpecja wbudowania jakości w tworzone oprogramowanie):
    • testy jednostkowe, uruchamiane przy każdym budowaniu – mające na celu przetestowanie poprawności elementów systemu (jUnit, phpUnit)
    • automatyczne testy funkcjonalne, wykonywane w regularnych odstępach czasu na zbudowanych systemach czy serwisach WWW, symulujące rzeczywiste akcje podejmowane przez użytkownika na interfejsie użytkownika (Selenium)
  • mechanizmy powiadamiania o błędach – w przypadku wystąpienia błedu podczas automatycznych testów, wysyłany jest powiadomienie (email lub sms) do właściwych osób w celu szybkiego naprawienia ewentualnej usterki

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:

  • Statystyki wykonań testów automatycznych (ile testów ma pozytywny wynik, ile negatywny, czy ilość wyników negatywnych stabilnie spada w miarę postępów w implementacji)
  • Procentowy poziom pokrycia kodów źródłowych aplikacji testami jednostkowymi (istnieje możliwość sprawdzenia które obszary kodu są wykorzystywane podczas testów automatycznych – generalnie im większa część kodów źródłowych podlega testom tym istnieje mniejsze prawdopodobieństwo wystąpienia w nich błędów – nie wyklucza to oczywiście testowania manualnego)
  • Poziom udokumentowania kodów źródłowych (procentowy wskaźnik mówiący ile klas czy metod w kodzie źródłowym posiada komentarze)

Wszystkie powyższe techniki wykorzystujemy w 3e 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 Software House

Zamknij ten komunikat

Nasze strony wykorzystują pliki cookies.

Na naszych stronach używamy informacji zapisanych za pomocą cookies m.in. w celach reklamowych i statystycznych. Mogą też stosować je współpracujące z nami podmioty, takie jak firmy badawcze oraz dostawcy aplikacji multimedialnych. W każdej przeglądarce internetowej można zmienić ustawienia dotyczące cookies. Korzystanie z naszych serwisów internetowych bez zmiany ustawień dotyczących cookies oznacza, że będą one zapisane w pamięci urządzenia.