Sie befinden sich im Service: RWTHmoodle

Automatische Abgabenevaluation mit mehreren Dateien

Automatische Abgabenevaluation mit mehreren Dateien

Kurzinformation

VPL-Aufgaben können auch mehrere Abgabedateien und Testfälle nutzen. Diese Anleitung veranschaulicht dies am Beispiel einer VPL-Aufgabe, die ein Java-Projekt mit zwei Klassen auswertet, welches seine Eingabe aus einer Datendatei erhält. Das Projekt wird mit 4 verschiedenen Datendateien getestet. Eine Datei wird von dem Studierenden, drei vom Dozierenden bereitgestellt.


 Detailinformation

Inhalt

1. VPL-Aufgabe erstellen
2. Testfall erstellen
3. Ausführungsoptionen festlegen
4. Erforderliche Dateien festlegen
5. Ausführungsdateien festlegen
6. Zu behaltende Dateien festlegen
7. Automatische Evaluation mit einer Musterlösung testen

 

1. VPL-Aufgabe erstellen

Erstellen Sie zunächst eine neue VPL-Aufgabe. Nehmen Sie dabei die folgenden Einstellungen vor:

  • Name - Java: Multi-Dateientest
  • Kurzbeschreibung - Dieses Programm prüft die Ausgabe mit vier verschiedenen Eingabedateien, wobei eine von Ihnen in data.txt bereitgestellt werden muss.
  • Beschreibung - Schreiben Sie ein Java-Programm das min- und max-Werte einer gegebenen Datei auswertet.
  • Abgabezeitraum - Aktivieren Sie „Verfügbar von“ und „Abgabetermin“. Wählen Sie den heutigen Tag unter „Verfügbar von“. Wählen Sie ein Datum in der Zukunft als „Abgabetermin“.
  • Abgabeeinschränkungen - Wählen Sie als „Maximale Anzahl an Dateien“ 3 aus.
  • Bewertung - Wählen Sie als Bewertungstyp „Punkt“ und als „Maximalpunkte“ 100.

Klicken Sie auf „Speichern und anzeigen“. Ihre VPL-Aktivität wird nun erstellt. Sie werden anschließend automatisch zur Übersichtsseite der VPL-Aufgabe geleitet.

 

2. Testfall erstellen

Im nächsten Schritt erstellen Sie einen Testfall.

  1. Klicken Sie dazu in der geöffneten VPL-Aufgabe auf das Zahnrad innerhalb des weißen Kastens, um die VPL-Administration zu öffnen.
  2. Wählen Sie die Option „Testfälle“.
  3. Geben Sie den folgenden Testfall ein:

    case = Test 1

    input = data.txt

    output = "File name? min = -1

    max = 110

    "


    case = Test 2

    input = data1.txt

    output = "File name? min = 1

    max = 1

    "

    case = Test 3

    input = data2.txt

    output = "File name? Empty array

    min undefined

    max undefined

    "

    case = Test 4

    input = data3.txt

    output = "File name? min = 10

    max = 10

    "

  4. Klicken Sie abschließend auf die Diskette zum Speichern des Testfalls.
  5. Kehren Sie durch einen Klick auf den Aufgabentitel „Java: Multi-Dateientest“ in der Breadcrumb-Navigation zur Übersichtsseite der Aufgabe zurück.
 

3. Ausführungsoptionen festlegen

  1. Klicken Sie auf der Übersichtsseite der VPL-Aufgabe auf das Zahnrad innerhalb des weißen Kastens, um die VPL-Administration zu öffnen.
  2. Wählen Sie „Ausführungsoptionen“.
  3. Setzen Sie die folgenden Optionen:
    • Ausführen (des Programms auf dem VPL-Executionserver): Ja
    • Debuggen: Nein
    • Evaluieren: Ja
    • Nur bei Abgabe evaluieren: Nein
    • Automatische Bewertung: Ja
  4. Klicken Sie abschließend auf „Einstellungen speichern“.
  5. Kehren Sie durch einen Klick auf den Aufgabentitel „Java: Multi-Dateientest“ in der Breadcrumb-Navigation zur Übersichtsseite der Aufgabe zurück.
 

4. Erforderliche Dateien festlegen

  1. Klicken Sie auf der Übersichtsseite der VPL-Aufgabe auf das Zahnrad innerhalb des weißen Kastens, um die VPL-Administration zu öffnen.
  2. Wählen Sie „Erforderliche Dateien“ aus.
  3. Geben Sie als Dateiname „data.txt“ ein und klicken Sie anschließend auf „OK“.
  4. Im Editor können Sie ihren Studierenden ein Codekonstrukt vorgeben. Wir nutzen hier zum Beispiel:

        3
        4
        5
        1
        10
        11
        11
        -1
        100
        3
        9
        110
     
  5. Speichern Sie die Datei mit einem Klick auf das Diskettensymbol im Editor ab.
  6. Fügen Sie zusätzlich die Datei „Main.java“ sowie „SortedList.java“ durch einen Klick auf das Pluszeichen hinzu. Speichern Sie jeweils die Dateien mit einem Klick auf das Diskettensymbol ab.
  7. Kehren Sie durch einen Klick auf „Java: Multi-Dateientest“ in der Breadcrumb-Navigation zur Übersichtsseite der Aufgabe zurück.
 

