Czym zajmuje się programista i jakich narzędzi używa na co dzień?

Na zadane w tytule pytanie laik odpowiedziałby zapewne: programowaniem! Rzeczony programista w tym momencie zmrużyłby oczy, westchnął głęboko i zamruczał nerwowo pod nosem: ehh… żeby tylko! W rzeczywistości określenie “programista” nie definiuje zakresu obowiązków. Mamy bowiem web developerów, back-end’owców, analityków danych, pracowników doświadczonych w dev-ops, CI/CD, QA czy metodologii Agile. Nie wspominając już o językach programowania, w przypadku których Java, JS, PHP, C, C#, Python i Ruby to tylko początek niezwykle długiej listy. Nic więc dziwnego, że określenie w paru słowach zawodu programisty jest niemal niemożliwe.

Programista – lekarz wielu specjalizacji

Zawód programisty można porównać do współczesnego lekarza. Obecnie nie idziemy już do doktora wielu specjalizacji, ale do fachowca w konkretnej dziedzinie – kardiologa, neurologa czy ortopedy. Jedna osoba nie jest bowiem w stanie przyswoić ogromu tak szczegółowej wiedzy. Dlatego też wśród programistów i informatyków również popularne są podziały, które są następstwem nieustannie powstających nowych technologii. Ich zatrważająca liczba nie bierze się jednak wyłącznie z niepohamowanej potrzeby twórczej, ale ma przede wszystkim związek z ułatwieniem i usprawnieniem pracy programistów.

Podstawowe narzędzia stosowane przez programistów

Choć zakres obowiązków wykonywanych przez programistów może w wielu przypadkach znacząco się różnić, to istnieją narzędzia, z których bardzo często korzystają przedstawiciele tej branży – niezależnie od swojej specjalizacji. Należą do nich m.in. kontrola wersji oraz testy jednostkowe. Do czego są wykorzystywane? Jaki jest ich cel? Kto może z nich korzystać? Poniżej postaramy się odpowiedzieć na te pytania, aby nie tylko wyjaśnić ich działanie, ale też przybliżyć na ich podstawie codzienną pracę programisty.

Kontrola wersji sposobem na dobrą organizację pracy

Istotą zawodu programisty jest tworzenie czytelnego i solidnego kodu źródłowego. Często jednak praca jednej osoby nie wystarczy. W przypadku dużych projektów (np. systemu operacyjnego Windows) konieczne jest zaangażowanie setek, a czasem nawet tysięcy ludzi. Skoordynowanie działań tak dużej grupy nie należy do łatwych. Dlatego też, aby umożliwić im współpracę, a zarazem sprawować nadzór nad wprowadzanymi zmianami, korzysta się z systemów kontroli wersji.

Na czym polega kontrola wersji?

Podstawowym zadaniem systemu kontroli wersji jest śledzenie dokonywanych przez programistów zmian w kodzie. Oznacza on każdą linijkę, w której nastąpiła zmiana oraz zapisuje kto i kiedy ją wprowadził. Dzięki temu możliwe jest np. szybkie znalezienie tego fragmentu kodu, który odpowiedzialny jest za występujący błąd. System ten potrafi też wykryć, kiedy zaistnieje sytuacja tzw. konfliktu, czyli kiedy zmiany wprowadzone przez dwóch lub więcej programistów do jednego pliku dotyczą tych samych linii, a więc wykluczają się wzajemnie. Korzystanie z kontroli wersji pozwala tym sposobem na oszczędność czasu oraz utrzymanie porządku w kodzie.

Testy jednostkowe narzędziem do weryfikacji błędów

