软件测试bug收集策略
上一篇 / 下一篇 2012-07-04 09:07:05 / 个人分类:测试经验
Error = 0 的程序是不存在的,怎样收集和处理程序中的错误?怎样更好地利用错误信息的收集和反馈来协助程序的调试?怎样让产品发布后,用户能够反馈出更有价值的问题 信息?这些问题是本文将要涉及的,最近对自己所做项目中的错误处理机制做了一些总结与思考,故在此讨论,希望对大家有所帮助。51Testing软件测试网#B,R#jz3@-S&o{;PO
;B?;py(Y;XX s0 目前,按照我个人的理解,软件中的错误收集和反馈方式主要有如下几种:51Testing软件测试网ST0IS-C#^jy
51Testing软件测试网 z+\X.s Wh第一种方式:使用常用的信息输出语句。51Testing软件测试网BgE.?'X
:^9bY CCW2e0 对于控制台程序,可以使用 printf 语句或者 std::cout 将错误信息打印出来;对于MFC程序,可以使用 TRACE 宏,将错误信息输出到 output 窗口,或者使用 MessageBox直接弹出对话框将错误信息告知用户 。
5V#]wGy"_N%oeR0%h[ y&p'S0 这些处理策略往往针对于 “交互性” 的代码段,可以实现 实时反馈错误信息,以供用户实时地进行处理,以免后面产生更大的错误。
l Z V%qV)UG t0!G!KP)t2r*Y)v%Mf0 第二种方式:使用错误日志方式51Testing软件测试网 vl"m zm#Vg
sq S"B_,@ s3{d0 思想:将程序中的所有错误信息输出到错误日志文件中,这样有以下这些好处:
6`)bjz"h2i0^?FqC%C;m0 1、当程序发布后,客户在使用中遇到问题后,可以直接将错误日志发送给程序员,将极大地方便了问题的定位及原因的分析。51Testing软件测试网MGAF0F9Ok
51Testing软件测试网l%om/F[q }U2、便于调试多线程或者涉及网络通信等复杂的程序,因为在这样的程序中,设置断点的调试方式非常地不方便,一旦暂停在断点处,往往为引起线程异常或者 网络连接断开等问题,极大影响了调试的效率。如果将错误信息打印到文件中,错误描述详细丰富一些,可以极大地提高调试的效率。
}*m"q(_#C3u0VQ:D-Y(?6n0 3、便于程序进行大规模的性能测试。例如:C/S模式的系统,进行100个客户端对服务器的访问测试,使用这种错误收集策略可以方便地通过分析错误日志文件来推测系统的性能。51Testing软件测试网#S2q@(t:ve*]
51Testing软件测试网*|Vb:GO3u"Z下面思考这样一个问题:很多软件的设计上都有一个类似TCP/IP协议的应用层的模块,该模块一般是直接与客户端交互的一层,它隔离了核心代码模块与客 户端的耦合,那么,对于这样一种层次结构比较深设计方案,最底层发生的错误信息怎样传递到最上层?每一层都提供获取错误信息的接口?这样开销太大,也往往 不够理想,那该怎样处理呢?
j^}+w'C3SS7H02Gn9I(n@s0 我想应该主要有以下两种处理策略,也就是我即将引出的错误收集和反馈的第三种和第四种策略:51Testing软件测试网Q5\$\(x cvW
51Testing软件测试网+Jx%v_n9b#T6N第三种方式:C++异常机制51Testing软件测试网!m yI@.C7x KO)w
lQy LJz``i0o/B9~0 C++异常处理机制是一个用来有效地处理运行错误的非常强大且灵活的工具,它提供了更多的弹性、安全性和稳固性,克服了传统方法所带来的问题.
(U%q Vh!x/H:xN K+Q0r`m)I8N;Bmq&Zp4W0 异常的抛出和处理主要使用了以下三个关键字: try、 throw 、 catch 。51Testing软件测试网F3xS9v)E(hSyD
51Testing软件测试网*C5E} lak@3y2H抛出异常、捕获异常 ,这些是C++提供的极其方便地处理异常策略,可以实现在最底层抛出异常,由最上层捕获,并且处理。
f+i Jz8Te051Testing软件测试网!u j*JpxTk说实话,C++异常机制的确是一种处理错误和异常的很好的策略,如果需要使用该机制,需要从软件架构和设计时就要开始考虑,一旦软件结构和代码写到一定 程度后,再引入异常机制将很难达到很好的效果。其实,要想用好c++异常机制,不是一件很容易的事,特别是对于项目组里面有大量新人的时候,故使用成本还 是挺高的。51Testing软件测试网g~~9Di^4czZw
51Testing软件测试网/x#vyZL#M0FQ关于C++异常机制很多C++书籍都有介绍,我也不在此赘述,本博客也有一篇C++异常机制的入门示例代码,有兴趣可以看看http://www.51testing.com/html/17/n-209117.html。
Z3e^@.P9rkPe#d051Testing软件测试网-ZmF^P];T第四种方式:GetLastError模式51Testing软件测试网*vE^w8r%J ad
51Testing软件测试网TE Q.yNT经常开发windows程序的人应该都了解,windows程序有一个API:GetLastError,它其实代表着一种错误收集处理机制。
2iN:k m0Y051Testing软件测试网u;pPJF!y0V当一个Windows函数检测到一个错误时,它会使用一个称为线程本地存储器(thread-localstorage)的机制。当函数返回时,它的返 回值为flase就能指明一个错误已经发生。若要确定这是个什么错误,可以调用GetLastError函数来获取:该函数只返回线程的32位错误代码。51Testing软件测试网2a(ljQq2c$h~r^
/_([l*Y,|+z#H;~){.wW0 WinError.h头文件包含了Microsoft公司定义的错误代码的列表。51Testing软件测试网3q3vj:V)AJ'wZ
51Testing软件测试网FNt7t!? wy|7I当Windows函数运行失败时,应该立即调用GetLastError函数。如果调用另一个Windows函数,它的值很可能被改写。