排错的基本方法
排错(即调试)与成功的测试形影相随。测试成功的标志是发现了错误。根据错误迹象确定错误的原因和准确位置,并加以改正的主要依靠排错技术。测试爱好者:jg4hXO4Zs
f*?c;Wp$H01. 排错过程测试爱好者;E}6~-lw3s3c
测试爱好者:M5W-zS.L;pE
如下图所示,排错过程开始于一个测试用例的执行,若测试结果与期望结果有出入,即出现了错误征兆,排错过程首先要找出错误原因,然后对错误进行修正。因此排错过程有两种可能,一是找到了错误原因并纠正了错误,另一种可能是错误原因不明,排错人员只得做某种推测,然后再设计测试用例证实这种推测,若一次推测失败,再做第二次推测,直到发现并纠正了错误。测试爱好者 w`n{3AIY
测试爱好者9uH {!K'XCQJ

3sTj$Rd.rC0
u#{j,_3rZ,z1OC0 排错是一个相当艰苦的过程,究其原因除了开发人员心理方面的障碍外,还因为隐藏在程序中的错误具有下列特殊的性质:
Om,Z0|*`w0C0测试爱好者"zbljW9gZF
(1) 错误的外部征兆远离引起错误的内部原因,对于高度耦合的程序结构此类现象更为严重;
&Hs4MVww Q0测试爱好者bg3h`p[3@BeG
(2) 纠正一个错误造成了另一错误现象(暂时)的消失;
P3bDzA0
])v FVu$z_6z0 (3) 某些错误征兆只是假象;测试爱好者NA^hN/S@
$QP"i^cl'qNr y0 (4) 因操作人员一时疏忽造成的某些错误征兆不易追踪;测试爱好者"T6X6x6@9^q
测试爱好者g2An;d1jy n
(5) 错误是由于风时而不是程序引起的;测试爱好者*]u3d/|&s,U:^
wi2d4X]0QiV7o0 (6) 输入条件难以精确地再构造(例如,某些实时应用的输入次序不确定);测试爱好者8jN"r#B x#G F
puH:qOg0 (7) 错误征兆时有时无,此现象对嵌入式系统尤其普遍;
T9u"h;{ L(`{ x ~0
_ F4{c}n*Y&V0 (8) 错误是由于把任务分布在若干台不同处理机上运行而造成的。测试爱好者jm7nHe'PwsXS
n Yt^ B#F`O^0 在软件排错过程中,可能遇到大大小小、形形色色的问题,随着问题的增多,排错人员的压力也随之增大,过分地紧张致使开发人员在排除一个问题的同时又引入更多的新问题。测试爱好者4HT x| x6z/@
测试爱好者C.^vm Cq,qp7UE
尽管排错不是一门好学的技术(有时人们更愿意称之为艺术),但还是有若干行之有效的方法和策略,下面介绍几种排错方法。
2QT%c%Tn2u b0
&]:V.Yb6N ? @l02. 排错方法测试爱好者BmF6Vs;dO
1z'TgFX;\0 无论采用哪种排错方法,目标只有一个,即发现并排除引起错误的原因,这要求排错人员能把直观想象与系统评估很好的结合起来。测试爱好者(bhL7U] O` W"{
测试爱好者M.L|"Wy)p
常用的排错策略分为三类:测试爱好者q%UZ8Hy)@7Q ` a#X]
测试爱好者@Jc$ftGI
① 原始类(brute force)测试爱好者*\2WI(P e
H.G(k2dqu'u)i0 ② 回溯类(backtracking)
8ia_qy!CB0
!D LiX,{;{y0 ③ 排除类(cause eliminations)测试爱好者1p1?`u7j
测试爱好者B@.W7k8?0Otv Ai&a
原始类排错方法是最常用也是最低效的方法,只有在万般无奈的情况下才使用它,主要思想是“通过计算机找错”。例如输出存储器、寄存器的内容,在程序安排若干输出语句等,凭借大量的现场信息,从中找到出错的线索,虽然最终也能成功,但难免要耗费大量的时间和精力。
.a @1p0d!a`!H#u&a0测试爱好者 `*j,FHO2w$`(y
回溯法能成功地用于程序的排错。方法是从出现错误征兆处开始,人工地沿控制流程往回追踪,直至发现出错的根源,不幸的是程序变大后,可能的回溯路线显著增加,以致人工进行完全回溯到望而不可及。测试爱好者r'R;w,Gprp,UT
f*?c;Wp$H01. 排错过程测试爱好者;E}6~-lw3s3c
测试爱好者:M5W-zS.L;pE
如下图所示,排错过程开始于一个测试用例的执行,若测试结果与期望结果有出入,即出现了错误征兆,排错过程首先要找出错误原因,然后对错误进行修正。因此排错过程有两种可能,一是找到了错误原因并纠正了错误,另一种可能是错误原因不明,排错人员只得做某种推测,然后再设计测试用例证实这种推测,若一次推测失败,再做第二次推测,直到发现并纠正了错误。测试爱好者 w`n{3AIY
测试爱好者9uH {!K'XCQJ

3sTj$Rd.rC0
u#{j,_3rZ,z1OC0 排错是一个相当艰苦的过程,究其原因除了开发人员心理方面的障碍外,还因为隐藏在程序中的错误具有下列特殊的性质:
Om,Z0|*`w0C0测试爱好者"zbljW9gZF
(1) 错误的外部征兆远离引起错误的内部原因,对于高度耦合的程序结构此类现象更为严重;
&Hs4MVww Q0测试爱好者bg3h`p[3@BeG
(2) 纠正一个错误造成了另一错误现象(暂时)的消失;
P3bDzA0
])v FVu$z_6z0 (3) 某些错误征兆只是假象;测试爱好者NA^hN/S@
$QP"i^cl'qNr y0 (4) 因操作人员一时疏忽造成的某些错误征兆不易追踪;测试爱好者"T6X6x6@9^q
测试爱好者g2An;d1jy n
(5) 错误是由于风时而不是程序引起的;测试爱好者*]u3d/|&s,U:^
wi2d4X]0QiV7o0 (6) 输入条件难以精确地再构造(例如,某些实时应用的输入次序不确定);测试爱好者8jN"r#B x#G F
puH:qOg0 (7) 错误征兆时有时无,此现象对嵌入式系统尤其普遍;
T9u"h;{ L(`{ x ~0
_ F4{c}n*Y&V0 (8) 错误是由于把任务分布在若干台不同处理机上运行而造成的。测试爱好者jm7nHe'PwsXS
n Yt^ B#F`O^0 在软件排错过程中,可能遇到大大小小、形形色色的问题,随着问题的增多,排错人员的压力也随之增大,过分地紧张致使开发人员在排除一个问题的同时又引入更多的新问题。测试爱好者4HT x| x6z/@
测试爱好者C.^vm Cq,qp7UE
尽管排错不是一门好学的技术(有时人们更愿意称之为艺术),但还是有若干行之有效的方法和策略,下面介绍几种排错方法。
2QT%c%Tn2u b0
&]:V.Yb6N ? @l02. 排错方法测试爱好者BmF6Vs;dO
1z'TgFX;\0 无论采用哪种排错方法,目标只有一个,即发现并排除引起错误的原因,这要求排错人员能把直观想象与系统评估很好的结合起来。测试爱好者(bhL7U] O` W"{
测试爱好者M.L|"Wy)p
常用的排错策略分为三类:测试爱好者q%UZ8Hy)@7Q ` a#X]
测试爱好者@Jc$ftGI
① 原始类(brute force)测试爱好者*\2WI(P e
H.G(k2dqu'u)i0 ② 回溯类(backtracking)
8ia_qy!CB0
!D LiX,{;{y0 ③ 排除类(cause eliminations)测试爱好者1p1?`u7j
测试爱好者B@.W7k8?0Otv Ai&a
原始类排错方法是最常用也是最低效的方法,只有在万般无奈的情况下才使用它,主要思想是“通过计算机找错”。例如输出存储器、寄存器的内容,在程序安排若干输出语句等,凭借大量的现场信息,从中找到出错的线索,虽然最终也能成功,但难免要耗费大量的时间和精力。
.a @1p0d!a`!H#u&a0测试爱好者 `*j,FHO2w$`(y
回溯法能成功地用于程序的排错。方法是从出现错误征兆处开始,人工地沿控制流程往回追踪,直至发现出错的根源,不幸的是程序变大后,可能的回溯路线显著增加,以致人工进行完全回溯到望而不可及。测试爱好者r'R;w,Gprp,UT