Drugim często stosowanym przez programistów narzędziem są testy jednostkowe. Polegają one na testowaniu w zupełnie odizolowanym środowisku każdej pojedynczej funkcji, z której składa się kod, aby sprawdzić, czy w każdej sytuacji (nawet takiej, która być może nigdy nie zaistnieje) spełnia ona swoje zadanie. Główną korzyścią takiego działania jest upewnienie się, że zmiany wprowadzone w jednym miejscu nie "zepsują" kodu w innym. Testy jednostkowe są także bardzo pomocne przy wprowadzaniu zmian w kodzie już istniejących programów, za których utworzenie odpowiedzialni byli inni programiści. Stanowią one wówczas świetną dokumentację, pokazującą, jak działają zaprogramowane funkcje oraz jakich scenariuszy ich działania można się spodziewać.

Problemy z tworzeniem testów jednostkowych

Pisanie takich testów nie jest jednak łatwe. Przede wszystkim cały testowany kod musi być napisany w taki sposób, aby przetestowanie go było w ogóle możliwe. Jeśli np. testowana funkcja będzie wykonywała wiele różnych, niepowiązanych ze sobą operacji lub korzystała z zewnętrznych zasobów, których nie możemy w żaden sposób kontrolować, to napisanie miarodajnego testu bez przepisania dużych porcji kodu może okazać się niemożliwe. Nie da się bowiem ukryć, że najlepszym rozwiązaniem są testy pokrywające 100% kodu, które pozwalają na kompleksową weryfikację poprawności.

Niekończąca się lista technik i narzędzi

Wspomniane wyżej narzędzia to jednak tylko wierzchołek góry lodowej. Programiści, w zależności od swojej specjalizacji korzystają bowiem z wielu technik, metod czy programów, które znacząco ułatwiają, a także poprawiają jakość oraz efektywność ich pracy. Oprócz testów jednostkowych używają oni również m.in. testów funkcjonalnych, integracyjnych czy end-to-end oraz innych narzędzi. Nic więc dziwnego, że wykonywany przez nich zawód porównywany jest do lekarza o wielu specjalizacjach.

10 najważniejszych narzędzi w pracy testera

Tym razem chcemy się skupić nie na konkretnych rozwiązaniach, ale na kategoriach narzędzi, jakie muszą się znaleźć w środowisku pracy testera. Bez względu na swój OS czy typ testowanego oprogramowania pokazujemy typ narzędzi, jakie powinny się znaleźć w (praktycznie) każdym środowisku testerskim.

Bez względu na to co testujecie i jak testujecie, te narzędzia będą stanowiły podstawowe elementy waszego środowiska.*

1. Narzędzia zarządzania defektami

Efektywne zarządzanie defektami oraz kontrola tego, czy zostały naprawione, wymaga adekwatnych narzędzi do ich przechowania oraz określania ich statusu.

Przykłady: Mantis, Bugzilla, Jira

2. Narzędzia badania konfiguracji środowiska

Warto zawsze znać parametry oraz składowe środowiska testowego. Takie rozwiązania znajdziemy na każdą platformę.

Przykłady: Od DxDiag na Windowsa po AIDA64 na Androida.

3. Narzędzia zarządzania testami

Jeśli pracujesz w większym zespole (większym niż jednoosobowy) zawsze warto mieć pod ręką narzędzie do przekazywania i odbierania zadań. Mogą to być aplikacje dedykowane do prowadzenia projektów testowych, ale równie dobrze mogą to być narzędzia kooperacji.

Przykłady: 10 najlepszych narzędzi zarządzania testami.

4. Narzędzia komunikacji

Nie unikniesz pisania maili ani innych form komunikowania się z członkami zespołu. Nie tylko musisz perfekcyjnie posługiwać się klientem poczty, ale również wszelkiej maści komunikatorami. Szczególnie teraz, gdy praca zdalna stała się codziennością.

Przykłady: Gmail, Outlook, Skype, Zoom, Meet, Messenger.

5. Edytor tekstu

