Ta strona wykorzystuje pliki cookie w celu prezentacji dopasowanych dla Ciebie treści. Możesz włączyć/wyłączyć obsługę plików cookies w swojej przeglądarce.

Dowiedz się więcej
Co zrobić, żeby Twój kod był jeszcze lepszy?

Co zrobić, żeby Twój kod był jeszcze lepszy?

Opublikowano  przez Marek Zoellner

Chcesz mieć pewność, że napisany kod będzie działał zgodnie z założeniami? Jak izolować błędy i sprawiać by błąd raz poprawiony nie powrócił? Naucz się tworzyć własne testy automatyczne.

Nikogo nie trzeba przekonywać, że błędy w oprogramowaniu potrafią być w najlepszym razie irytujące, a wielu sytuacjach niezwykle kosztowne, czy wręcz tragiczne w skutkach. I o ile występowanie błędów jest dość łatwo udowodnić, może zdarzyć się też tak, że błędy są, ale nikt ich jeszcze nie zauważył.

Jak ich unikać? Jak je wykrywać zanim narobią szkód? I jak ten proces automatyzować?

Co to znaczy, że Twój kod jest bezbłędny?

  • Poprawnie się uruchamia i nie zgłasza błędów
  • Zwraca prawidłowy wynik w każdych okolicznościach
  • …i dla wszystkich możliwych danych wejściowych
  • Spełnia wszystkie wymagania zleceniodawcy
  • Jest przyjazny dla użytkownika, minimalizując ryzyko błędów obsługi
  • Działa w sposób wydajny i bezpieczny

Skąd się wziął bug, czyli początki testowania

Mówi się, że pierwszym “bugiem” w branży IT była ćma, która w połowie XX wieku spowodowała awarię w jednym z przedpotopowych komputerów. Mowa o projekcie, w którym brała udział Grace Hopper, pierwsza kobieta kontradmirał w amerykańskiej armii. To właśnie ona stworzyła jeden z pierwszych języków programowania COBOL i doskonale znane wszystkim programistom pojęcia - bug i debugowanie. Otóż 9 września 1947 roku ćma dostała się do wnętrza jej komputera, powodując problem z działaniem maszyny. Admirał Grace naprawiła usterkę i zapisała ją w swoich notatkach jako... debugging!

- Koduję od kilkunastu lat i jeszcze nie udało mi się napisać aplikacji wolnej od błędów. Przywykłem już do tego. To wszystko jest częścią procesu bycia programistą - pisał na stronie Codementor.io Matt Goldspink. Coś w tym jest, jednak zdarzają się takie chwile, gdy nawet doświadczenie i rutyna nie uchronią przed prawdziwą katastrofą. - Najczarniejsze chwile zdarzają się wówczas, gdy usterkę odkryje ktoś odpowiedzialny za kontrolę jakości jego pracy - przyznawał. Co zrobić, żeby takich wpadek było jak najmniej?

Programista też człowiek, uczy się na błędach

Jesteśmy ludźmi praktycznymi. Nawet początkujący programista, pisząc najprostszy skrypt, uruchamia go wielokrotnie na różnych etapach, z różnymi wymyślonymi danymi, aby sprawdzić "czy działa". I zamiast martwić się wszystkimi możliwymi problemami, uznaje kod za akceptowalnie poprawny, jeśli przejdzie on pomyślnie te wyrywkowe próby.

Zastosowanie podobnego podejścia w odpowiednio systematyczny sposób pozwala nam powiedzieć, że co prawda dalej nie mamy gwarancji, że błędów nie ma gdzie indziej, ale "w zakresie tego, co sprawdzaliśmy", kod jest bezbłędny. Pozostaje zatem skupić się na tym, aby "to, co sprawdzaliśmy" było wystarczające.

Jak tłumaczył jakiś czas temu jeden z mentorów Kodilli, testowanie automatyczne, a bardziej poprawnie - kodowanie automatycznych weryfikacji (ang. automated checks - nie ma chyba jeszcze dobrego polskiego tłumaczenia), to jedno z wielu narzędzi, które testerzy mają do dyspozycji. Automatyzacja jest doskonałym uzupełnieniem tradycyjnego testowania, a w pewnych sytuacjach i projektach jest absolutnie niezastąpiona.

Opiera się ono na trzech filarach:

  • wiedzy technicznej,
  • wiedzy biznesowej
  • i umiejętności testowania.

