Teaching and learning programming and software engineering via interactive gaming

Massive Open Online Courses (MOOCs) have recently gained high popularity among various universities and even in global societies. A critical factor for their success in teaching and learning effectiveness is assignment grading. Traditional ways of assignment grading are not scalable and do not give timely or interactive feedback to students. To address these issues, we present an interactive-gaming-based teaching and learning platform called Pex4Fun. Pex4Fun is a browser-based teaching and learning environment targeting teachers and students for introductory to advanced programming or software engineering courses. At the core of the platform is an automated grading engine based on symbolic execution. In Pex4Fun, teachers can create virtual classrooms, customize existing courses, and publish new learning material including learning games. Pex4Fun was released to the public in June 2010 and since then the number of attempts made by users to solve games has reached over one million. Our work on Pex4Fun illustrates that a sophisticated software engineering technique-automated test generation-can be successfully used to underpin automatic grading in an online programming system that can scale to hundreds of thousands of users.

[1]  Nikolai Tillmann,et al.  Retrofitting Unit Tests for Parameterized Unit Testing , 2011, FASE.

[2]  Nikolai Tillmann,et al.  Parameterized unit tests , 2005, ESEC/FSE-13.

[3]  Albert T. Corbett,et al.  Effectiveness of cognitive apprenticeship learning (CAL) and cognitive tutors (CT) for problem solving using fundamental programming concepts , 2011, SIGCSE '11.

[4]  Tao Xie,et al.  DiffGen: Automated Regression Unit-Test Generation , 2008, 2008 23rd IEEE/ACM International Conference on Automated Software Engineering.

[5]  Steven C. Shaffer Ludwig: an online programming tutoring and assessment system , 2005, SGCS.

[6]  Leen-Kiat Soh Incorporating an intelligent tutoring system into CS1 , 2006, SIGCSE '06.

[7]  Stephen H. Edwards,et al.  Web-CAT: automatically grading programming assignments , 2008, ITiCSE.

[8]  K. Masters A Brief Guide To Understanding MOOCs , 2011 .

[9]  David Jackson,et al.  Grading student programs using ASSYST , 1997, SIGCSE '97.

[10]  Lori A. Clarke,et al.  A System to Generate Test Data and Symbolically Execute Programs , 1976, IEEE Transactions on Software Engineering.

[11]  Nikolai Tillmann,et al.  Teaching and training developer-testing techniques and tool support , 2010, SPLASH/OOPSLA Companion.

[12]  Koushik Sen,et al.  CUTE: a concolic unit testing engine for C , 2005, ESEC/FSE-13.

[13]  David A. Patterson,et al.  Crossing the software education chasm , 2012, Commun. ACM.

[14]  David Hovemeyer,et al.  Experiences with marmoset: designing and using an advanced submission and testing system for programming courses , 2006, ITICSE '06.

[15]  Tao Xie,et al.  Inferring method specifications from natural language API descriptions , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[16]  James C. King,et al.  Symbolic execution and program testing , 1976, CACM.

[17]  Nikolai Tillmann,et al.  Unit tests reloaded: parameterized unit testing with symbolic execution , 2006, IEEE Software.

[18]  Koushik Sen,et al.  DART: directed automated random testing , 2005, PLDI '05.

[19]  Andreas Zeller,et al.  Making students read and review code , 2000, ITiCSE '00.

[20]  Sumit Gulwani,et al.  Dimensions in program synthesis , 2010, Formal Methods in Computer Aided Design.

[21]  Nikolai Tillmann,et al.  Pex-White Box Test Generation for .NET , 2008, TAP.

[22]  John W. Parks,et al.  How Accurate Is Peer Grading? , 2010, CBE life sciences education.