InspectR - czyli wprowadzamy elementy grywalizacji do pracy programisty

Programowanie to nasza pasja. To ona między innymi napędza nas do tworzenia wewnętrznych narzędzi, usprawniających nasz proces twórczy. Na dzień dzisiejszy z naszej produkcji wyszło ponad 50 takich aplikacji. Większośc z nich na pewno będziemy sukcesywnie upubliczniać, bo nie jesteśmy typową, bierną częścią community i kochamy tworzyć rozwiązania Open Source. Poprzednim razem przedstawiliśmy wam Deep Image, dziś poznajcie InspectR.

Programiści nie lubią pisać testów

Na wstępie powiedzmy sobie szczerze: programiści nie lubią pisać testów.
Po pierwsze są przekonani, że ich kod jest na tyle dobry, że nie ma potrzeby sprawdzania go, po drugie pisanie testów to praca żmudna, o której istnieniu najchętniej byśmy zapomnieli (na tym etapie bardzo często włącza się prokrastynacja i odwlekanie procesu, aż do ostatniej chwili).
Tymczasem testowanie na bieżąco to ogromna oszczędność czasu, szczególnie w momencie implementacji.

Z doświadczenia wiemy, że najlepiej wdrażać testy systematycznie, niż potem kilka dni czy nocy spędzać na ręcznym sprawdzaniu aplikacji.

W czym w takim razie tkwi problem?

  1. Brakuje wabika, jakiegoś elementu, który będzie działał mobilizująco.
  2. Brakuje centralnego miejsca z raportami testów (aby sprawdzić rezultat testów musimy wejść do buildów CI/CD),
  3. Brakuje wizualizacji wyników i narzędzia do porównania kilku projektów względem testów.

Jak na te problemy odpowiada InspectR?

  1. Motywuje do budowania testów - dzięki wprowadzeniu elementów grywalizacji i współzawodnictwa
  2. Modyfikuje typową praktykę, która polega na uruchamianiu procesu testów ręcznie lub w procesie CI/CD, dając skoncentrowane miejsce z raportami
  3. W jednym oknie gromadzi dane o wszystkich projektach - pokazuje czarno na białym, które testy przeszły, a które nie powiodły się i jak wypadamy na tle innych projektów.

“Let’s do IT!” - mobilizująca grywalizacja w pracy programisty

InspectR

W InspectR umieściliśmy element rywalizacji między zespołami budującymi projekty, który zagrzewa do walki o wykonywanie testów. To system rang, który pokazuje nam jak nasz projekt wygląda na tle innych.

Podczas pracy nad InspectR myśleliśmy o tym w jaki sposób wizualnie ukazać klasyfikację projektów, począwszy od najlepszych do najsłabszych. Standardowo moglibyśmy po prostu nadać im numery, czy zastosować normalną punktację w skali od 1-10. Jednak to nie w naszym stylu. Jesteśmy geekami i nawet najmniejsze szczegóły lubimy dopracowywać w klimatach gier, filmów, technologii. Padło więc na… “levele” symbolizujące zdobyte w grach doświadczenie, które w formie odznak zaprojektował nasz grafik Jarek. Znajdziecie je także na naszym profilu na Behance: https://www.behance.net/TEONITE.

Poza nimi w InspectR znajdziecie także inne formy wizualizacji wyników - kolory i kropki, pokazujące poszczególne działania, które wyznaczają co w danym projekcie działa prawidłowo (zielony) i co jest do poprawy (czerwony). Dzięki nim od razu widać, co dzieje się w projektach, a wyróżnienie kolorem sygnalizuje pozytywne lub negatywne wyniki testów i zagrzewa do walki o jak najlepsze rangi.

InspectR

Centralne miejsce z raportami testów

W TEONITE cenimy czas swój i naszych klientów i stawiamy na automatyzację powtarzalnych procesów oraz możliwie jak najbardziej przejrzystą wizualizację. Kamil Chudy pisał o tym rok temu na naszym blogu i swoje słowa potwierdził na wystąpieniu podczas czerwcowej edycji Netcamp.

InspectR najlepiej sprawdza się gdy pracuje na CI/CD - Continuous Integration and Continuous Delivery. W TEONITE używamy do tego GitLaba i zamiast uruchamiać testy ręcznie, bądź zamiast tylko uruchomienia ich w pipeline, włączamy InspectR i uruchamiamy narzędzia do QA, w tym:

  • testy automatyczne,
  • lintery,
  • test coverage,
  • miary jak np. maintainability i złożoność cyklomatyczna.

Po włączeniu InspectR do ciągu testowania aplikacja odpala testy, wrzuca do bazy danych ich rezultaty a dashboard odczytuje informacje. Et Voilà! Wszystkie dane publikowane są na dashboardzie.

