1. testing
unit test: each piece of program independently(functions, classes)
integration: overall program
test suite: 1) small enough: we can test in reasonable amount of time. 2) large enough: to give us some confidence that the program is right
2. debugging
A large part of being a good programmer is learning how to debug.
A transferable skill.
not random: be systematic searching through the list.
how to be systematic:
1) study the program text & ask how could it have produced this result.
以不懂这段代码的心态去读它。不是问为什么没有得到自己想得到的结果,而是为什么会得到自己没有想要得到的这个结果。
2) is it a part of family?
3) how to fix it:
study available data
找出哪些数据会产生这个结果,哪些不会。
design & run a repeatable experiment: know the expected results
using binary search to get the bug(print values)
给代码分区一半一半地找
可以同时输出变量的值在代码对的情况下应该的是什么 what it should be?