5. Python in Testing

Warning

Przed szkoleniem proszę o instalację i konfigurację środowiska zgodnie z Installing Python

5.1. Description

Tip

If you’re interested in this training course, please email me at matt@astrotech.io

5.2. Agenda

  1. Wprowadzenie do języka Python:

    • konfiguracja środowiska
    • Uruchamianie kodu w środowisku IDE
    • Debugging i introspekcja
    • Uruchamianie testów (doctest, unittest)
    • Refactoring
    • konfiguracja i korzystanie z Jupyter
  2. Struktury danych oraz instrukcje podstawowe języka:

    • Typy wbudowane: liczby, łańcuchy znaków, listy, słowniki, krotki
    • Typy złożone
    • Przypisania
    • Instrukcje decyzyjne
    • Pętle
    • Czytanie plików
  3. Funkcje w języku Python:

    • Zastosowanie funkcji
    • Zwracanie i przekazywanie parametrów do/z funkcji
    • Funkcje parametryzowane, parametry pozycyjne, nazwane oraz * i **
  4. Programowanie obiektowe:

    • Podstawowe wiadomości o programowaniu obiektowym
    • Definiowanie klasy w języku Python
    • Przeciążanie operatorów
    • Dziedziczenie
    • Dataclass
    • Wyjątki: rodzaje, przechwytywanie, tworzenie własnych
  5. Jakość, testowanie i dobre praktyki:

    • PEP8 i PEP20
    • Doctest
    • Unittest
    • Wprowadzenie do TDD
    • Type Annotation
    • Wykorzystanie Pythona do automatyzacji testów
    • Continuous Integration i Delivery
    • Selenium
  6. Modularyzacja programu oraz korzystanie z bibliotek:

    • Najczęściej wykorzystywane moduły biblioteki standardowej
    • Virtualenv i separacja bibliotek
    • pip i pipenv
    • Instalacja bibliotek zewnętrznych
    • Tworzenie własnych modułów
    • Praca z systemem operacyjnym
    • Parsowanie argumentów i korzystanie z terminala
  7. Manipulacja i prezentacja danych:

    • Serializacja danych do formatu JSON, Pickle, XML oraz CSV
    • Operacje na bazach danych w języku Python
    • Generowanie interaktywnych wykresów oraz raportów za pomocą Matplotlib, Plotly i Jupyter
  8. Testowanie webaplikacji

    • Podstawy programowania sieciowego i HTTP w języku Python
    • Omówienie protokołu REST
    • Dobre praktyki tworzenia API
    • (opcjonalnie) tworzenie i korzystanie z narzędzia Swagger do dokumentacji API
    • (opcjonalnie) wstęp do GIT
    • (opcjonalnie) wstęp do Django framework

5.3. Survey before workshop

  1. Jakie masz doświadczenie z programowaniem:

    • żadnego
    • tworzyłem pomniejsze programy / skrypty
    • mam na koncie kilka aplikacji, ale raczej nic dużego
    • w ciągu ostatnich dwóch lat byłem współautorem większego systemu (ponad 500k LOC)
    • programuję na codzień
    • jestem zaawansowanym programistą i programuję systemy rozproszone
  2. Doświadczenie z paradygmatem obiektowym:

    • żadnego
    • kiedyś coś było, ale nie wykorzystuję tego na codzień
    • programuję obiektowo codziennie, wiem co to klasa, metody, właściwości (pola), dziedziczenie, kompozycja, polimorfizm,
    • wykorzystuję polimorfizm i dziedziczenie / kompozycję na co dzień
  3. Doświadczenie z paradygmatem funkcyjnym:

    • żadnego
    • rozumiem na czym polega domknięcie
    • wiem co to domknięcie i rekursja - stosuję to w praktyce
    • wiem co to rachunek domknięcie, lambda, złożenie funkcji i rekursja i jestem w stanie zastosować je w praktyce
    • programuję funkcyjnie rozproszone systemy
    • Alonzo Church razem ze mną formułował rachunek lambda
  4. Doświadczenie z Pythonem:

    • żadnego
    • pisałem skrypty
    • mam na koncie kilka aplikacji, ale raczej nic super dużego
    • tworzyłem większe aplikacje
    • programuję w tym języku od kilku lat
    • Guido van Rossum to mój kolega ze szkolnej ławki
  5. Czy miałeś styczność z programowaniem okienkowym:

    • Nie i nie chcę mieć nic z tym wspólnego
    • Nie, ale chcę się nauczyć
    • Tak, miałem kiedyś okazję stworzyć taki program
    • Tak, tworzę je często
    • Tak, tworzę je na codzień
    • Pracowałem w Xerox jak Steve Jobs wpadł z wizytą
  6. Jakie masz doświadczenie z systemem Linux:

    • nigdy nie korzystałem
    • słabe, umiem się poruszać w trybie graficznym
    • znam Linuxa i korzystam z wiersza poleceń
    • wykorzystuję Linuxa na codzień
    • koduję kernela razem w piwnicy z Linusem Torvaldsem
  7. Czy tworzyłeś systemy webowe:

    • Tak, tworzę je często
    • Tak, miałem kiedyś okazję stworzyć taki system
    • Nie, ale chcę się nauczyć
    • Nie i nie chcę mieć nic z tym wspólnego
    • Moje strony testowałem w Mozaic
  8. Do jakich zastosowań chciałbyś wykorzystać Pythona [można zaznaczyć wiele]:

    • do zabawy / nauki programowania
    • do skryptowania środowiska
    • tworzenia narzędzi developerskich
    • tworzenia stron internetowych
    • tworzenia aplikacji i narzędzi naukowych
    • inne…
  9. Na co chciałbyś abym zwrócił szczególną uwagę podczas szkolenia:

    • [pytanie otwarte]
  10. Jakie elementy z poza programu szkolenia chciałbyś aby zostały poruszone:

    • [pytanie otwarte]
  11. Czy piszesz testy jednostkowe oraz integracyjne?:

    • nigdy
    • bardzo rzadko
    • czasami
    • zawsze
    • Uncle Bob to mój bohater
  12. Doświadczenie z refactoringiem:

    • nie robię
    • robię raczej jak jest potrzeba
    • codziennie refaktoruję kod
    • skróty klawiszowe do refaktoringu w moim IDE znam na pamięć
    • pisałem książkę z Michael Featers
  13. Czy chciałbyś aby w ramach szkolenia zostały poruszone kwestie dotyczące narzędzi automatyzujących budowanie aplikacji (Jenkins), GITa i GIT Flow oraz innych elementów ekosystemu developerskiego i dobrych praktyk programowania?:

    • Tak!
    • Nie mam zdania - zdam się na decyzję większości
    • Nie, wolę by szkolenie dotyczyło tylko Pythona

5.4. Certificate

Szkolenie obejmowało 32 godziny wykładów oraz warsztatów. Zagadnienia poruszone na szkoleniu:

  • tworzenie aplikacji w języku Python,
  • tworzenie i korzystanie ze struktur danych,
  • tworzenie klas i obiektów,
  • użycie biblioteki standardowej i instalacja zewnętrznych,
  • tworzenie testów do pisanych funkcji,
  • TDD z wykorzystaniem unittest i doctest,
  • korzystanie z funkcji refaktoringu w środowisku IDE,
  • wykorzystanie Python w testowaniu,
  • podstawy systemów CI/CD i łączenia z Pythonem i Selenium,
  • dobre praktyki i standardy kodowania.