18

Click here to load reader

Web Entwicklung mit PHP - Teil 3 Beta

Embed Size (px)

DESCRIPTION

This part is not finished yet and may be altered at a later date with corrections and updates.

Citation preview

Page 1: Web Entwicklung mit PHP - Teil 3 Beta

PHPPersonal Homepage Tools - Hypertext Preprocessor

Programmieren für das Web

Teil 3 - Qualität und Standards

Version: 2012-05-15

License: CC BY NC SA

Erstellt von Hans-Joachim Piepereit ([email protected])Konstruktives Feedback hierzu ist gern gesehen

Page 2: Web Entwicklung mit PHP - Teil 3 Beta

Inhaltsverzeichnis1 Kommentare 3

2 Formatierung 5

3 Struktur 83.1 Grundlagen und Gestaltung . . . . . . . . . . . . . . 83.2 Wartung verbessern mit SOLID und LoD . . . . . . . 113.3 Technische Schulden . . . . . . . . . . . . . . . . . . 13

4 Software Projekte 144.1 PHP Tools . . . . . . . . . . . . . . . . . . . . . . . 144.2 Verwaltung und Übersicht . . . . . . . . . . . . . . . 17

5 Anhang 185.1 Verweise und Empfehlungen . . . . . . . . . . . . . . 18

2

Page 3: Web Entwicklung mit PHP - Teil 3 Beta

1 KommentareWo wird kommentiert?

- Zuständigkeit der Datei am Beginn dieser beschreiben- Konstrukte wie z.B. Klassen, Methoden und Attribute erklären- Programmfluss beschreiben, um diesen nachvollziehbar zu machen- Unfertige Bereiche mit Meta-Tags wie z.B. @TODO oder @FIXME

Wie wird kommentiert?

- Einheitliche Sprache, International bietet sich Englisch an- Nicht den Code wiederholen, sondern einen Mehrwert schaffen

Blöcke /** **/Einzeiler //Ungenutzer Programmcode ]

3

Page 4: Web Entwicklung mit PHP - Teil 3 Beta

Warum wird kommentiert?

- Schnellere Einarbeitung für andere Personen und die spätere Pflege- Generierung einer API Dokumentation mit z.B. phpDocumentor

1 <?php // B e i s p i e l e i n e s Datei−Info−Kommentar−Blockes :2 /∗∗3 ∗ This f i l e does some kind o f magic4 ∗5 ∗ PHP Vers ion 56 ∗7 ∗ @category Magic8 ∗ @package Example9 ∗ @author Hans−Joachim P i ep e r e i t <hajo_p@live . de>

10 ∗ @copyright 2012 Hans−Joachim P i ep e r e i t11 ∗ @l i c ens e http : // creativecommons . org CC BY NC SA12 ∗∗/

4

Page 5: Web Entwicklung mit PHP - Teil 3 Beta

2 FormatierungEinrückungWo wird eingerückt?

Je Abschnitt bzw. logischem Unterbereich

