<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>ISEE</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Continuous Publishing of Online Programming Assignments with INLOOP</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Martin Morgenstern</string-name>
          <email>martin.morgenstern1@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Birgit Demuth</string-name>
          <email>birgit.demuth@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Technische Universität Dresden</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2018</year>
      </pub-date>
      <volume>1</volume>
      <fpage>32</fpage>
      <lpage>33</lpage>
      <abstract>
        <p>-We supplement our software engineering lectures and exercises with facultative online programming assignments. Based on our experience with previous systems, we developed INLOOP, a solution tailored to our needs. The core of the system is a test runner component that supports virtually any kind of solution assessment through a generic interface. The system supports automated plagiarism checks and grading, which we currently use to award students bonus points for written exams. In addition, it is directly integrated with a version control system to facilitate peer-reviewed development of assignments by our team of instructors and to enable continuous publishing of assignments. The resulting workflow helped to improve the quality of our assignments and tests. The architecture of INLOOP is characterized by asynchronous solution processing and takes advantage of container technology to achieve scalability, robustness and isolation, while maintaining a small footprint. So far, our approach is a success: we observed an increasing number of students who actively practiced programming, and they clearly performed better in the written exam. The poster presents the architecture of INLOOP and the implemented continuous publishing workflow.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. MOTIVATION AND GOALS</title>
      <p>The motivation of the INLOOP approach is to improve
teaching in software engineering by taking advantage of
interactive technologies. Our goals can be described from
four perspectives: Students should be given an easy-to-use
environment to practice their software development skills.
They should receive immediate, detailed and user-friendly
feedback for submitted solutions. Instructors should be given
tools to manage complex programming assignments and
handle increasing numbers of students, because at such a scale,
individual feedback on solutions cannot be manually provided.
Operators are primarily concerned about the robustness and
scalability of the system. Researchers and Developers want a
system that is easy to comprehend and extend.</p>
    </sec>
    <sec id="sec-2">
      <title>II. BACKGROUND</title>
      <p>Since 2006, we have been supplementing our software
engineering lectures and exercises with facultative online
programming assignments. The course focuses on
objectoriented modeling and programming using UML and Java.
Our system uses public JUnit tests to automatically verify
solutions submitted by the students; the task complexity ranges
from basic to demanding, where students have to implement
a design given by a UML diagram. We award students one
exam bonus point for each demanding task solved.</p>
    </sec>
    <sec id="sec-3">
      <title>III. FEATURES AND DESIGN</title>
      <p>
        In INLOOP, tasks are organized into categories and have
optional publication dates and deadlines, which can be used to
restrict the user’s ability to view a task or submit solutions for
it. The test runner of INLOOP supports virtually any kind of
solution assessment, i.e., any build, test or analysis tool that is
available for Linux, in a secure and robust manner. Instructors
specify the test environment for a task in a declarative fashion,
and the system builds a test image that is used by the test
runner. By default, the test output is shown to the user as-is, but
pretty-printer modules may transform it into HTML fragments
that can be integrated into the user interface. Additionally,
the system uses an offline version of the JPlag plagiarism
checker [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] to automatically flag suspicious solutions. The
plagiarism check is executed as a batch job after a task
deadline has passed, in order to be able to mutually compare
all submissions, including submissions from previous teaching
periods.
      </p>
      <p>
        A distinctive feature of INLOOP is its direct integration
