Niezawodność oprogramowania - Steve Maguire.pdf

(2085 KB) Pobierz
www.pbtorrent.pl
SPIS TREŚCI
3
Spis 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
D:\Roboczy\Niezawodność oprogramowania\9 po skladzie 1\!spistresci.doc
3
8806316.001.png
SPIS TREŚCI
4
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
D:\Roboczy\Niezawodność oprogramowania\9 po skladzie 1\!spistresci.doc
4
SPIS TREŚCI
5
Programista zawinił, testera powiesili
173
Zdefiniuj swe priorytety
174
Epilog
179
Dodatek A. Lista kontrolna kodowania
181
Dodatek B. Podprogramy zarządzania pamięcią
187
Dodatek C. Odpowiedzi
195
D:\Roboczy\Niezawodność oprogramowania\9 po skladzie 1\!spistresci.doc
5
SPIS TREŚCI
6
D:\Roboczy\Niezawodność oprogramowania\9 po skladzie 1\!spistresci.doc
6
PRZEDMOWA DO WYDANIA POLSKIEGO
7
Przedmowa
do wydania polskiego
Z błędami programistycznymi jest trochę tak, jak z potworem z jeziora
Loch Ness — nikt go tak naprawdę nie widział, co wcale nie upoważnia do
kategorycznego wnioskowania o jego nieistnieniu; gdyby jednak komuś
udało się zaobserwować go choć raz (i oczywiście fakt ten
udokumentować), potwór przestałby być potworem, stając się kolejną
pozycją w hierarchii Regnum Zoa i nie wzbudzając odtąd żadnych
sensacji. Na tej samej zasadzie żaden program nie jest bezbłędny, nawet
jeżeli wydaje się być takowym z bardzo dużym prawdopodobieństwem,
bezspornie udowodnić można bowiem jedynie istnienie błędów, nigdy zaś
ich brak.
W przeciwieństwie do legendarnego potwora, błędy programistyczne
nie mają żadnego posmaku sensacji, za to niosą ze sobą całkiem realne
— i poważne — konsekwencje, w postaci straconego czasu, nadwerężonej
reputacji twórców oprogramowania, zmarnowanych pieniędzy, a nawet
nadszarpniętego zdrowia. Skoro więc zdecydowaliśmy się powierzyć
komputerom i informatyce najważniejsze z aspektów naszego życia
doczesnego, musimy jednocześnie wypracować rozwiązania chroniące nas
przed owymi konsekwencjami. Niewystarczające okazują się tu
rozwiązania oczywiste, jak wytężona uwaga programistów, szczególna
staranność w wykonywaniu pracy itp.; wszystko to rzecz jasna jest jak
najbardziej pożądane, lecz musi być dodatkowo wsparte stosowną
metodologią tworzenia oprogramowania. Klasyczne ujęcie algorytmiczne,
z rzeczywistym problemem na jednym biegunie, a sformalizowanym
opisem jego rozwiązania na drugim, musi być uzupełnione trzecim
elementem — owym demonem ludzkiej omylności, odciskającym swe
piętno na adekwatności wspomnianego opisu.
D:\Roboczy\Niezawodność oprogramowania\9 po skladzie 1\r00-1.doc
7
8806316.002.png
Zgłoś jeśli naruszono regulamin