Despite our reliance on software in everything from televisions and cars to medical equipment, it often doesn’t work correctly. Everyone has had problems with software—text editors that freeze, causing us to lose work; answering machines that won’t answer. These problems merely frustrate us. Others are far more serious, such as the program on a satellite that contains an error, causing the loss of expensive equipment, or web servers that have bugs enabling an attacker to break in and steal personal data. In the case of medical equipment, poor software could cost lives.
So, how can we develop better software? One way is to make good programming as much a part of learning computer science as good writing is a part of studying English and law. To test this idea, we developed a secure-programming clinic.
A “secure programming clinic,” analogous to a writing clinic in law schools or English departments, is grounded in providing continual reinforcement of the mechanisms, methods, technologies, and need for programming with security and robustness considerations throughout a student’s coursework. The clinic augments courses, not replaces them or their content.
A key part of starting a secure programming clinic is to understand how students think about robust programming and to assess whether the clinic is having the desired effect on their understanding of secure programming. To do this we have designed an assessment consisting of a pre-test and a post-test administered to the students at the beginning and end of the term during which they use the clinic. In order to develop these questions, we started by developing a concept map of secure programming to make sure we were assessing a reasonable body of knowledge. The concept map depicts epistemologically important sets of concrete and abstract objects in secure programming. This concept map was developed using the input of subject matter experts.