CLuster And RepAir tool for introductory programming assignments
This is an implementation of the clustering and repair tool for introductory programming assignments, described in the following paper: Automated Clustering and Program Repair forIntroductory Programming Assignments (https://dl.acm.org/doi/10.1145/3192366.3192387 and https://arxiv.org/abs/1603.03165).
- C compiler
- Cython
$ sudo aptitude install cython
(Debian)# dnf install Cython
(Fedora)
- lpsolve 5.5 (development files and library)
$ sudo aptitude install lp-solve liblpsolve55-dev
(Debian)# dnf install lpsolve-devel
(Fedora)
make
(in this directory) installs a binary file calledclara
- Run
clara help
or see examples below.
Note: Run the following commands everytime you start
- Run
virtualenv venv
- Run
pip install Cython
- Run
sudo python3 setup.py develop
- On Debian system the following is required before running the tool:
export LD_LIBRARY_PATH=/usr/lib/lp_solve/
The examples/
directory contains some example programs:
c1.py
andc2.py
are the correct examples from the paperi1.py
andi2.py
are the incorrect example from the paperc3.py
is a constructed example.- Several More
To test matching between examples/c1.py
and examples/c2.py
on inputs [4.5]
and [1.0,3.0,5.5]
use:
python3 clara.py match examples/c1.py examples/c2.py --entryfnc computeDeriv --args "[[[4.5]], [[1.0,3.0,5.5]]]" --ignoreio 1
This should output Match!
.
To test matching between examples/c1.py
and examples/c3.py
on inputs [4.5]
and [1.0,3.0,5.5]
use:
python3 clara.py match examples/c1.py examples/c3.py --entryfnc computeDeriv --args "[[[4.5]], [[1.0,3.0,5.5]]]" --ignoreio 1
This should output No match!
.
To repair examples/i1.py
using examples/c1.py
on the same inputs as above, use:
python3 clara.py repair examples/c1.py examples/i1.py --entryfnc computeDeriv --args "[[[4.5]], [[1.0,3.0,5.5]]]" --ingoreio 1
To cluster correct programs on the same inputs as above use:
mkdir clusters
python3 clara.py cluster examples/c*.py --clusterdir clusters --entryfnc computeDeriv --args "[[[4.5]], [[1.0,3.0,5.5]]]" --ignoreio 1
This should produce two clusters in the directroy clusters/
and two .json
files with additional experssion extracted from the clusters.
To produce feedback from the above clusters for an incorrect program, for example examples/i1.py
, use:
python3 clara.py feedback clusters/c*.py examples/i1.py --entryfnc computeDeriv --args "[[[4.5]], [[1.0,3.0,5.5]]]" --ignoreio 1 --feedtype python
You can add --verbose 1
to any of the examples to obtain a more verbose output.
Does not work on Python 3.8.