在过去的算法竞赛以及各种码代码的经历中,如果遇到需要编写测试用例进行调试的情况,自己往往是先完成程序代码的编写,再简单地写几个测试用例进行测试一下。在接触软件构造这门课之前,我一直认为这并不是错误的。
是故,在课程上被要求先编写测试用例再编写程序代码时,我感到十分的不解,我完全想不到这么做的任何理由。但是看着老师反复强调这一点的样子,我也是打算在之后的码代码过程中尝试一下这种写法,来看看到底这么做有什么好处。
其实在最初的写项目的过程中(Lab1),我并没有感觉到先写测试用例所带来的好处,其给我带来的感觉与先完成代码再编写测试用例一样。但这是因为Lab1的项目其实不会出太多意想不到的错误,其代码结构较为简单。
当写到Lab2的时候,我依旧尝试先写RI、AF以及各种规约,再完成测试用例与checkrep的编写。在接下来完善方法的过程中,出现了各种各样的情况:完成了一个方法后检查写法没有问题,运行测试用例却报错;或者原先正确的方法在更改了其他调用方法后,运行测试样例却出错了;或者是运行过程中checkrep报错了等。这每一个错误都是原先隐藏在代码中的一个个bug,可能这些bug一开始不会显露出来,而当其他方法逐渐完善后,或者修改了一些原来的方法后,这些bug就会导致各式各样的错误出现。
因此,提前写好测试用例与checkrep等代码有如下优点:
1.能够随时测试方法。每完成一个方法,或者对一个方法做出任何改动后,可以立刻进行测试,也可以及时发现bug,而不需要在写完所有的方法之后,当所有的bug混杂在一起后再去一个个解开bug(往往那时候bug会像毛线团一样缠在一起)。
2.自我感觉如果在写完程序代码之后再写测试用例,会在无意识中按照自己程序代码的写法去写测试用例(而不是根据spec),可能会在潜意识中规避一些可能会导致bug的测试。而若提前写测试用例,则会完全按照spec来设计,能够更准确地发现代码中的bug。
3.在完成spec后实现代码之前完成测试用例的编写,能够帮助你完善spec的内容。(6.11补充)
更多的优点待日后有其他感受再来补充。
因此在日后的编程中,自己也会坚持先写测试用例再写代码的习惯,相信这会使我受益良多。