Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Automatisches Testen und Bewerten von Java-Klassen

Ähnliche Präsentationen


Präsentation zum Thema: "Automatisches Testen und Bewerten von Java-Klassen"—  Präsentation transkript:

1 Automatisches Testen und Bewerten von Java-Klassen
Im Rahmen des Seminars „E-Learning“ Christof Wingender 15./16. Mai 2008

2 Motivation Papierbasierte Lernfortschrittskontrolle
Klausur, Übungen Medienbrüche Personal- und Zeitaufwändig Menschliche Fehler, Subjektivität Lösung: E-Assessment von Java-Klassen?

3 Gliederung Einführung Ansätze zum E-Assessment von Java-Klassen
Anforderungen an Java-Klassen Analyse von Java-Klassen Ansätze zum E-Assessment von Java-Klassen Praktomat Environment for Learning to Program extreme eLearning experience Erweiterung der Ansätze Fazit

4 Anforderungen an Java-Klassen
Korrektheit Robustheit Leichte Wartbarkeit Verständlichkeit Testbarkeit Effiziente Programme (vgl. [PI08])

5 Analyse von Java-Klassen
Statische Analyse Keine Ausführung des Programms Syntax, Semantik Programmierstil Fehlermuster im Quelltext Dynamische Analyse Ausführung des Programms Unit-Test (Komponententest)

6 Gliederung Einführung Ansätze zum E-Assessment von Java-Klassen
Anforderungen an Java-Klassen Analyse von Java-Klassen Ansätze zum E-Assessment von Java-Klassen Praktomat Environment for Learning to Program extreme eLearning experience Erweiterung der Ansätze Fazit

7 Praktomat Universität Passau Java, Haskell, C++ Automatische Tests
Öffentliche vs. geheime Testfälle DejaGnu Checkstyle Sandbox Peer-Review

8 Environment for Learning to Program (ELP)
Queensland Universität in Brisbane C#, C++, Java, Pascal, Visual Basic Beispielaufgabe: IntegerDivision: import TerminalIO.*; public class IntegerDivision { KeyboardReader reader = new KeyboardReader(); ScreenWriter writer = new ScreenWriter(); public void run() {        } public static void main (String[] args){…} //Declare variables // Print “Please enter integer x: “ // Read x // Print “Please enter integer y: “ // Read y // Print “x / y = “ // Print x / y

9 Environment for Learning to Program (ELP)
Programmierstil-Überprüfung: Java-Reflection API Normalisierung Quelltext-Fragment /* Zu lösender Abschnitt: */ vor = 0; nach = 1; for (int i = 3; i<= grenze; i++){ hilf = vor + nach vor = nach; nach = hilf } /* Ende zu lösender Abschnitt */

10 Environment for Learning to Program (ELP)
Programmierstil-Überprüfung: Java-Reflection API Normalisierung Quelltext-Fragment Normalisierte Form /* Zu lösender Abschnitt: */ vor = 0; nach = 1; for (int i = 3; i<= grenze; i++){ hilf = vor + nach vor = nach; nach = hilf } /* Ende zu lösender Abschnitt */ <gap> <statements> <assignment>2 </assignment> <loop> <assignment>3 </loop> </statements> </gap> <condition> <trueBranch> <falseBranch> <methodCall> Vergleich: Abgabe - Musterlösung

11 extreme eLearning experience (xLx)
Universität Münster Java Automatische Tests Öffentliche vs. geheime Testfälle JUnit Apache Ant Policies

12 Gegenüberstellung der Ansätze
Praktomat ELP xLx Programmierstil Fehlermuster Funktionalität Effizienz

13 Gliederung Einführung Ansätze zum E-Assessment von Java-Klassen
Anforderungen an Java-Klassen Analyse von Java-Klassen Ansätze zum E-Assessment von Java-Klassen Praktomat Enviroment for Learning to Program extreme eLearning experience Erweiterung der Ansätze Fazit

14 Erweiterung Apache Ant  Buildfile
Buildfile enthält Projekt und beschreibt, wie Anwendung zu erstellen, zu testen und zu deployen ist <?xml version=“1.0“ ?> <project name=“myProject“ default=“makedir“> <target name=“makedir“> <mkdir dir=“build/classes“ /> <mkdir dir=“test/reports“ /> </target> </project> Project Target Task

15 Build-Prozess Quelltext

16 Build-Prozess Quelltext Checkstyle Bericht Programmierstil

17 Build-Prozess Quelltext Checkstyle FindBugs Bericht Programmierstil
Fehlermuster

