Do kontroli wersji używamy Git ze zdalnym serwerem BitBucket. Zadania organizujemy w JIRA, a dokumentację piszemy na Confluence oraz bezpośrednio w kodzie (sphinx).

Aplikacja jest testowana na wielu poziomach, każdy z komponentów poddwany jest testom jednostkowym oraz funkcjonalnym.

Do CI używamy Jenkinsa i w zależności od platformy dodatkowe narzędzia:

  • linting (pylint, tslint, pycodestyle)
  • formatting (clang-format, cmake-format, prettier, robot-tidy)
  • analiza statyczna (SonarQube)
  • testy jednostkowe (GTest, pytest, jasmine)
  • testy integracyjne (selenium, RobotFramework, scapy)
  • fuzzing
  • testy wydajnościowe (pktgen)

Jeśli kod nie przechodzi testów, to nie może zostać włączony do wersji master – to oznacza, że nie jest wdrażany. Stosujemy tzw. quality gate’y:

  • Pokrycie kodu testami musi przekraczać 85% linii
  • Liczba błędów lintera nie może wzrosnąć

Poprawne wyniki testów pozwalają na wdrożenie nowej wersji w środowisku testowym. Proces jest wyzwalany on-demand i odbywa się automatycznie, przy użyciu sparametryzowanego projektu w Jenkinsie. Ostatecznie nasi testerzy przeprowadzają testy ręczne aplikacji. Przygotowujemy scenariusze testowe w JIRA korzystając z wtyczki Zephyr.