Sie sind hier
E-Book

Softwarequalität in PHP-Projekten

Mit Fallstudien von Firmen wie Facebook und Projekten wie TYPO3, Symfony und Zend Framework

AutorSebastian Bergmann, Stefan Priebsch
VerlagCarl Hanser Fachbuchverlag
Erscheinungsjahr2013
Seitenanzahl470 Seiten
ISBN9783446435827
FormatPDF
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis39,99 EUR
SOFTWAREQUALITÄT IN PHP-PROJEKTEN //
- Für Softwareentwickler, Projektmanager, Verantwortliche für QM und QA, Scrum-Master, CTOs
- Tests, Tools und Methoden zur Optimierung der Code-Qualität
- Mit zahlreichen Fallstudien bekannter Firmen und Projekte
- Geschrieben von weltweit bekannten PHP-Experten
In diesem Standardwerk vermitteln Sebastian Bergmann und Stefan Priebsch gemeinsam mit ihren Co-Autoren umfassendes Fachwissen und Erfahrungen zur Qualitätssicherung in PHP-Projekten. Zahlreiche Fallstudien zeigen die Planung, Durchführung und Automation von Tests für die unterschiedlichen Softwareschichten, die Messung von Softwarequalität mit Hilfe von Software-Metriken sowie den Einsatz geeigneter Methoden wie z.B. kontinuierlicher Integration.
Die Fallstudien ermöglichen einen Blick hinter die Kulissen bekannter Firmen und Projekte und vermitteln wertvolle Praxiserfahrungen. Das Buch empfiehlt sich allen, die eine Referenz für die Entwicklung qualitativ hochwertiger und nachhaltiger Softwareanwendungen in PHP suchen.
AUS DEM INHALT:
Was ist Software-Qualität? // Software testen // Unit- und Integrationstests // Testen von Legacy Code // Best Practices // Kontinuierliche Integration // Datenbank-Interaktionen // Gebrauchstauglichkeit // Performanz // Sicherheit // Testbasierte Entwicklung verkaufen // Serviceorientierte APIs // Nicht-interaktive Anwendungen // Grafikausgaben

Sebastian BERGMANN, seit Jahren an der Entwicklung von PHP beteiligt, ist Autor der Testsoftware 'PHPUnit'. Stefan PRIEBSCH ist einer der bekanntesten PHP-Experten in Deutschland. Beide Autoren sind Mitgründer und Principal Consultants von thePHP.cc.

Kaufen Sie hier:

Horizontale Tabs

