37
Softwaretechnik Prof. Dr. Wolfgang Schramm PROGRAMMIERUNG / CLEAN CODE 5. Kapitel

PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

Embed Size (px)

Citation preview

Page 1: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

Softwaretechnik

Prof.Dr.WolfgangSchramm

PROGRAMMIERUNG/CLEANCODE5.Kapitel

Page 2: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

1

Übersicht

1. Einführung in das Software Engineering

2. Softwareprozesse3. Anforderungsanalyse und -

Spezifikation4. Softwareentwurf5. Programmierung6. Software-Qualitätssicherung und

-Prüfung7. Konfigurationsverwaltung8. Software-Wartung

Page 3: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

2

Implementierung

Benutzung

Idee!!!

Problemdefinition, funktionale

Analyse

System-Entwicklung

Entwurf von Algorithmus und Datenbank,Hardware Konfiguration

System-Analyse

Page 4: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

3

Programmierung

Programming is a craft. It is dependent on individual skill, attention to detail, and knowledge of how to use available tools in the best way. Craftsmen must know their materials, understand the principles of their craft and learn by experience. Thus, programmers must understand both host and target computer systems, must know some theory of programming and must practice programming.

[Som06]

Page 5: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

4

Wichtige Eigenschaften von Programmiersprachen

o Strukturelemente zur Konstruktion modularer Programmeinheiten.o Trennung von Schnittstelle und Implementierung.o Mächtiges Typsystem mit strenger Typprüfung.o Syntax, die zur Lesbarkeit des Codes beiträgt.o Automatische Zeigerverwaltung.o Ausnahmebehandlung.

Page 6: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

5

Inhalt

1. Motivation2. Beispiele und Empfehlungen3. Ursachen und Konsequenzen4. Abhilfe schaffen am Beispiel

Page 7: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

6

Fragerunde

¨ Was fällt Ihnen zu dem Begriff "Code-Qualität" ein?

¨ Was hat positiven, was negativen Einfluss auf die Qualität von Code?

¨ Warum?

Page 8: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

7

Wie kommt es überhaupt zu schlechtem Code?

o Zu Beginn eines Projekts "auf der grünen Wiese" ist die Code-Qualität (meist) gut und sauber (clean).

o Schlechter wird die Code-Qualität von alleine:¤ Software(-Lösungen) wachsen und werden zunehmend

komplexer.¤ Änderungen schaden der (initial klaren) Struktur.¤ Zeitdruck führt zu nicht-idealen Lösungen.¤ Kurzfristige Lösungen werden nie verbessert.¤ Programmteile werden zweckentfremdet.¤ Kommentare werden nicht aktualisiert.¤ Dinge/Gründe, die zu Beginn noch "klar waren", werden

vergessen.

Page 9: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

8

Inhalt

1. Motivation2. Beispiele und Empfehlungen3. Ursachen und Konsequenzen4. Abhilfe schaffen am Beispiel

Page 10: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

9

Regeln für die Programmierung 1/2

o Richtlinien¤ Wie sind die Bezeichner zu wählen.¤ Wie ist das Layout zu gestalten.¤ Wie sind die Schnittstellen zu gestalten (globale Variablen, Reihenfolge

der der Parameter).¤ Was/Wie muss kommentiert werden.

Beispiele: GNU Coding Standard, Java Coding Style Guide¤ Umfang von Hauptprogramm, Prozeduren, Paketen in LOC.¤ Anzahl von Attributen pro Klasse.¤ Anzahl öffentlicher Methoden pro Klasse.¤ Umfang einer Daten (Klasse).

Page 11: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

10

Regeln für die Programmierung 2/2

o Ratschläge (nach Fairley [Fai85])¤ Don‘t be to clever.¤ Avoid null Then-statements and Avoid Then-If-statements.¤ Don’t nest too deepley.¤ Avoid obscure side effects .. . Avoid side effects.¤ Don’t suboptimize.¤ Routines having more than five parameters?¤ Don’t use an identifier for multiple purposes.

