Homework testing method for schools
I've looked a lot for this kind of question and couldn't find anything, I think the answers here could be helpful to schools and their students.
My collage has problems with it's homework testing system and I'd like to offer them that i'll upgrade or rebuild their testing framework.
My collage testing method is totally black-box. Students write whatever they want as long as they pass the automated tests done on school server.
The teaching assistant then proofreads all students code commenting on faulty logic and bad practices. The problem is that it's not humanly possible to proofread all this code.
My question is this:
What do you think is the best homework testing method that'll encourage (or better, force) students to write good code, and secondly, as a result, will reduce the teaching assistant proofreading task to a minimum.
--We program in C++ on linux.
Thank you for you comments.
It is important to identify the problem you are trying to solve. Are you trying to reduce the teacher assistant work load or are you trying to graduate developers with good coding habits? You can easily reduce the TA workload by requiring the students to accomplish pre-ordained interim tasks (essentially revert your class to a spoon-fed high school curriculum - probably not what you are looking for!).
One alternative that I picked up in software testing is outlined in this blog post: http://www.softwaretestingclub.com/profiles/blogs/applying-the-lessons-of-rapid-testing-intensive This outlines a four-step critical thinking approach for breaking down the task into the basic requirements: identify the oracles (how you would identify a defect), the surfaces (what are the operational/development parameters), the risks (what is most likely to break), and a plan based on the previous steps (in this case, a development plan instead of a test plan). When they have problems, it is important to encourage questioning and communication to insure all of the process building blocks are in place (and make them show their work for each step). This isn't a guarantee for making them all exceptional developers, but it will better prepare the motivated ones for the real world by emphasizing critical thinking.
A year ago, I switched from software testing to hardware test automation development using a C-based framework. My experience using that approach allows me to develop the prototype software very quickly with a reputation for thoroughness and efficiency. One word of warning, this may take a semester or two to work the kinks out applying it to a classroom environment, but I think you will be happy with the results.