Python dla profesjonalistów. Debugowanie, testowanie i utrzymywanie kodu - Helion
Tytuł oryginału: Pro Python Best Practices: Debugging, Testing and Maintenance
Tłumaczenie: Radosław Meryk
ISBN: 978-83-283-3802-9
stron: 272, Format: 170x230, okładka: miękka
Data wydania: 2017-12-11
Księgarnia: Helion
Cena książki: 49,00 zł
Python istnieje już ponad 25 lat. Nie jest trudnym językiem i oferuje ogromne możliwości. Tworzenie dobrych programów w Pythonie wymaga jednak od programistów dużych umiejętności. Cykl rozwoju oprogramowania jest pełen pułapek nieznanych początkującym koderom. Mimo to w podręcznikach Pythona niewiele uwagi poświęca się debugowaniu i testowaniu, a przecież etapy te mają kluczowe znaczenie dla jakości kodu i funkcjonalności tworzonego oprogramowania.
Ta książka uczyni Cię lepszym programistą! Dzięki przedstawionym tu podstawowym praktykom stosowanym przez najbardziej profesjonalnych programistów Pythona będziesz tworzył doskonalszy kod. Zoptymalizujesz z nimi procesy debugowania programów, pisania automatycznych testów i utrzymywania oprogramowania bez nadmiernego wysiłku. Przedstawione tu techniki będą szczególnie przydatne dla programistów zajmujących się analizą danych, tworzeniem stron internetowych oraz rozwijaniem oprogramowania naukowego.
Najważniejsze zagadnienia przedstawione w książce:
- błędy semantyczne i wyjątki,
- sposoby eliminacji błędów i narzędzia do debugowania,
- zasady i techniki testowania aplikacji,
- mocne i słabe strony testów automatycznych,
- mechanizm kontroli wersji,
- kontrola typów i sporządzanie dokumentacji.
Ty też możesz programować w Pythonie!
Dr Kristian Rother zajmuje się programowaniem od wczesnego dzieciństwa. Jest również specjalistą w dziedzinie bioinformatyki: prowadził badania struktur 3D białek i RNA na Uniwersytecie Humboldta w Berlinie. Przez wiele lat doskonalił swoje umiejętności nauczania, a obecnie pracuje w Berlinie jako profesjonalny trener. Prowadzi szkolenia z programowania w Pythonie, uczy biochemii, statystyki, testowania aplikacji internetowych, wyszukiwarek, wygłasza prezentacje.
Osoby które kupowały "Python dla profesjonalistów. Debugowanie, testowanie i utrzymywanie kodu", wybierały także:
- GraphQL. Kurs video. Buduj nowoczesne API w Pythonie 169,00 zł, (50,70 zł -70%)
- Receptura na Python. Kurs Video. 54 praktyczne porady dla programist 199,00 zł, (59,70 zł -70%)
- Podstawy Pythona z Minecraftem. Kurs video. Piszemy pierwsze skrypty 149,00 zł, (44,70 zł -70%)
- Twórz gry w Pythonie. Kurs video. Poznaj bibliotekę PyGame 249,00 zł, (74,70 zł -70%)
- Data Science w Pythonie. Kurs video. Algorytmy uczenia maszynowego 199,00 zł, (59,70 zł -70%)
Spis treści
Python dla profesjonalistów. Debugowanie, testowanie i utrzymywanie kodu -- spis treści
- O autorze
- O recenzencie technicznym
- Podziękowania
- Przedmowa
- Rozdział 1 Wprowadzenie
- Lekcja pokory
- Najlepsze praktyki w Pythonie
- Pochodzenie najlepszych praktyk
- Hacking
- Inżynieria programowania
- Agile
- Software Craftsmanship
- Dla kogo jest ta książka?
- O czym jest ta książka?
- Część I. Debugowanie
- Część II. Automatyczne testowanie
- Część III. Utrzymanie
- Dalsze korzyści
- Gra MazeRun
- Jak korzystać z tej książki?
- Instalacja Pythona 3
- Instalacja biblioteki Pygame
- Instalacja edytora tekstu
- Pobranie kodu źródłowego przykładów
- Część I Debugowanie
- Rozdział 2 Wyjątki w Pythonie
- Wyjątki są defektami, o których istnieniu wiemy
- Czytanie kodu
- Błędy typu SyntaxError
- Najlepsze praktyki debugowania wyjątków SyntaxError
- Analiza komunikatów o błędach
- Typ błędu
- Opis błędu
- Ślad
- Dedukcja
- Przechwytywanie wyjątków
- Najlepsze praktyki debugowania wyjątków IOError
- Błędy i defekty
- Skąd się biorą defekty?
- Poprawny kod
- Najlepsze praktyki
- Rozdział 3 Błędy semantyczne w Pythonie
- Porównywanie rzeczywistych danych wyjściowych z oczekiwanymi
- Defekty
- Defekty przypisania zmiennych
- Wielokrotne inicjowanie
- Przypadkowe przypisanie
- Przypadkowe porównania
- Nieprawidłowe zmienne w wyrażeniu
- Przestawione literały w wyrażeniu
- Defekty indeksowania
- Tworzenie nieprawidłowych indeksów
- Użycie nieprawidłowych indeksów
- Defekty w instrukcjach przepływu sterowania
- Defekty w wyrażeniach logicznych
- Defekty związane z wcięciami
- Defekty w używaniu funkcji
- Pomijanie wywołania funkcji
- Brak instrukcji return
- Brak przechowywania zwracanej wartości
- Propagacja błędów
- Najlepsze praktyki
- Porównywanie rzeczywistych danych wyjściowych z oczekiwanymi
- Rozdział 4 Debugowanie metodą naukową
- Stosowanie metody naukowej
- Odtwarzanie błędu
- Automatyzowanie błędu
- Izolowanie defektu
- Strategia rozbierania
- Strategia wyszukiwania binarnego
- Uzyskiwanie pomocy
- Czas na przerwę
- Wyjaśnij problem komuś innemu
- Programowanie w parach
- Przeglądy kodu
- Czytanie
- Sprzątanie
- Metoda naukowa i inne najlepsze praktyki
- Najlepsze praktyki
- Rozdział 5 Debugowanie za pomocą instrukcji print
- Diagnozowanie, czy kod był uruchamiany
- Wyświetlanie zawartości zmiennych
- Estetyczne wyświetlanie struktur danych
- Upraszczanie danych wejściowych
- Zacznij od minimalnego wejścia
- Stopniowe dodawanie większej ilości danych wejściowych
- Włączanie i wyłączanie wyświetlania wyjścia
- Kompletny kod
- Plusy i minusy używania instrukcji print
- Najlepsze praktyki
- Rozdział 6 Debugowanie z funkcjami introspekcji
- Kodowanie eksploracyjne w IPythonie
- Eksploracja plików i katalogów
- Przegląd poleceń powłoki IPythona
- Odkrywanie przestrzeni nazw
- Eksploracja przestrzeni nazw za pomocą polecenia dir()
- Eksploracja przestrzeni nazw obiektów
- Eksploracja atrybutów w programie Pythona
- Alternatywy instrukcji dir w IPythonie
- Mechanika przestrzeni nazw
- Python używa przestrzeni nazw dla własnych funkcji
- Modyfikowanie przestrzeni nazw
- Przestrzenie nazw i zasięg lokalny
- Przestrzenie nazw są podstawową właściwością Pythona
- Używanie samodokumentujących się obiektów
- Dostęp do ciągów dokumentacyjnych za pomocą instrukcji help()
- Opisy obiektów w IPythonie
- Analizowanie typów obiektów
- Sprawdzanie tożsamości obiektu
- Sprawdzanie egzemplarzy i podklas
- Praktyczne wykorzystanie introspekcji
- Znajdowanie literówek za pomocą introspekcji
- Łączenie funkcji introspekcji
- Introspekcja w dużych i małych programach
- Najlepsze praktyki
- Kodowanie eksploracyjne w IPythonie
- Rozdział 7 Korzystanie z interaktywnego debugera
- Interaktywny debuger ipdb
- Instalowanie ipdb
- Uruchamianie debugera
- Uruchamianie ipdb z wiersza polecenia
- Uruchamianie ipdb z poziomu programu
- Debugowanie post mortem
- Uruchamianie debugera w odpowiedzi na wyjątki
- Naprawa defektu
- Komendy w wierszu poleceń debugera
- Inspekcja zmiennych
- Ocena wartości wyrażeń Pythona
- Krokowe uruchamianie kodu
- Wznawianie działania programu
- Używanie pułapek
- Przeglądanie i usuwanie pułapek
- Pułapki warunkowe
- Konfigurowanie ipdb
- Przykład sesji ipdb
- Dodawanie funkcji sterowania grą
- Krokowe uruchamianie kodu
- Usuwanie defektu
- To działa!
- Czy teraz program nie ma defektów?
- Inne narzędzia do debugowania
- pdb debuger Pythona
- Środowisko IDE PyCharm
- ipdbplugin
- pudb
- wdb
- Pasek narzędzi Django Debug
- cProfile
- Najlepsze praktyki
- Interaktywny debuger ipdb
- Część II Automatyczne testowanie
- Rozdział 8 Pisanie automatycznych testów
- Instalacja frameworka py.test
- Pisanie funkcji testowej
- Uruchamianie testów
- Pisanie testu, który nie przechodzi
- Spraw, aby test przeszedł
- Testy pomyślne a testy niepomyślne
- Pisanie oddzielnych funkcji testowych
- Asercje dostarczają przydatnych danych wyjściowych
- Testowanie występowania wyjątków
- Przypadki brzegowe
- Złożone przypadki brzegowe
- Korzyści wynikające z automatycznego testowania
- Inne frameworki testowe w Pythonie
- unittest
- nose
- doctest
- Pisanie bloku __main__
- Najlepsze praktyki
- Rozdział 9 Organizowanie danych testowych
- Używanie fikstur
- Parametr scope
- Parametryzacja testów
- Wiele parametrów
- Fikstury z parametrami
- Makiety
- Testowanie plików wynikowych
- Sprzątanie po testach
- Używanie plików tymczasowych
- Porównywanie plików wynikowych z danymi testowymi
- Moduł filecmp
- Moduł difflib
- Najlepsze praktyki testowania dużych plików
- Generowanie losowych danych testowych
- Gdzie przechowywać dane testowe?
- Moduły danych testowych
- Katalogi danych testowych
- Bazy danych testowych
- Najlepsze praktyki
- Używanie fikstur
- Rozdział 10 Pisanie zestawu testów
- Moduły testowe
- Klasy testów
- Refaktoryzacja funkcji testowych
- Fikstury w klasach testowych
- W jaki sposób testy znajdują testowany kod?
- Wiele pakietów testowych
- Automatyczne wykrywanie testów
- Uruchamianie zestawu testów
- Częściowe uruchomienie
- Uruchamianie modułów i pakietów testowych
- Uruchamianie klas testowych
- Uruchamianie pojedynczych testów
- Wybieranie testów za pomocą słów kluczowych
- Analiza testów zakończonych niepowodzeniem
- Ponowne uruchamianie testów
- Częściowe uruchomienie
- Obliczanie pokrycia testami
- Zestaw testów wymaga utrzymania
- Najlepsze praktyki
- Rozdział 11 Najlepsze praktyki testowania
- Rodzaje automatycznych testów
- Testy jednostkowe
- Testy integracyjne
- Testy akceptacyjne
- Testy regresji
- Testy wydajności
- Optymalizacja wydajności
- Podejście najpierw test
- Pisanie testów według specyfikacji
- Pisanie testów według defektów
- Rozwój oprogramowania sterowany testami (TDD)
- Zalety automatycznego testowania
- Testowanie oszczędza czas
- Testowanie dodaje precyzji
- Dzięki testowaniu współpraca staje się łatwiejsza
- Ograniczenia automatycznego testowania
- Testowanie wymaga sprawdzalnego kodu
- Testowanie nie działa dobrze w przypadku projektów, które szybko się zmieniają
- Testowanie nie udowadnia poprawności
- Programy trudne do testowania
- Liczby losowe
- Graficzne interfejsy użytkownika
- Dane wyjściowe złożone lub o dużej objętości
- Współbieżność
- Sytuacje, gdy automatyczne testy zawodzą
- Inne możliwości dla automatycznego testowania
- Tworzenie prototypów
- Przeglądy kodu
- Listy kontrolne
- Procesy promujące poprawność
- Wnioski
- Najlepsze praktyki
- Rodzaje automatycznych testów
- Część III Utrzymanie
- Rozdział 12 Kontrola wersji
- Wprowadzenie do pracy z systemem git
- Tworzenie repozytorium
- Dodawanie plików do repozytorium
- Śledzenie zmian w plikach
- Przenoszenie i usuwanie plików
- Odrzucanie zmian
- Przeglądanie historii kodu
- Pobieranie starszych commitów
- Powrót do najświeższego commita
- Publikowanie kodu w serwisie GitHub
- Rozpoczynanie projektu w serwisie GitHub
- Korzystanie z serwisu GitHub z pozycji pojedynczego programisty
- Praca w projektach rozpoczętych przez innych
- Projekty z wieloma programistami
- Scalanie zmian wprowadzonych przez dwie osoby
- Żądania pobrania
- Korzystanie z gałęzi
- Scalanie gałęzi
- Konfigurowanie systemu git
- Ignorowanie plików
- Ustawienia globalne
- Przykłady użycia
- Dwadzieścia znaków: mały projekt o małym ruchu
- Python: wielki projekt z codziennymi commitami
- grep: projekt długoterminowy
- Inne systemy kontroli wersji
- Mercurial
- Subversion (SVN)
- CVS (Concurrent Versions Software)
- Bitbucket
- Sourceforge
- Najlepsze praktyki
- Wprowadzenie do pracy z systemem git
- Rozdział 13 Konfigurowanie projektu w Pythonie
- Tworzenie struktury projektu za pomocą narzędzia pyscaffold
- Instalacja narzędzia pyscaffold
- Typowe katalogi w projekcie Pythona
- Katalogi utworzone przez pyscaffold
- Główny katalog pakietu Pythona
- Katalog tests/
- Katalog docs/
- Katalog .git/
- Katalogi nieutworzone przez pyscaffold
- Katalog bin/
- Katalogi build/, dist/ i sdist/
- Katalog .hg/
- Katalogi danych
- Katalogi utworzone przez pyscaffold
- Pliki
- Pliki utworzone przez pyscaffold
- README.rst
- setup.py
- AUTHORS.rst
- LICENSE.rst
- MANIFEST.in
- versioneer.py
- requirements.txt
- .coveragerc
- .gitattributes i .gitignore
- Pliki, które nie są tworzone przez pyscaffold
- Pliki utworzone przez pyscaffold
- Ustawianie numerów wersji programu
- Zarządzanie środowiskiem projektu Pythona za pomocą virtualenv
- Instalacja narzędzia virtualenv
- Podłączanie projektu do środowiska virtualenv
- Praca z projektem virtualenv
- Instalowanie pakietów w środowisku virtualenv
- Opuszczanie sesji środowiska virtualenv
- Konfigurowanie uruchamiania i dezaktywacji środowiska virtualenv
- Ustawienie zmiennej PYTHONPATH
- Instalowanie Pygame z virtualenv
- Najlepsze praktyki
- Tworzenie struktury projektu za pomocą narzędzia pyscaffold
- Rozdział 14 Porządkowanie kodu
- Kod zorganizowany i niezorganizowany
- Entropia oprogramowania: przyczyny niezorganizowanego kodu
- Jak rozpoznać niezorganizowany kod?
- Czytelność
- Niedoskonałości strukturalne
- Redundancja
- Słabości projektu
- Porządkowanie instrukcji Pythona
- Pogrupuj instrukcje importu
- Pogrupuj stałe
- Usuń niepotrzebne wiersze
- Zastosuj opisowe nazwy zmiennych
- Idiomatyczny kod Pythona
- Refaktoryzacja
- Wyodrębnianie funkcji
- Tworzenie prostego interfejsu wiersza polecenia
- Podział programów na moduły
- Uporządkowany kod
- PEP8 i pylint
- Komunikaty ostrzegawcze
- Ocena punktowa kodu
- Zrób tak, żeby działało, zrób to dobrze, zrób tak, żeby działało szybko
- Zrób tak, żeby działało
- Zrób to dobrze
- Zrób tak, żeby działało szybko
- Przykłady dobrze zorganizowanego kodu
- Najlepsze praktyki
- Kod zorganizowany i niezorganizowany
- Rozdział 15 Dekompozycja zadań programistycznych
- Dekompozycja zadań programowania jest trudna
- Proces dekompozycji zadań programowania
- Napisz historyjkę użytkownika
- Dodaj szczegóły do opisu
- Kryteria akceptacji
- Opisy przypadków użycia
- Sprawdź wymagania niefunkcjonalne
- Identyfikowanie problemów
- Niepełne informacje
- Wiedza specjalistyczna
- Zmiany istniejącego kodu
- Przewidywanie przyszłych zmian
- Wybór architektury
- Identyfikowanie komponentów programu
- Implementacja
- Inne narzędzia planowania
- Plan projektu na jednej stronie
- Śledzenie spraw
- Kanban
- Najlepsze praktyki
- Rozdział 16 Statyczne typowanie w języku Python
- Słabe strony dynamicznego typowania
- Sygnatury funkcji
- Granice wartości
- Semantyczne znaczenie typów
- Typy złożone
- Czy w Pythonie jest możliwe silniejsze typowanie?
- Asercje
- NumPy
- Bazy danych
- Integracja kodu w języku C
- Cython
- Wskazówki typowania
- mypy
- Której metody kontroli typów używać?
- Najlepsze praktyki
- Słabe strony dynamicznego typowania
- Rozdział 17 Dokumentacja
- Dla kogo piszemy dokumentację?
- Sphinx: narzędzie do tworzenia dokumentacji dla języka Python
- Konfigurowanie Sphinksa
- Pliki utworzone przez program Sphinx
- Tworzenie dokumentacji
- Budowanie dokumentacji HTML
- Budowanie dokumentacji PDF
- Budowanie dokumentacji EPUB
- Pisanie dokumentacji
- Dyrektywy
- Organizowanie dokumentów
- Przykłady kodu
- Generowanie dokumentacji na podstawie ciągów docstring
- Testy dokumentacji
- Konfigurowanie Sphinksa
- Wpisy Todo
- Tworzenie listy Todo
- Budowanie warunkowe
- Zmiana wyglądu i wrażenia
- Wpisy Todo
- Jak napisać dobrą dokumentację?
- Sekcje tekstu w dokumentacji technicznej
- Streszczenie
- Wymagania wstępne i instalacja
- Pierwsze kroki
- Receptury
- Studia przypadków
- Dokumentacja techniczna
- Dokumentacja projektowa
- Aspekty prawne
- Przykłady dobrej dokumentacji
- Sekcje tekstu w dokumentacji technicznej
- Inne narzędzia do tworzenia dokumentacji
- MkDocs
- Notatniki Jupyter
- GitBook
- Read the Docs
- pydoc
- S5
- pygments
- doctest
- PyPDF2
- pandoc
- Najlepsze praktyki