Robienie notatek to jedna z kluczowych umiejętności w testowaniu. Nie wszystko od razu nadaje się do wklejenia do reportera defektów. Część rzeczy zostawiamy bowiem na później, a część to po prostu nasze prywatne komentarze. Zazwyczaj korzystamy z tego co jest w środowisku, ale czasami warto poszukać czegoś lepszego.

Przykłady: Notatnik, Notepad++, OneNote.

6. Aplikacja do zrzutów ekranu i obróbki grafik

Nie wszyscy pracują na GUI, ale każdy czasami musi obrobić jakiś obrazek, by załączyć go do raportu, albo zgłoszenia. Użycie funkcji wycinania bądź maskowania danych może uchronić nas przed wyciekiem pewnych informacji, których nie chcemy pokazywać.

Przykłady: Sharex, narzędzie Wycinanie, Greenshot.

7. Narzędzia wspierające tworzenie kodu i automatyzację

Czasami pewne rzeczy dzieją się dużo szybciej jeśli stworzymy program aby robił to za nas. Umiejętność stworzenia małej aplikacji do obróbki danych testowych, czy wykonywania powtarzającego się kliknięcia może być dużą optymalizacją w pracy.

Przykłady: 10 najlepszych narzędzi automatyzacji testów.

8. Narzędzie do zbierania i przetwarzania logów

Log to zazwyczaj tekstowy zapis operacji wykonywanych podczas uruchomienia aplikacji. Często ten zapis jest bardzo szczegółowy, bardzo długi i bardzo ciężki. Umiejętność jego efektywnego pozyskania, transformowania w możliwy do odczytania, a następnie obrobienia to krytyczna umiejętność dla tych wszystkich, którzy nie do końca wierzą tylko w to co widzą na okienkach aplikacji. To również kolejny krok do wskazania jaka jest realna przyczyna problemu.

Przykłady: LOGalyze, splunk.

9. Nakładka na bazę danych

Prawie każdy program ma bazę danych, albo jakąś jej formę. Wykonywanie zapytań, czy też proste jej przeglądanie jest kolejną umiejętnością w lepszym rozumieniu jak działa oprogramowanie i gdzie mogą pojawiać się defekty.

Przykłady: phpMyAdmin, dbWatch, DBeaver.

10. Analizator wydajności

Wydajność to nie tylko czas odpowiedzi, ale również konsumpcja zasobów. Najprostszym narzędziem będzie monitor obciążenia procesora, ale czasami będą to gotowe skrypty do oceny wydajności stron internetowych, czy aplikacji desktopowych.

Przykład: AppDynamics, dynatrace, Shark, Windows Performance Analyzer.

Post scriptum

Ponieważ aplikacje webowe są wciąż najpopularniejsze, to nie możemy zapomnieć tutaj o dwóch krytycznych narzędziach:

Narzędzie programisty w przeglądarkach, które pozwalają nam zbadać każdy aspekt witryny,

Narzędzia do testów API, które opisaliśmy tutaj.

Warto również wspomnieć o całej kategorii narzędzi wspierajacych eksplorację.

Każdy doświadczony tester powinien potrafić do każdego z takich narzędzi, przypisać jedno dodatkowe, które ma w swoim środowisku i używa na co dzień.

Każdy aspirujący tester powinien znać przynajmniej jedno narzędzie z każdej kategorii wymienionych powyżej.

*) Może nie dotyczyć środowiska testów aplikacji wbudowanych.

Elementarz programisty

O książce

