Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Foren-Tage 2017: Software-Qualität

Foren-Tage 2017: Software-Qualität

Die Folien für meinen Vortrag über Software-Qualität, gehalten am 23.09.2017 auf den Foren-Tagen in Hamburg.

Sebastian Gingter

September 23, 2017
Tweet

More Decks by Sebastian Gingter

Other Decks in Programming

Transcript

  1. • Selbst kleinste Änderungen werden Seiteneffekte haben • Was geändert

    wurde zeigt die Quellcodeverwaltung • Warum das geändert wurde, zeigt nur die Begründung im Bug- / Feature-Tracker • Nur mit dem Wissen was warum geändert wurde, kann ein Fehler verläßlich behoben werden ohne • vorherige Bugfixes oder • andere Features wieder zu beschädigen
  2. • Entdeckt Fehler sofort • Schnellstmögliches Feedback • Das etwas

    kaputt gegangen ist • Was kaputt gegangen ist und • Warum es kaputt gegangen ist • Warum schnellstmöglich? • Entwickler ist geistig noch im Thema • Kann Fehler sofort ohne erneutes Eindenken beheben • Andere Entwickler wissen um den Fehler und arbeiten nicht auf kaputten Code weiter • Ermöglicht automatisiertes Testen ohne großen Zusatzaufwand
  3. • “Stabile Branches” • Geben Sicherheit das • Eine stabile

    Version • zu jedem beliebigen Zeitpunkt • released werden kann
  4. • Anforderungen an “stabile Branches” • Nur in branches Entwickeln,

    nie in trunk/master • Features • Bugfixes • Nur dann in release-branch integrieren wenn • Alle Tests positive abgeschlossen sind • Man in die Stabilität der Änderungen Vertrauen hat
  5. • Vorteile von Training: • Bessere Entwickler • Weniger Fehler

    (im Produkt) • Höhere Motivation • Bessere Architektur
  6. • Tooling für Delphi: • http://www.codehealer.com/codehealer.php • http://www.peganza.com/products_pal.html • https://sourceforge.net/projects/dca

    • https://github.com/fabriciocolombo/sonar-delphi • Tooling für .NET: • FxCop • StyleCop • Resharper
  7. • Code Review Vermutlich wird es falsch gemacht • Code

    reviews lenken ab • WTF WTF WTF • “Was hat der sich bloß dabei gedacht?!?!?!” • Reviewer benötigt zu viel Zeit zum eindenken • Unproduktiv und Zeitfressend • Review tendiert schnell zum Mobbing • “Halt Dich gefälligst an die Guidelines” • “Aber es weiß doch *jeder* das wir hier {ungeheuer spezielles Zeug} machen”
  8. ?

  9. • Wenn Code Reviews: • “Over the shoulder reviews“ •

    Entwickler sucht sich Reviewer aus (Vertrauen!) • Entwickler geht zu ihm persönlich hin • Entwickler erklärt, was er gemacht hat • Reviewer stellt Fragen und weist auf mögliche Probleme hin • Entwickler macht sich Notizen • Entwickler macht Änderung nach eigener Auswahl • Entwickler commited
  10. • Kosten von Pair Programming • Mehraufwand in Stunden •

    Übliche Schätzung: • 100% oder x 2 (sitzen ja dann zwei Leute dran) • Realer Mehraufwand: • 50% initial, während sich das Pair einspielt • 15% durchschnittlich nach der Einspiel-Phase
  11. Einzelner Entwickler • Aufgabe: 8h • Alleine: x1  8h

    • Alleine: 8h / 1 Person  8h • Ein voller Tag Paar • Aufgabe: 8h • Zusammen: x1.15  9,2h • Zusammen: 9,2h / 2 Person  4,6h • Halber Arbeitstag + bissl mehr als ne halbe Stunde Ein bissel Mathe:
  12. • Vorteile von Pair Programming • Schneller Time-to-Market • ca.

    15% weniger Fehler im Code • Da Fehler im Nachgang zu beheben teurer ist, als sie gleich beim Entwickeln zu bemerken, spart das allein schon mehr als das Pair overhead erzeugt • ca. 20% weniger Zeilen an Code • Bessere Architektur • Verteiltes Wissen im Team • Höhere Motivation (Zusammen macht’s mehr Spass) • Weniger Ablenkung (Zusammen surft man nicht auf Facebook)
  13. ‘’Unseren Erfahrungen und den ermittelten Ergebnissen nach weist alles auf

    den Fakt hin, dass TDD in den unterschiedlichsten Domänen eingesetzt werden kann und die Defekt-Rate signifikant reduzieren kann, während die Produktivität nicht signifikant reduziert wird.“ Quelle: Nachi Nagappan, Microsoft ESE Group https://www.microsoft.com/en-us/research/wp-content/uploads/2009/10/Realizing-Quality-Improvement-Through-Test-Driven-Development-Results-and-Experiences-of-Four-Industrial-Teams-nagappan_tdd.pdf
  14. • Probleme mit TDD • Existierender Code ist extrem schwer

    bis gar nicht testbar • Code ist nur dann wirklich testbar, wenn er für Tests geschrieben wurde • Auch neue Features in existierendem Code sind schwer mit TDD zu testen • (Gute) Tests zu schreiben ist nicht einfach • Insbesondere, wenn es noch keine TDD-Kultur und Mentoren gibt
  15. • Erste Schritte • Neuen Code mit TDD schreiben •

    Mit einfachen, isolierten Features starten • Sich langsam daran gewöhnen • Wenn nicht getestete Infrastruktur verwendet wird, diese mit etwas Mock-barem wegabstrahieren • Tests für existierenden Code nur • Wenn man größere Refactorings machen muss • Wenn man einen Bug fixen muss und der Code testbar ist • Oder mit wenig Zusatzaufwand testbar gemacht werden kann
  16. Keyboard, Mouse, höhenverstellbarer Tisch, zweiter, dritter oder gar vierter Monitor,

    CodeRush, ReSharper, Redgate SQL Toolbelt, LinqPad, GitKraken, …
  17. Quellen: • Literatur: • “Clean Code “ by Robert C.

    Martin • Links: • https://www.microsoft.com/en-us/research/wp-content/uploads/2009/10/Realizing-Quality- Improvement-Through-Test-Driven-Development-Results-and-Experiences-of-Four-Industrial-Teams- nagappan_tdd.pdf • http://alistair.cockburn.us/costs+and+benefits+of+pair+programming • http://blog.jphpsf.com/2012/09/30/OMG-test-driven-development-actually-works • https://www.typemock.com/blog/2009/03/the-cost-of-test-driven-development.html