Scrum Kanban Meetings Work Breakdown Progress Control Team Efficiency Trans- parency Artifacts Development Process Evolutionary Architecture Configuration Management Version Control Pull Requests Tagging Team Branches Feature Branches Clean Code SRP OCP LSP ISP DIP DRY KISS TDA S L I D O Continuous Integration Build automation Cont. Deploy- ment Test- automation Cont. Delivery Agile Testing TDD ATDD Acceptance Criteria Test Concept Test Automation Quality Assurance Refactoring Handling Defects Documen- tation Technical Debts Pair Program- ming Metrics Code Reviews
like CVS” • Branches und Tags sind Verzeichnisse • Merges sind umständlich • Commit IDs sind fortlaufende Zahlen Git • “When in doubt, do exactly the opposite of CVS” • Branches und Tags sind Labels für Commits • automatische Merge-Strategien sind integriert • Commit IDs sind SHA-1 Hashes 22
Merge • Aktuellen Stand des Branches von einem anderen Repository übertragen • Übertragenen Branch in einen anderen Branch überführen Pull Request • “Bitte integriere meinen Branch in deinen!”
• Kritiker: “Das ist kein reines CI!” • Antwort: “Eben.” • Feature Branches sind kurzlebig • Feature Branches sind isoliert • Gleichzeitiges Arbeiten an Dateien sorgt für Instabilität • Feature Branches können in dedizierten Integration-Branches zusammengeführt werden
Narrative: In order to keep a clean database of books As a librarian I want to have my entries validated Scenario: Given an empty library When the librarian tries to add a book with an <attribute> of <value> Then the library contains a no book with an <attribute> of <value> And the page contains error message <message> Examples: | attribute | value | message | | ISBN | 5234567969 | ISBN is not valid | | Edition | 2. Edition | Edition is not valid |
similar code exists in more than one location Large method a method, function, or procedure that has grown too large Large class a class that has grown too large. See God object. Feature envy a class that uses methods of another class excessively Inappropriate intimacy a class that has dependencies on implementation details of another class Refused bequest a class that overrides a method of a base class in such a way that the contract of the base class is not honored by the derived class. See “L” in SOLID (Liskov substitution principle) Lazy class a class that does too little Contrived complexity forced usage of overly complicated design patterns where simpler design would suffice Excessively long identifiers in particular, the use of naming conventions to provide disambiguation that should be implicit in the software architecture 50
test first geschrieben § Der Test führt das Design des Codes und validiert gleichzeitig die Implementierung § Continuous Refactoring führt zu Clean Code 52
CloudBees Jenkins Team Edition, Enterprise und Operations Center sind kostenpflichtig • Preise hängen von der Konfiguration ab und müssen angefragt werden Atlassian Bamboo • Kostenpflichtig • Preise hängen von der Anzahl der Remote Agents ab
Atlassian Bamboo • Out-of-the-box • Pläne können andere Pläne auslösen • Ausführung von Plänen können an Bedingungen geknüpft werden Beispiel: Pläne A und B müssen erfolgreich durchgelaufen sein, damit Plan C ausgelöst wird 104
Fehler sind eine Gelegenheit um zu lernen Verschiedene Ansichten führen in agilen Teams zu besseren Ergebnissen Transparenz ist der Schlüssel zur kontinuierlichen Verbesserung Mitarbeiter sind nicht nur Ressourcen Kundenwert ist die einzige valide Metrik zur Fortschrittskontrolle Entscheidungen werden vom gesamten Team getroffen und nicht von einzelnen Personen 111