SPIS TREŚCI
3
C:\WINDOWS\Pulpit\Szymon\Niezawodność oprogramowania\!spistresci.doc
3
S
PIS TREŚCI
Przedmowa do wydania polskiego................................................................. 7
Wstęp
......................................................................................................... 13
Dwa najważniejsze pytania.......................................................................................................... 14
Nazewnictwo ............................................................................................................................... 15
Rozdział 1. Hipotetyczny kompilator........................................................... 19
Poznaj swój język programowania .............................................................................................. 21
Pożyteczne Narzędzie — Lint ..................................................................................................... 25
To tylko kosmetyczne zmiany ..................................................................................................... 25
Nigdy więcej błędów ................................................................................................................... 26
Rozdział 2. Sprawdzaj samego siebie ........................................................... 29
Przypowieść o dwóch wersjach ................................................................................................... 30
Asercje......................................................................................................................................... 31
„Niezdefiniowane” oznacza „nieprzewidywalne” ....................................................................... 34
Zagadkowe asercje ...................................................................................................................... 35
Kompatybilność kontrolowana .................................................................................................... 37
Gdy niemożliwe staje się możliwe .............................................................................................. 41
Nic o nas bez nas ......................................................................................................................... 43
Co dwa algorytmy, to nie jeden ................................................................................................... 46
Usuwaj błędy jak najwcześniej.................................................................................................... 50
Rozdział 3. Ufortyfikuj swoje podsystemy................................................... 57
Jest błąd, nie ma błędu................................................................................................................. 58
Zutylizuj swoje śmieci................................................................................................................. 60
Jestem już gdzie indziej ............................................................................................................... 64
Kontroluj wykorzystanie pamięci................................................................................................ 67
Spójrz na to, czego nie widać ...................................................................................................... 70
Wybieraj rozsądnie ...................................................................................................................... 74
Szybki czy bezbłędny .................................................................................................................. 75
Teraz lub później ......................................................................................................................... 75
4
NIEZAWODNOŚĆ OPROGRAMOWANIA
4
C:\WINDOWS\Pulpit\Szymon\Niezawodność oprogramowania\!spistresci.doc
Rozdział 4. Jak wykonuje się Twój kod ....................................................... 79
Uwiarygodnij swój kod ............................................................................................................... 80
Przetestuj wszystkie rozgałęzienia............................................................................................... 81
Żywotne znaczenie przepływu danych ........................................................................................ 83
Czy czegoś nie przeoczyłeś ......................................................................................................... 85
Spróbuj, a polubisz ...................................................................................................................... 86
Rozdział 5. Niekomunikatywne interfejsy ................................................... 89
getchar() zwraca liczbę, nie znak................................................................................................. 90
realloc() a gospodarka pamięcią .................................................................................................. 92
Uniwersalny menedżer pamięci................................................................................................... 94
Nieprecyzyjne parametry............................................................................................................. 96
Fałszywy alarm............................................................................................................................ 99
Czytanie pomiędzy wierszami ................................................................................................... 101
Ostrzegaj przed niebezpieczeństwem ........................................................................................ 103
Diabeł tkwi w szczegółach ........................................................................................................ 106
Rozdział 6. Ryzykowny biznes .................................................................... 109
int intowi nierówny.................................................................................................................... 110
Nadmiar i niedomiar.................................................................................................................. 114
„Projekt” czy „prawie projekt” .................................................................................................. 116
Po prostu robią, co do nich należy ............................................................................................. 118
Przecież to to samo .................................................................................................................... 122
?: to także if ............................................................................................................................... 123
Precz z redundancją ................................................................................................................... 126
Wysokie ryzyko, bez odwrotu ................................................................................................... 127
Przeklęta niespójność ................................................................................................................ 131
Nie przypisuj zmiennym informacji diagnostycznych............................................................... 133
Nie warto ryzykować................................................................................................................. 135
Rozdział 7. Dramaturgia rzemiosła............................................................ 139
Szybkość, szybkość ................................................................................................................... 140
Złodziej otwierający zamek kluczem nie przestaje być złodziejem........................................... 142
Każdemu według potrzeb .......................................................................................................... 144
Nie uzewnętrzniaj prywatnych informacji................................................................................. 146
Funkcje-pasożyty....................................................................................................................... 148
Programistyczne śrubokręty ...................................................................................................... 151
Syndrom APL............................................................................................................................ 153
Bez udziwnień, proszę............................................................................................................... 154
Na śmietnik z tymi wszystkimi trikami ..................................................................................... 156
Rozdział 8. Reszta jest kwestią nawyków .................................................. 161
Hokus-pokus, nie ma błędu ....................................................................................................... 161
Zrób dziś, co masz zrobić jutro.................................................................................................. 163
Doktora!!!.................................................................................................................................. 164
Jeśli działa, nie poprawiaj.......................................................................................................... 165
Funkcja z wozu, koniom lżej ..................................................................................................... 167
Elastyczność rodzi błędy ........................................................................................................... 167
Spróbuj ...................................................................................................................................... 169
Święty Harmonogram................................................................................................................ 170
„Tester” — nazwa w sam raz dla testera .................................................................................. 171
Programista zawinił, testera powiesili ....................................................................................... 173
Zdefiniuj swe priorytety ............................................................................................................ 174
SPIS TREŚCI
5
C:\WINDOWS\Pulpit\Szymon\Niezawodność oprogramowania\!spistresci.doc
5
Epilog ....................................................................................................... 179
Dodatek A. Lista kontrolna kodowania ..................................................... 181
Dodatek B. Podprogramy zarządzania pamięcią...................................... 187
Dodatek C. Odpowiedzi............................................................................... 195
6
NIEZAWODNOŚĆ OPROGRAMOWANIA
6
C:\WINDOWS\Pulpit\Szymon\Niezawodność oprogramowania\!spistresci.doc