[cfe-dev] Using clang static analyser / clang-tidy for assignments grading?

Yahav Bar via cfe-dev cfe-dev at lists.llvm.org
Thu Feb 27 16:00:22 PST 2020

Hi everyone!
I hope that I'm querying the correct mailing list about my question.

I work as a teaching assistant at the Hebrew University, teaching C and
C++. As part of our course, we ask the students to submit C and C++
exercises which we grade (both manually and automatically).

When grading students exercises, we check the validity of their code. For

   - We check if the students didn't forget to use include safe-guard;
   - If the students used non-safe functions, which we consider forbidden
   to use (in addition, sometimes we explicitly tell students not to use set
   of predefined functions or C++ classes, as the exercises ask them to
   implement this set of functions).
   - If the students didn't include a forbidden header;
   - If the students didn't use a #pragma statement to bypass our
   compilation instructions;
   - C++: If the students remembered to use "const" when required, and to
   pass parameters by reference when needed;
   - C++: that the students returned lvalue when needed and rvalue when
   needed etc.
   - C++: When writing an iterator, if it was implemented correctly (a.k.a,
   according to Input/Output/Forward/Bidirectional/Random Access iterator
   rules + using iterator traits).

Right now these tests are being done by a human. As our classes formed from
300 to 600 students (next semester we'll have 650...) it'll be really hard
and non-efficient to do it by hand. Thus I thought it might be a good idea
to automate these checks too.

Initially, I thought to write that with Python using ANTLr (creating an AST
for both the Preprocessing stage and the C stage and just iterating over
them), but at the middle of programming, I came across the Static Analyser
API of Clang and thought I should switch to it, as it seems very mature and
well fit for our needs.

Before diving deeply into clang, I'd love to hear from you, who have
experience in clang and LLVM dev, if I'm on the right track, and can
actually achieve my goal using clang, or I should stick with my previous
attempt. Our end goal is a program that we can run, send the path to the
student exercise, and get the errors that she had so that we can reduce
points accordingly.

Thank you very much!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20200228/abb028a1/attachment-0001.html>

More information about the cfe-dev mailing list