Znajdz blad Sztuka analizowania kodu.pdf

(450 KB) Pobierz
IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI
KATALOG KSI¥¯EK
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
Znajd b³¹d. Sztuka
analizowania kodu
Autor: Adam Barr
T³umaczenie: Bart³omiej Garbacz
ISBN: 83-7361-855-4
Tytu³ orygina³u:
Find the Bug: A Book of Incorrect Programs
Format: B5, stron: 288
TWÓJ KOSZYK
DODAJ DO KOSZYKA
Wyszukiwanie b³êdów w kodzie to czynno æ, któr¹ programi ci wykonuj¹ niemal
równie czêsto, jak pisanie kodu. Narzêdzia do wykrywania i poprawiania b³êdów tylko
czê ciowo rozwi¹zuj¹ problem. W wielu przypadkach b³¹d nie tkwi w nieprawid³owo
sformu³owanym poleceniu lub le zdefiniowanej zmiennej, ale w miejscu, którego nawet
najlepsze narzêdzie nie znajdzie. Programista musi siê nauczyæ samemu broniæ przed
ukrytymi pomy³kami i nieprzyjemnymi niespodziankami. B³êdy trzeba znale æ, zanim
one znajd¹ nas.
Ksi¹¿ka „Znajd b³¹d. Sztuka analizowania kodu” to zbiór 50 programów napisanych
w jêzykach Perl, C, Java, Python i asembler x86. Ka¿dy z nich zawiera jeden, trudny
do znalezienia, ale jak najbardziej realistyczny b³¹d. Wykrycie go wymaga przewidzenia
sposobu, w jaki program bêdzie wykonywany, i prze ledzenia krok po kroku jego
dzia³ania. Ka¿dy przyk³ad opatrzony jest wskazówkami pomocnymi przy wyszukiwaniu
b³êdów. Ksi¹¿ka przedstawia sposoby analizowania programów i przewidywania miejsc,
w których mo¿e wyst¹piæ b³¹d.
• Klasyfikacja b³êdów
• Metody analizy kodu
• B³êdy w programach w jêzyku C
• Analiza aplikacji napisanych w jêzyku Python
• Wyszukiwanie b³êdów w programach w jêzyku Java
• Programy w jêzyku Perl i asembler x86
Wykonuj¹c zadania zawarte w tej ksi¹¿ce, nie tylko nauczysz siê odnajdywaæ b³êdy,
ale tak¿e udoskonalisz swoje umiejêtno ci w zakresie pisania aplikacji
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWO CIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
O Autorze ......................................................................................... 9
Wstęp ............................................................................................ 11
Rozdział 1. Klasyfikacja błędów ........................................................................ 17
Rozdział 2. Wskazówki dotyczące analizy kodu ................................................. 19
Podział kodu na sekcje o określonych celach działania .................................................. 20
Identyfikacja sekcji w kodzie ................................................................................... 21
Identyfikacja celów działania ka dej sekcji ............................................................. 22
Komentarze .............................................................................................................. 23
Identyfikacja znaczenia ka dej zmiennej ....................................................................... 24
Nazwy zmiennych .................................................................................................... 24
Określenie sposobów u ycia ka dej zmiennej ......................................................... 24
Zmienne ograniczone ............................................................................................... 26
Warunki niezmiennicze ............................................................................................ 27
Śledzenie zmian zmiennych ograniczonych ............................................................. 28
Wyszukanie znanych pułapek ........................................................................................ 28
Liczniki pętli ............................................................................................................ 28
Wyra enia występujące po lewej oraz po prawej stronie instrukcji przypisania ........ 30
Sprawdzenie operacji sprzę onych ........................................................................... 30
Wywołania funkcji ................................................................................................... 31
Wartości zwracane ................................................................................................... 32
Kod podobny do istniejącego błędu ......................................................................... 33
Wybór danych wejściowych dla celów analizy działania ............................................... 33
Pokrycie kodu .......................................................................................................... 35
Puste dane wejściowe ............................................................................................... 36
Banalne dane wejściowe .......................................................................................... 37
Gotowe dane wejściowe ........................................................................................... 38
Błędne dane wejściowe ............................................................................................ 38
Pętle ......................................................................................................................... 39
Liczby losowe .......................................................................................................... 39
Analiza działania ka dej sekcji kodu .............................................................................. 40
Śledzenie wartości zmiennych ................................................................................. 41
Układ kodu ............................................................................................................... 41
Pętle ......................................................................................................................... 43
Podsumowanie ............................................................................................................... 44
6
Spis treści
Rozdział 3. C .................................................................................................... 45
Krótkie omówienie języka C .......................................................................................... 45
Typy danych i zmienne ............................................................................................ 45
Ciągi znaków ............................................................................................................ 47
Wskaźniki ................................................................................................................ 47
Struktury .................................................................................................................. 48
Instrukcje warunkowe .............................................................................................. 49
Pętle ......................................................................................................................... 50
Funkcje ..................................................................................................................... 51
Sortowanie przez wybieranie .......................................................................................... 51
Wstawianie pozycji na liście jednokierunkowej ............................................................. 54
Usuwanie pozycji z listy jednokierunkowej ................................................................... 57
Kopiowanie obszaru pamięci .......................................................................................... 60
Rozkład ciągu znaków na podciągi ................................................................................ 63
Mechanizm przydzielania pamięci ................................................................................. 66
Zwalnianie pamięci ........................................................................................................ 69
Rekurencyjne odwracanie zdania ................................................................................... 72
Określanie wszystkich mo liwych tras ........................................................................... 76
Znak cofania w alfabecie Kanji ...................................................................................... 78
Rozdział 4. Python ........................................................................................... 83
Krótkie omówienie języka Python ................................................................................. 83
Typy danych i zmienne ............................................................................................ 83
Ciągi znaków ............................................................................................................ 84
Listy i krotki ............................................................................................................. 85
Słowniki ................................................................................................................... 87
Instrukcje warunkowe .............................................................................................. 88
Pętle ......................................................................................................................... 88
Funkcje ..................................................................................................................... 89
Klasy ........................................................................................................................ 89
Wyjątki ..................................................................................................................... 90
Importowanie kodu .................................................................................................. 91
Dane wyjściowe ....................................................................................................... 91
Określanie liczby pierwszej ............................................................................................ 91
Znajdowanie podciągu ................................................................................................... 93
Sortowanie alfabetyczne wyrazów ................................................................................. 95
Kodowanie ciągów znaków za pomocą tablicy znaków ................................................. 97
Wyświetlanie miesiąca i dnia ....................................................................................... 100
Gra „Go Fish”, część I: pobieranie karty z talii ............................................................ 102
Gra „Go Fish”, część II: sprawdzenie posiadania karty przez drugą rękę .................... 105
Gra „Go Fish”, część III: pełna gra .............................................................................. 108
Analiza składniowa liczb zapisanych w języku angielskim .......................................... 112
Przypisywanie prezentów do obdarowywanych ........................................................... 115
Rozdział 5. Java ............................................................................................. 119
Krótkie omówienie języka Java .................................................................................... 119
Typy danych i zmienne .......................................................................................... 119
Ciągi znaków (i obiekty) ........................................................................................ 120
Tablice .................................................................................................................... 122
Instrukcje warunkowe ............................................................................................ 124
Pętle ....................................................................................................................... 124
Klasy ...................................................................................................................... 125
Wyjątki ................................................................................................................... 127
Importowanie kodu ................................................................................................ 128
Aplikacje wiersza poleceń i aplety ......................................................................... 129
Spis treści
7
Określanie roku przestępnego ...................................................................................... 129
Konwersja liczby na tekst ............................................................................................. 132
Rysowanie trójkąta na ekranie, część I ......................................................................... 135
Rysowanie trójkąta na ekranie, część II ........................................................................ 139
Odwracanie listy jednokierunkowej ............................................................................. 141
Sprawdzenie, czy lista zawiera pętlę ............................................................................ 143
Sortowanie szybkie ....................................................................................................... 146
Gra Pong, część I .......................................................................................................... 149
Gra Pong, część II ........................................................................................................ 153
Obliczanie wyników w grze w kręgle ............................................................................ 156
Rozdział 6. Perl .............................................................................................. 161
Krótkie omówienie języka Perl .................................................................................... 161
Typy danych i zmienne .......................................................................................... 161
Ciągi znaków .......................................................................................................... 162
Listy ....................................................................................................................... 163
Skróty ..................................................................................................................... 165
Warunki logiczne ................................................................................................... 165
Pętle ....................................................................................................................... 167
Podprogramy .......................................................................................................... 168
Kontekst skalarny i listowy .................................................................................... 168
Uchwyty plików ..................................................................................................... 169
Wyra enia regularne .............................................................................................. 170
Dane wyjściowe ..................................................................................................... 171
Parametry wywołania z wiersza poleceń ................................................................ 171
Sortowanie pliku według długości wierszy .................................................................. 172
Wyświetlanie czynników pierwszych liczby ................................................................ 174
Rozwijanie znaków tabulacji ........................................................................................ 176
Prosta baza danych ....................................................................................................... 178
Znajdowanie powtarzającej się części ułamka .............................................................. 181
Rozszerzanie listy plików z wcięciami na pełne ście ki dostępu ................................. 183
Sortowanie wszystkich plików w drzewie struktury katalogów ................................... 186
Obliczanie średnich ocen z testów ................................................................................ 189
Sortowanie przez scalanie wielu plików ....................................................................... 192
Gra Mastermind ............................................................................................................ 195
Rozdział 7. Język asemblera x86 .................................................................... 201
Krótkie omówienie języka asemblera x86 .................................................................... 201
Typy danych i zmienne .......................................................................................... 201
Operacje arytmetyczne ........................................................................................... 204
Znaczniki, warunki i skoki ..................................................................................... 206
Pętle ....................................................................................................................... 208
Procedury ............................................................................................................... 210
Wyjście .................................................................................................................. 213
Reszta z dolara ............................................................................................................. 213
Mno enie dwóch liczb przy u yciu operacji przesunięcia ............................................ 215
Złączanie ciągów znaków z separatorem ...................................................................... 217
Obliczanie wartości ciągu Fibonacciego ...................................................................... 220
Sprawdzanie, czy dwa wyrazy są anagramami ............................................................. 222
Konwersja 64-bitowej liczby na ciąg znaków z jej zapisem dziesiętnym ..................... 226
Suma wartości w tablicy liczb ze znakiem ................................................................... 230
Gra symulacyjna ycie ................................................................................................. 234
Sprawdzenie dopasowania nawiasów w kodzie źródłowym ......................................... 238
Sortowanie przez zamianę w podstawie ....................................................................... 242
8
Spis treści
Dodatek A Klasyfikacja błędów ...................................................................... 247
Składnia a semantyka ................................................................................................... 248
Klasyfikacja u ywana w ksią ce .................................................................................. 249
A — Algorytm ............................................................................................................. 251
A.przesunięcie-o-jeden ........................................................................................... 251
A.logika .................................................................................................................. 252
A.walidacja ............................................................................................................ 253
A.wydajność ........................................................................................................... 255
D — Dane .................................................................................................................... 255
D.indeks ................................................................................................................. 255
D.limit .................................................................................................................... 256
D.liczba .................................................................................................................. 257
D.pamięć ................................................................................................................ 259
Z — Zapomniane ......................................................................................................... 261
Z.inicjalizacja ......................................................................................................... 261
Z.pominięcie .......................................................................................................... 262
Z.lokalizacja ........................................................................................................... 263
P — Pomyłka ............................................................................................................... 264
P.zmienna ............................................................................................................... 264
P.wyra enie ............................................................................................................ 265
P.język .................................................................................................................... 266
Podsumowanie ............................................................................................................. 267
Dodatek B Indeks błędów według typu ........................................................... 269
Dodatek C Materiały źródłowe ........................................................................ 273
Klasyfikacja błędów ..................................................................................................... 273
Ogólne pozycje poświęcone typom błędów ................................................................. 274
C ................................................................................................................................... 274
Python .......................................................................................................................... 275
Java ............................................................................................................................... 275
Perl ............................................................................................................................... 275
Język asemblera x86 ..................................................................................................... 275
Skorowidz ..................................................................................... 277
Zgłoś jeśli naruszono regulamin