Wydaje się, że na rynku potrzebni są testerzy z mocnym profilem technicznym, a zatrudniając osobę do automatyzacji ma się pewność, że ta strona techniczna będzie na odpowiednio wysokim poziomie. Potwierdzają to rozmowy z moimi kolegami, którzy zatrudnieni do automatyzacji przynajmniej połowę czasu poświęcają tradycyjnym testom. Okazuje się, że ciągle jest to najlepsza metoda, żeby osiągnąć wysoką jakość produktu. Ten sposób wykonywania testów zupełnie nie jest zagrożony przez automatyzację. To nie znaczy jednak, że nie istnieje osobna specjalizacja obejmująca tworzenie systemów do automatycznej weryfikacji, ale jest to obszar dla tych, którzy w pełni opanowali podstawy.

Takich specjalizacji jest kilkanaście, m.in.: testy jednostkowe, testy interfejsu, wydajnościowe, testy bezpieczeństwa, testy zgodności, dostępności czy organizacja testów.

testy automatyczne

Jeszcze kilkanaście lat temu przeciętny programista spędzał 10-20% czasu na pisaniu kodu, a 80-90% na analizowaniu co zrobił źle. Im większy system, tym więcej było miejsc, gdzie mógł popełnić nieoczekiwany błąd i godzinami próbować dojść do tego, co się stało.

Co zrobić, żeby mieć pewność, że napisany kod będzie działał zgodnie z założeniami? Jak izolować błędy i sprawiać by błąd raz poprawiony nie powrócił?

Ktoś jednak wymyślił, że można tak napisać program, żeby sam się testował i sygnalizował nam, gdzie popełniliśmy błąd. To szczególnie istotne, jeśli dodajemy do programu nową funkcję, która wpływa na wiele innych elementów systemu. Możemy nawet nie pamiętać o wszystkich zależnościach, a pisany program sam nam wskaże, że gdzieś popełniliśmy błąd. W ten sposób czas marnowany/wykorzystywany na testowanie znacząco się skraca, a Ty możesz w ciągu dnia programować 2-3 razy więcej niż ja 10 lat temu, kiedy musiałem tracić czas na testowaniu.

A co się może stać, jeśli testów nie będzie, albo zostaną przeprowadzone nierzetelnie? O tym opowiadali nam niegdyś nasi mentorzy. Jeden z projektów dotyczył strony z eksponatami z kopalni. Linki do każdego produktu miały być wydane zleceniodawcy w postaci QR kodów.

- Pierwszy kod QR jaki kolega grafik przygotował, aby wysłać szefowi do testów zawierał link do znanego portalu z treściami dla dorosłych... szef nie sprawdził i wysłał do klienta z informacją "chcemy dodać coś takiego do Waszych katalogów". Klient był "zachwycony", bo otwierał link wieczorem przy dzieciach i żonie - opowiadał Grzegorz.

Z kolei Oskar przypomniał, jak zaczynał pracę w charakterze PHP Developera. - W pierwszym miesiącu robiłem integrację z UPS. Przez przypadek dodałem w SQL średnik i nie zadziałał WHERE. Na produkcyjnej bazie do ponad miliona faktur dodałem numer listu przewozowego na TEST123321Oskar.

Automatyzacja testów w Pythonie

Tego, jak unikać błędów, jak ich szukać i znajdować tam, gdzie być ich nie powinno, uczymy na naszym kursie:

Automatyzacja testów

Jest to szkolenie dla osób, które chcą nauczyć się automatyzacji testów w oparciu o Pythona i które posiadają znajomość programowania w Pythonie na poziomie umożliwiającym swobodne tworzenie funkcji i klas.

W ciągu dwóch tygodni nauczysz się:

  • Jak przygotować różnego rodzaju testy w Pythonie
  • Pokrycia kodu testami
  • Nowego podejście do programowania i testowania

Celem kursu jest pokazanie w jaki sposób można w Pythonie przygotować testy - od wersji najprostszej z użyciem słowa assert, poprzez testy w DocTest czy Unittest, po zastosowanie frameworków zewnętrznych (Pytest), w których wykorzystamy takie techniki jak fixtury, mockowanie.

Następnie sprawdzimy, jak dobrze kod pokryty jest testami (coverage) oraz postaramy się spiąć proces testowania w narzędziu automatyzującym (np. Tox). Zarysujemy proces ujęcia testów w CI/CD w oparciu o Gitlab Pipeline / Travis. Na koniec wspomnimy o nowych podejściach do programowania i testowania takich np. jak BDD.

Webinar: Praca testera - dlaczego warto zacząć od razu od testera automatyzującego?

Czytaj również:

Umów się na rozmowę z doradcą Kodilli