@smilence
2013-10-25T06:58:51.000000Z
字数 1340
阅读 3102
1.Testing a Real World Object or a Software or a Function
三者并无本质的差别,问题的意义均取决于:测试对象在不同的输入下,能否实现预计的功能。 一般总是可以考虑以下 Test Cases下测试对象的"效果":(1) 不同类型的Normal cases (2) Extreme cases ( 边界条件,或极端情况如不同用户或thread频繁access/update ) (3) Invalid case。
e.g.1 How would you test a paperclip? (CtCI example)
e.g.2 Provide test cases for functionsort( int array[] )
.(CtCI example)
e.g.3 Test the following method in a chess game:bool canMoveTo( int x, int y)
.(CtCI:12.3)
e.g.4 How would you load test a webpage without using any test tools?( CtCI: 12.4)
e.g.5 How would you test a pen?( CtCI: 12.5)
e.g.6 How would you test an ATM in a distributed banking system? (CtCI:12.6)
2.Troubleshooting
总是可以遍历测试对象由生成到运行的call flow,观察每一步的"变量"及其dependency,确定可能出现问题的步骤。注意问题的起点与终点。
e.g.1 Troubleshooting for a web browser crash.( CtCI example )
e.g.2 Find the mistake(s) in the following code: (CtCI: 12.1)
unsigned int i;
for( i = 100; i >= 0; --i )
printf( "%d\n", i );
e.g.3 Given the source to an application, you find it never crashes in the same place.The application is single threaded, and uses only the C standard library.What programming errors could cause the crash?How would you test each one? ( CtCI: 12.2)
3.GNU Debugger Commands
(1) Compile with GDB support: gcc -g prog.c -o prog.x
;
(2) Start debugging: gdb prog.x
, (gdb) run
;
(3) Handle breakpoints: (gdb) break prog.c: 6
or (gdb) break my_func
; if
, continue
, step
, next
; delete
;
(4) Watch variable: (gdb) print my_var
, (gdb) watch my_var
, (gdb) x (address of var)
;
(5) Other utilities: (gdb) backtrace
, (gdb) finish
.