Testing Across the Curriculum

Many students find testing software as difficult and frustrating as they find writing prose. As with writing, no pedagogy will magically replace the need for plenty of practice. Therefore, we believe students should be required to write tests in as many courses as practical. This workshop will present a survey of tools that instructors can use to incorporate testing into many different courses throughout the curriculum.

Proposed Topics

We plan to present the following test frameworks:

FrameworkPossible CoursesNotes
RSpec(too many to list) Many test frameworks (including Jasmine) are based on, or inspired by, RSpec. Others (like Cucumber) use RSpec "under the hood". In addition, we find RSpec useful for writing system tests of command-line programs.
JasmineWeb ProgrammingJasmine is a unit test framework for JavaScript.
CucumberWeb Programming, Senior Project, and other coursesCucumber is designed to upport Behavior Driven Development. We use it primarily in our Web Programming course to support system tests of web applications. However, Cucumber could be used to write system tests for almost any program in any course.
MIPSUnit::MUnitComputer Organization / Assembly LanguageMIPSUnit::MUnit is a JUnit-like framework for testing MIPS assembly.
DLUnit Computer Organization / Computer Architecture DLUnit can be used to test combinatorial and sequential circuits from a Computer Organization, Computer Architecture, or Digital Logic course. DLUnit is simpler to use than JLSCircuitTester, and also works with both Logisim and JLS.
CUnitSystem Programming, Operating Systems, Networking, Data Structures, etc.CUnit is a unit testing framework for C. It is useful in any course where students are expected to write C code.

Prerequisites

We will provide a brief overview of unit testing with JUnit. However, we will assume that all participants have had some experience with JUnit and unit testing. Those with no previous testing experience will likely benefit most from a workshop whose primary focus is the introduction of unit testing.

Topics not Covered

CS 1, CS 2, Software Engineering
This focus of this workshop is not to help faculty introduce testing to students. Instead, our focus is to teach faculty about tools they can use to provide testing experience beyond the courses during which the topic is typically introduced.
High-level testing concepts
This workshop is not designed to teach high-level testing principles such as "what tests do I need?", or "how do I know when I've written enough tests?" This topic is big enough to fill an entire workshop.
Test Driven Development and Behavior Driven Development
These topics are also big enough to fill an entire workshop (if not an entire class) of their own. This workshop won't address them.

FAQ

Can't instructors simply choose and learn testing frameworks on their own?
Yes; but, (1) we all have a long list of things the would like to learn ``someday''. Workshops tend to be one way of getting the ball rolling. (2) Simply vetting all the different choices can be time consuming. It is very helpful to have somebody say ``try this one first.'' (3) In many cases, the most difficult / time consuming part of learning a new framework is getting the first sample to run. It is definitely possible to do this on one's own; but, it isn't nearly as efficient or as much fun.
Can you really learn these frameworks in 20 to 30 minutes?
Learn, yes; master, no. The goal is simply to show the participants the basic setup and use of each framework. We are not, by any means, going to make participants experts.

If you have any questions, please email me at .


Last modified: Mon Aug 22 14:27:19 EDT 2016