Elementarz programisty: Wstęp do programowania używając R ma na celu wprowadzenie do podstaw działania w języku R. W pierwszej części, “Podstawy”, opisuje ona w jaki sposób wykonywać proste operacje w R, czym są obiekty oraz jak tworzyć funkcje, które je przetwarzają. Ta część zawiera także omówienie podstawowych narzędzi pozwalających na sterowanie przepływem informacji, takich jak wyrażenia warunkowe i pętle, metod działania na tekście, oraz sposobów wczytywania i zapisywania plików w różnych formatach. Druga część, “Narzędzia”, buduje na wiedzy zdobytej w części pierwszej i rozszerza ją. Zawiera ona informacje na temat tworzenia funkcji przyjaznych użytkownikom oraz to w jaki sposób tworzyć odpowiednie komunikaty błędów, ostrzeżeń czy wiadomości. W tej części następuje prezentacja metod analizy kodu, takich jak testy jednostkowe, benchmarking i profiling oraz sposobów rozwiązywania problemów z kodem używając technik debugowania. Pokazanie są także możliwości łączenia R z innymi językami programowania C++ i Python. Oprócz informacji ściśle powiązanych z R, Elementarz programisty ma także rozdział poświęcony systemom kontroli wersji - uniwersalnym narzędziom używanym przez programistów różnych języków. Część “Narzędzia” kończy rozdział integrujący wiedzę z całej książki w postaci omówienia kolejnych kroków dotyczących tworzenia pakietów R. Elementarz programisty zawiera też szereg praktycznych porad oraz wiele odnośników do dodatkowych materiałów, takich jak książki, blogi, kursy, czy strony internetowe. Wszystkie rozdziały w tej książce dodatkowo zawierają zadania, które pozwalają na sprawdzenie i utrwalenie wiedzy. Książka ta jest przeznaczona zarówno dla osób bez znajomości języków programowania, jak też dla osób, które znają inne języki programowania, ale są zainteresowane poznaniem języka R. Uzyskana wiedza z tej książki daje podstawy do wykorzystywania R do różnorodnych celów, od analizy danych i opracowań statystycznych, poprzez tworzenie wykresów i wizualizacji, kończąc na aplikacjach specyficznych dla danej dziedziny.

Aktualna wersja książki znajduje się pod adresem https://nowosad.github.io/elp/. Jeżeli używasz tej książki, zacytuj ją jako:

Nowosad, J., (2020). Elementarz programisty: wstęp do programowania używając R. Poznań: Space A. Online: https://nowosad.github.io/elp/. ISBN: 978-83-953296-1-9

Zachęcam również do zgłaszania wszelkich uwag, błędów, pomysłów oraz komentarzy na stronie

Ta książka jest dostępna na licencji Creative Commons Uznanie autorstwa 4.0 Międzynarodowe.

Wymagania wstępne Do odtworzenia przykładów oraz do wykonania zadań zawartych w tej książce konieczne jest posiadanie aktualnej wersji R. Pod adresem można znaleźć instrukcje instalacji R dla systemów Windows, Mac OS i Linux. W niektórych rozdziałach użyte zostanie zintegrowane środowisko programistyczne RStudio. Można je zainstalować korzystając ze strony Aspekty dotyczące kontroli wersji zostaną omówione używając oprogramowania Git. Zalecanym sposobem instalacji Git na Windows jest wersja ze strony Instrukcja instalacji na system Mac OS znajduje się pod adresem Wersję Linuxową można zainstalować używając poniższej linii kodu: # Ubuntu sudo apt install git # Fedora sudo dnf install git

Styl książki W całej książce stosowana jest konwencja, w której fun() oznacza funkcje, obi oznacza nazwy obiektów, nazwy zmiennych oraz argumentów funkcji, a sci/ oznacza ścieżki do plików. Wszystkie pakiety użyte w tej książce oznaczane są pogrubioną czcionką - pak. Tekst na szarym tle przedstawia blok kodu. Może on zawierać komentarze (rozpoczynające się of znaku # ), kod oraz wynik jego użycia (rozpoczynające się od znaków #> ). # komentarz kod #> wynik użycia kodu Dodatkowo, ikona kompasu przedstawia dodatkowe informacje, alternatywne sposoby użycia funkcji, czy też wskazówki. Tutaj może znaleźć się dodatkowa informacja, alternatywny sposób użycia funkcji, czy też wskazówka.

Jarosław Kułak
Jarosław Kułak

Leave a Comment