Test-Driven Education

image from media-cache-ak0.pinimg.com

When we teach students math, algebra in particular, we generally tell them, “check your work.”

It just occurred to me that this is similar to software testing.

Testing in software (ish):

  1. Write a test that tells you your program is successful.
  2. Write a program that you think will pass the test.
  3. Verify that the program passes the test.

Testing in algebra, with a basic solve-for-x problem:

  1. Make sure you have an equation on paper that will verify a correct value for X (the assignment usually provides this).
  2. Solve for the variable using some methodology.
  3. Verify that it passes your test by plugging your answer(s) into the original equation.

This is nothing new– it’s basically how most math teachers teach problem-solving- but I like the nomenclature change, and previewing for students how a methodology they learn early on actually gets used in real-life projects.

It gets more interesting if we start to look at something like English or Social Studies, where (at least if we’re doing our jobs right) we ask students to be more generative and creative. What might test-driven learning look like there?

Example:

(Way too widely scoped, but works for illustrative purposes)

Compare and contrast the economic and environmental impact of hydroelectric, solar, and nuclear energy. If we were going to implement one of these to provide power for the Bay Area, which would you choose and why?

What could a test look like here? I’d probably ask the kids to write a little set of expectations about their work. Early on, these would be done with the teacher or collectively. Later, students might write their own tests for different assignments.

Sample test:

The paper should…

  • explain the benefits and drawbacks of solar.
  • explain the benefits and drawbacks of hydroelectric.
  • explain the benefits and drawbacks of nuclear.
  • choose a best option for the Bay Area
  • explain why the chosen option is the best.

We’d probably also have a set of classroom tests that papers would always be expected to pass:

  • The paper should be written in academic English
  • The paper should have an opening, closing, and central thesis
  • The paper should be written in paragraphs that track back to the thesis
  • The paper should be free from spelling and grammar errors

So what do we get out of this?

I often see students – across age, race, and privilege boundaries – look at a large assignment and not no where to start. Often, the end result is just a lot of energy thrown in a scattershot way, and sometimes misses fundamental pieces of the assignment.

image from s3-ec.buzzfed.com

By breaking assignments down into a set of criteria, and continually evaluating which criteria the paper meets/doesn’t meet, the students (and teacher) have a much better sense of where their work is and where it needs to go.

I also like how it makes peer review more focused and effective. Often, when you have students trade papers, you get scattershot feedback that goes too deep in some areas and misses others. Feedback quality also depends on the current understanding/performance of the reviewer, which means that students tend to get inconsistent quality depending on who they’re paired with.

With test-based peer review, we scope the questions to be answered by the reviewer way down. You might get something like:

This paper…

  • DOES explain the benefits and drawbacks of solar.
  • DOES explain the benefits and drawbacks of nuclear.
  • DOES choose a best option for the Bay Area.
  • DOES NOT explain why the chosen option is the best.
  • DOES NOT explain explain the benefits and drawbacks of hydroelectric.

That gives the reviewer a definition of done (when they’ve verified each point), and the writer a definition of done (when they’ve fixed the failing tests). Even if a reviewer doesn’t have the domain knowledge to evaluate one particular test, they still might be able to review the others.

It also gives you a transparent, fair grading system. A student can write a paper that hits the main points required by the assignment, fails the grammar test, and still get a good score. Ideally, they have the option to fix whatever is wrong and re-submit.

Again, no revolutionary ideas here. Good teachers have transparent rubrics, separate content from form in grading, accurately assess skill gaps, and help their students address them. This is just a language/framework that might help unify some of those ideas, while also relating them to the way people collaborate in the working world.

If I was back in the classroom (and we had the technology to support it), I’d love to drive a writing-centered class through Github. Students would fork an assignment, write their content, and then pull-request against my repository to add their papers. We’d be able to use peer grading, enter line-by-line comments, and trace how the papers evolve in response to the feedback.

Maybe we could even get run a spelling-and-grammar CI tool against the repo? :)