o Ergänzung¤ Logische Aussagen so einfach wie möglich halten.¤ Text- und Zahlenliterale (außer 0 und 1) gehören nicht in das Programm.¤ Jedes Programm muss ausreichend kommentiert sein.

if not (Bildschirmausgabe or DruckerAusgeschaltet) then ….

Page 12: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

11

Programm-Dokumentation

o Make the code as clear as possible to reduce the need for comments.

o Never repeat information in a comment that is readily available in the code.

o Where a comment is required, make it concise and complete.o Use proper grammar and spelling in comments.o Make comments visually distinct from the code.o Structure comments in headers so that the information can be

automatically extracted by a tool.

Page 13: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

12

Kommentare – Arten

o Kopfkommentare: am Anfang von Programmeinheiten (Module, Klassen u.ä.).

o Eingeschobene Kommentare: erläutern Zeilen oder Abschnitte einer Programmeinheit.

o Erläuterungen: kurze Beschreibung – z.B. bei Deklaration oder Wertzuweisung.

Page 14: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

13

Kommentare – Beispiel Kopfkommentar

o Verfasser und Datum.o Programmiersprache und Compiler (mit Versionsangaben).o Umgebung (verwendete System-Software).o Kurzbeschreibung.o Beziehung zu anderen Programmeinheiten (i.S.v. Benutzung).o Verweise auf externe Dokumente.o Verfasser, Datum, Anlass und Auswirkung von Änderungen (sofern

nicht durch ein eingesetztes Versionsverwaltungssystem geliefert).

Page 15: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

14

Robuste Programme

o The degree to which a system or a component can function correctly in the presence of invalid inputs or stressful environmental conditions.

è Der Code sollte auf viele mögliche Fehlersituationen reagieren:è Fehlerhafte Bedienung durch den Anwender.è Fehlerhafte Umgebungssituation.

Anteil des Codes für Fehlerbehandlung: 25% - 50%

Page 16: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

15

Werkzeuge zur Programmentwicklung

o Syntax-gesteuerter Editor: zum Erzeugen und Anzeigen syntaktischer Strukturen und Erkennung einfacher Fehler.

o Werkzeug, welches den Übersetzungs- und Bindeprozess steuert.o Werkzeug für die Verwaltung der Quellprogramme, auch aller

anderen Softwareeinheiten und ihrer Konfigurationen (Bsp.: make, ant).

o Werkzeuge, welche den Test unterstützen und die Testüberdeckung messen (Bsp.: JUnit).

o Werkzeug, welches den Code bezüglich der der Codierregeln prüft (Bsp.: Java CheckStyle).

o Debugger, zur Fehlersuche auf der untersten Ebene.

Page 17: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

16

Ein Beispiel für schlechten Code

o Was stört Sie (hoffentlich) an folgendem Programmcode:

• Was können Sie tun, um solche Codefragmente zu vermeiden?

• Wie würde die Methode dann aussehen?

Page 18: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

17

Fehlerbehandlung vom eigentlichen Ablauf trennen:

Entweder durch Exception Handler

oder

durch Behandlung der Situation außerhalb

Page 19: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

18

Ein Beispiel für schlechten Code: Fehlercodes

Die bessere Variante:

Page 20: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

19

Ein Beispiel für schlechten Code: null als Parameter

• Was passiert, wenn sie mit null aufgerufen wird:

• Eine Möglichkeit, mit diesem Parameter umzugehen:

• Eine andere Möglichkeit, mit diesem Parameter umzugehen:

• Eine Methode akzeptiert zwei Punkte als Parameter:

Page 21: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

20

Ein Beispiel für schlechten Code: null als Parameter

• Was passiert, wenn sie mit null aufgerufen wird:

• Eine Möglichkeit, mit diesem Parameter umzugehen:

• Eine andere Möglichkeit, mit diesem Parameter umzugehen:

• Eine Methode akzeptiert zwei Punkte als Parameter:

Page 22: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

21

Ein Beispiel für schlechten Code: Output-Parameter

o Was vermuten Sie, tut die folgende Programmzeile:…wenn Sie das Popup dazu sehen?

• Wie sollte diese Zeile stattdessen geschrieben werden?

Page 23: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

22

Ein Beispiel für schlechten Code: Output-Parameter

o Was sagt Ihnen die folgende Programmzeile:…wenn Sie das Popup dazu sehen?

• Wie sollte diese Zeile geschrieben sein?

Page 24: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

23Trennen von Anweisungen und Abfragen

• Was tut (vermutlich) die Methode set im folgenden Beispiel:

• Empfehlung:Trennen Sie immer Anweisungen von Abfragen, zum Beispiel:

Page 25: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

24

Boole'sche Parameter vermeiden

• Was tut (vermutlich) der folgende Aufruf:…wenn Sie das Popup dazu sehen?

• Wie könnte eine bessere Lösung aussehen?Empfehlung:Verwenden Sie zwei Methoden mit aussagekräftigen Namen!

Page 26: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

25

Diskussion

¨ Diskutieren Sie folgende Behauptungen zu Kommentaren:¤ Wenn wir uns mittels

Programmcode gut genug ausdrücken könnten, würden wir keine Kommentare brauchen

¤ Kommentare sind kein Ersatz für schlechten Code

¤ Ein Kommentar bekräftigt unsere Unfähigkeit, guten Code zu schreiben

Page 27: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

26

Kommentare vs. guter Code

• Welches Programm würden Sie lieber lesen,dieses hier:

… oder dieses:

Page 28: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

27Pfadfinder-Regel

Hinterlassen Sie Programmcode immer etwas aufgeräumter als Sie ihn vorgefunden haben!

frei nach Robert Stephenson Smyth Baden-Powell

Page 29: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

28

Inhalt

1. Motivation2. Beispiele und Empfehlungen3. Ursachen und Konsequenzen4. Abhilfe schaffen am Beispiel

Page 30: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

29

Fragerunde

¨ Welche Auswirkungen kann (besonders) guter Code haben?

¨ Welche Auswirkungen kann (besonders) schlechter Code haben?

Page 31: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

30

Wie kommt es zu schlechtem Code:Metapher

What’s the fastest way to be done with dinner? Get up from the table and not do the clean up. When it is time to eat we just find the cleanest dishes and when dinner is over we leave the dishes dirty again. Eventually it is so hard to make dinner we outsource dinner. Sushi chefs clean as they prepare food. If you want to go fast – go as clean as you can. The only way to go fast is to go clean.

[Robert C. "Uncle Bob" Martin]

http://farm3.staticflickr.com/2485/4070664881_441658bc44_z_d.jpg

Page 32: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

31

Fragerunde

¨ Wie misst man die Qualität von Code?

Page 33: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

32

Page 34: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

33

Inhalt

1. Motivation2. Beispiele und Empfehlungen3. Ursachen und Konsequenzen4. Abhilfe schaffen am Beispiel

Page 35: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

34

Fragerunde

¨ Was kann man gegen schlechten Code tun?

Page 36: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

36

Refactoring am Beispiel

Page 37: PROGRAMMIERUNG / CLEAN CODE 5. Kapitelservices.informatik.hs-mannheim.de/~schramm/see/files/Kapitel05.pdf · 3 Programmierung Programming is a craft. It is dependent on individual

38

Quellen

o Robert C. Martin:Clean Code: A Handbook of Agile Software Craftsmanship, Prentice Hall International, 2008

o Object Mentor:http://www.objectmentor.com/omTeam/martin_r.html

o Martin Fowler:Improving the Design of existing Code, Addison-Wesley Longman, 2002