Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Wirtschaftsinformatik Christof Wingender 15./16. Mai 2008 Im Rahmen des Seminars E-Learning Automatisches Testen und Bewerten.

Ähnliche Präsentationen


Präsentation zum Thema: "Wirtschaftsinformatik Christof Wingender 15./16. Mai 2008 Im Rahmen des Seminars E-Learning Automatisches Testen und Bewerten."—  Präsentation transkript:

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

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

3 3 Gliederung Einführung 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 4 Anforderungen an Java-Klassen Korrektheit Robustheit Leichte Wartbarkeit Verständlichkeit Testbarkeit Effiziente Programme (vgl. [PI08])

5 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 6 Gliederung Einführung 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 7 Praktomat Universität Passau Java, Haskell, C++ Automatische Tests Öffentliche vs. geheime Testfälle DejaGnu Checkstyle Sandbox Peer-Review

8 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 9 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 */ Environment for Learning to Program (ELP)

10 10 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 */ 2 3 Vergleich: Abgabe - Musterlösung Environment for Learning to Program (ELP)

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

12 12 Gegenüberstellung der Ansätze PraktomatELPxLx Programmierstil Fehlermuster Funktionalität Effizienz

13 13 Gliederung Einführung 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 14 Erweiterung Apache Ant Buildfile Buildfile enthält Projekt und beschreibt, wie Anwendung zu erstellen, zu testen und zu deployen ist Project Target Task

15 15 Build-Prozess Quelltext

16 16 Build-Prozess Quelltext Bericht Programmierstil Checkstyle

17 17 Build-Prozess Quelltext Bericht Programmierstil Bericht Fehlermuster FindBugs Checkstyle

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

19 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 20 Checkstyle Statische Analyse Überprüft Programmierstil JavaDoc Namenskonventionen … Konfiguration über XML-Datei Beispiel: String-Vergleiche (==, != statt equals) public boolean isEqualMarke(String marke) { return (this.marke == marke);} Richtig: return ((this.marke.equals(marke));

21 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 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 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 24 Bewertung Überprüfung Programmierstil Potentielle Fehler Funktionalität Effizienz Erweiterbar Problematisch GUIs, Applets

25 25 Gliederung Einführung 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 26 Fazit 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 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//www.fim.uni-passau.de/de/fim/fakultaet/lehrstuehle/softwaresysteme/ forschung/praktomat.html, Abrufdatum [Xl08]extreme eLearning experience: Abrufdatum

28 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 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, read;}; Nachteile Keine Rollen Kein Refresh (Neustart der Applikation)

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


Herunterladen ppt "Wirtschaftsinformatik Christof Wingender 15./16. Mai 2008 Im Rahmen des Seminars E-Learning Automatisches Testen und Bewerten."

Ähnliche Präsentationen


Google-Anzeigen