18 Build-Prozess Quelltext Testklassen Quelltext javac javac Checkstyle
FindBugs .class-Dateien Bericht Programmierstil Bericht Fehlermuster JUnit Bericht Funktionalität

19 Beispiel: Fahrrad.class
public class Fahrrad { private Rahmen rahmen; private boolean einrad; private String marke; public boolean isEinrad() { if (einrad == true) { return true; } else { return false; } } public boolean isEqualRahmen(Rahmen rahmen) { return ( (this.rahmen != null) & this.rahmen.equals(rahmen) ); } public boolean isEqualMarke(String marke) { return (this.marke == marke); } //Getter, Setter, ... }

20 Checkstyle Statische Analyse Überprüft Programmierstil
JavaDoc Namenskonventionen Konfiguration über XML-Datei Beispiel: String-Vergleiche (==, != statt equals) <module name="StringLiteralEquality"/> public boolean isEqualMarke(String marke) { return (this.marke == marke);} Richtig: return ((this.marke.equals(marke)); Weiteres Modul: MagicNumber

21 FindBugs Statische Analyse Findet mögliche Fehler
Beispiel: Nullpointer public boolean isEqualRahmen(Rahmen rahmen) { return((this.rahmen != null) & this.rahmen.equals(rahmen));} Besser: return ((this.rahmen != null) && this.rahmen.equals(rahmen);

22 Alternative: PMD Statische Analyse Wie FindBugs Zusätzlich:
Suboptimaler Quelltext Unbenutzer Quelltext Beispiel: Vergleiche in booleschen Ausdrücken public boolean isEinrad() { if(einrad == true) { return true; } else { return false; }} Besser: return einrad;

23 JUnit Dynamische Analyse Komponententest Stichprobenverfahren
Beispiel: isEqualRahmen public void testIsEqualRahmen() { Fahrrad rad = new Fahrrad(); rad.setEinrad (false); rad.setRahmen (new Rahmen("rot", 48)); assertEquals (true, rad.isEqualRahmen(new Rahmen ("rot", 48))); }

24 Bewertung Überprüfung Erweiterbar Problematisch Programmierstil
Potentielle Fehler Funktionalität Effizienz Erweiterbar Problematisch GUIs, Applets

25 Gliederung Einführung Ansätze zum E-Assessment von Java-Klassen
Anforderungen an Java-Klassen Analyse von Java-Klassen Ansätze zum E-Assessment von Java-Klassen Praktomat Enviroment for Learning to Program extreme eLearning experience Erweiterung der Ansätze Fazit

26 Fazit Automatische Überprüfung von Keine automatische Überprüfung von
Programmierstil Potentiellen Fehlern Funktionalität Keine automatische Überprüfung von Effizienz Aufgaben mit GUI oder Applets Trainingsbereiche Statische Analyse Aufgabenpool

27 Literaturverzeichnis
[AA08] Apache Ant: Abrufdatum [Ch08] Checkstyle: Abrufdatum [ELP08] Environment for Learning to Program: Abrufdatum [FB08] FindBugs: Abrufdatum [Ju08] JUnit: Abrufdatum [PI08] Praktische Informatik: Informatik I: Kapitel 1: Einführung, Abrufdatum [PMD08] PMD: Abrufdatum [Pr08] Praktomat: http// forschung/praktomat.html, Abrufdatum [Xl08] extreme eLearning experience: Abrufdatum

28 Java-Reflection API Zur Laufzeit Informationen zur Struktur einer Klasse // Klasse „laden“ Class<?> fahrrad = Class.forName("Fahrrad"); // Attribute der Klasse Fahrrad Field fields[] = fahrrad.getDeclaredFields(); // Methoden der Klasse Fahrrad Method methods[] = fahrrad.getDeclaredMethods();

29 Sicherheitsmanager Zwischen Aufrufer und Betriebssystem
Kontrolle über problematische (gefährliche) Methoden der Java-Bibliothek Rechtevergabe: Policy-Datei grant-Anweisungen grant { permission java.io.FilePermission “<Filename>“, “read“;}; Nachteile Keine Rollen Kein Refresh (Neustart der Applikation)

30 JUnit Isolierte Ausführung der Testmethoden
Keine Seiteneffekte  Neue Instanz der Klasse Herstellen der Testumgebung: setUp() Bereinigen der Testumgebung: tearDown()


Herunterladen ppt "Automatisches Testen und Bewerten von Java-Klassen"

Ähnliche Präsentationen


Google-Anzeigen