Kurzbeschreibung
Softwareentwicklung braucht Profis. Wie aber definiert man einen "professionellen" Software-Entwickler ? Clean Code Development ist eine der ersten "Versuche", um diese Frage möglichst umfassend, technologieunabhängig und über die Bedürfnisse des Kunden hinaus zu beantworten.
Inhalt
Was ist ein professioneller Software-Entwickler
Professionlität
Qualität
Das CCD Werte-System
Prinzipien und Praktiken
Das Grad-System
6. Professionalität
• ..wenn man studiert hat
• ..wenn man zertifiziert ist
• ..wenn man sein Geld damit verdient
• ..wenn man die Wünsche des Kunden
erfüllt
• ..wenn man..ja wenn man....
Mittwoch, 26. Januar 2011 6
7. Professionalität
Professionalität = Wissen + Ethik
Professionalität hat was mit
Wissen und Erfahrung zu tun,
aber auch mit Ethik
Mittwoch, 26. Januar 2011 7
8. Professionalität
Ethik hat etwas mit Werten zu tun
Mittwoch, 26. Januar 2011 8
9. Professionalität
Hände wachen ist für den Chirug
selbst verständlich. Bitte um Unterlassung
wegen Kosten wird er ablehnen.
Mittwoch, 26. Januar 2011 9
10. Qualität
Qualität
Er wäscht sich die Hände um die
Qualität seiner Arbeit
sicherzustellen bzw. zu steigern.
Mittwoch, 26. Januar 2011 10
11. Qualität
Qualität ist der
„Grad, in dem ein Satz inhärenter Merkmale
Anforderungen erfüllt“
Norm EN ISO 9000:2005, nach http://de.wikipedia.org/wiki/Qualität
Mittwoch, 26. Januar 2011 11
12. Inhärente Merkmale
• Usibility
• Portabilität
• Performance
• Sicherheit
• Fehler-Toleranz
• Testbarkeit Solche Punkte wird ein Kunde selten von
sich aus als erstes ansprechen.
Mittwoch, 26. Januar 2011 12
13. Anforderungen
Wer gibt denn überhaupt
Anforderungen vor ?
Mittwoch, 26. Januar 2011 13
14. Qualität
Äußere Qualität
Innere Qualität
Diese beiden Qualitäten sind
nicht immer gleich verteilt.
Mittwoch, 26. Januar 2011 14
15. Qualität
Ein Clean Code Developer ist ein Gegengewicht
Mittwoch, 26. Januar 2011 15
16. Qualität
Ein Clean Code Developer definiert ein
Werte-System für mehr innere Qualität
Mittwoch, 26. Januar 2011 16
17. Clean Code Developer
Ein professioneller Softwareentwickler hat ein inneres Wertesystem.
Gegen dieses Wertesystem, bestehend aus Gesetzen, Prinzipien und Best
Practices, prüft er seine Ergebnisse und Handlungen. Nur, wenn seine Arbeit
diesem Wertesystem entspricht, empfindet er sie als gut getan, als
professionell. Sein Streben ist es daher, auch unter widrigen Umständen, unter
Druck von Kunden oder Herstellern, diesem Wertesystem treu zu sein.
Mittwoch, 26. Januar 2011 17
18. Das Wertesystem
Evolvierbarkeit
Je einfacher die Software an geänderte
Rahmenbedingungen angepasst werden kann, desto höher
ist ihre Evolvierbarkeit.
18
Mittwoch, 26. Januar 2011 18
19. Das Wertesystem
Korrektheit
Die Software muss korrekt arbeiten, also zum Beispiel
„richtig“ rechnen. Aber auch nicht-funktionale
Anforderungen, wie Ressourcen-Verbrauch und z.B.
Reaktionszeit müssen erfüllt werden.
19
Mittwoch, 26. Januar 2011 19
20. Das Wertesystem
Produkteffizienz
Preis, Entwicklungszeit, Fehlerraten, Automatisierung sind
alles Aspekte von Produkteffizienz
Eine gute Qualität nutzt nichts wenn
man 2 Jahre über dem Zeitplan liegt.
20
Mittwoch, 26. Januar 2011 20
21. Das Wertesystem
Reflexion
Ständige Weiterentwicklung und Überprüfung der eigenen
Arbeit.
Dazu gehört auch:
ExtremeProgramming
Pairprogramming
Code Reviews
21
Mittwoch, 26. Januar 2011 21
22. Prinzipen und Praktiken
Alles schön....aber wie jetzt in der Praxis ?
Wie kann ich die Werte
umsetzen ?
Dafür gibt es beim CCD Prinzipien
und Praktiken.
22
Mittwoch, 26. Januar 2011 22
23. Das Grad-System
Schwarz Als einzelner Entwickler
Rot
Orange
Im Team
Gelb
Grün
Blau
Weiß Als Unternehmen
Die Grade drücken keinen Wert aus. Wer am blauen Grad arbeitet ist nicht "besser" oder "weiter" als
jemand, der am orangen Grad arbeitet. Die Grade sind nur ein didaktisches Hilfsmittel, um die Gesamtheit
des Wertesystems "einfacher verdaubar" zu machen. Die vielen Werte lassen sich schlicht in kleinen Happen
besser aneignen, als in einem Anlauf.
23
Mittwoch, 26. Januar 2011 23
25. Prinzipien
Open Closed Principle
Das Open Closed Principle ( OCP) besagt, dass eine
Klasse offen für Erweiterungen sein muss, jedoch
geschlossen gegenüber Modifikationen
25
Mittwoch, 26. Januar 2011 25
26. Prinzipien
Favour Composition over Inheritance
Für die Wiederverwendung von Funktionalität kennt die Objektorientierte Programierung
(OOP) zwei sehr bekannte Kandidaten: Die Vererbung (whitebox – reuse) und die
Komposition (blackbox – reuse). Verwendet man Funktionalität wieder durch das
Ableiten von einer Klasse, so ist die Subklasse abhängig von der Elternklasse. Dies
macht ein System in vielen Fällen unnötig komplex, schlechter testbar und erschwert
das Austauschen von Funktionalität zur Laufzeit. CCD hat für das korrekte Ableiten das
Liskov Substitution Prinzip (LSP) bereit, das es dabei zu befolgen gilt.
Bei der Komposition verwendet eine Klasse eine andere. Verwendet man dazu eine klar
definierte Schnittstelle, fördert das die Entkopplung. Auch können verschiedene
Implementationen einfach ausgetauscht werden. Bevor man sich also der Liskov
Substitution stellt, fordert Favour Composition over Inheritance, sich die Frage zu
stellen, ob man der Komposition nicht Vorrang geben kann.
26
Mittwoch, 26. Januar 2011 26
27. Prinzipien
Interface Segregation Principle
Das Interface Segregation Principle ( ISP) ist ein weiteres SOLID
Prinzip. Segregation bedeutet Abtrennung. Das Prinzip besagt, dass
ein Client nicht von Details eines Service abhängig sein soll, die er
gar nicht benötigt. Je weniger in dessen Interface enthalten ist,
desto geringer ist die Kopplung zwischen den beiden Komponenten.
27
Mittwoch, 26. Januar 2011 27