fachgebiet software engineering Übersicht © 23.01.2014 albert zündorf, kassel university...

Post on 05-Apr-2015

103 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Fachgebiet Software Engineering Übersicht © 11.04.23 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

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

Baustein- vs. Funktionsorientierte Organisation

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

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

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

Scrum

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

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

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:

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

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

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

Kunagi

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

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

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

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

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

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

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)

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

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

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

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

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

Random Testing

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

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

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

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

top related