- Grade homework on per question basis, and analyze the grade progression per question to explore the relation of program correctness and type-check status.
- For each homework, extract the functions on per question basis for each student submission.
- Uses ocaml
compiler-lib
library to generate AST to facilitate extraction of functions on per question basis. - Extraction includes dependent functions.
- Python script
bin/question_split.py
facilitates connection to ssh remote database, structure outputs, and navigate data processing traffics between Python script and Ocaml script (bin/main.ml
)- See output project structure in section below.
- Uses ocaml
- Run ocaml grader on per question basis. The command follows the pattern
learn-ocaml grade --exercises="./exercises/hw1/question1/exercise" --grade-student="./exercises/hw1/question1/student_submissions/stu.ml" --timeout=60 --dump-reports grade_report
. The exercises and student submissions can be stored anywhere on the file system provided the correct path is passed to the--exercises
and--grade-student
flags. - Perform data analysis.
Python script calls for the execution of the dune project. Before running, set up the environment:
eval $(opam env)
To execute the project, in dune project ocaml/
, run:
python3 bin/question_split.py
The resulting files generated will be produced under directory /analysis/out/
. See project structure below.
bin/
Where the main scripts are located.
-
question_split.py
- Extracts functions by question.
- Setup the structure of and organize outputs under
analysis/output/
.
-
main.ml
- Process given Ocaml files into
ast_out
andpretty_ast_out
in analysis/out/.
- Process given Ocaml files into
analysis/
Where analysis related data and output are located.
-
info/
(*Do not edit)consentID2021fall.csv
: Student IDs of those that approved the usage of their homework data.fq.json
: List of function names for related to each question in each homework.
-
out/
Where the generated output files are located.
See full structure below :
├── hw1/
│ ├── err.json
│ ├── exercise/
│ │ ├── description.html
│ │ ├── meta.json
│ │ ├── prelude.ml
│ │ ├── prepare.ml
│ │ ├── solution.ml
│ │ ├── template.ml
│ │ ├── test.ml
│ ├── q1/
│ │ ├── student_submissions/ (only contains q1)
│ │ ├── d54baff9c3e9e5467505601b4b370289/
│ │ ├── Sep_08_2021_03:12:55.ml
│ │ ├── xxxxx/
│ │ ├── ...
│ ├── q2/
│ │ ├── student_submissions/ (only contains q2)
│ │ ├── xxxxx.ml
│ │ ├── ...
│ ├── q3/
│ ├── ...
├── hw2/
│ ├── q1
│ │ ├── exercise
│ │ │ ├── ...
│ │ ├── student_submissions/ (only contains q1)
│ │ ├── xxxxx.ml
├── ...
err.json
:
- logs errors occured during AST generation and function parsing
- Error distribution
- Homework level
- Question level
- How long students worked on a particular problem. Slice by
- number of submission
- time
- Grade progression per question
- once type checked how quickly a student gets 100