1 <?php2 {3 // Hier i s t e in e i g en e r Unterbere i ch4 }

Wie wird eingerückt?

- Mit 4 Leerzeichen, (Tabs als 4 Leerzeichen im Editor einstellen)- Keine Tabs (bringen Probleme mit bei Patches, Diffs, usw.)

5

Page 6: Web Entwicklung mit PHP - Teil 3 Beta

Warum wird eingerückt?

- Gleichmäßiger Lesefluss und bessere Lesbarkeit- Abschnitte wie z.B. Schleifen leichter erkennbar

Maximale Zeilenlänge

- Sollte zwischen 75 und 85 Zeichen liegen, Einrückung inklusive- Erspart das Scrollen bzw. Umbrechen von Zeilen im Editor- Verhindert das Schachteln zu vieler Abläufe je Zeile

PHP TagsKein "Short open tag" verwenden (<? und bis 5.4 auch <?=)Nur <?php verwenden und kein "Closing tag" am Dateiende (?>)

6

Page 7: Web Entwicklung mit PHP - Teil 3 Beta

Dateiformat- Vorzugsweise als ASCII bzw. ISO oder UTF-8 abspeichern- Kein BOM (Byte order mark) aktivieren bzw. verwenden- Zeilenumbrüche nach Unix-Art per LF bzw. "\n"- Kein CR bzw. "\r" verwenden (Achtung bei Windows vor CRLF)

Namensgebung im Quelltext- Sprechende, sinnvolle und unabgekürzte Namen verwenden- Klassen beginnen immer mit einem Großbuchstaben- Alles mit Sichtbarkeit "private" beginnt mit einem Unterstrich (_)- Für "protected" usw. ist der Unterstrich zu Beginn nicht erlaubt

Funktionen und Methoden

- Beginnen mit einem Kleinbuchstaben, z.B. getMyData()- In der Folge beginnt jedes Wort mit einem Großbuchstaben

7

Page 8: Web Entwicklung mit PHP - Teil 3 Beta

3 Struktur3.1 Grundlagen und GestaltungKohäsion

- Jede Programmeinheit ist in eine eigene Klasse geschachtelt- Jede Aufgabe ist darin in einer eigenen Methode platziert- Starke Kohäsion erleichtert die Wartung und Pflege von Software

DRY - Wiederhole dich nicht

- Redundanz sollte vermieden oder zumindest reduziert werden- Verringert die Anzahl und Wartung von Duplikaten- Es hilft bei der Wahrung von Zuständigkeiten in der Software- Weniger Code bedeutet weniger Arbeit und bessere Übersicht

8

Page 9: Web Entwicklung mit PHP - Teil 3 Beta

KISS - Bevorzuge einfache Lösungen

- Komplexe Lösungen sind meist nur schwer durchdringbar- Je einfacher ein Problem gelöst werden kann, umso besser- Klein beginnen und bei Bedarf erweitern (Minimalismus)

Konvention über Konfiguration

- Benenne und gestalte so viel wie möglich in einheitlicher Form- Gehe vom Normalfall aus und Konfiguriere nur die Abweichungen- Verringert den Umfang und Aufwand für Konfiguration + Wartung

OOP - Objektorientierung

- Nicht alles muss zwangsläufig ein eigenes Objekt sein- OOP in PHP ist eher statisch, kann auch so verwendet werden- Singletons zeigen oftmals, dass dies nicht verstanden wird- Workarounds für fehlende Features bringen zu viel Aufwand mit

9

Page 10: Web Entwicklung mit PHP - Teil 3 Beta

Vertragsmodell

- Bei der Interaktion mit einem Objekt schließt man einen Vertrag- Das Objekt sichert dabei zu, wie es auf Anfragen antwortet- Der Anfrager muss dafür die Vorbedingungen einhalten- Durch definierte Fehler werden Folgefehler und Probleme vermieden- Das Verhalten der Software kann man dadurch leichter vorhersagen

Sichtbarkeit von Daten

- Alles nicht für die Interaktion notwendige wird verborgen- Beispiel: "private" und "protected" bei Attributen und Methoden- Kapselung schirmt das Objekt besser von äußeren Einflüssen ab- Führt zu besseren Schnittstellen und zielgerichteter Interaktion

10

Page 11: Web Entwicklung mit PHP - Teil 3 Beta

3.2 Wartung verbessern mit SOLID und LoDS - Single Responsibility

- Es sollte nie mehr als einen Grund geben eine Klasse zu ändern- Verlang einen starken Bezug zwischen Methoden und ihrer Klasse- Soll z.B. durch Redundanz erzeugte Wartungsfehler verhindern

O - Open Closed Principle

- Halte Module offen für Erweiterungen (z.B. Vererbung anbieten)- Verbiete Modifikationen am Verhalten oder gar der Schnittstelle

L - Liskov Substitution Principle

- Subklassen sollten sich wie Superklassen verhalten- Dadurch sind diese Austauschbar und die Vererbung resistenter- Unerwartetes Verhalten und Verletzungen später schwer Auffindbar

11

Page 12: Web Entwicklung mit PHP - Teil 3 Beta

I - Interface Segregation

- Interfaces sollten nur das für ihre Verwendung nötige enthalten- Zu große oder generische Interfaces sind in kleinere zu zerlegen

D - Dependency Inversion Principle

- Hohe Ebenen sollten nicht von niedrigen Ebenen abhängen- Abstraktionen sind es, wovon diese Module abhängen sollten- Abhängigkeiten verlaufen damit nur in genau eine Richtung- Vermeidet zyklische bzw. reduziert allgemeine Abhängigkeiten

LoD - Gesetz von Demeter

- Da sinnvoll, wo Vermittler (Wrapper) den Vorteil nicht zerstören- Liefert eine Möglichkeit die Kopplung zwischen Objekten zu messen- Objekte sollten nur mit ihrer direkten Umgebung kommunizieren- Beteilige so wenig Programmteile wie Möglich (Verschwiegenheit)

12

Page 13: Web Entwicklung mit PHP - Teil 3 Beta

3.3 Technische Schulden- Gewollte bzw. geplante Schulden bei der Qualität der Software- Sind dazu da z.B. Meilensteine noch rechtzeitig zu erreichen- Sollten in jedem Fall dokumentiert und nachgeholt werden- Mit der Zeit wird das Aufholen zunehmend schwieriger

Ursachen

Eingeplant, fehlende Zeit, fehlende Kenntnisse oder Erfahrungen,unzureichende Kommunikation, parallele Entwicklungsprozesse,unterlassene Überarbeitung von veraltetem Code (Refactorings)

Beispiele

Fehlende Dokumentation oder Tests, Abweichungen von Standards,hohe Komplexität im Code, viele Redundanzen, enge Kopplungen,aber auch fehlende Sicherungen, Versionierung oder notwendige Tools

13

Page 14: Web Entwicklung mit PHP - Teil 3 Beta

4 Software Projekte4.1 PHP ToolsXdebug

http://www.xdebug.org- PHP Erweiterung für Debugging und Profiling- Auch mit Editoren wie z.B. Eclipse oder NetBeans verwendbar

CodeSniffer

http://pear.php.net/package/PHP_CodeSniffer- Durchsucht PHP Quelltext nach Abweichungen gegenüber Regeln- Regeln wahlweise aus Vorlagen (z.B. PEAR) oder XML Datei

14

Page 15: Web Entwicklung mit PHP - Teil 3 Beta

PHP Copy Paste Detector

http://github.com/sebastianbergmann/phpcpd- Durchsucht PHP Quelltext nach dupliziertem Inhalt

PHP Depend

http://pdepend.org- Statische Code Analyse für Software Metriken- Zeigt z.B. zyklomatische Komplexitäten an

PHP Documentor

http://phpdoc.org- Generiert eine API Dokumentation aus Kommentaren- Version 2 hieß vormals DocBlox und ersetzt das uralte 1.x

15

Page 16: Web Entwicklung mit PHP - Teil 3 Beta

PHP Lines of Code

http://github.com/sebastianbergmann/phploc- Zählt die Zeilen und andere statistische Werte im Code

PHP Mess Detector

http://phpmd.org- Sucht im Code nach möglichen Fehlern und suboptimalen Inhalten- Findet auch ungenutzte Variablen, Methoden, usw.

PHP Unit

http://github.com/sebastianbergmann/phpunit- Unit Test Framework für PHP mit vielen Möglichkeiten- Kann um Code Coverage Metriken ergänzt werden

16

Page 17: Web Entwicklung mit PHP - Teil 3 Beta

4.2 Verwaltung und ÜbersichtVersionskontrolle

- Es sollte so etwas wie Git oder Subversion verwendet werden

Jenkins for PHP

http://jenkins-php.org- Vereint die meisten oben genannten Tools an einer Stelle- Jenkins ist ein Java basierter Continuous Integration Server- Empfehlung: phpDox durch phpDocumentor2 austauschen

Sonar mit PHP Plugin

http://www.sonarsource.org- Software Analyse zu Coding Rules, Tests und anderen Metriken- Die generierten Reports sagen viel über die Software aus

17

Page 18: Web Entwicklung mit PHP - Teil 3 Beta

5 Anhang5.1 Verweise und EmpfehlungenWebsites zu den Themenhttp://pear.php.net/manual/standards.php PEAR Coding Standardhttp://martinfowler.com Martin Fowlerhttp://www.objectmentor.com Object Mentor (RCM)

Bücher zu den ThemenPHP Design Patterns Stephan SchmidtSoftware Qualität in PHP Sebastian BergmannPHP Projects with Jenkins Sebastian BergmannPatterns of EAA Martin FowlerClean Code Robert C. Martin

18