In software development, there is a system called test-driven development or TDD. It’s a five-step process that gets repeated until a finished product is obtained. Its core mechanic consists of writing tests to check if your software works before you write the software, and when you write the software, you write it just to pass the tests, nothing else.
This idea, when applied to education, can allow for effective teaching, more freedom for students, and clearer standards. Giving students clear goals, standards, and expectations is crucial to student success. In turn, a clear standard of success and the many paths leading there are invaluable to accommodating different students’ learning styles and aptitudes.
Let me explain to you how TDD works, and how this method can be applied to education in our schools by going through the process, step-by-step, explaining what programmers do and comparing it to what teachers and schools could do.
Step 1: Write a test = Establish clear standards
This is the single most important step. Because you are only writing software to pass the tests, the software will only be as good as the tests you write. In education, this would mean creating specific standards for what skills students should have and creating tests that students will only be able to pass if they have those skills. Test creation is a challenging and nuanced art and this step must not be taken lightly.
Each subject area may have its own standards and requirements determined separately, and the associated tests must test for skills that we want students to have, in a manner that is as direct as possible. For example, if we only want to make sure that students can add two-digit numbers, we could make a test on which they are only asked to add two-digit numbers. But if we want to make a test that also ensures that students are adding correctly, not just magically divining correct answers, you might have to add questions that ask about intermediate steps in the process, like asking what number they carried and which place value it had.
These tests must be able to be evaluated objectively and quickly, so computerized multiple-choice tests are optimal. However in many subject areas, one may have to allow for other types of tests. In those cases, strict and clear grading guidelines are even more critical. Loopholes that allow for students to do well without mastering the skill or understanding the material must be eliminated, and students and teachers must have access to these grading guidelines.
Test creation should not be left to individual teachers. It should be a collaborative, centralized effort to ensure consistent standards across schools, and all standards off which the tests are based must be publicly available, as well as example tests, so students can practice, and everybody can evaluate the test for understanding loopholes or other shortcomings and inadequacies.
The test must only test for what students should have learned i.e. it must be easy to ceiling these tests. In an adequate school, every student should get a perfect score on every one of these tests.
Step 2: Run all of the tests, and make sure this one fails = Test the test
You make sure that the students still have all the skills that they were taught in the past, and ensure that they do not have this new one, because in that case, teaching it again would be a waste of time.
This step also ensures that the test will not return false positives for students who do not have the skill or understand the material. It’s essentially testing the test.
Step 3: Write the code = Teach the students the minimum necessary to pass the test
Teach the students. It doesn’t matter how you do it, or how long it takes, all you have to do is get every student to the point where they can pass the test. This could mean different things for different teachers and different students. This avoids the messiness of needing every student to do the same work at the same time in class. As far as test-driven development is concerned, it doesn’t matter if a student learns the skill from the teacher, from YouTube, from a book, or from a deal with the devil, all they have to do is be able to pass the test.
Avoid everything that is not directed towards helping students to pass the test.
Step 4: Run the tests = Test the students
This means testing students on all past skills as well as the most recent one.
If the student fails, return to step 3, address the shortcomings highlighted by the test.
If the student passes, continue to step 5.
Step 5: Refactor the code = Educate the students further
This is the point in the development process where programmers clean up their code. Teachers can use this step to show students how their new skills might relate to another skill or topic that they have learned or will learn about. This time can be used to give students a deeper understanding of a topic or a skill, or to explore the implication and consequences of what students have learned.
Once you already know that students can pass the test, you can have fun doing things that aren’t strictly necessary but may have value outside of simply getting students to pass tests.
* * *
This method could allow for students to progress at different paces according to their abilities and aptitudes. It makes evaluating teachers and schools much easier and makes failure more obvious by eliminating the individual schools’ abilities to manipulate scores and standards so that improvement efforts can be direct in a way that is data-driven.
TDD makes tests useful. Under TDD, tests are for the students. In the current system, after a student takes a test, they are evaluated and expected to move on. The test has no influence on what they do next. There is no attempt at addressing the shortcomings made obvious by a low test score. With TDD, tests are used to help students, every student will have to pass the tests before moving on to the next subject. Nobody is left behind or ignored.
TDD is what we need to ensure that every student reaches a base level of competency, while still allowing students to go beyond that base level.
Do you see issues with this idea? If so, please share.