Effizientes Programmieren Heutige Themen: 1) Agile Softwareentwicklung 2) Refactorings Michaela Rindt (mrindt@informatik.uni-siege.de) Effizientes Programmieren Wie kann ein Entwicklungsteam effizient arbeiten? ● m.a.W: flexibel und agil auf Änderungswünsche / Probleme reagieren, ● die Software-Qualität kontinuierlich steigern und ● Wartungskosten und Einarbeitungszeiten reduzieren Effizientes Programmieren Welche Programmiertechniken sind effizient? ● hinsichtlich Wartung und Pflege, ● Geschwindigkeit beim Programmieren, ● Kollaboration und ● Aufdeckung und Vermeidung von Programmierfehlern 1.) Agile Softwareentwicklung Bild-Quelle: http://imgkid.com/growing-plant-png.shtml Agile Softwareentwicklung agile = (engl.) beweglich / flexibel ● ● ● Vorgehensmodell für Projektentwicklung Philosophie (mit Werten, Prinzipien und Methoden) ● ● ● Trend: ~ seit Jahrtausendwende jungen, dynamischen Startup-Unternehmen Wird zunehmend eingesetzt ingroßen, erfolgreichen Unternehmen (u.a. Microsoft, Google, Symantec) Bild-Quelle: http://imgkid.com/growing-plant-png.shtml Agile Softwareentwicklung ● Gegenbewegung zum klassischen Vorgehensmodell in der Softwareentwicklung (traditionell: V-Modell bzw. Wasserfallmodell) ● Kennzeichnend: (1) geringer bürokratischer Aufwand (2) starker Fokus auf Ziele, technische und v.a. soziale Aspekte Bild-Quelle: http://imgkid.com/growing-plant-png.shtml Verschiedene Agile Vorgehensmodelle ● Scrum ● Kanban ● eXtreme-Programming (XP) ● Crystal ● Feature Driven Development ● Adaptive Software Development ● u.v.m. Der gemeinsame Nenner ist das 'Agile Manifest': st e f i n a M e Das Agil 1) Menschen und Interaktionen sind wichtiger als Prozesse und Werkzeuge. 2) Funktionierende Software ist wichtiger als umfassende Dokumentation. 3) Zusammenarbeit mit dem Kunden ist wichtiger als die ursprünglich formulierten Leistungsbeschreibungen. 4) Eingehen auf Veränderungen ist wichtiger als Festhalten an einem Plan. Die A gilen Prinz ipien 1) Zufriedenstellung des Kunden durch frühe und kontinuierliche Auslieferung von wertvoller Software 2) Agile Prozesse nutzen Veränderungen (selbst spät in der Entwicklung) zum Wettbewerbsvorteil des Kunden. 3) Lieferung von funktionierender Software in regelmäßigen, bevorzugt kurzen Zeitspannen (wenige Wochen oder Monate) 4) Nahezu tägliche Zusammenarbeit von Fachexperten und Entwicklern während des Projektes (Bsp.: Gemeinsamer Code-Besitz (Collective Code Ownership)*) *d.h. Code 'gehört' dem Team; 5) Bereitstellung des Umfeldes und der Unterstützung, welche von motivierten Individuen für die Aufgabenerfüllung benötigt wird** 6) Informationsübertragung nach Möglichkeit im Gespräch von Angesicht zu Angesicht ... Quelle: Wikipedia zu Agile Softwareetwicklung (Stand 23.03.2015) ... 7) Als wichtigstes Fortschrittsmaß gilt die Funktionsfähigkeit der Software 8) Einhalten eines gleichmäßigen Arbeitstempos von Auftraggebern, Entwicklern und Benutzern für eine nachhaltige Entwicklung * Die A gilen Prinz ipien *d.h. keine Überstunden! 9) Ständiges Augenmerk auf technische Exzellenz und gutes Design 10) Einfachheit ist essenziell (KISS-Prinzip)** **Keep-it-Short-and-Simple 11) Selbstorganisation der Teams bei Planung und Umsetzung 12) Selbstreflexion der Teams über das eigene Verhalten zur Anpassung im Hinblick auf Effizienzsteigerung Quelle: Wikipedia zu Agile Softwareetwicklung (Stand 23.03.2015) ilen g A Die n e d o h Met ● Paar-Programmierung ● Test-Driven Development ● Kontinuierliches Refactoring Quelle:http://www.agilenutshell.com/test_driven_development Quelle: http://www.itagile.de/wissen/methoden/scrum/ ilen g A Die ● n e d o h Met Story-Point Schätzungen Aufgaben/Features werden zu 'stories'. Aufwandsschätzung der Stories relativ zueinander Punkte (pts=points) in Fibonacci-Folge. Quelle: http://www.agilenutshell.com/episodes/ 3-estimation ilen g A Die ● n e d o h Met Retrospektiven Was ist in letzter Zeit geschehen? Was war gut? Was schlecht? Welche Daten zur Qualität und Produktivität liegen vor? Quelle: https://hakanforss.wordpress.com/2012/04/25/agile-lego-toyota-kata-an-alternative-to-retrospectives/ comm it mi t m o c comm it baseline nM e l i g Die A n e d o h et ● Continuous Integration – Versions Kontrolle durch Repository – Tagliche baseline commits – Automatisierte, schnelle Build-Prozesse – automatisierte Self-Tests – automatisiertes Deployment – Breaking Builds sofort für alle sichtbar, automated build and self-test O.K. Error zur schnellen Fehlerbeseitigung – u.v.m. Breaking-Build Bildquelle: http://www.qubiz.com/continuous-integration-future-development/ ilen g A Die n e d o h Met Code-Reviews – Wechselnde Review-Partner – Wissensverteilung im gesamten Team – Gegenseitiger Respekt Quelle: http://www.osnews.com/story/19266/WTFs_m Offensichtliche logische Fehler? Anforderungen vollständig implementiert? Reichen die automatisierten Tests oder werden neue benögtigt für diesen Code? Konform zu Stil-Konventionen? Im Vergleich: alte vs. moderne Entwicklungs-Zyklen Traditionelle Entwicklungs-Zyklen Lange, autarke Phasen (z.T. wiederkehrende Iterationen) Bild-Quelle: The Art of Agile Development Im Vergleich: alte vs. moderne Entwicklungs-Zyklen Agile Entwicklungs-Zyklen (hier: eXtreme Programming) kurze, regelmäßig wiederkehrende Iterationen mit parallel laufenden Prozessen one „story“ (=feature) per week Bild-Quelle: The Art of Agile Development Warum all der Wandel? ● ● Traditionelles Verständnis einer erfolgreiche Software Lieferung – falls rechtzeitig, – im Budget und – entsprechend der Anforderung Allerdings: steht häufig im Widerspruch zur Realität – unvollständiger Software → Hohe Umsätze – Konformität zu obigen Kriterien → ausbleibender Erfolg Warum all der Wandel? Tatsächlich ist Erfolg gegeben durch: Quelle: The Art of Agile Developement. Denn: ● Ohne Persönlicher Erfolg → fehlt langzeitliche Motivation aller Angestellten ● Ohne technischen Erfolg → schlechte Wartbarkeit und Fehleranfälligkeit des Source-Codes ● Ohne Unternehmenserfolg → Angestellte fürchten um ihren Job SCRUM - ein agiles Vorgehensmodell - SCRUM ● ● ● agiles Vorgehensmodell für Projekt- u. Produktmanagement Besonderheit: Scrum akzeptiert, dass der Entwicklungsprozess nicht vorherzusehen ist Klare Definition von Rollen und zeitlichen Abläufen: SCRUM Quelle: http://www.it-agile.de/wissen/methoden/scrum/ SCRUM Transparenz des Fortschritts für alle: „Burndown Chart of Agilo for Scrum“ von agile42 GmbH. Original uploader was Teckmx5 at de.wikipedia - Transferred from de.wikipedia; transferred to Commons using CommonsHelper.(Original text : agile42 GmbH). Lizenziert unter Apache License 2.0 über Wikimedia Commons - http://commons.wikimedia.org/wiki/File:Burndown_Chart_of_Agilo_for_Scrum.png#/media/File:Burndown_Chart_of_Agilo_for_Scrum.png SCRUM Definition of 'Done' (DoD): ● gemeinsames Verständnis eines Teams, unter welchen Bedingungen eine Arbeit als fertig bezeichnet wurde. Beinhaltet ● ● ● ● ● Qualitätskriterien Einschränkungen Erfüllung der Anforderungen Vorhandensein von Kommentaren, Unit Tests, etc. Definition wird zu Beginn eines Sprints festgelegt SCRUM Weitere Techniken (nicht Teil des SCRUM-Kerns) ● ● User-Stories wer ry 12 User-Sto Taskboard was e de Webseit Als Kun h eine Intranet- n Firmennews. ic llung vo te möchte s r a D nen zur inter warum user-stories To-Do WIP Done SCRUM Weitere Techniken (nicht Teil des SCRUM-Kerns) ● Planungspoker ● Impediment Backlog Quelle: http://www.personalisedplayingcards.com/playing cards/planning-poker-cards.html Neue Aufgaben u. Hindernisse Backlog Schu tz Schild - SCRUM Master Working Team Kanban - ein agiles Vorgehensmodell - Kanban ● = (jap.) Signalkarte ● agiles Vorgehensmodell zur Produktionsprozesssteuerung (mit SCRUM kombinierbar) ● Entspringt dem Toyota-Produktionssystem ● Zweck: Begrenzung von parallel durchgeführter Arbeiten → dadurch veringerte Durchlaufzeiten von Aufgaben → Aufdeckung von Engpässen Kanban ● Besonderheiten: – Kanban-Board – zur Arbeitsfluss-Visualsierung – Kaizen - Kultur der kontinuierlichen Verbesserung: ● Standup Meetings ● Operations Review / Retrospektive ● Tracking (des Fortschritts) mit div. Diagrammen Limitierte Anzahl paralleler Arbeiten pro Station Kanban-Board Pull-System – Reduzierte Parallelität von WIPs - Engpasserkennung pulled-in tasks Durchlauf http://www.it-agile.de/wissen/methoden/kanban/ eXtreme Programming (XP) - ein agiles Vorgehensmodell - eXtreme Programming (XP) ● Entspringt Entwicklungsprozessen von Daimler Chrysler ● Agiles Vorgehensmodell bzw. Philosophie ● Kann mit SCRUM kombiniert werden ● Werte „XP-Werte“ von Michael Hüttermann - Eigenes Werk. Lizenziert unter Gemeinfrei über Wikimedia Commons http://commons.wikimedia.org/wiki/File:XP-Werte.png#/media/File:XP-Werte.png eXtreme Programming (XP) ● Prinzipien – Rapid feedback – Assume simplicity – Incremental change – Embracing Change – Quality Work eXtreme Programming (XP) – Teach Learning – Small Initial Investment – Play to win – Concrete Experiments – Open, honest Communication eXtreme Programming (XP) – Work with people's insticts, not against them – Accepted Responsibility – Local Adaption – Travel light – Honest Measurement Details nachlesbar auf: http://www.scrum-kompakt.de/grundlagen-des-projektmanagements/extreme-programming-xp/ eXtreme Programming (XP) ● Praktiken: On-Site Customer: Kunde muss Ansprechpartner bereitstellen, der in der Planungsphase und bei Fragen miteinbezogen wird. Sonstige Praktiken: „Xp-kreis“ von Michael Hüttermann - Eigenes Werk. Lizenziert unter Gemeinfrei über Wikimedia Commons http://commons.wikimedia.org/wiki/File:Xp-kreis.png#/media/File:Xp-kreis.png 2.) Refactoring - Entwicklungsmethode - Bild-Quelle: http://www.goldbachinteractive.com/aktuell/kurzbeitraege/next-step-of-evolution Refactoring ● … ist wesentlicher Bestandteil von Agiler Entwicklung (aber auch unabhängig davon) ● ... ist das Verbessern von vorhandenem Quellcode ● ... verändert nicht das äußere Verhalten eines Programmes, sondern nur seine interne Struktur. Bild-Quelle: http://www.goldbachinteractive.com/aktuell/kurzbeitraege/next-step-of-evolution Refactoring Positive Effekte: – Lesbarkeit und Nachvollziebarkeit des Codes wird verbessert – Leicht erweiterbarer Code, d.h. zukünftige Änderungen müssen nicht umständliche 'gehackt' werden – Beseitigt bad smells und minimiert damit Wahrscheinlichkeiten für die Entstehung neuer Bugs – Integrität und Qualität des Programmes wird langzeitlich gesichert – Aufwand für Ergänzungen und die Einarbeit neuer Mitarbeiter wird minimiert Refactoring Typische Änderungen im Refactoring-Prozess: – Reduktion oder auch Ergänzung von Kommentaren / Dokumentation – Variablen- und Methodennamen Anpassung entsprechend ihrer Funktion – Zusammenlegung oder auch Aufteilung oder Auslagern von Code-Fragmenten – Entfernen von Redundanzen (z.B. überflüssige Imports / unnötige Methoden oder Variablen) – Strukturelle Verschiebungen von Code-Fragmenten – Testbarkeit von Funktionen ermöglichen Beispiele für Refactorings Alle folgenden Beispiele (u.v.m.) stammen von Martin Fowler. Sie sind in diesem Buch nachzuschlagen. oder unter: http://refactoring.com/catalog/ Bedingungen mit Polymorphismus ersetzen Quelle: http://refactoring.com/catalog/replaceConditionalWithPolymorphism.html Methoden nach oben ziehen Quelle: http://refactoring.com/catalog/pullUpMethod.html Geschachtelte Bedingungen mit geschützten Klauseln ersetzen Quelle: http://refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html Mehrere Bedingungen konsolidieren Alle Bedingungen liefern den gleichen Wert wenn true Methoden vereinen Quelle: http://refactoring.com/catalog/consolidateConditionalExpression.html Code-Duplikate in einen Ausdruck packen Beide Fälle Wenden gleiche Methode an Methode nach 'außen' verfrachten Quelle: http://refactoring.com/catalog/consolidateDuplicateConditionalFragments.html Abfrage und Modifizierung trennen Quelle: http://refactoring.com/catalog/separateQueryFromModifier.html Typ-Codierung mit Strategy ersetzen Codierung mit 0 oder 1 Werten Typdefinition mithilfe von Klassen Engineer Salesman Hinweis: Fehler im original Bild: Quelle: http://refactoring.com/catalog/replaceTypeCodeWithStateStrategy.html Array mit Objekten ersetzen Informationen an festen Positionen in statischem Array Objekte mit get/setter für feste Informationstypen Quelle: http://refactoring.com/catalog/replaceArrayWithObject.html Magische Nummern mit symbolischen Konstanten ersetzen Wiederkehrende Zahlen Verwendung von Konstanten Quelle: http://refactoring.com/catalog/replaceMagicNumberWithSymbolicConstant.html Konstructor-Zuweisungen nach oben ziehen Initialisieren von geerbten Attributen … kann an Konstrukter der Oberklasse weitergereicht werden. Quelle: http://refactoring.com/catalog/pullUpConstructorBody.html Weiterführende Literatur ● ● ● ● „The Art of Agile Development“; Autoren:James Shore & Shane Warden, Verlag: O'Reilly. „Essential Skills for the Agile Developer – A Guide to Better Programming and Design“; Autoren: Alan Shalloway, Scott Bain, Ken Pugh, Amir Kolsky. Verlag: Addison-Wesley „Practices of an Agile Developer“; Autoren: Venkat Subramaniam & Andy Hunt. Verlag: The Pragmatic Programmers. „Refactoring: Improving the Design of Existing Code“; Autoren: Martin Fowler; Verlag: Booch Jacobson Rumbaugh. – ● Alternativ sind alle Refactorings online: http://refactoring.com/catalog/ Interessante Youtube Videos zu Refactorings: https://www.youtube.com/playlist?list=PLGLfVvz_LVvSuz6NuHAzpM52qKM6bPlCV (Kanal von Derek Banas)
© Copyright 2024