Projektplan: Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Tätigkeiten bei der Softwareentwicklung Fachgebiet Software Engineering Übersicht © 27.03.2017 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 © 27.03.2017 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(0,1) erreicht C0-Überdeckung aber keine Fehlerfreiheit Fachgebiet Software Engineering Übersicht © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 Albert Zündorf, Kassel University
Fachgebiet Software Engineering. Übersicht. © 27. 03 Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Fachgebiet Software Engineering. Übersicht. © 27. 03 Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Fachgebiet Software Engineering. Übersicht. © 27. 03 Fachgebiet Software Engineering Übersicht © 27.03.2017 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 © 27.03.2017 Albert Zündorf, Kassel University
Defect-Removal-Rate ~ 1 per day Black-Box-Testing im eXtreme Programming: 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 © 27.03.2017 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 © 27.03.2017 Albert Zündorf, Kassel University
Tätigkeiten bei der Softwareentwicklung Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
XML-RPC Allgemein Standard für (entfernten) Methodenaufruf Platformunabhängig Datenformat XML lesbar Transportprotokoll HTTP Ausgereift Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Beispiel-Aufruf <?xml version="1.0"?> <methodCall> <methodName>gameServer.setCoreSize</methodName> <params> <param> <value>Game1</value> </param> <value><int>8000</int></value> </params> </methodCall> Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Datentypen Int, double, boolean, String Sowie als array (List) und struct (Map) Base64-binary für beliebige Daten Kann für Serialisierung genutzt werden (Date) Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Apache XML-RPC 2 Einfache Benutzung (im Gegensatz zu XML-RPC 3) Im Projekt: xmlrpc-2.0.1-bin.tar.gz Auspacken, enthält Doku und Beispiele Im Verzeichnis xmlrpc-2.0.1/examples/echo befindet sich ein einfaches Beispiel! Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Beispiel-Server class Server { public static void main (String args[]) { int port = 8080; WebServer server = new WebServer (port); // add an instance of this class as default handler server.addHandler ("$default", new Server()); server.start (); } /** * This is method that is invoked via XML-RPC. The server looks * up the method via Java Reflection API. */ public String echo (String input) { return input; Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Beispiel-Client public class Client { public static void main (String args[]) throws Exception { XmlRpcClient client = new XmlRpcClient ("http://localhost:8080/"); String message = "Hello World!"; Vector v = new Vector (); v.add (message); Object result = client.execute ("echo", v); System.err.println ("received: "+result); } Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Analyse & Design Ziele Technisches Konzept zur Realisierung neuer Funktionalität Vorgabe für die Implementierung Zielgruppe Entwickler Beschreibung auf Modellebene Beispielszenarien (Story Boards, Sequenzdiagramme, …) Klassendiagramm Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Fachgebiet Software Engineering. Übersicht. © 27. 03 Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University