SCS Undergraduate Thesis Topics
|Nivedita Chopra||Roy Maxion/Robert Simmons||Nipping Bugs in the Bud - Student Misconceptions in Introductory Computer Science Classes|
Bugs in software are often caused by misconceptions in the programmer's thought process. Such misconceptions ought to be 'nipped in the bud', in introductory computer science classes where there is a focus on underlying concepts. We aim to mitigate common misconceptions in the Principles of Imperative Computation course (15-122, taught in C0 and C) by analyzing the bugs committed by students in the class, determing the misconceptions behind these bugs, and devising ways to mitigate these misconceptions.We collected data about bugs committed by students throughout the course of the Fall 2014 semester (335 students) and during one lab in the Spring 2015 semester (288 students). We classified each bug according to a taxonomy based on the IEEE Standard Classification of Software Anomalies, determined the misconceptions behind commonly-seen bugs, and proposed teaching methods to eliminate them. The bugs observed were logic bugs (60 instances), data bugs (21), and interface bugs (7), as per the IEEE Standard Classification for Software Anomalies (2010). An additional category of bugs emerged called "comprehension errors" (32 instances) which are caused by a misunderstanding of concepts, specifications or error messages. In one of our weekly labs in Fall 2014, we noticed that 30% of the bugs were caused by lack of attention to edge cases, which are situations that occur at extremes that the programmer may not have considered. We performed an experiment during this lab in the Spring 2015 semester where we split the students in the class into two groups. We encouraged one group of students to spend five minutes thinking about edge cases in the problem before beginning to code, and did not give any special instructions to the second group. We expect that the students who think about edge cases prior to coding will perform better in terms of faster completion times, more incremental progress to solution, and better quality of final code.