Code complete:
Gespeichert in:
1. Verfasser: | |
---|---|
Format: | Buch |
Sprache: | German English |
Veröffentlicht: |
Unterschleißheim
Microsoft Press
2005
|
Ausgabe: | Dt. Ausg. der 2. ed. |
Schlagworte: | |
Online-Zugang: | Inhaltsverzeichnis |
Beschreibung: | XXXIII, 909 S. Ill. |
ISBN: | 386063593X |
Internformat
MARC
LEADER | 00000nam a2200000zc 4500 | ||
---|---|---|---|
001 | BV021994385 | ||
003 | DE-604 | ||
005 | 20120615 | ||
007 | t | ||
008 | 060329s2005 a||| |||| 00||| ger d | ||
020 | |a 386063593X |9 3-86063-593-X | ||
035 | |a (OCoLC)76641025 | ||
035 | |a (DE-599)BVBBV021994385 | ||
040 | |a DE-604 |b ger | ||
041 | 1 | |a ger |h eng | |
049 | |a DE-706 |a DE-526 |a DE-859 | ||
082 | 0 | |a 004 | |
084 | |a ST 230 |0 (DE-625)143617: |2 rvk | ||
100 | 1 | |a McConnell, Steve |d 1962- |e Verfasser |0 (DE-588)129940798 |4 aut | |
245 | 1 | 0 | |a Code complete |c Steve McConnell |
250 | |a Dt. Ausg. der 2. ed. | ||
264 | 1 | |a Unterschleißheim |b Microsoft Press |c 2005 | |
300 | |a XXXIII, 909 S. |b Ill. | ||
336 | |b txt |2 rdacontent | ||
337 | |b n |2 rdamedia | ||
338 | |b nc |2 rdacarrier | ||
650 | 0 | 7 | |a Strukturierte Programmierung |0 (DE-588)4058133-0 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Software Engineering |0 (DE-588)4116521-4 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Softwareentwicklung |0 (DE-588)4116522-6 |2 gnd |9 rswk-swf |
689 | 0 | 0 | |a Software Engineering |0 (DE-588)4116521-4 |D s |
689 | 0 | |5 DE-604 | |
689 | 1 | 0 | |a Softwareentwicklung |0 (DE-588)4116522-6 |D s |
689 | 1 | 1 | |a Strukturierte Programmierung |0 (DE-588)4058133-0 |D s |
689 | 1 | |8 1\p |5 DE-604 | |
856 | 4 | 2 | |m HBZ Datenaustausch |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=015209093&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
999 | |a oai:aleph.bib-bvb.de:BVB01-015209093 | ||
883 | 1 | |8 1\p |a cgwrk |d 20201028 |q DE-101 |u https://d-nb.info/provenance/plan#cgwrk |
Datensatz im Suchindex
_version_ | 1804135970085273600 |
---|---|
adam_text | Titel: Code complete
Autor: McConnell, Steve
Jahr: 2005
VII
Inhaltsverzeichnis
Vorwort .................................................. XXV
An wen wendet sich dieses Buch?........................... XXV
Wo konnen Sie solche Informationen sonst finden?.............XXVI
Was durfen Sie von diesem Buch erwarten?.................. XXVII
Warum dieses Buch geschrieben wurde......................XXIX
Kritik und Anregungen .................................. XXX
Technischer Support.....................................XXXI
Danksagungen ............................................ XXXII
Teill Das Gieftendes Fundaments.................................... 1
Kapitel 1 Willkommen auf der Softwarebaustelle................................................................3
1.1 Was bedeutet »Software bauen«? ............................................................3
1.2 Warum ist der Bauabschnitt wichtig?......................................................6
1.3 Wie Sie dieses Buch lesen sollten ............................................................7
Zusammenfassung ..........................................................................................7
Kapitel 2 Metaphern als Hilfsmittel fiir die Softwareentwicklung ........................................9
2.1 Die Bedeutung von Metaphern..............................................................10
2.2 Das Verwenden von Softwaremetaphern ..............................................12
2.3 Gebrauchliche Softwaremetaphern........................................................13
Der Software-Autor: Quelltext schreiben..............................................13
Der Landwirt: Software anbauen ..........................................................15
Austernzucht: Das wachsende System....................................................16
Ein Haus errichten: Software bauen......................................................17
Softwaretechniken: Der geistige Werkzeugkasten..................................20
Metaphern kombinieren........................................................................20
Weiterfuhrende Literatur ..............................................................................21
Zusammenfassung ........................................................................................21
Kapitel 3 Zweimal messen, einmal sagen: Vorbereitung beim Softwarebau ........................23
3.1 Die Bedeutung guter Vorbereitung........................................................24
Ist fur moderne Softwareprojekte Vorbereitung erforderlich?................24
Ursachen fiir ungeniigende Vorbereitung..............................................25
Pladoyer fur eine griindliche Vorbereitung............................................27
3.2 Einordnen eines Softwareprojekts ........................................................30
Vorbereitung bei iterativen Verfahren....................................................32
Wahlen zwischen iterativen und sequentiellen Ansatzen ......................34
3.3 Die Problemdefinition..........................................................................35
3.4 Die Anforderungen ..............................................................................37
Wozu formelle Anforderungen?..............-.......-..............37
Der Mythos von felsenfesten Anforderungen........................................38
Anderungen von Anforderungen wahrend des Baus..............................39
VIII Inhaltsverzeichnis
________42
3.5 Die Architektur ..............................................................43
Typische Komponenten der Architektur................................................^
3.6 Zeitbedarf fiir die ........................................................................^
Weiterfiihrende Literatur .......................................
Zusammenfassung ........................................
Kapitel 4 SchlusselentscheidungenfiirdenBau................................
4.1 Auswahlen der Programmiersprache.......................... ^
Sprachbeschreibungen.....................................
4.2 Konventionen fiir die Programmierung........................
4.3 Ihr Platz auf der Technologiewelle............................ 67
Beispiel fur das Programmieren in eine Sprache.................. 68
4.4 Auswahlen von zentralen .................................... 69
Zusammenfassung ............................................ 7^
Teil II Erstellen von qualitativ hochwertigem Code...................... 73
Kapitel 5 Entwurf beim Bau.............................................. 75
5.1 Herausforderungen beim Entwurf........................................................76
Entwurf ist ein verzwicktes Problem......................................................76
Entwurf ist ein schludriger Prozess (auch wenn das Ergebnis stimmt) . 77
Beim Entwurf geht es urn Kompromisse und Prioritaten......................78
Der Entwurf erfordert Beschrankungen................................................78
Entwurf ist nicht deterministisch..........................................................78
Der Entwurf als heuristischer Prozess ..................................................78
Der Entwurf entwickelt sich evolutionar ..............................................79
5.2 Schliisselkonzepte fiir den Entwurf ......................................................79
Das primare Ziel: Zahmen der Komplexitat..........................................79
Wunschenswerte Merkmale eines Entwurfs..........................................82
Entwurfsstufen......................................................................................84
5.3 Bausteine entwerfen: Heuristik..............................................................89
Reale Objekte........................................................................................90
Konsistente Abstraktionen....................................................................91
Kapseln von Implementierungsdetails ..................................................93
Wann Vererbung den Entwurf vereinfacht............................................93
Verbergen von Informationen ..............................................................94
Identifizieren von Bereichen, die sich wahrscheinlich andern..............100
Lose Kopplung................................................................................103
Entwurfsmuster............................................................................106
Andere heuristische Verfahren............................................................109
Zusammenfassung der heuristischen Entwurfsverfahren....................112
Richtlinien zum Einsatz heuristischer Verfahren ................................112
5.4 Entwurfstechniken..................................................H4
Iteration......................................................^4
Teile und herrsche...................
..............................115
Top-Down- und Bottom-Up-Entwurfsansatze
Inhaltsverzeichnis IX
Experimentelle Prototypen..................................................................118
Teamwork beim Entwurf....................................................................119
Wie viel Entwurf ist genug? ................................................................120
Dokumentieren des Entwurfs..............................................................121
5.5 Anmerkungen zu verbreiteten Methoden............................................123
Weiterfuhrende Literatur ............................................................................124
Grundlagen des Softwareentwurfs ......................................................124
Theorie des Softwareentwurfs ............................................................125
Entwurfsmuster..................................................................................125
Allgemeiner Entwurf..........................................................................125
Standards............................................................................................126
Zusammenfassung ......................................................................................127
Kapltel 6 VomUmgangmitderArbeiterklasse................................................................129
6.1 Grundlagen fur Klassen: abstrakte Datentypen....................................130
Wann benotigen Sie einen abstrakten Datentyp? Ein Beispiel..............130
Die Vorteile abstrakter Datentypen......................................................131
Weitere Beispiele fur ADTs..................................................................133
Mehrfache Dateninstanzen mit ADTs auch auBerhalb
objektorientierter Umgebungen..........................................................135
ADTs und Klassen....................................... 137
6.2 Gute Klassenschnittstellen................................. 137
Gute Abstraktionen ...................................... 137
Gute Kapselung ......................................... 143
6.3 Entwurfs- und Implementierungsfragen....................... 148
Einbettung (»Hat ein«-Beziehungen)......................... 148
Vererbung (»Ist ein«-Beziehungen) .......................... 149
Memberfunktionen und-daten ............................. 155
Konstruktoren.......................................... 156
6.4 Griinde fur das Erstellen einer Klasse......................... 158
Klassen, die Sie vermeiden sollten ......................................................161
Zusammenfassung der Griinde fur das Erstellen einer Klasse..............162
6.5 Sprachspezifische Unterschiede ..........................................................162
6.6 Jenseits von Klassen: Pakete................................................................163
Weiterfuhrende Literatur ............................................................................165
Zusammenfassung ......................................................................................166
Kapitel 7 QuaiitatsmerkmaleguterRoutinen..................................................................167
7.1 Griinde fur das Erstellen von Routinen ..............................................170
Operationen, die fur eine eigene Routine zu einfach erscheinen..........172
Zusammenfassung der Griinde fur das Erstellen einer Routine ..........173
7.2 Entwurf auf der Routinenebene..........................................................174
7.3 Gute Routinennamen..........................................................................177
7.4 Wie lang darf eine Routine sein? ........................................................179
7.5 Routinenparameter ............................................................................181
X Inhaltsverzeichnis
7.6 Besonderheiten beim Einsatz von Funktionen..................
Sollten Sie eine Funktion oder eine Prozedur verwenden?.........
Zuriickgeben des Ergebniswerts bei Funktionen..................................1®®
7.7 Makro- und Inlineroutinen ................................
Alternativen zum Einsatz von Makroroutinen ....................................l9^
Inlineroutinen ..........................................
192
Zusammenfassung ...........................................
1QC
Kapitel 8 Defensive ....................................................
8.1 Schutz vor ungultigen Eingabedaten....................................................196
8.2 Sicherheitsabfragen ............................................................................197
Einen eigenen Mechanismus fur Sicherheitsabfragen erstellen............199
Richtlinien fur den Einsatz von Sicherheitsabfragen............................199
8.3 Techniken fur die Fehlerbehandlung ..................................................202
Robustheit und Korrektheit................................................................205
Beriicksichtigen der Fehlerbehandlung im Entwurf............................206
8.4 Ausnahmen........................................................................................206
8.5 Dammen Sie die Auswirkungen von Fehlern ein ................................212
Die Beziehung zwischen Barrikaden und Sicherheitsabfragen ............214
8.6 Fehlersuchhilfen..................................................................................214
Fur die Entwicklungsversion gelten kaum Einschrankungen ..............214
Fehlersuchhilfen - von Anfang an ......................................................215
Angriff ist die beste Verteidigung: Offensive Programmierung............215
Das Entfernen der Fehlersuchhilfen einplanen....................................216
8.7 Wie viel defensive Programmierung soli in der fertigen Version
verbleiben?..........................................................................................218
8.8 Vorsicht bei der defensiven Programmierung!...........................220
Weiterfiihrende Literatur ............................................................................221
Zusammenfassung ......................................................................................222
Kapitel9 Pseudocode-Programmierung .....................................................................223
9.1 Bauphasen fur Klassen und Routinen..................................................223
Schritte beim Bauen einer Klasse ...................................................224
Schritte beim Bauen einer Routine......................................................225
9.2 Pseudocode fur Profis ...............................................225
9.3 Bauen von Routinen mithilfe des PPP ..........................................228
Entwerfen der Routine..............................................................228
Schreiben des Codes........................................................233
Oberpriifen des Quelltextes ..................................................238
Aufraumarbeiten........................................................240
Wiederholen Sie notigenfalls einzelne Schritte....................................241
9.4 Alternativen zum PPP ........................................241
Zusammenfassung ........................
Inhaltsverzeichnis XI
Teil III Variablen....................................................................................................245
Kapitel 10 DerEinsatz von Variablen................................................................................247
10.1 Kleine Datenkunde..............................................................................248
Datentypen - der Wissenstest..............................................................248
Weiterfuhrende Literatur zu Datentypen ............................................249
10.2 Variablendeklarationen vereinfachen..................................................249
Implizite Deklarationen......................................................................249
10.3 Richtlinien fur das Initialisieren von Variablen....................................250
10.4 Der Giiltigkeitsbereich........................................................................254
Referenzen auf Variablen lokalisieren..................................................254
Nur eine tote Variable ist eine gute Variable: Halten Sie die
Lebensdauer von Variablen so kurz wie moglich ................................255
Allgemeine Richtlinien zum Verkleinern des Gultigkeitsbereichs .... 258
Anmerkungen zum Verkleinern des Gultigkeitsbereichs......................260
10.5 Persistenz............................................................................................261
10.6 Zeitpunkt der Bindung........................................................................262
10.7 Beziehungen zwischen Datentypen und Steuerstrukturen ..................263
10.8 Variablen nur fur einen einzigen Zweck verwenden............................265
Zusammenfassung ......................................................................................267
Kapitel 11 DieMachtguterVariablennamen....................................................................269
11.1 Was ist ein guter Name?......................................................................269
Das Wichtigste zuerst..........................................................................270
Ausrichtung auf das Problem..............................................................271
Optimale Lange von Namen................................................................272
Der Einfluss des Gultigkeitsbereichs auf Variablennamen....................272
Variablennamen, die fur berechnete Werte stehen ..............................273
Gegensatzpaare in Variablennamen ....................................................274
11.2 Namen fiir bestimmte Datentypen......................................................274
Namen fur Schleifenindexe ................................................................274
Namen fur Statusvariablen................................. 276
Namen fur temporare Variablen............................. 277
Namen fur boolesche Variablen............................. 278
Namen fiir Aufzahlungstypen............................... 279
Namen fiir Konstanten.................................... 280
11.3 Die Vorteile von Namenskonventionen........................ 280
Konventionen - wozu?.................................... 280
Wann brauchen Sie eine Namenskonvention?................... 281
Stufen der Formalitat..................................... 281
11.4 Informelle Namenskonventionen............................ 282
Richtlinien fiir sprachunabhangige Konventionen ............... 282
Richtlinien fur sprachabhangige Konventionen ................. 285
Mischen von Programmiersprachen.......................... 286
Beispiele fiir Namenskonventionen .......................... 287
11.5 Standardisierte Prafixe.................................... 289
Abkiirzungen fur benutzerdefinierte Typen.................... 289
XII Inhaltsverzeichnis
Semantikprafixe..................................................................................290
Vorziige von standardisierten Praflxen................................................291
11.6 Kurze, lesbare Namen..........................................................................292
Allgemeine Richtlinien fiir Abkiirzungen............................................292
Phonetische Abkurzungen ..................................................................292
Einige Anmerkungen zu Abkurzungen................................................293
11.7 Schlechte Namen................................................................................295
Zusammenfassung ......................................................................................299
Kapitel 12 Grundlegende Datentypen..............................................................................301
12.1 Grundlegendes zu Zahlen ..................................................................301
12.2 Integer................................................................................................303
12.3 Gleitkommazahlen..............................................................................305
12.4 Zeichen und Strings............................................................................307
Strings in C ........................................................................................309
12.5 Boolesche Variablen............................................................................311
12.6 Aufzahlungstypen ..............................................................................312
Was aber, wenn Ihre Sprache keine Aufzahlungstypen kennt?..............316
12.7 Benannte Konstanten...................................................................317
12.8 Arrays ................................................................................................319
12.9 Erstellen eigener Typen ......................................................................321
Warum sind die Beispiele fiir selbstdefmierte Typen in Pascal
und Ada geschrieben? ........................................................................324
Richtlinien fiir das Erstellen selbstdefinierter Typen............................324
Zusammenfassung ......................................................................................327
Kapitel 13 Ungewdhnliche Datentypen............................................................................329
13.1 Strukturen..........................................................................................329
13.2 Zeiger..................................................................................................333
Die Funktionsweise von Zeigern ........................................................333
Allgemeine Hinweise zu Zeigern ........................................................335
Zeiger in C++......................................................................................343
Zeiger in C..........................................................................................344
13.3 Globale Daten ....................................................................................345
Haufige Probleme mit globalen Daten ................................................346
Einsatzzwecke fiir globale Daten ........................................................348
Benutzen Sie globale Daten nur als letzte Moglichkeit ........................349
Zugriffsroutinen anstelle globaler Daten ............................................350
Vermindern der mit globalen Variablen verbundenen Risiken............353
Weiterfiihrende Literatur ............................................................................354
Zusammenfassung ......................................................................................355
yej|IV Anweisungen ............................................................................................357
Kapitel 14 SequentiellerAblauf......................................................................................359
14.1 Anweisungen mit zwingender Reihenfolge..........................................359
14.2 Anweisungen, deren Reihenfolge keine Rolle spielt..............................362
XIII
363
364
365
367
367
367
370
373
373
374
378
379
379
380
381
384
384
384
385
387
388
393
394
396
397
399
401
403
403
405
406
408
410
410
411
412
413
418
420
421
421
423
Quelltext von oben nach unten lesen.............
Verwandte Anweisungen zusammenfassen.........
Zusammenfassung ...............................
Bedingungsausdriicke..............................
15.1 if-Anweisungen .............................
Einfache i/-l/ien-Anweisungen..................
if-then-else-Ketten ...........................
15.2 case-Anweisungen ...........................
Die sinnvollste Fallreihenfolge..................
Tipps fur den Einsatz von cnse-Anweisungen.......
Zusammenfassung ...............................
Schleifensteuerung................................
16.1 Auswahlen des Schleifentyps ...................
Einsatzzwecke fur while-Schleifen ...............
Einsatzzwecke fur Schleifen mit Exif-Anweisung ....
Einsatzzwecke fur/or-Schleifen .................
Einsatzzwecke furforeach-Schleifen..............
16.2 Steuern der Schleife..........................
Einsprung in die Schleife......................
Die Schleifenmitte...........................
Verlassen der Schleife.........................
Oberprtifen der Endpunkte ....................
Schleifenindexe .............................
Wie lang sollte eine Schleife sein?................
16.3 Schleifen einfach von innen nach aufien anlegen ....
16.4 Zusammenhange zwischen Schleifen und Arrays
Zusammenfassung ...............................
Ungewohniiche Steueranweisungen....................
17.1 Mehrere Rtickkehranweisungen in einer Routine----
17.2 Rekursion..................................
Ein Beispiel fur Rekursion .....................
Tipps fur den Einsatz der Rekursion..............
17.3 goto ......................................
Was spricht gegen goto7. .......................
Was spricht fur goto7. .........................
Dieser Glaubenskrieg ist sinnlos.................
Fehlerbehandlung und goto ....................
goto und gemeinsam genutzter Code im else-Zweig . .
Zusammenfassung der Richtlinien fur den Einsatz von
goto-Anweisungen...........................
17.4 Bewertung der ungewohnlichen Steuerstrukturen . . .
Weiterfuhrende Literatur ..........................
Zusammenfassung ...............................
XIV Jnhalrsverzefchnfc
Kapitef 18 Tabeffengesteuerte Methoden..............................V ???
18.1 AUgemeine Oberlegungen zum Einsatz tabellerigesteuerter Methoden 425
Voraussetzungen fur den Einsatz tabellengesteuerter Methoden..... 426
18.2 Direkter Zugriff.........................................
Ein Beispiel: Anzahl der Tage pro Monat ............................................427
Beispiel: Versicherungsbeitrage ..........................................................428
Beispiel fiir ein flexibles Nachrichtenformat.........................430
Konstruieren eines Suchschliissels ...................................................437
18.3 Indizierter Zugriff.....................•.....*......................438
18.4 Stufenweiser Zugriff............................................................................440
18.5 Andere Beispiele fiir die Tabellensuche................................................442
Zusammenfassung ......................................................................................443
Kapitef 19 AUgemeine Gesichtspunkte der Abfaufsteuerung..............................................445
19.1 Boolesche Ausdriicke..........................................................................445
true und false in booleschen, Abfragen ................................................445
Vereinfachen komplizierter Ausdrucke................................................447
Formulieren Sie boolesche Ausdrucke positiv......................................449
Boolesche Ausdrucke durch Klammern strukturieren ........................450
So werden boolesche Ausdrucke ausgewertet......................................452
Schreiben Sie numerische Vergleiche im Sitirt der Zahfengeraden . . . 453
Richtlinien fiir den Vergleich mit 0......................................................454
Haufige Probleme mit booleschen Ausdrucken ..................................455
19.2 Verbundanweisungen (Blocke)............................................................456
19.3 Null-Anweisungen..............................................................................457
19.4 Tiefe Verschachtelungen beherrschen.......................................458
Zusammenfassung: Techniken zum Aufldsen tiefer Verschachtelung . 467
19.5 Sirukturierte Programmierung............................................................467
Die drei Komponenten der strukturierten Programmierung................468
19.6 Steuerstrukturen und Komplexitat.....................................470
Welche Bedeutung hat die Komplexitat?................. ..........470
AUgemeine Rjchtlinien fur das Verringern der Komplexitat................473
Andere Arten von Komplexitat..............................472
Zusammenfassung ...............................................
Tell V Verbessern des Programmcodes..............................................................475
Kapitel 20 Die Qualitat der Software................................................................................477
20.1 Merkmale der Softwarequalitat............................................477
20.2 Techniken zur Verbesserung der Softwarequalitat ....................480
Der Entwicklungsprozess .................................................................481
Zielsetzung ..................................................................482
20.3 Relative Effektivitat der Techniken.............................................483
Prozentsatz der gefundenen Fehler......................................................483
Kosten der Fehlersuche ..........................................................485
Kosten der Fehlerbeseitigung..........................................485
Inhaltsverzeichnis XV
20.4 Zeitpunkt fur die Qualitatssicherung..................................................486
20.5 Das Grundprinzip der Softwarequalitat..............................................487
Weiterfiihrende Literatur ............................................................................489
Wichtige Standards ............................................................................489
Zusammenfassung ......................................................................................490
Kapitel21 TeamworkbeimBau ...............................................491
21.1 Teamworkentwicklungsverfahren.............................................491
Teamwork beim Bau erganzt andere Techniken der
Qualitatssicherung .......................................................492
Teamwork beim Bau verbreitet Firmenkultur und
Programmiererfahrung ......................................................................494
Gemeinsame Verantwortung betrifft alle Arten des
Teamworks beim Bau..........................................................................494
Teamwork hilft vor und nach dem Bau................................................495
21.2 Paarprogrammierung..........................................................................495
Faktoren fur erfolgreiche Paarprogrammierung..................................495
Vorteile der Paarprogrammierung......................................................496
21.3 Formelle Inspektionen........................................................................497
Welche Ergebnisse konnen Sie von Inspektionen erwarten?................497
Die Rollen bei der Inspektion..............................................................498
Prinzipieller Ablauf einer Inspektion ..................................................499
Das Ego und die Inspektion................................................................502
Inspektionen bei diesem Buch ............................................................503
Zusammenfassung zum Thema Inspektionen......................................503
21.4 Andere Teamworktechniken................................................................504
Walk-throughs....................................................................................504
Lesen des Quellcodes..........................................................................506
Vorfuhrungen ....................................................................................507
Vergleich von Teamworktechniken beim Softwarebau........................507
Weiterfiihrende Literatur ............................................................................508
Paarprogrammierung..........................................................................508
Inspektionen .........................................................509
Wichtige Standards .............................................509
Zusammenfassung ......................................................................................509
Kapitet 22 Entwicklertests..............................................................................................511
22.1 Entwicklertests und die Softwarequalitat ............................................512
Testen wahrend des Baus............................................514
22.2 Empfohlene Ansatze fur Entwicklertests..............................................515
Tests zuerst oder zuletzt? ....................................................................516
Einschrankungen von Entwicklertests ................................................516
22.3 Tipps und Tricks zum Testen..............................................................517
Unvollstandiges Testen........................................................................517
Strukturierter Basistest........................................................................518
Test des Datenflusses.................................................521
Aquivalenzaufteilung................-........................................524
XVI Inhaltsverzeichnis
..............525
Fehler wittern..................................................................525
Randbedingungen analysieren........................................^
Bosartige Daten.........................................
Gutartige Daten............................* * * * 7 ......
Verwenden Sie Testfalle, die sich leicht von Hand nachvollziehen
....................528
..............................................................................528
22.4 Typische Fehler .........................................
Welche Klassen enthalten die meisten Fehler? ....................................528
Eine Klassifizierung der Fehler............................................................529
Anteil der beim Bau entstehenden Fehler............................................531
Wie viele Fehler sind zu erwarten?......................................................532
Fehler beim Testen..............................................................................533
22.5 Testwerkzeuge ....................................................................................534
Ein Geriist zum Testen einzelner Klassen............................................534
Ergebnisvergleiche..............................................................................536
Datengeneratoren fur Tests..................................................................536
Coveragemonitore..............................................................................537
Datenrekorder/Protokollierung ..........................................................537
Symbolische Debugger........................................................................538
System Perturbers - Storenfriede im System........................................538
Fehlerdatenbanken..............................................................................539
22.6 So verbessern Sie Ihre Testmethoden..................................................539
Testplanung........................................................................................539
Wiederholte Tests (Regressionstests) ..................................................540
Automatisierte Tests............................................................................540
22.7 Testdaten speichern............................................................................541
Personliche Testaufzeichnungen..........................................................541
Weiterfuhrende Literatur .........................................................................542
Testen..................................................................................................542
Testgeriiste..........................................................................................543
Erstehen von Testfahen ......................................................................543
Wichtige Standards ............................................................................543
Zusammenfassung ......................................................................................544
Kapitel 23 Debugging.................................................. 547
23.1 Debugging im Oberblick.................................. 547
Debugging und die Qualitat von Software ..................... 548
Das Debuggingtempo..................................... 548
Sehen Sie Fehler als Chancen........................................................549
Eine ungeeignete Methode..............................................................55O
23.2 So finden Sie einen Fehler ........................................................552
Die wissenschaftliche Methode..................................................552
Tipps fur das Auffmden von Fehlern ................................................556
Syntaxfehler.................................
23.3 Beseitigen von Fehlern..................................................5^2
23.4 Debugging und Psychologie....................................................566
Inhaltsverzeichnis XVII
Psychologische Scheuklappen und die Blindheit beim Debugging . . . 567
Der Nutzen des »Psychologischen Abstands«......................................568
23.5 Debuggingtools .............................................................................569
Quelltextvergleicher............................................................................569
Compilerwarnungen ..........................................................................569
Erweiterte Syntax- und Logikprufung ................................................570
Profiler................................................................................................570
Testgeruste..........................................................................................570
Debugger............................................................................................570
Weiterfuhrende Literatur ............................................................................573
Zusammenfassung ......................................................................................574
Kapitef 24 Refaktorieren................................................................................................575
24.1 Erscheinungsformen der Evolution von Software................................576
Philosophie der Softwareevolution......................................................576
24.2 Einfiihrung in das Refaktorieren ........................................................577
Anlasse zum Refaktorieren..................................................................577
Was »Refaktorieren« nicht bedeutet....................................................583
24.3 Konkrete Refaktorierungsverfahren....................................................583
Refaktorierungsverfahren auf Datenebene..........................................584
Refaktorierungsverfahren auf Anweisungsebene ................................585
Refaktorierungsverfahren auf Routinenebene......................................586
Refaktorierungsverfahren fiir die Klassenimplementierung................587
Refaktorierungsverfahren fur die Klassenschnittstelle ........................588
Refaktorierungsverfahren auf Systemebene ........................................589
24.4 Sicher refaktorieren............................................................................592
Gefahren beim Refaktorieren..............................................................594
24.5 Refaktorierungsstrategien....................................................................595
Weiterfuhrende Literatur ............................................................................598
Zusammenfassung ......................................................................................598
Kapitel 25 StrategienzurCodeoptimierung......................................................................599
25.1 Leistung im Uberblick........................................................................600
Qualitatsmerkmale und Leistung........................................................600
Leistung und Codetuning....................................................................600
25.2 Einfiihrung in das Codetuning............................................................603
Das Pareto-Prinzip..............................................................................604
Ammenmarchen ................................................................................605
Wann sollte Tuning durchgefuhrt werden?..........................................608
Compileroptimierungen......................................................................609
25.3 Schnecken und Bleigewichte ..............................................................610
Haufige Leistungsbremsen..................................................................610
Relativer Aufwand haufig vorkommender Operationen......................613
25.4 Messungen..........................................................................................615
Messungen miissen genau sein............................................................616
25.5 Iteration..............................................................................................617
25.6 Zusammenfassung: Ansatze bei der Codeoptimierung.............618
XVIII Inhaltsverzeichnis
Weiterfuhrende Literatur ......................................
Leistung..............................................................................................6ig
Algorithmen und Datentypen...............................
Zusammenfassung ...........................................
Kapitel 26 Techniken .....................................................
26.1 Logik...............................;..................................f4
Beenden Sie Abfragen, wenn das Ergebnis klar ist ...............
Abfragen nach Haufigkeit anordnen....................................................625
Leistung der Vergleichsoperationen in ahnlichen Logikstrukturen . . . 627
Ersetzen komplizierter Ausdriicke durch Suchtabellen........................628
Spate Auswertung................................................................................°*y
26.2 Schleifen ............................................................................................629
Verzweigungen beseitigen ..................................................................630
Fusion von Schleifen ..........................................................................^31
Aufrollen......................................................................................^32
Die Arbeit in Schleifen verringern.....................................634
Wachterklauseln........................................ • 635
Vielbeschaftigte Schleifen gehoren an die innerste Position ................636
Verringern der Starke........................................................................637
26.3 Datenumwandlungen..........................................................................638
Verwenden Sie Integer anstelle von Gleitkommazahlen......................638
Verringern Sie die Anzahl der Dimensionen eines Arrays
so weit wie moglich ............................................................................639
Verringern Sie die Verweise auf Arrays................................................640
Einsatz zusatzlicher Indexe..................................................................640
Caching..............................................................................................641
26.4 Ausdriicke..........................................................................................643
Ausnutzen algebraischer Identitat........................................................643
Verringern der Starke..........................................................................643
Initialisierung wahrend der Kompilierung..........................................645
Haben Sie ein wachsames Auge auf Systemroutinen............................646
Verwenden Sie fur Konstanten den korrekten Datentyp......................647
Ergebnisse vorab berechnen................................................................648
Beseitigen wiederholter Berechnungen................................................651
26.5 Routinen ............................................................................................552
Inlineroutinen ......................................................................552
26.6 Maschinennahe Sprachen..........................................................653
26.7 Je mehr sich die Dinge andern, desto mehr bleiben sie gleich..............656
Weiterfuhrende Literatur .............................................557
Zusammenfassung ...............................
Inhaltsverzeichnis XIX
TeilVI FaktorenfurdasGesamtsystem ..............................................................659
Kapitel 27 Wie die ProgrammgroRe den Bau beeinflusst....................................................661
27.1 Kommunikation und Programmgrofie................................................661
27.2 Typische Projektgrofien......................................................................662
27.3 Projektgrofie und Fehler......................................................................663
27.4 Projektgrofie und Produktivitat ..........................................................665
27.5 Projektgrofie und Entwicklungstatigkeiten..........................................665
Abhangigkeit des Anteils der Tatigkeiten von der ProjektgrofSe..........666
Programme, Produkte, Systeme und Systemprodukte..........................667
Methodologie und Projektgrofie..........................................................668
Weiterfuhrende Literatur ............................................................................670
Zusammenfassung ......................................................................................671
Kapitel 28 Entwicklungsmanagement..............................................................................673
28.1 Fordern guter Programmierung..........................................................674
tJberlegungen beim Festlegen von Standards......................................674
Techniken zum Fordern eines guten Programmierstils........................674
Die Rolle dieses Buchs........................................................................676
28.2 Konfigurationsmanagement................................................................676
Was ist Konfigurationsmanagement?..................................................676
Anderungen an Anforderungen und Entwurf......................................678
Anderungen im Quellcode..................................................................680
Versionen der verwendeten Tools........................................................680
Computerkonfigurationen..................................................................681
Sicherungsplan....................................................................................681
Weiterfuhrende Literatur zum Konfigurationsmanagement................682
28.3 Abschatzen eines Zeitplans fur den Bau..............................................683
Ansatze fur die Einschatzung..............................................................683
Schatzen des Aufwands fur den Bau....................................................685
Einflusse auf den Zeitplan ..................................................................686
Schatzung und Kontrolle ....................................................................687
Was tun, wenn Sie hinter dem Plan liegen?..........................................687
Weiterfuhrende Literatur zum Abschatzen von Softwareprojekten ... 689
28.4 Messungen..........................................................................................689
Weiterfuhrende Literatur zu Softwaremessungen................................691
28.5 Programmierer sind auch Menschen ..................................................692
Wie verbringen Programmierer ihre Zeit? ..........................................692
Schwankungen in Leistung und Qualitat ............................................693
Religiose Debatten............................................694
Der Arbeitsplatz..................................................................................695
Weiterfuhrende Literatur zu Programmierern als Menschen ..............697
28.6 Managen Sie den Manager..............................................698
Weiterfuhrende Literatur zum Entwicklungsmanagement............................698
Wichtige Standards ............................................................................699
Zusammenfassung ....................................................................................699
701
701
703
703
704
706
706
709
710
711
711
713
714
714
718
719
720
721
723
724
724
724
727
728
729
729
729
730
732
733
733
734
734
735
735
736
737
738
739
741
742
742
744
Integration.............................................
27.1 Die Bedeutung der Integrationsmethode .................
29.2 Integrationsfrequenz — synchron oder inkrementell?........
Synchrone Integration...............................
Inkrementelle Integration.............................
29.3 Strategien der inkrementellen Integration ................
Top-Down-Integration...............................
Bottom-Up-Integration ..............................
Sandwichintegration ................................
Risikoorientierte Integration ..........................
Merkmalsorientierte Integration ......................
T-formige Integration...............................
Zusammenfassung der Integrationsansatze................
29.4 Taglicher Buildvorgang und Smoketest .............
Fur welche Projektarten eignet sich der tagliche Buildvorgang?
Kontinuierliche Integration ..........................
Weiterftihrende Literatur ................................
Zusammenfassung .....................................
Programmiertools.......................................
30.1 Entwurfstools.....................................
30.2 Quellcodetools....................................
Editoren.........................................
Analyse der Codequalitat............................
Refaktorieren von Quellecode ........................
Versionskontrolle..................................
Datenverzeichnisse.................................
30.3 Tools fur ausfuhrbare Programme.....................
Programmerstellung................................
Debugging.......................................
Testwerkzeuge ................................
Codetuning ......................................
30.4 Toolorientierte Umgebungen.........................
30.5 Programmiertools selbst erstellen......................
Projektspezifische Tools.............................
Skripts.....................................
30.6 Tools: Wunsch und Wirklichkeit.......................
Weiterftihrende Literatur .....................
Zusammenfassung ..................
Softwarehandwerk..........................
Layout und Stil.............................
31.1 Grundlagen des Layouts....................
Extreme im Layout...............
Der Grundsatz der Formatierung ....
Inhaltsverzeichnis XXI
Interpretationen eines Programms......................................................744
Was ist gutes Layout wert?..................................................................745
Layout als Religion..............................................................................747
Ziele guten Layouts ............................................................................747
31.2 Layouttechniken..................................................................................748
Zwischenraume..................................................................................748
Klammern ..........................................................................................749
31.3 Layoutstile..........................................................................................750
Reine Blocke ...................................................750
Simulation reiner Blocke ....................................................................751
Begrenzen von Blocken mit begin/end- oder Klammerpaaren..............753
Endlinelayout..............................................................754
Welcher Stil ist der beste?....................................................................756
31.4 Layout von Steuerstrukturen ..............................................................756
Feinheiten der Formatierung von Anweisungsblocken........................757
Andere Gesichtspunkte ......................................................................758
31.5 Layout einzelner Anweisungen............................................................764
Anweisungslange................................................................................764
Klarheit durch Leerzeichen ................................................................764
Formatierung umbrochener Zeilen......................................................765
Nur eine Anweisung pro Zeile ............................................................769
Layout fur Datendeklarationen............................................................772
31.6 Layout von Kommentaren ..................................................................774
31.7 Layout von Routinen ..........................................................................777
31.8 Layout von Klassen ............................................................................778
Layout von Klassenschnittstellen ........................................................779
Layout von Klassenimplementierungen..............................................779
Layout von Dateien und Programmen................................................782
Weiterfuhrende Literatur ............................................................................785
Zusammenfassung ......................................................................................785
Kapitel 32 Selbstdokumentierender Code........................................................................787
32.1 Externe Dokumentation......................................................................787
32.2 Programmierstil als Dokumentation ..................................................788
32.3 Kommentieren oder nicht kommentieren, das ist hier die Frage..........791
32.4 Schlusselelemente sinnvoller Kommentare..........................................795
Kommentartypen................................................................................796
Sinnvolle Kommentierung..................................................................798
Die optimale Zahl von Kommentaren ................................................801
32.5 Techniken der Kommentierung..........................................................802
Kommentieren einzelner Zeilen..........................................................802
Kommentieren von Absatzen im Code................................................804
Kommentieren von Datendeklarationen..............................................811
Kommentieren von Steuerstrukturen..................................................813
Kommentieren von Routinen..............................................................814
Kommentieren von Klassen, Dateien und Programmen......................819
XXII lnhaltsverzeichnis
Kapitel 33
Kapitel 34
Kapitel 35
________822
32.6 IEEE-Standards ............................................................823
Standards fur die Softwareentwicklung................................................^
Standards fur die Qualitatssicherung von Software..............................^
.......................................................
Oberblick uber Standards..................*............... g24
Weiterfuhrende Literatur ...................................... g26
Zusammenfassung ...........................................
827
PersonlicherStil..............................................
33.1 Welche RoUe spieh der personliche ............................
33.2 Intelligenz und ............................................
33.3 Neugier ...............................................
33.4 ........................................................
33.5 Kommunikation und Zusammenarbeit........................ 836
33.6 Kreativitat und Disziplin .................................. 837
33.7 Faulheit ............................................... 838
33.8 Dinge die gar nicht so wichtig sind.......................... 838
Beharrlichkeit........................................... 839
Erfahrung.............................................. 839
Der Uberflieger ......................................... 8^®
33.9 Gewohnheiten.......................................... 841
Weiterfuhrende Literatur ...................................... 842
Zusammenfassung ........................................... 843
Oer Programmierer als Handwerker..................................................................845
34.1 Krieg der Komplexitatl........................................................................845
34.2 Arbeitsstil - Sie haben die Wahl..........................................................847
34.3 Erst der Mensch, dann der Computer ...............................................849
34.4 Programmieren in die Sprache und in der Sprache..............................851
34.5 Konventionen sind Konzentrationshilfen ...................................852
34.6 Programmieren mit der Terminologie des Praxisproblems.............853
Die Unterteilung eines Programms in Abstraktionsebenen..................854
Arbeitstechniken fur die niedrigere Ebene des Problembereichs..........855
34.7 Achtung, Steinschlag!..........................................................................856
34.8 Iteration, wieder und wieder................................................................858
34.9 Du sollest trennen Software und Religion............................................859
Das Softwareorakel..............................................................................859
Eklektizismus..............................................................................860
Probieren geht uber Studieren ............................................................861
Zusammenfassung ........................................................g62
Weiterfuhrende Literatur........................................863
35.1 Informationen iiber den Bau von Software..............................864
35.2 Weitere Aspekte der Softwareentwicklung ..........................................865
Software im Allgemeinen...................... .................865
Software-Engineering im Oberblick..............................866
Andere kommentierte Bibliografien..................* * * 866
Inhaltsverzeichnis XXIII
35.3 Fachzeitschriften ................................................................................867
Zeitschriften fur den Massenmarkt ....................................................867
Wissenschaftliche Zeitschriften ....................................867
Fachzeitschriften zu Spezialgebieten....................................................868
35.4 Eine Leseliste fur den Softwareentwickler............................................868
Biicher fur Anfanger...............................................868
Biicher fiir Fortgeschrittene................................................................869
Biicher fiir leitende Entwickler............................................................869
35.5 Mitgliedschaft in einer Berufsorganisation..........................................870
Bibliografie..................................................................................................871
Index.................................. .......................................891
Der Autor....................................................................................................909
|
adam_txt |
Titel: Code complete
Autor: McConnell, Steve
Jahr: 2005
VII
Inhaltsverzeichnis
Vorwort . XXV
An wen wendet sich dieses Buch?. XXV
Wo konnen Sie solche Informationen sonst finden?.XXVI
Was durfen Sie von diesem Buch erwarten?. XXVII
Warum dieses Buch geschrieben wurde.XXIX
Kritik und Anregungen . XXX
Technischer Support.XXXI
Danksagungen . XXXII
Teill Das Gieftendes Fundaments. 1
Kapitel 1 Willkommen auf der Softwarebaustelle.3
1.1 Was bedeutet »Software bauen«? .3
1.2 Warum ist der Bauabschnitt wichtig?.6
1.3 Wie Sie dieses Buch lesen sollten .7
Zusammenfassung .7
Kapitel 2 Metaphern als Hilfsmittel fiir die Softwareentwicklung .9
2.1 Die Bedeutung von Metaphern.10
2.2 Das Verwenden von Softwaremetaphern .12
2.3 Gebrauchliche Softwaremetaphern.13
Der Software-Autor: Quelltext schreiben.13
Der Landwirt: Software anbauen .15
Austernzucht: Das wachsende System.16
Ein Haus errichten: Software bauen.17
Softwaretechniken: Der geistige Werkzeugkasten.20
Metaphern kombinieren.20
Weiterfuhrende Literatur .21
Zusammenfassung .21
Kapitel 3 Zweimal messen, einmal sagen: Vorbereitung beim Softwarebau .23
3.1 Die Bedeutung guter Vorbereitung.24
Ist fur moderne Softwareprojekte Vorbereitung erforderlich?.24
Ursachen fiir ungeniigende Vorbereitung.25
Pladoyer fur eine griindliche Vorbereitung.27
3.2 Einordnen eines Softwareprojekts .30
Vorbereitung bei iterativen Verfahren.32
Wahlen zwischen iterativen und sequentiellen Ansatzen .34
3.3 Die Problemdefinition.35
3.4 Die Anforderungen .37
Wozu formelle Anforderungen?.-.-.37
Der Mythos von felsenfesten Anforderungen.38
Anderungen von Anforderungen wahrend des Baus.39
VIII Inhaltsverzeichnis
_42
3.5 Die Architektur .43
Typische Komponenten der Architektur.^
3.6 Zeitbedarf fiir die .^
Weiterfiihrende Literatur .
Zusammenfassung .
Kapitel 4 SchlusselentscheidungenfiirdenBau.
4.1 Auswahlen der Programmiersprache. ^
Sprachbeschreibungen.
4.2 Konventionen fiir die Programmierung.
4.3 Ihr Platz auf der Technologiewelle. 67
Beispiel fur das Programmieren in eine Sprache. 68
4.4 Auswahlen von zentralen . 69
Zusammenfassung . 7^
Teil II Erstellen von qualitativ hochwertigem Code. 73
Kapitel 5 Entwurf beim Bau. 75
5.1 Herausforderungen beim Entwurf.76
Entwurf ist ein verzwicktes Problem.76
Entwurf ist ein schludriger Prozess (auch wenn das Ergebnis stimmt) . 77
Beim Entwurf geht es urn Kompromisse und Prioritaten.78
Der Entwurf erfordert Beschrankungen.78
Entwurf ist nicht deterministisch.78
Der Entwurf als heuristischer Prozess .78
Der Entwurf entwickelt sich evolutionar .79
5.2 Schliisselkonzepte fiir den Entwurf .79
Das primare Ziel: Zahmen der Komplexitat.79
Wunschenswerte Merkmale eines Entwurfs.82
Entwurfsstufen.84
5.3 Bausteine entwerfen: Heuristik.89
Reale Objekte.90
Konsistente Abstraktionen.91
Kapseln von Implementierungsdetails .93
Wann Vererbung den Entwurf vereinfacht.93
Verbergen von Informationen .94
Identifizieren von Bereichen, die sich wahrscheinlich andern.100
Lose Kopplung.103
Entwurfsmuster.106
Andere heuristische Verfahren.109
Zusammenfassung der heuristischen Entwurfsverfahren.112
Richtlinien zum Einsatz heuristischer Verfahren .112
5.4 Entwurfstechniken.H4
Iteration.^4
Teile und herrsche.
.115
Top-Down- und Bottom-Up-Entwurfsansatze
Inhaltsverzeichnis IX
Experimentelle Prototypen.118
Teamwork beim Entwurf.119
Wie viel Entwurf ist genug? .120
Dokumentieren des Entwurfs.121
5.5 Anmerkungen zu verbreiteten Methoden.123
Weiterfuhrende Literatur .124
Grundlagen des Softwareentwurfs .124
Theorie des Softwareentwurfs .125
Entwurfsmuster.125
Allgemeiner Entwurf.125
Standards.126
Zusammenfassung .127
Kapltel 6 VomUmgangmitderArbeiterklasse.129
6.1 Grundlagen fur Klassen: abstrakte Datentypen.130
Wann benotigen Sie einen abstrakten Datentyp? Ein Beispiel.130
Die Vorteile abstrakter Datentypen.131
Weitere Beispiele fur ADTs.133
Mehrfache Dateninstanzen mit ADTs auch auBerhalb
objektorientierter Umgebungen.135
ADTs und Klassen. 137
6.2 Gute Klassenschnittstellen. 137
Gute Abstraktionen . 137
Gute Kapselung . 143
6.3 Entwurfs- und Implementierungsfragen. 148
Einbettung (»Hat ein«-Beziehungen). 148
Vererbung (»Ist ein«-Beziehungen) . 149
Memberfunktionen und-daten . 155
Konstruktoren. 156
6.4 Griinde fur das Erstellen einer Klasse. 158
Klassen, die Sie vermeiden sollten .161
Zusammenfassung der Griinde fur das Erstellen einer Klasse.162
6.5 Sprachspezifische Unterschiede .162
6.6 Jenseits von Klassen: Pakete.163
Weiterfuhrende Literatur .165
Zusammenfassung .166
Kapitel 7 QuaiitatsmerkmaleguterRoutinen.167
7.1 Griinde fur das Erstellen von Routinen .170
Operationen, die fur eine eigene Routine zu einfach erscheinen.172
Zusammenfassung der Griinde fur das Erstellen einer Routine .173
7.2 Entwurf auf der Routinenebene.174
7.3 Gute Routinennamen.177
7.4 Wie lang darf eine Routine sein? .179
7.5 Routinenparameter .181
X Inhaltsverzeichnis
7.6 Besonderheiten beim Einsatz von Funktionen.
Sollten Sie eine Funktion oder eine Prozedur verwenden?.
Zuriickgeben des Ergebniswerts bei Funktionen.1®®
7.7 Makro- und Inlineroutinen .
Alternativen zum Einsatz von Makroroutinen .l9^
Inlineroutinen .
192
Zusammenfassung .
1QC
Kapitel 8 Defensive .
8.1 Schutz vor ungultigen Eingabedaten.196
8.2 Sicherheitsabfragen .197
Einen eigenen Mechanismus fur Sicherheitsabfragen erstellen.199
Richtlinien fur den Einsatz von Sicherheitsabfragen.199
8.3 Techniken fur die Fehlerbehandlung .202
Robustheit und Korrektheit.205
Beriicksichtigen der Fehlerbehandlung im Entwurf.206
8.4 Ausnahmen.206
8.5 Dammen Sie die Auswirkungen von Fehlern ein .212
Die Beziehung zwischen Barrikaden und Sicherheitsabfragen .214
8.6 Fehlersuchhilfen.214
Fur die Entwicklungsversion gelten kaum Einschrankungen .214
Fehlersuchhilfen - von Anfang an .215
Angriff ist die beste Verteidigung: Offensive Programmierung.215
Das Entfernen der Fehlersuchhilfen einplanen.216
8.7 Wie viel defensive Programmierung soli in der fertigen Version
verbleiben?.218
8.8 Vorsicht bei der defensiven Programmierung!.220
Weiterfiihrende Literatur .221
Zusammenfassung .222
Kapitel9 Pseudocode-Programmierung .223
9.1 Bauphasen fur Klassen und Routinen.223
Schritte beim Bauen einer Klasse .224
Schritte beim Bauen einer Routine.225
9.2 Pseudocode fur Profis .225
9.3 Bauen von Routinen mithilfe des PPP .228
Entwerfen der Routine.228
Schreiben des Codes.233
Oberpriifen des Quelltextes .238
Aufraumarbeiten.240
Wiederholen Sie notigenfalls einzelne Schritte.241
9.4 Alternativen zum PPP .241
Zusammenfassung .
Inhaltsverzeichnis XI
Teil III Variablen.245
Kapitel 10 DerEinsatz von Variablen.247
10.1 Kleine Datenkunde.248
Datentypen - der Wissenstest.248
Weiterfuhrende Literatur zu Datentypen .249
10.2 Variablendeklarationen vereinfachen.249
Implizite Deklarationen.249
10.3 Richtlinien fur das Initialisieren von Variablen.250
10.4 Der Giiltigkeitsbereich.254
Referenzen auf Variablen lokalisieren.254
Nur eine tote Variable ist eine gute Variable: Halten Sie die
Lebensdauer von Variablen so kurz wie moglich .255
Allgemeine Richtlinien zum Verkleinern des Gultigkeitsbereichs . 258
Anmerkungen zum Verkleinern des Gultigkeitsbereichs.260
10.5 Persistenz.261
10.6 Zeitpunkt der Bindung.262
10.7 Beziehungen zwischen Datentypen und Steuerstrukturen .263
10.8 Variablen nur fur einen einzigen Zweck verwenden.265
Zusammenfassung .267
Kapitel 11 DieMachtguterVariablennamen.269
11.1 Was ist ein guter Name?.269
Das Wichtigste zuerst.270
Ausrichtung auf das Problem.271
Optimale Lange von Namen.272
Der Einfluss des Gultigkeitsbereichs auf Variablennamen.272
Variablennamen, die fur berechnete Werte stehen .273
Gegensatzpaare in Variablennamen .274
11.2 Namen fiir bestimmte Datentypen.274
Namen fur Schleifenindexe .274
Namen fur Statusvariablen. 276
Namen fur temporare Variablen. 277
Namen fur boolesche Variablen. 278
Namen fiir Aufzahlungstypen. 279
Namen fiir Konstanten. 280
11.3 Die Vorteile von Namenskonventionen. 280
Konventionen - wozu?. 280
Wann brauchen Sie eine Namenskonvention?. 281
Stufen der Formalitat. 281
11.4 Informelle Namenskonventionen. 282
Richtlinien fiir sprachunabhangige Konventionen . 282
Richtlinien fur sprachabhangige Konventionen . 285
Mischen von Programmiersprachen. 286
Beispiele fiir Namenskonventionen . 287
11.5 Standardisierte Prafixe. 289
Abkiirzungen fur benutzerdefinierte Typen. 289
XII Inhaltsverzeichnis
Semantikprafixe.290
Vorziige von standardisierten Praflxen.291
11.6 Kurze, lesbare Namen.292
Allgemeine Richtlinien fiir Abkiirzungen.292
Phonetische Abkurzungen .292
Einige Anmerkungen zu Abkurzungen.293
11.7 Schlechte Namen.295
Zusammenfassung .299
Kapitel 12 Grundlegende Datentypen.301
12.1 Grundlegendes zu Zahlen .301
12.2 Integer.303
12.3 Gleitkommazahlen.305
12.4 Zeichen und Strings.307
Strings in C .309
12.5 Boolesche Variablen.311
12.6 Aufzahlungstypen .312
Was aber, wenn Ihre Sprache keine Aufzahlungstypen kennt?.316
12.7 Benannte Konstanten.317
12.8 Arrays .319
12.9 Erstellen eigener Typen .321
Warum sind die Beispiele fiir selbstdefmierte Typen in Pascal
und Ada geschrieben? .324
Richtlinien fiir das Erstellen selbstdefinierter Typen.324
Zusammenfassung .327
Kapitel 13 Ungewdhnliche Datentypen.329
13.1 Strukturen.329
13.2 Zeiger.333
Die Funktionsweise von Zeigern .333
Allgemeine Hinweise zu Zeigern .335
Zeiger in C++.343
Zeiger in C.344
13.3 Globale Daten .345
Haufige Probleme mit globalen Daten .346
Einsatzzwecke fiir globale Daten .348
Benutzen Sie globale Daten nur als letzte Moglichkeit .349
Zugriffsroutinen anstelle globaler Daten .350
Vermindern der mit globalen Variablen verbundenen Risiken.353
Weiterfiihrende Literatur .354
Zusammenfassung .355
yej|IV Anweisungen .357
Kapitel 14 SequentiellerAblauf.359
14.1 Anweisungen mit zwingender Reihenfolge.359
14.2 Anweisungen, deren Reihenfolge keine Rolle spielt.362
XIII
363
364
365
367
367
367
370
373
373
374
378
379
379
380
381
384
384
384
385
387
388
393
394
396
397
399
401
403
403
405
406
408
410
410
411
412
413
418
420
421
421
423
Quelltext von oben nach unten lesen.
Verwandte Anweisungen zusammenfassen.
Zusammenfassung .
Bedingungsausdriicke.
15.1 if-Anweisungen .
Einfache i/-l/ien-Anweisungen.
if-then-else-Ketten .
15.2 case-Anweisungen .
Die sinnvollste Fallreihenfolge.
Tipps fur den Einsatz von cnse-Anweisungen.
Zusammenfassung .
Schleifensteuerung.
16.1 Auswahlen des Schleifentyps .
Einsatzzwecke fur while-Schleifen .
Einsatzzwecke fur Schleifen mit Exif-Anweisung .
Einsatzzwecke fur/or-Schleifen .
Einsatzzwecke furforeach-Schleifen.
16.2 Steuern der Schleife.
Einsprung in die Schleife.
Die Schleifenmitte.
Verlassen der Schleife.
Oberprtifen der Endpunkte .
Schleifenindexe .
Wie lang sollte eine Schleife sein?.
16.3 Schleifen einfach von innen nach aufien anlegen .
16.4 Zusammenhange zwischen Schleifen und Arrays
Zusammenfassung .
Ungewohniiche Steueranweisungen.
17.1 Mehrere Rtickkehranweisungen in einer Routine----
17.2 Rekursion.
Ein Beispiel fur Rekursion .
Tipps fur den Einsatz der Rekursion.
17.3 goto .
Was spricht gegen goto7. .
Was spricht fur goto7. .
Dieser Glaubenskrieg ist sinnlos.
Fehlerbehandlung und goto .
goto und gemeinsam genutzter Code im else-Zweig . .
Zusammenfassung der Richtlinien fur den Einsatz von
goto-Anweisungen.
17.4 Bewertung der ungewohnlichen Steuerstrukturen . . .
Weiterfuhrende Literatur .
Zusammenfassung .
XIV Jnhalrsverzefchnfc
Kapitef 18 Tabeffengesteuerte Methoden.V" " ???
18.1 AUgemeine Oberlegungen zum Einsatz tabellerigesteuerter Methoden 425
Voraussetzungen fur den Einsatz tabellengesteuerter Methoden. 426
18.2 Direkter Zugriff.
Ein Beispiel: Anzahl der Tage pro Monat .427
Beispiel: Versicherungsbeitrage .428
Beispiel fiir ein flexibles Nachrichtenformat.430
Konstruieren eines Suchschliissels .437
18.3 Indizierter Zugriff.•.*.438
18.4 Stufenweiser Zugriff.440
18.5 Andere Beispiele fiir die Tabellensuche.442
Zusammenfassung .443
Kapitef 19 AUgemeine Gesichtspunkte der Abfaufsteuerung.445
19.1 Boolesche Ausdriicke.445
true und false in booleschen, Abfragen .445
Vereinfachen komplizierter Ausdrucke.447
Formulieren Sie boolesche Ausdrucke positiv.449
Boolesche Ausdrucke durch Klammern strukturieren .450
So werden boolesche Ausdrucke ausgewertet.452
Schreiben Sie numerische Vergleiche im Sitirt der Zahfengeraden . . . 453
Richtlinien fiir den Vergleich mit 0.454
Haufige Probleme mit booleschen Ausdrucken .455
19.2 Verbundanweisungen (Blocke).456
19.3 Null-Anweisungen.457
19.4 Tiefe Verschachtelungen beherrschen.458
Zusammenfassung: Techniken zum Aufldsen tiefer Verschachtelung . 467
19.5 Sirukturierte Programmierung.467
Die drei Komponenten der strukturierten Programmierung.468
19.6 Steuerstrukturen und Komplexitat.470
Welche Bedeutung hat die Komplexitat?. '.470
AUgemeine Rjchtlinien fur das Verringern der Komplexitat.473
Andere Arten von Komplexitat.472
Zusammenfassung .
Tell V Verbessern des Programmcodes.475
Kapitel 20 Die Qualitat der Software.477
20.1 Merkmale der Softwarequalitat.477
20.2 Techniken zur Verbesserung der Softwarequalitat .480
Der Entwicklungsprozess .481
Zielsetzung .482
20.3 Relative Effektivitat der Techniken.483
Prozentsatz der gefundenen Fehler.483
Kosten der Fehlersuche .485
Kosten der Fehlerbeseitigung.485
Inhaltsverzeichnis XV
20.4 Zeitpunkt fur die Qualitatssicherung.486
20.5 Das Grundprinzip der Softwarequalitat.487
Weiterfiihrende Literatur .489
Wichtige Standards .489
Zusammenfassung .490
Kapitel21 TeamworkbeimBau .491
21.1 Teamworkentwicklungsverfahren.491
Teamwork beim Bau erganzt andere Techniken der
Qualitatssicherung .492
Teamwork beim Bau verbreitet Firmenkultur und
Programmiererfahrung .494
Gemeinsame Verantwortung betrifft alle Arten des
Teamworks beim Bau.494
Teamwork hilft vor und nach dem Bau.495
21.2 Paarprogrammierung.495
Faktoren fur erfolgreiche Paarprogrammierung.495
Vorteile der Paarprogrammierung.496
21.3 Formelle Inspektionen.497
Welche Ergebnisse konnen Sie von Inspektionen erwarten?.497
Die Rollen bei der Inspektion.498
Prinzipieller Ablauf einer Inspektion .499
Das Ego und die Inspektion.502
Inspektionen bei diesem Buch .503
Zusammenfassung zum Thema Inspektionen.503
21.4 Andere Teamworktechniken.504
Walk-throughs.504
Lesen des Quellcodes.506
Vorfuhrungen .507
Vergleich von Teamworktechniken beim Softwarebau.507
Weiterfiihrende Literatur .508
Paarprogrammierung.508
Inspektionen .509
Wichtige Standards .509
Zusammenfassung .509
Kapitet 22 Entwicklertests.511
22.1 Entwicklertests und die Softwarequalitat .512
Testen wahrend des Baus.514
22.2 Empfohlene Ansatze fur Entwicklertests.515
Tests zuerst oder zuletzt? .516
Einschrankungen von Entwicklertests .516
22.3 Tipps und Tricks zum Testen.517
Unvollstandiges Testen.517
Strukturierter Basistest.518
Test des Datenflusses.521
Aquivalenzaufteilung.-.524
XVI Inhaltsverzeichnis
.525
Fehler wittern.525
Randbedingungen analysieren.^
Bosartige Daten.
Gutartige Daten.* * * * 7 '.
Verwenden Sie Testfalle, die sich leicht von Hand nachvollziehen
.528
.528
22.4 Typische Fehler .
Welche Klassen enthalten die meisten Fehler? .528
Eine Klassifizierung der Fehler.529
Anteil der beim Bau entstehenden Fehler.531
Wie viele Fehler sind zu erwarten?.532
Fehler beim Testen.533
22.5 Testwerkzeuge .534
Ein Geriist zum Testen einzelner Klassen.534
Ergebnisvergleiche.536
Datengeneratoren fur Tests.536
Coveragemonitore.537
Datenrekorder/Protokollierung .537
Symbolische Debugger.538
System Perturbers - Storenfriede im System.538
Fehlerdatenbanken.539
22.6 So verbessern Sie Ihre Testmethoden.539
Testplanung.539
Wiederholte Tests (Regressionstests) .540
Automatisierte Tests.540
22.7 Testdaten speichern.541
Personliche Testaufzeichnungen.541
Weiterfuhrende Literatur .542
Testen.542
Testgeriiste.543
Erstehen von Testfahen .543
Wichtige Standards .543
Zusammenfassung .544
Kapitel 23 Debugging. 547
23.1 Debugging im Oberblick. 547
Debugging und die Qualitat von Software . 548
Das Debuggingtempo. 548
Sehen Sie Fehler als Chancen.549
Eine ungeeignete Methode.55O
23.2 So finden Sie einen Fehler .552
Die wissenschaftliche Methode.552
Tipps fur das Auffmden von Fehlern .556
Syntaxfehler.
23.3 Beseitigen von Fehlern.5^2
23.4 Debugging und Psychologie.566
Inhaltsverzeichnis XVII
Psychologische Scheuklappen und die Blindheit beim Debugging . . . 567
Der Nutzen des »Psychologischen Abstands«.568
23.5 Debuggingtools .569
Quelltextvergleicher.569
Compilerwarnungen .569
Erweiterte Syntax- und Logikprufung .570
Profiler.570
Testgeruste.570
Debugger.570
Weiterfuhrende Literatur .573
Zusammenfassung .574
Kapitef 24 Refaktorieren.575
24.1 Erscheinungsformen der Evolution von Software.576
Philosophie der Softwareevolution.576
24.2 Einfiihrung in das Refaktorieren .577
Anlasse zum Refaktorieren.577
Was »Refaktorieren« nicht bedeutet.583
24.3 Konkrete Refaktorierungsverfahren.583
Refaktorierungsverfahren auf Datenebene.584
Refaktorierungsverfahren auf Anweisungsebene .585
Refaktorierungsverfahren auf Routinenebene.586
Refaktorierungsverfahren fiir die Klassenimplementierung.587
Refaktorierungsverfahren fur die Klassenschnittstelle .588
Refaktorierungsverfahren auf Systemebene .589
24.4 Sicher refaktorieren.592
Gefahren beim Refaktorieren.594
24.5 Refaktorierungsstrategien.595
Weiterfuhrende Literatur .598
Zusammenfassung .598
Kapitel 25 StrategienzurCodeoptimierung.599
25.1 Leistung im Uberblick.600
Qualitatsmerkmale und Leistung.600
Leistung und Codetuning.600
25.2 Einfiihrung in das Codetuning.603
Das Pareto-Prinzip.604
Ammenmarchen .605
Wann sollte Tuning durchgefuhrt werden?.608
Compileroptimierungen.609
25.3 Schnecken und Bleigewichte .610
Haufige Leistungsbremsen.610
Relativer Aufwand haufig vorkommender Operationen.613
25.4 Messungen.615
Messungen miissen genau sein.616
25.5 Iteration.617
25.6 Zusammenfassung: Ansatze bei der Codeoptimierung.618
XVIII Inhaltsverzeichnis
Weiterfuhrende Literatur .
Leistung.6ig
Algorithmen und Datentypen.
Zusammenfassung .
Kapitel 26 Techniken .
26.1 Logik.;.f4
Beenden Sie Abfragen, wenn das Ergebnis klar ist .
Abfragen nach Haufigkeit anordnen.625
Leistung der Vergleichsoperationen in ahnlichen Logikstrukturen . . . 627
Ersetzen komplizierter Ausdriicke durch Suchtabellen.628
Spate Auswertung.°*y
26.2 Schleifen .629
Verzweigungen beseitigen .630
Fusion von Schleifen .^31
Aufrollen.^32
Die Arbeit in Schleifen verringern.634
Wachterklauseln. • 635
Vielbeschaftigte Schleifen gehoren an die innerste Position .636
Verringern der Starke.637
26.3 Datenumwandlungen.638
Verwenden Sie Integer anstelle von Gleitkommazahlen.638
Verringern Sie die Anzahl der Dimensionen eines Arrays
so weit wie moglich .639
Verringern Sie die Verweise auf Arrays.640
Einsatz zusatzlicher Indexe.640
Caching.641
26.4 Ausdriicke.643
Ausnutzen algebraischer Identitat.643
Verringern der Starke.643
Initialisierung wahrend der Kompilierung.645
Haben Sie ein wachsames Auge auf Systemroutinen.646
Verwenden Sie fur Konstanten den korrekten Datentyp.647
Ergebnisse vorab berechnen.648
Beseitigen wiederholter Berechnungen.651
26.5 Routinen .552
Inlineroutinen .552
26.6 Maschinennahe Sprachen.653
26.7 Je mehr sich die Dinge andern, desto mehr bleiben sie gleich.656
Weiterfuhrende Literatur .557
Zusammenfassung .
Inhaltsverzeichnis XIX
TeilVI FaktorenfurdasGesamtsystem .659
Kapitel 27 Wie die ProgrammgroRe den Bau beeinflusst.661
27.1 Kommunikation und Programmgrofie.661
27.2 Typische Projektgrofien.662
27.3 Projektgrofie und Fehler.663
27.4 Projektgrofie und Produktivitat .665
27.5 Projektgrofie und Entwicklungstatigkeiten.665
Abhangigkeit des Anteils der Tatigkeiten von der ProjektgrofSe.666
Programme, Produkte, Systeme und Systemprodukte.667
Methodologie und Projektgrofie.668
Weiterfuhrende Literatur .670
Zusammenfassung .671
Kapitel 28 Entwicklungsmanagement.673
28.1 Fordern guter Programmierung.674
tJberlegungen beim Festlegen von Standards.674
Techniken zum Fordern eines guten Programmierstils.674
Die Rolle dieses Buchs.676
28.2 Konfigurationsmanagement.676
Was ist Konfigurationsmanagement?.676
Anderungen an Anforderungen und Entwurf.678
Anderungen im Quellcode.680
Versionen der verwendeten Tools.680
Computerkonfigurationen.681
Sicherungsplan.681
Weiterfuhrende Literatur zum Konfigurationsmanagement.682
28.3 Abschatzen eines Zeitplans fur den Bau.683
Ansatze fur die Einschatzung.683
Schatzen des Aufwands fur den Bau.685
Einflusse auf den Zeitplan .686
Schatzung und Kontrolle .687
Was tun, wenn Sie hinter dem Plan liegen?.687
Weiterfuhrende Literatur zum Abschatzen von Softwareprojekten . 689
28.4 Messungen.689
Weiterfuhrende Literatur zu Softwaremessungen.691
28.5 Programmierer sind auch Menschen .692
Wie verbringen Programmierer ihre Zeit? .692
Schwankungen in Leistung und Qualitat .693
Religiose Debatten.694
Der Arbeitsplatz.695
Weiterfuhrende Literatur zu Programmierern als Menschen .697
28.6 Managen Sie den Manager.698
Weiterfuhrende Literatur zum Entwicklungsmanagement.698
Wichtige Standards .699
Zusammenfassung .699
701
701
703
703
704
706
706
709
710
711
711
713
714
714
718
719
720
721
723
724
724
724
727
728
729
729
729
730
732
733
733
734
734
735
735
736
737
738
739
741
742
742
744
Integration.
27.1 Die Bedeutung der Integrationsmethode .
29.2 Integrationsfrequenz — synchron oder inkrementell?.
Synchrone Integration.
Inkrementelle Integration.
29.3 Strategien der inkrementellen Integration .
Top-Down-Integration.
Bottom-Up-Integration .
Sandwichintegration .
Risikoorientierte Integration .
Merkmalsorientierte Integration .
T-formige Integration.
Zusammenfassung der Integrationsansatze.
29.4 Taglicher Buildvorgang und Smoketest .
Fur welche Projektarten eignet sich der tagliche Buildvorgang?
Kontinuierliche Integration .
Weiterftihrende Literatur .
Zusammenfassung .
Programmiertools.
30.1 Entwurfstools.
30.2 Quellcodetools.
Editoren.
Analyse der Codequalitat.
Refaktorieren von Quellecode .
Versionskontrolle.
Datenverzeichnisse.
30.3 Tools fur ausfuhrbare Programme.
Programmerstellung.
Debugging.
Testwerkzeuge .
Codetuning .
30.4 Toolorientierte Umgebungen.
30.5 Programmiertools selbst erstellen.
Projektspezifische Tools.
Skripts.
30.6 Tools: Wunsch und Wirklichkeit.
Weiterftihrende Literatur .
Zusammenfassung .
Softwarehandwerk.
Layout und Stil.
31.1 Grundlagen des Layouts.
Extreme im Layout.
Der Grundsatz der Formatierung .
Inhaltsverzeichnis XXI
Interpretationen eines Programms.744
Was ist gutes Layout wert?.745
Layout als Religion.747
Ziele guten Layouts .747
31.2 Layouttechniken.748
Zwischenraume.748
Klammern .749
31.3 Layoutstile.750
Reine Blocke .750
Simulation reiner Blocke .751
Begrenzen von Blocken mit begin/end- oder Klammerpaaren.753
Endlinelayout.754
Welcher Stil ist der beste?.756
31.4 Layout von Steuerstrukturen .756
Feinheiten der Formatierung von Anweisungsblocken.757
Andere Gesichtspunkte .758
31.5 Layout einzelner Anweisungen.764
Anweisungslange.764
Klarheit durch Leerzeichen .764
Formatierung umbrochener Zeilen.765
Nur eine Anweisung pro Zeile .769
Layout fur Datendeklarationen.772
31.6 Layout von Kommentaren .774
31.7 Layout von Routinen .777
31.8 Layout von Klassen .778
Layout von Klassenschnittstellen .779
Layout von Klassenimplementierungen.779
Layout von Dateien und Programmen.782
Weiterfuhrende Literatur .785
Zusammenfassung .785
Kapitel 32 Selbstdokumentierender Code.787
32.1 Externe Dokumentation.787
32.2 Programmierstil als Dokumentation .788
32.3 Kommentieren oder nicht kommentieren, das ist hier die Frage.791
32.4 Schlusselelemente sinnvoller Kommentare.795
Kommentartypen.796
Sinnvolle Kommentierung.798
Die optimale Zahl von Kommentaren .801
32.5 Techniken der Kommentierung.802
Kommentieren einzelner Zeilen.802
Kommentieren von Absatzen im Code.804
Kommentieren von Datendeklarationen.811
Kommentieren von Steuerstrukturen.813
Kommentieren von Routinen.814
Kommentieren von Klassen, Dateien und Programmen.819
XXII lnhaltsverzeichnis
Kapitel 33
Kapitel 34
Kapitel 35
_822
32.6 IEEE-Standards .823
Standards fur die Softwareentwicklung.^
Standards fur die Qualitatssicherung von Software.^
.
Oberblick uber Standards.*. g24
Weiterfuhrende Literatur . g26
Zusammenfassung .
827
PersonlicherStil.
33.1 Welche RoUe spieh der personliche .
33.2 Intelligenz und .
33.3 Neugier .
33.4 .
33.5 Kommunikation und Zusammenarbeit. 836
33.6 Kreativitat und Disziplin . 837
33.7 Faulheit . 838
33.8 Dinge die gar nicht so wichtig sind. 838
Beharrlichkeit. 839
Erfahrung. 839
Der Uberflieger . 8^®
33.9 Gewohnheiten. 841
Weiterfuhrende Literatur . 842
Zusammenfassung . 843
Oer Programmierer als Handwerker.845
34.1 Krieg der Komplexitatl.845
34.2 Arbeitsstil - Sie haben die Wahl.847
34.3 Erst der Mensch, dann der Computer .849
34.4 Programmieren in die Sprache und in der Sprache.851
34.5 Konventionen sind Konzentrationshilfen .852
34.6 Programmieren mit der Terminologie des Praxisproblems.853
Die Unterteilung eines Programms in Abstraktionsebenen.854
Arbeitstechniken fur die niedrigere Ebene des Problembereichs.855
34.7 Achtung, Steinschlag!.856
34.8 Iteration, wieder und wieder.858
34.9 Du sollest trennen Software und Religion.859
Das Softwareorakel.859
Eklektizismus.860
Probieren geht uber Studieren .861
Zusammenfassung .g62
Weiterfuhrende Literatur.863
35.1 Informationen iiber den Bau von Software.864
35.2 Weitere Aspekte der Softwareentwicklung .865
Software im Allgemeinen. .865
Software-Engineering im Oberblick.866
Andere kommentierte Bibliografien.* * * 866
Inhaltsverzeichnis XXIII
35.3 Fachzeitschriften .867
Zeitschriften fur den Massenmarkt .867
Wissenschaftliche Zeitschriften .867
Fachzeitschriften zu Spezialgebieten.868
35.4 Eine Leseliste fur den Softwareentwickler.868
Biicher fur Anfanger.868
Biicher fiir Fortgeschrittene.869
Biicher fiir leitende Entwickler.869
35.5 Mitgliedschaft in einer Berufsorganisation.870
Bibliografie.871
Index. .891
Der Autor.909 |
any_adam_object | 1 |
any_adam_object_boolean | 1 |
author | McConnell, Steve 1962- |
author_GND | (DE-588)129940798 |
author_facet | McConnell, Steve 1962- |
author_role | aut |
author_sort | McConnell, Steve 1962- |
author_variant | s m sm |
building | Verbundindex |
bvnumber | BV021994385 |
classification_rvk | ST 230 |
ctrlnum | (OCoLC)76641025 (DE-599)BVBBV021994385 |
dewey-full | 004 |
dewey-hundreds | 000 - Computer science, information, general works |
dewey-ones | 004 - Computer science |
dewey-raw | 004 |
dewey-search | 004 |
dewey-sort | 14 |
dewey-tens | 000 - Computer science, information, general works |
discipline | Informatik |
discipline_str_mv | Informatik |
edition | Dt. Ausg. der 2. ed. |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>01618nam a2200409zc 4500</leader><controlfield tag="001">BV021994385</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20120615 </controlfield><controlfield tag="007">t</controlfield><controlfield tag="008">060329s2005 a||| |||| 00||| ger d</controlfield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">386063593X</subfield><subfield code="9">3-86063-593-X</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)76641025</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)BVBBV021994385</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield></datafield><datafield tag="041" ind1="1" ind2=" "><subfield code="a">ger</subfield><subfield code="h">eng</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-706</subfield><subfield code="a">DE-526</subfield><subfield code="a">DE-859</subfield></datafield><datafield tag="082" ind1="0" ind2=" "><subfield code="a">004</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">ST 230</subfield><subfield code="0">(DE-625)143617:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">McConnell, Steve</subfield><subfield code="d">1962-</subfield><subfield code="e">Verfasser</subfield><subfield code="0">(DE-588)129940798</subfield><subfield code="4">aut</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Code complete</subfield><subfield code="c">Steve McConnell</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">Dt. Ausg. der 2. ed.</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Unterschleißheim</subfield><subfield code="b">Microsoft Press</subfield><subfield code="c">2005</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">XXXIII, 909 S.</subfield><subfield code="b">Ill.</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">n</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">nc</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Strukturierte Programmierung</subfield><subfield code="0">(DE-588)4058133-0</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Software Engineering</subfield><subfield code="0">(DE-588)4116521-4</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Softwareentwicklung</subfield><subfield code="0">(DE-588)4116522-6</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="689" ind1="0" ind2="0"><subfield code="a">Software Engineering</subfield><subfield code="0">(DE-588)4116521-4</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2=" "><subfield code="5">DE-604</subfield></datafield><datafield tag="689" ind1="1" ind2="0"><subfield code="a">Softwareentwicklung</subfield><subfield code="0">(DE-588)4116522-6</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="1" ind2="1"><subfield code="a">Strukturierte Programmierung</subfield><subfield code="0">(DE-588)4058133-0</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="1" ind2=" "><subfield code="8">1\p</subfield><subfield code="5">DE-604</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">HBZ Datenaustausch</subfield><subfield code="q">application/pdf</subfield><subfield code="u">http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=015209093&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Inhaltsverzeichnis</subfield></datafield><datafield tag="999" ind1=" " ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-015209093</subfield></datafield><datafield tag="883" ind1="1" ind2=" "><subfield code="8">1\p</subfield><subfield code="a">cgwrk</subfield><subfield code="d">20201028</subfield><subfield code="q">DE-101</subfield><subfield code="u">https://d-nb.info/provenance/plan#cgwrk</subfield></datafield></record></collection> |
id | DE-604.BV021994385 |
illustrated | Illustrated |
index_date | 2024-07-02T16:10:46Z |
indexdate | 2024-07-09T20:48:57Z |
institution | BVB |
isbn | 386063593X |
language | German English |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-015209093 |
oclc_num | 76641025 |
open_access_boolean | |
owner | DE-706 DE-526 DE-859 |
owner_facet | DE-706 DE-526 DE-859 |
physical | XXXIII, 909 S. Ill. |
publishDate | 2005 |
publishDateSearch | 2005 |
publishDateSort | 2005 |
publisher | Microsoft Press |
record_format | marc |
spelling | McConnell, Steve 1962- Verfasser (DE-588)129940798 aut Code complete Steve McConnell Dt. Ausg. der 2. ed. Unterschleißheim Microsoft Press 2005 XXXIII, 909 S. Ill. txt rdacontent n rdamedia nc rdacarrier Strukturierte Programmierung (DE-588)4058133-0 gnd rswk-swf Software Engineering (DE-588)4116521-4 gnd rswk-swf Softwareentwicklung (DE-588)4116522-6 gnd rswk-swf Software Engineering (DE-588)4116521-4 s DE-604 Softwareentwicklung (DE-588)4116522-6 s Strukturierte Programmierung (DE-588)4058133-0 s 1\p DE-604 HBZ Datenaustausch application/pdf http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=015209093&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA Inhaltsverzeichnis 1\p cgwrk 20201028 DE-101 https://d-nb.info/provenance/plan#cgwrk |
spellingShingle | McConnell, Steve 1962- Code complete Strukturierte Programmierung (DE-588)4058133-0 gnd Software Engineering (DE-588)4116521-4 gnd Softwareentwicklung (DE-588)4116522-6 gnd |
subject_GND | (DE-588)4058133-0 (DE-588)4116521-4 (DE-588)4116522-6 |
title | Code complete |
title_auth | Code complete |
title_exact_search | Code complete |
title_exact_search_txtP | Code complete |
title_full | Code complete Steve McConnell |
title_fullStr | Code complete Steve McConnell |
title_full_unstemmed | Code complete Steve McConnell |
title_short | Code complete |
title_sort | code complete |
topic | Strukturierte Programmierung (DE-588)4058133-0 gnd Software Engineering (DE-588)4116521-4 gnd Softwareentwicklung (DE-588)4116522-6 gnd |
topic_facet | Strukturierte Programmierung Software Engineering Softwareentwicklung |
url | http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=015209093&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT mcconnellsteve codecomplete |