5. Ausführungsdateien festlegen

  1. Klicken Sie auf der Übersichtsseite der VPL-Aufgabe auf das Zahnrad innerhalb des weißen Kastens, um die VPL-Administration zu öffnen.
  2. Wählen Sie im Reiter „Erweiterte Einstellungen“ die Option „Ausführungsdateien“ aus.
  3. Fügen Sie für „vpl_run.sh“ folgendes in den Editor ein:

    #! /bin/bash
     
    cat > vpl_execution << 'EOF'
    #! /bin/bash
    javac -J-Xmx128m *.java
    java Main
     
    EOF
     
    chmod +x vpl_execution

  4. Fügen Sie die Dateien „data1.txt“, „data2.txt“ und „data3.tx“ hinzu, indem Sie auf das Plussymbol klicken.
  5. Fügen Sie für „data1.txt“ folgendes hinzu:

    1
    1
    1
    1
    1
     
  6. Fügen Sie für „data2.txt“ keinen Text hinzu.
  7. Fügen Sie für „data3.txt“ Folgendes hinzu:

    10

     
  8. Kehren Sie durch einen Klick auf „Java: Multi-Dateientest“ in der Breadcrumb-Navigation zur Übersichtsseite der Aufgabe zurück.
 

6. Zu behaltende Dateien festlegen

  1. Klicken Sie auf der Übersichtsseite der VPL-Aufgabe auf das Zahnrad innerhalb des weißen Kastens, um die VPL-Administration zu öffnen.
  2. Wählen Sie im Reiter „Erweiterte Einstellungen“ die Option „Dateien, die beim Ausführen behalten werden“.
  3. Wählen Sie hier alle Dateien aus und klicken Sie auf „Einstellungen speichern“.
  4. Kehren Sie durch einen Klick auf „Java: Multi-Dateientest“ in der Breadcrumb-Navigation zur Übersichtsseite der Aufgabe zurück.

Die automatische Evaluierung ist nun erstellt.

 

7. Automatische Evaluation mit einer Musterlösung testen

  1. Zum Testen einer Musterlösung klicken Sie in der geöffneten Aufgabe auf den Reiter „Testaktivität“ und dann auf „Bearbeiten“.
  2. Geben Sie nun folgendes in den Editor ein:
  3. Für Main.java:
     

    // Main.java
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Collections;

    import java.util.Scanner;

    public class Main {
        
        
        public static void main(String[] args) {
            BufferedReader br = null;
            String sCurrentLine = null;
            SortedList array = new SortedList();
            
            Scanner keyboard = new Scanner( System.in );
            System.out.print("File name? ");
            String fileName  = keyboard.next().trim();

            try {
                br = new BufferedReader( new FileReader( fileName ) );
                while ((sCurrentLine = br.readLine()) != null) {
                    int x = Integer.parseInt( sCurrentLine.trim() );
                    array.add( x );
                }
                
            } catch (IOException e) {
                //e.printStackTrace();
                System.err.println( "Could not find file" );
                return;
                
            } finally {
                try {
                    if (br != null)
                        br.close();
                } catch (IOException ex) {
                    //ex.printStackTrace();
                    return;
                }
            }
            
            if ( array.isEmpty() ) {
                System.out.println( "Empty array" );
                System.out.println( "min undefined" );
                System.out.println( "max undefined" );
                return;
            }
            int max = array.getLast();
            int min = array.getFirst();
            System.out.println( "min = " + min );
            System.out.println( "max = " + max );
        }
    }

  4. Für SortedList.java
     

    import java.util.ArrayList;
    import java.util.Collections;


    public class SortedList {
        
        ArrayList<Integer> array = null;
        
        SortedList() {
            array = new ArrayList<Integer>();
        }
        
        public void add( int x ) {
            array.add( x );
            Collections.sort( array );
        }
        
        public boolean isEmpty() {
            return array.isEmpty();
        }
        
        public int getFirst( ) {
            return array.get( 0 );
        }
        
        public int getLast( ) {
            return array.get( array.size() - 1 );
        }
    }

  5. Klicken Sie zum Speichern zunächst auf die Diskette. Durch einen Klick auf die Rakete führen Sie Ihr Programm aus.
  6. Durch einen Klick auf den Haken mit der danebenstehenden 0 führen Sie den automatischen Test aus. Sie sollten nun auf der rechten Seite die folgende Ausgabe finden:
    • |  4  test run/ 4  test passed |

 Zusatzinformation

Lesen Sie hierzu: