Emphasizing software quality in undergraduate programming laboratories

D. Gustafson, M. Dwyer
FIE '98. 28th Annual Frontiers in Education Conference. Moving from 'Teacher-Centered' to 'Learner-Centered' Education. Conference Proceedings (Cat. No.98CH36214)  
We have recently received funding from NSF's Division of Undergraduate Education under the Instrumentation and Laboratory Improvement Program to develop an approach to improving the software development skill of undergraduate Computer Science students, integrate that approach into our curriculum, and evaluate its benefits. Part of our work involves the development of an interactive web-site that governs the interaction of instructors and students in defining, completing and evaluating course
more » ... valuating course assignments. We have implemented an initial version of this web-site and plan on demonstrating its capabilities. Our curriculum is designed to provide a solid foundation in the concepts and techniques needed by practicing computer scientists. The core courses in our curriculum involve a significant number of programming laboratory exercises. In these laboratories students are given a welldefined problem which they are to solve by designing and writing a computer program. These exercises serve to develop problem-solving and design skills, provide a deep familiarity with the notations of the profession, and give concrete feedback to the student regarding their progress. It is crucial that we train students in techniques that will enable them to produce high-quality software. While quality issues are addressed in each of the courses in our current curriculum, software quality is not a foundational concept throughout the curriculum. This is not a flaw in our curriculum alone, since quality is not foundational in the other curricula with which we are familiar. We plan to introduce students to quality issues as early as possible in the curriculum, and to reemphasize those issues in every course using the vehicle of programming laboratories. The challenge is to add quality without subtracting existing content from courses. One way to expose students to quality is to motivate them to think about testing programs, i.e., running programs on defined inputs and checking that the results are correct. We will integrate a process we call adversarial testing (AT) into programming laboratories throughout our curriculum. Students will not only develop programs that solve given problems, they will also develop test cases that will be run on their programs and on the programs of other students in the course. We feel that this process will encourage them to be more thorough in their software development, more defensive in their coding, and more innovative in their test case selection. Adversarial testing is designed to award more points to students who do a better job of testing their software. This approach motivates students to anticipate the possible contexts in which their program might be used and engineer their programs to operate correctly in all such contexts. It also motivates students to think about ways in which a program may be stressed so as to expose a defect. Fostering in-depth consideration of these issues is perhaps the greatest benefit of the adversarial testing approach. The AT approach is supported by an interactive web-site that allows instructors and students to develop and evaluate both programs and test-cases.
doi:10.1109/fie.1998.738545 fatcat:vsym7jdj2ngulln6lm45juufqq