with the Git version control system: all task artifacts
(metadata, description, diagrams, tests, etc.) are retrieved from a
remote repository, transformed if necessary, and published. For
example, such transformations include building the test image,
rendering Markdown task texts, and creating ZIP archives of
supplementary material. This process is triggered by a Git push
directly in the IDE on the instructor’s computer; a feature we
refer to as continuous publishing (Fig. 1). Before, we had to
manually edit and publish tasks in the backend of a web
application, which was an error-prone process. Our approach has
the following advantages: 1) the process is fully automated,
2) all task artifacts are stored in one place, 3) changes can be
tracked, and 4) task artifacts can be developed in collaboration.
Another key characteristic is that continuous publishing can be
combined with continuous integration tests and a branching
model such as Gitflow [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. As an example of the latter,
instructors can maintain a set of tasks in a protected “master”
branch and a derived set of tasks in a “develop” branch, for the
current and next semester, respectively, and configure INLOOP
to use the “master” branch for publishing.1 The “develop”
branch could then be used to work on backward incompatible
changes which potentially break existing submissions.
      </p>
      <p>1Although INLOOP does not change the status of existing submissions
when a new task revision is published, maintaining a stable task set during a
semester is advisable to avoid student confusion.</p>
      <p>INLOOP is designed as a multi-process application (Fig. 2).
The core components are the web application and the
background workers, both implemented in Python. An event-based
job broker and a relational database are used to exchange
data between the processes. The web application is a standard
Django application, but instead of blocking on long-running
test runner jobs, it submits them to a job queue. The jobs are
picked up by a configurable number of background workers,
and are executed inside their own, ephemeral Docker
container. Apart from the necessary input and output, the
containers are completely isolated from each other, the network, and
the host system; in addition, strict resource limits are enforced.</p>
    </sec>
    <sec id="sec-4">
      <title>IV. EXPERIENCES</title>
      <p>Having bonus points as an incentive seems to be a good
motivation for our students. Hence, we observed an increasing
number who practiced their development skills with INLOOP.
In the summer term 2017, 11074 solutions were submitted, up
to 419 per day in the week before the written exam. Students
who actively practiced programming online clearly performed
better in the written exam. But in our setting, plagiarism
checks remain a necessity: out of 1838 valid solutions, 127
(6,9%) have been identified as plagiarism, and some of them
were complete copies.</p>
      <p>With continuous publishing, we eliminated inconsistencies
by generating all published content from a single source
repository. The streamlined workflow enabled us to spend more
time on actual task development, instead of time-consuming
and error-prone manual publishing. Furthermore, our chosen
branching model made it easy to incorporate urgent bug fixes
into the current “stable” set of tasks, while at the same time
being able to prepare larger source code transformations for
the next semester.</p>
    </sec>
    <sec id="sec-5">
      <title>V. RELATED WORK</title>
      <p>
        There are many online programming systems available. We
are not aware of one that incorporates a continuous publishing
workflow based on version control, but the idea has been
used in the past in other publishing systems, e.g., the Open
Journal System [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. However, GitHub Pages [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] is an example
of a website hosting service with a Git-driven workflow, and
was the model for our approach. INLOOP’s closest relative
is the Praktomat [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], a system that supports a broad set of
programming languages, but uses specific checkers instead of
a generic interface. It offers a flexible grading system which
our system does not provide, and its first version also featured
mutual reviews by students [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. But Praktomat does not use
asynchronous processing, and requires the intervention of the
operator to enforce resource limits and isolation. Marmoset [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]
is a related system that uses asynchronous processing and build
servers on separate (virtual) machines. An interesting feature
is its incentive system to motivate students to start work early
by giving them a daily budget of only two test runs.
      </p>
    </sec>
    <sec id="sec-6">
      <title>VI. FUTURE WORK</title>
      <p>
        We plan to integrate static code analysis and style checks
into INLOOP and ultimately reject code that violates a
predefined coding standard. In the same spirit, the current binary
solved/not solved test result could also be enhanced to give
grades based on the code quality metrics calculated by such
tools. To make it more challenging for students to solve tasks
by just satisfying static test data, our unit tests could be
complemented with property-based testing. Another promising
idea, inspired by Web-CAT [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], is to have programming
assignments that focus on testing skills. For example, students
are given a specification and a software “black box”, and are
then asked to find as many bugs as possible by writing a test
suite.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Morgenstern</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Muhs</surname>
          </string-name>
          , “
          <article-title>INLOOP: interactive learning center for object-oriented programming</article-title>
          .” [Online]. Available: https://github.com/ st-tu-dresden/inloop
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>L.</given-names>
            <surname>Prechelt</surname>
          </string-name>
          , G. Malpohl, and
          <string-name>
            <given-names>M.</given-names>
            <surname>Philippsen</surname>
          </string-name>
          , “
          <article-title>Finding plagiarisms among a set of programs with JPlag,”</article-title>
          <string-name>
            <surname>J. UCS</surname>
          </string-name>
          , vol.
          <volume>8</volume>
          , no.
          <issue>11</issue>
          , p.
          <fpage>1016</fpage>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>V.</given-names>
            <surname>Driessen</surname>
          </string-name>
          , “
          <article-title>A successful git branching model</article-title>
          .” [Online]. Available: http://nvie.com/git-model
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>J.</given-names>
            <surname>Willinsky</surname>
          </string-name>
          , “
          <article-title>Open journal systems: An example of open source software for journal management</article-title>
          and publishing,
          <source>” Library Hi Tech</source>
          , vol.
          <volume>23</volume>
          , no.
          <issue>4</issue>
          , pp.
          <fpage>504</fpage>
          -
          <lpage>519</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>GitHub</given-names>
            <surname>Inc</surname>
          </string-name>
          ., “GitHub Pages.” [Online]. Available: https://pages.github. com/
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Breitner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hecker</surname>
          </string-name>
          , and G. Snelting, “Der Grader Praktomat,” in Automatisierte Bewertung in der Programmierausbildung. Waxmann Verlag GmbH,
          <year>2017</year>
          , no.
          <issue>6</issue>
          , pp.
          <fpage>159</fpage>
          -
          <lpage>172</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>A.</given-names>
            <surname>Zeller</surname>
          </string-name>
          , “
          <article-title>Making students read and review code,” in Proceedings of the 5th Annual SIGCSE/SIGCUE ITiCSEconference on Innovation and Technology in Computer Science Education</article-title>
          . ACM,
          <year>2000</year>
          , pp.
          <fpage>89</fpage>
          -
          <lpage>92</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>J.</given-names>
            <surname>Spacco</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Hovemeyer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Pugh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hollingsworth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Padua-Perez</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Emad</surname>
          </string-name>
          , “
          <article-title>Experiences with Marmoset,”</article-title>
          <string-name>
            <surname>Tech. Rep.</surname>
          </string-name>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>S. H.</given-names>
            <surname>Edwards</surname>
          </string-name>
          and
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Perez-Quinones</surname>
          </string-name>
          , “Web-CAT:
          <article-title>Automatically grading programming assignments,” SIGCSE Bull.</article-title>
          , vol.
          <volume>40</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>328</fpage>
          -
          <lpage>328</lpage>
          , Jun.
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>