Blick ins Buch
Inhaltsverzeichnis
Inhalt6
Geleitwort16
Vorwort18
Teil I Grundlagen28
1 Softwarequalität30
1.1 Was ist Softwarequalität?30
1.2 Externe Qualität31
1.3 Interne Qualität31
1.4 Technische Schulden32
1.5 Konstruktive Qualitätssicherung34
1.6 Sauberer Code35
1.6.1 Explizite und minimale Abhängigkeiten36
1.6.2 Klare Verantwortlichkeiten36
1.6.3 Keine Duplikation36
1.6.4 Kurze Methoden mit wenigen Ausführungszweigen36
1.7 Software-Metriken36
1.7.1 Zyklomatische Komplexität und NPath-Komplexität37
1.7.2 Change Risk Anti-Patterns (CRAP) Index37
1.7.3 Non-Mockable Total Recursive Cyclomatic Complexity38
1.7.4 Global Mutable State38
1.7.5 Kohäsion und Kopplung39
1.8 Werkzeuge39
1.9 Fazit41
2 Testen von Software44
2.1 Einführung44
2.2 Systemtests46
2.2.1 Testen im Browser46
2.2.2 Automatisierte Tests47
2.2.3 Testisolation49
2.2.4 Akzeptanztests50
2.2.5 Grenzen von Systemtests50
2.3 Unit-Tests51
2.3.1 Rückgabewerte53
2.3.2 Abhängigkeiten55
2.3.3 Seiteneffekte56
2.3.4 Stub- und Mock-Objekte56
2.4 Die Softwaretestpyramide58
2.5 Integrationstests63
2.5.1 Kollaborierende Systeme ersetzen64
2.5.2 Datenbanken ersetzen65
2.5.3 Die GUI (zunächst) ignorieren65
2.5.4 Frontend-Tests66
2.5.5 PHPUnit als Infrastruktur66
2.5.6 Realisierung67
2.6 Fazit79
3 Testen von Legacy Code80
3.1 Einführung80
3.2 Praxisbeispiel82
3.2.1 Vorbereitungen85
3.2.2 Globale Abhängigkeiten89
3.2.3 Datenquellen90
3.2.4 Asynchrone Vorgänge96
3.2.5 Änderungen in der Datenbank101
3.2.6 Nicht vorhersagbare Ergebnisse102
3.2.7 Eingabedaten105
3.2.8 Weiterführende Überlegungen106
3.3 Fazit107
Teil II Fortgeschrittene Themen108
4 Bad Practices in Unit-Tests110
4.1 Einführung110
4.2 Warum guter Testcode wichtig ist110
4.3 Bad Practices und Test-Smells111
4.3.1 Duplizierter Testcode112
4.3.2 Zusicherungsroulette und begierige Tests113
4.3.3 Fragile Tests116
4.3.4 Obskure Tests118
4.3.5 Lügende Tests124
4.3.6 Langsame Tests125
4.3.7 Konditionale Logik in Tests127
4.3.8 Selbstvalidierende Tests128
4.3.9 Websurfende Tests129
4.3.10 Mock-Overkill130
4.3.11 Skip-Epidemie132
4.4 Fazit132
5 Kontinuierliche Integration134
5.1 Einführung134
5.1.1 Kontinuierliche Integration135
5.1.2 Statische Analyse138
5.2 Installation und Inbetriebnahme150
5.3 Konfiguration150
5.3.1 Statische Tests152
5.3.2 Dynamische Tests158
5.3.3 Reporting159
5.3.4 Deliverables erzeugen160
5.4 Betrieb162
5.5 Weiterführende Themen162
5.5.1 Continuous Deployment162
5.5.2 Einen Reverse Proxy nutzen164
5.5.3 Kontinuierliche Integration und agile Paradigmen164
5.6 Fazit165
6 Testen von Datenbank-Interaktionen168
6.1 Einführung168
6.2 Pro und Kontra169
6.2.1 Was gegen Datenbanktests spricht169
6.2.2 Warum wir Datenbanktests schreiben sollten170
6.3 Was wir testen sollten171
6.4 Datenbanktests schreiben172
6.4.1 Die Datenbankverbindung mocken172
6.4.2 Die Datenbankerweiterung von PHPUnit173
6.4.3 Die Klasse für Datenbanktestfälle174
6.4.4 Die Verbindung zur Testdatenbank aufbauen175
6.4.5 Datenbestände erzeugen178
6.4.6 Operationen auf den Daten193
6.4.7 Tests schreiben196
6.4.8 Den Datenbanktester benutzen203
6.5 Testgetriebene Entwicklung und Datenbanktests206
6.6 Datenbanktests als Regressionstests206
6.6.1 Probleme mit den Daten testen207
6.6.2 Probleme testen, die durch Daten sichtbar werden208
6.7 Fazit209
7 Gebrauchstauglichkeit210
7.1 Einführung210
7.2 Anything goes – aber zu welchem Preis?212
7.3 Designaspekte213
7.3.1 Barrierefreiheit213
7.3.2 Lesbarkeit214
7.3.3 Label für Formularelemente215
7.3.4 Tastaturbedienbare Webseite215
7.3.5 Gute Farbkontraste216
7.3.6 Logo zur Startseite verlinken217
7.3.7 Alternativtexte für Bilder217
7.3.8 Hintergrundbild mit Hintergrundfarbe217
7.3.9 Druckversion nicht vergessen217
7.3.10 Erkennbare Links217
7.3.11 Gute Bookmarks218
7.3.12 Keine Frames218
7.3.13 Skalierbare Schrift218
7.4 Technische Aspekte219
7.4.1 Performanz219
7.4.2 JavaScript221
7.5 Benutzerführung222
7.5.1 Der Mythos des Falzes222
7.5.2 Feedback bei Interaktionen223
7.5.3 Navigation223
7.5.4 Popups und andere Störenfriede224
7.5.5 Gewohnheiten bedienen, Erwartungen nicht enttäuschen225
7.5.6 Fehlertoleranz und Feedback226
7.6 Testen der Usability226
7.7 Fazit227
8 Performanz230
8.1 Einführung230
8.1.1 Werkzeuge231
8.1.2 Umgebungsbezogene Gesichtspunkte232
8.2 Lasttests233
8.2.1 Apache Bench234
8.2.2 Pylot236
8.2.3 Weitere Werkzeuge für Lasttests238
8.3 Profiling239
8.3.1 Callgrind240
8.3.2 APD244
8.3.3 Xdebug246
8.3.4 XHProf246
8.3.5 OProfile249
8.4 Systemmetriken250
8.4.1 strace250
8.4.2 Sysstat251
8.4.3 Lösungen im Eigenbau253
8.5 Übliche Fallstricke254
8.5.1 Entwicklungsumgebung gegen Produktivumgebung254
8.5.2 CPU-Zeit254
8.5.3 Mikro-Optimierungen255
8.5.4 PHP als Glue Language255
8.5.5 Priorisierung von Optimierungen256
8.6 Fazit257
9 Sicherheit258
9.1 Was ist eigentlich Sicherheit?258
9.2 Secure by Design259
9.2.1 Der Betrieb259
9.2.2 Physikalischer Zugang260
9.2.3 Software-Entwicklung261
9.3 Was kostet Sicherheit?264
9.4 Die häufigsten Probleme265
9.5 Fazit274
10 Testbasierte Entwicklung verkaufen276
10.1 Vom prozeduralen Code zum testbasierten Vorgehen276
10.2 Ziele der testbasierten Entwicklung278
10.3 Aufwände für Software-Entwicklung279
10.4 Möglichst wenige technische Schulden aufnehmen!281
10.5 Offenlegung von Risiken mit ATAM282
10.5.1 Diskutieren und entscheiden285
10.5.2 Mit ATAM transparente Entscheidungen herbeiführen285
10.6 Kalkulation testbasierter Entwicklung285
10.6.1 Risiken als Argumentationshilfe berechnen286
10.6.2 Langsamere Entwicklung bei höherer Qualität286
10.6.3 Automatisierungs- und Abdeckungsgrad durch Tests bestimmen288
10.7 Strategische Argumente für die Einführung testbasierter Entwicklung289
10.7.1 Qualität und Nachhaltigkeit als Teil des Leistungsversprechens289
10.7.2 Initiale Mehraufwände, die sich für den Auftraggeber lohnen290
10.8 Das Angebot richtig verhandeln291
10.9 Formulierung des Angebots295
10.9.1 Inhalte des Angebots296
10.9.2 Ein Angebot ohne Verhandlung abgeben?296
10.10 Fazit297
Teil III Fallstudien: Open-Source298
11 TYPO3: die agile Zukunft eines schwergewichtigen Projekts300
11.1 Einführung300
11.1.1 Die Geschichte von TYPO3 – 13 Jahre in 13 Absätzen300
11.1.2 Den Neuanfang wagen!302
11.1.3 Unsere Erfahrungen mit dem Testen303
11.2 Grundsätze und Techniken304
11.2.1 Bittersüße Elefantenstückchen304
11.2.2 Testgetriebene Entwicklung305
11.2.3 Tests als Dokumentation306
11.2.4 Kontinuierliche Integration307
11.2.5 Sauberer Code308
11.2.6 Refaktorierung309
11.2.7 Programmierrichtlinien310
11.2.8 Domänengetriebenes Design312
11.3 Vorgehen bei der Entwicklung312
11.3.1 Neuen Code entwickeln313
11.3.2 Code erweitern und ändern313
11.3.3 Code optimieren314
11.3.4 Fehler finden und beheben316
11.3.5 Alten Code fachgerecht entsorgen316
11.4 Testrezepte317
11.4.1 Ungewollt funktionale Unit-Tests317
11.4.2 Zugriffe auf das Dateisystem318
11.4.3 Konstruktoren in Interfaces319
11.4.4 Abstrakte Klassen testen320
11.4.5 Testen von geschützten Methoden320
11.4.6 Verwendung von Callbacks322
11.5 Auf in die Zukunft324
12 Testen von Symfony und Symfony-Projekten326
12.1 Einführung326
12.2 Ein Framework testen327
12.2.1 Der Release-Management-Prozess von Symfony327
12.2.2 Verhältnis von Testcode und getestetem Code329
12.2.3 Die Ausführung der Testsuite muss schnell sein329
12.2.4 Gesammelte Erfahrungen330
12.3 Testen von Webanwendungen335
12.3.1 Die Hemmschwelle für das Testen abbauen335
12.3.2 Unit-Tests336
12.3.3 Funktionale Tests341
12.4 Fazit345
13 Testen von Grafikausgaben346
13.1 Einführung346
13.2 Entwicklungsphilosophie347
13.3 Die ezcGraph-Komponente347
13.3.1 Architektur349
13.4 Ausgabetreiber durch Mock-Objekt ersetzen1
13.4.1 Mehrfache Erwartungen352
13.4.2 Structs353
13.4.3 Generierung der Erwartungen354
13.4.4 Zusammenfassung355
13.5 Binäre Ausgaben testen355
13.5.1 Die Ausgabetreiber356
13.5.2 Generierung der Erwartungen356
13.5.3 SVG357
13.5.4 Bitmap-Erzeugung358
13.5.5 Flash361
13.6 Fazit364
14 Testen von serviceorientierten APIs366
14.1 Die Probleme368
14.2 API-Zugangskennungen369
14.3 API-Beschränkungen372
14.4 Service-Protokolle offline testen373
14.5 Konkrete Services offline testen378
14.6 Fazit383
15 Wie man einen WebDAV-Server testet384
15.1 Über die eZ WebDAV-Komponente384
15.1.1 WebDAV384
15.1.2 Architektur386
15.2 Herausforderungen bei der Entwicklung388
15.2.1 Anforderungsanalyse388
15.2.2 TDD nach RFC389
15.2.3 Den Server testen390
15.3 Automatisierte Akzeptanztests mit PHPUnit392
15.3.1 Test-Trails aufzeichnen394
15.3.2 Das Testrezept395
15.3.3 Integration mit PHPUnit396
15.4 Fazit405
Teil IV Fallstudien: Unternehmen406
16 swoodoo – eine wahrhaft agile Geschichte408
16.1 Einführung408
16.2 Evolution: Nur die Starken überleben408
16.3 Wie wir die „eXtreme Seite“ erreichten413
16.3.1 Kontinuierliche Integration414
16.3.2 Testgetriebene Entwicklung415
16.3.3 Tägliche Standup-Meetings415
16.4 Wo wir schon einmal dabei sind ...417
16.4.1 User Storys und Story Points417
16.4.2 Velocity418
16.4.3 Iterationsplanung419
16.4.4 Programmieren in Paaren419
16.4.5 Kollektives Eigentum420
16.4.6 Offenheit für Änderungen422
16.4.7 Überstunden423
16.5 Die Kunst der Evolution423
16.6 KISS und YAGNI – zwei Seiten einer Medaille429
16.7 Evolutionstheorie und Fazit429
17 Qualitätssicherung bei studiVZ432
17.1 Einführung432
17.2 Akzeptanztests434
17.3 Selenium435
17.3.1 Die Selenium-Erweiterung von PHPUnit437
17.4 Technisches Setup von studiVZ438
17.4.1 Codeumgebung438
17.4.2 Testumgebung439
17.5 Best Practices440
17.5.1 Jugendsünden440
17.5.2 Strategiewechsel442
17.6 Eine DSL muss her452
17.6.1 Interne DSL453
17.6.2 Testing_SeleniumDSL 1.0454
17.6.3 Testing_SeleniumDSL 2.0 – ein Entwurf456
17.7 Fazit458
18 Qualitätssicherung bei Digg460
18.1 Die Ausgangssituation460
18.1.1 Unsere Probleme460
18.1.2 Code-Altlasten461
18.1.3 Wie lösen wir unsere Probleme?462
18.1.4 Ein Test-Framework wählen464
18.1.5 Mit einem Experten arbeiten465
18.2 Das Team trainieren465
18.3 Testbaren Code schreiben469
18.3.1 Statische Methoden vermeiden469
18.3.2 Dependency Injection472
18.4 Mock-Objekte472
18.4.1 Überblick472
18.4.2 Datenbank472
18.4.3 Lose gekoppelte Abhängigkeiten473
18.4.4 Beobachter für klasseninternes Verhalten474
18.4.5 Memcache476
18.4.6 Mocken einer serviceorientierten Architektur477
18.5 Der Qualitätssicherungsprozess bei Digg481
18.5.1 Testen481
18.5.2 Vorteile483
18.5.3 Herausforderungen484
18.6 Fazit485
Schlussbetrachtungen486
Literatur488
Stichwortverzeichnis494

Weitere E-Books zum Thema: Informatik - Algorithmen - Softwaresysteme

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Software Engineering

E-Book Software Engineering
Architektur-Design und Prozessorientierung Format: PDF

Das Lehrbuch behandelt alle Aspekte der Software-Entwicklung, besonders aber Methoden und Richtlinien zur Herstellung großer und qualitativ hochwertiger Softwareprodukte. Es vermittelt das zur…

Software Engineering

E-Book Software Engineering
Architektur-Design und Prozessorientierung Format: PDF

Das Lehrbuch behandelt alle Aspekte der Software-Entwicklung, besonders aber Methoden und Richtlinien zur Herstellung großer und qualitativ hochwertiger Softwareprodukte. Es vermittelt das zur…

Weitere Zeitschriften

Burgen und Schlösser

Burgen und Schlösser

aktuelle Berichte zum Thema Burgen, Schlösser, Wehrbauten, Forschungsergebnisse zur Bau- und Kunstgeschichte, Denkmalpflege und Denkmalschutz Seit ihrer Gründung 1899 gibt die Deutsche ...

Card-Forum

Card-Forum

Card-Forum ist das marktführende Magazin im Themenbereich der kartengestützten Systeme für Zahlung und Identifikation, Telekommunikation und Kundenbindung sowie der damit verwandten und ...

Computerwoche

Computerwoche

Die COMPUTERWOCHE berichtet schnell und detailliert über alle Belange der Informations- und Kommunikationstechnik in Unternehmen – über Trends, neue Technologien, Produkte und Märkte. IT-Manager ...

Gastronomie Report

Gastronomie Report

News & Infos für die Gastronomie: Tipps, Trends und Ideen, Produkte aus aller Welt, Innovative Konzepte, Küchentechnik der Zukunft, Service mit Zusatznutzen und vieles mehr. Frech, offensiv, ...

DSD Der Sicherheitsdienst

DSD Der Sicherheitsdienst

Der "DSD – Der Sicherheitsdienst" ist das Magazin der Sicherheitswirtschaft. Es erscheint viermal jährlich und mit einer Auflage von 11.000 Exemplaren. Der DSD informiert über aktuelle Themen ...

Euro am Sonntag

Euro am Sonntag

Deutschlands aktuelleste Finanz-Wochenzeitung Jede Woche neu bietet €uro am Sonntag Antworten auf die wichtigsten Fragen zu den Themen Geldanlage und Vermögensaufbau. Auch komplexe Sachverhalte ...