Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University...

28
Fachgebiet Software Engineering Übersicht © 18.05.22 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation

Transcript of Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University...

Page 1: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Baustein- vs. Funktionsorientierte Organisation

Page 2: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Baustein- vs. Funktionsorientierte Organisation

Page 3: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Baustein- vs. Funktionsorientierte Organisation

Page 4: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 5: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Features / User Stories

Baustein übergreifende Funktionalität

realisiert (Teil-) Anforderung

Use Case + GUI Entwurf + textuelle Szenarien + Objektdiagramme (Story Boards)

automatischer JUnit Test

Implementierung

Page 6: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Scrum

Page 7: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Scrum

Product Backlog: priorisierte Features / User Stories

Release Backlog: Unterteilung des ProductBacklog

Sprint Backlog: Features des Sprints mit Status geschätzter Aufwand Bearbeiter Restaufwand

Kunagi Example

Page 8: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Scrum Roles:

Product Owner: lebende Anforderungsdoku Onsite Customer Priorisierung der Features Reviews der Entwürfe Abnahme der Implementierung Alpha Tester

Page 9: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Scrum Roles:

Scrum Master: Project Manager Scrum Meetings Burndown Charts provide Tools, Computers, Room, Coffee, … manage Risks manage Failures Parties …

The Team:

Page 10: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Scrum Roles:

The Team: do the work story boards / user stories tests implementation bug tracking bug killing reviews testing debugging documentation

Page 11: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Was Scrum verschweigt:

Story Boards müssen harmonisiert werden

Klassendiagramme / Architektur

Metaphern / gemeinsame Vision

Bug Sqash Weeks

Libraries / Frameworks

Page 12: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Kunagi

Page 13: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 14: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Features / User Stories

Baustein übergreifende Funktionalität

realisiert (Teil-) Anforderung

User Story + GUI Entwurf + textuelle Szenarien (+ Objektdiagramme (Story Boards) )

automatische JUnit Test

Implementierung

Page 15: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Testen

(Whitebox) Glassbox-Test anhand der Implementierung Normal- und Grenzfälle aus Bedingungen Überdeckungskriterien

Blackbox-Test mit Hilfe der Spezifikation (ohne die Implementierung zu

kennen) Normalfälle aus der Spezifikation Sonderfälle der Spezifikation Unzulässige Eingaben der Spezifikation

Page 16: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

White-Box-Testing

C0-Überdeckung (Anweisungs- und Bedingungsüberdeckung) Beim Test muss jedes Statement und jeder Ausdruck mindestens einmal

ausgewertet werden Code Coverage Tools können das automatisch messen

(Ergebnis gehört ins Testprotokoll) (Für Java z.B. EMMA) manchmal schwer zu erfüllen z.B.

try { ... } catch (HeapOverflow e) { xxx () } findet nicht alles:

m (x, y) { int z = 0; if (x > 0) { z = 1; } y = x / z; // <== ERROR: Division by zero ...

Der Aufruf m(1,0) erreicht C0-Überdeckung aber keine Fehlerfreiheit

Page 17: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

White-Box-Testing

C1-Überdeckung: Zweigüberdeckung auch leere if-then-else-Zweige müssen durchlaufen werden (while) Schleifen müssen sowohl durchlaufen als auch übersprungen

werden findet aber immer noch nicht alles:

m (x, y) { int z = 0; if (x > 0) { z = 1; } else {

z = -1;} if (y > 0) { z ++; } else {

z --; }

y = x / z; // <== ERROR: Division by zero on x = 1 and y = -1

Page 18: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

White-Box-Testing

C2-Überdeckung (Pfadüberdeckung) Testfälle sollen alle möglichen Durchläufe durch eine Methode

testen Schleifen null und ein mal durchlaufen Problem exponentieller Aufwand:

m (x, y) { int z = 0; if (x > 0) { z = 1; } else { z = -1;} if (y > 0) { z ++; } else { z --; } if (...) { ... } else { ...} y = x / y; // <== ERROR: Division by zero on y = 0

Bei jedem if-Statement 2 Fortsetzungsmöglichkeiten bei n if Statements 2 hoch n Pfade (20 ifs 1 Millonen Testfälle) in der Praxis nicht vertretbarer Zeitaufwand findet immer noch nicht alle Fehler

Bemerkung: sowas findet man gut mit Reviews

Page 19: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

White-Box-Testing

Coverage Tools cobertura (http://cobertura.sourceforge.net) EMMA (http://emma.sourceforge.net) EclEmma (http://www.eclemma.org) Coverlipse (http://coverlipse.sourceforge.net) jCoverage (http://www.jcoverage.com) OptimzeIt

(http://www.borland.com/us/products/optimizeit) Clover (http://www.cenqua.com/clover)

Page 20: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 21: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 22: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 23: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Black-Box-Testing

Funktionsorientierter Test jede Funktion / Feature / Variable einzeln

Äquivalenzklassenbildung Definitionsbereich der Variablen betrachten Partitionierung, zwei Tests pro Partition Randwerte

Regressionstests Wiederhole Tests bei Programmänderungen vgl. XP

Szenario-basierte Tests vgl. FUP

Page 24: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Random Testing

Page 25: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

JUnit Tests – Test First Principle

im eXtreme Programming / agilen Methoden: JUnit Tests Für jede Funktionalität (jedes Oval im Use-Case Diagramm) wird als erstes

eine automatische Testroutine geschrieben Testroutine ist einzeln aufrufbar und wird in Gesamttest eingehängt Testroutine kommt in die gleichen Klassen, wie die Implementierung Testroutinen verbleiben im Code und gehören zum Endprodukt Aufgaben der Testroutine:

verschiedene Ausgangssituationen herstellen Funktionalität aufrufen Messpunkte im Code abfragen (Testanweisungen fügen Meldungen an Testreport

an) Testprotokoll ausgeben (Testreport mit erwartetem Output vergleichen)

expliziter Unit-Test kann entfallen im Unified Process

Tester != Programmierer

Defect-Removal-Rate ~ 1 per day

Page 26: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Test Summary:

ein Fehler pro Tag

Test First

Funktionstests (anstatt Bausteintests)

Ein Assert pro (typischer) Fehler(quelle)

Coverage

vollautomatisch

unglaublich wertvoll bei Änderungen / iterativem Vorgehen

Page 27: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Reviews

Entwickler selbst plus Co-Entwickler oder externer Reviewer Check-Liste mit typischen Fehlern Code ist schon Unit getestet => suche nur nach typischen Fehlerquellen:

Division durch 0 null-Pointer Dereferenzierung Speicher-Lecks Array-Grenzen bei for-Schleifen deckt kompliziertes if alle Fälle richtig ab Terminiert die Schleife / Rekursion sicher Dead-Lock-Gefahren Racing Conditions . . .

+ Defect-Removal-Rate ~ 1 per hour

+ Reviewer lernt viele Kniffe

+ Viele Leute kennen viele Teile des Gesamtprogramms bei XP pair-programming

Page 28: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University