InspectR składa się z dwóch części:

  1. Dashboard zbudowany na React, z biblioteką Horizon, która umożliwia, z poziomu JavaScript, odpytywanie bazy RethinkDB,
  2. Command line tool, który uruchamiamy na naszych projektach.

Aktualnie na naszych projektach działają pluginy, które sami napisaliśmy:

  • FLAKE 8 - linter kodu Python, czyli narzędzie, które mówi czy standardy kodu są zachowane
  • PYTEST TEST - testy automatyczne Python Python unittest - testy automatyczne Python
  • COVERAGE.PY - test coverage dla języka Python
  • RADON MAINTAINABILITY - miara złożoności kodu
  • RADON CYCLOMATIC COMPLEXITY - złożoność cyklomatyczna - miara, która patrzy na złożoność funkcji i głębokości zagnieżdżeń
  • eslint - popularny linter JavaScript
  • jasmine - JavaScriptowy framework do testów
  • mocha - j.w.
  • karma-coverage - test coverage dla języka JavaScript

InspectR

Wy także możecie dopisać swoje pluginy! InspectR udostępniliśmy w wersji open source, o czym przeczytacie w dalszej części tekstu.

Wizualizacja postępu w budowaniu projektu

Cała, wspomniana wyżej analiza jest przedstawiona na jednym, przejrzystym dashboardzie i to jest główne zadanie InspectRa - połączenie zdrowego współzawodnictwa, wskazywanie ewentualnych błędów oraz zachęcanie do ciągłego rozwijania bazy testów. Dashboard jest posortowany począwszy od projektu, który jest najlepiej wykonany, przeszedł pozytywnie wykonane testy i spełnia wszystkie wymagania.

Po kliknięciu na dany projekt możemy obejrzeć szczegółowy raport inspekcji, który zawiera output poszczególnych narzędzi: InspectR pobiera ten output, parsuje go i przekłada na wynik w dashboardzie, dając jednocześnie obraz oryginalnego wyniku testów, dzięki czemu wiemy co działa, a co się nie powiodło.

InspectR

W InspectR nia ma limitu projektów. W aplikację wbudowana jest funkcja automatycznego przewijania, która pozwala ustawić widok np. na firmowym telewizorze tak, by cały zespół widział postępy w poszczególnych lub wszystkich projektach.

Co pojawia się w widoku?

  1. Wysokopoziomowy podgląd na to jak projekt jest utrzymywany pokazuje nam czy wszystko działa i czy nie generujemy “długu technologicznego”
  2. Szczegółowy output wszystkich tooli.
  3. Odświeżanie treści - InspectR działa w oparciu o (wspomnianą wcześniej) bazę danych RethinkDB z nakładką Horizon. Dzięki temu nowe wyniki, które znajdą się w bazie natychmiast pojawiają się na dashboardzie.
  4. Sortowanie projektów - InspectR wyświetli najlepsze projekty (które mają najmniej błędów i wymagają najmniejszego wkładu pracy w naprawę) w pierwszej kolejności.

InspectR w wersji open source

InspectR udostępnimy na GitHub. Pliki są aktualnie gotowe do publikacji i modyfikacji:

  1. Tool command line, który uruchamiamy na projekcie: https://github.com/teonite/inspectr-cli
  2. Dashboard, czyli webaplikacja do wizualizacji wyników: https://github.com/teonite/inspectr-dashboard
    Aplikacje możecie polepszyć, zmieniać dowolne elementy lub rozbudować według własnych potrzeb i uznania. Zapewne pierwszym elementem których będziecie chcieli dodać to obsługa używanych przez was narzędzi. Staraliśmy się żeby tego typu zmiany były proste do wdrożenia.

Jeśli jednak nie będziecie mieli czasu na zbudowanie własnego parsera do testów, wystarczy, że założycie issue na githubie, a społeczność open source (czyli może również ktoś z nas) może go w wolnej chwili napisać i poinformować was kiedy będzie dostępny. Viva Comunità!

Podsumowując:

InspectR to proste narzędzie, które tak naprawdę wykonuje dość istotną rzecz - dzięki niemu mamy w przejrzysty sposób przedstawioną sytuację dotyczącą jakości kodu.
To projekt, z którego mogłyby korzystać osoby odpowiedzialne za QA, osoby indywidualne, firmy, a nawet większe zespoły, które rozwijają swoje produkty np. dzieląc projekty na moduły.

Dla nas InspectR to uniwersalny tool który pomaga nam utrzymywać odpowiedni poziom testów w wielu projektach, dając przy tym dużą porcję zabawy.

Downloads:

click to subscribe
hire us

Let’s talk about Mobile Apps

We’d love to design, develop and release them for you.

Highest DevOps Standards

Our team wield the right skills to make things work.

Angular magic in the making

Most flexible development technology for stunnig results.

Web Apps cooked the right way

The ultimate combination of code, design and user experience.

Django REST Framework

TEONITE develops, supports and donates open source projects.