思维成就测试——探索式测试实践篇
上一篇 / 下一篇 2012-04-27 10:19:12 / 个人分类:杂谈
● Specific(具体的):测试需要一个具体的目标。
W'T1HWN$th GZi/W;R0hc1G'hT$T7?0 ● Measurable(可度量的):有明确的度量可以评估目标是否达成。
`)x)X.PA4|@0,V/yV:E0NW8ENWX0 ● Achievable(可实现的):当前的目标应该是可实现的。这潜在地要求将一个大的目标分解为多个小目标,每个小目标也是具体的、可度量的。此外,跟踪小目标的完成情况也提供了整体进度的可度量性。51Testing软件测试网\fB8v0Kt0X
51Testing软件测试网2W4R[$og:c9H.Jd'q0C● Relevant(相关的):目标要切合当前语境,符合团队利益,且不忘企业愿景(vision)。
%Xp%k${#c051Testing软件测试网3c[K'O.L k;`g● Time-boxed(有时间限制的):为每个目标设定一个合理的最后期限。这是帮助测试人员在固定的时间窗口(time window)中排除不相关干扰、专注工作51Testing软件测试网3FjzT_;~L7t3X0A
51Testing软件测试网 [ qur`p下面引入几个代表性Backend ServerBug的发现过程来解释一下探索式测试的理论,以及如何在我们的日常测试中加入这个测试手段,提高发现bug 的效率。
P!e0G)W0GW7yV051Testing软件测试网oZK&jx2a(HL【场景1】输入参数探索式测试Bug:非法的用户Id 发送到了备份的数据中心导致了服务器出现宕机
+MM/S%kcO051Testing软件测试网 FJ^Kg7o%KX o通过日常Review 服务器端软件Bug列表,QA测试发现输入参数导致服务器出现异常行为的Bug ,引入对同类型问题的思考,输入参数会导致Server 提供的API产生异常,那么其他应用类型的Server会有这种类似问题?Server 内部是怎么样的一个处理逻辑才会导致crush?51Testing软件测试网I*b'J!V6j
51Testing软件测试网%_*t~8b;p.Cz5P(MqI那么先从自己负责的Server下手,通过静态扫描Code 发现“可疑code”
#zzw"t-eWH_0CmResult CMs****Gsb****RequestPdu::解码(CCmMessageBlock &aData)51Testing软件测试网O`|"M#M$m4r&bx {51Testing软件测试网%j)N\k hQh&Q ........... r9TF1Fp1zx'bl0size_t nPos = strKey.find('^');//可疑code -xB0j+X{hroSz(M0if (nPos != string::npos)51Testing软件测试网FK3B.M}-J'R { l0zN [Mpt0lz0strKey.resize(nPos); ,u x@(h:X#@/eZ0}51Testing软件测试网&CSKEF`!M IS m_user.用户ID = strKey; (soN\"Fy CX+b%l0....... *mg+P#S[0return CM_OK; B"njY*Y N#R'h022} |
看来DEV 下一个逻辑用到了Decode代码解析出来的m_user.用户ID,但是这个值却是依赖于特殊字符’^’作为分隔符,看来我们测试的重点就是让解析的值 出错,那么肯定会造成程序的出错,到底会出什么错呢?拭目以待了!接下来为了测试出这个logical ,需要design Case走进这个分支的代码,通过背景知识了解,这个解码的方法输入参数CCmMessageBlock &aData,是通过Primary数据中心发到另一个数据中心(GSB)。Case就可以写出来了,重点是在Primary数据中心构造一 个**Id 带有多个’^’InputValue. 测试结果看到了这个Bug 大家应该知道了,通过探索式的测试方法构造输入参数 ,针对性的找到了这个隐藏的Bug,显然这种针对性的构造输入参数,比模糊式的测试发现的bug 效率会有一定提高。
LoBe\1Y!j6v051Testing软件测试网{fI*xE'?接下来我们来看一下开发如何Fix这个问题的,
3he/n HweB0CmResult CMs****Gsb****RequestPdu::解码(CCmMessageBlock &aData) 6\&t6l!~J+Hq0{ wb*ux U!^0..............51Testing软件测试网+M U9J Lwu'Z:l CmResult rv = CMs****Util::GetFromUniqueKey(strUniqueKey, strKey, strSubKey);//Fix code51Testing软件测试网5k4DIDMm m_user.用户ID = strKey; {;q\a8o0......... 1z r.}9DP;@0} |
,fG/c`6^J0 UniqueKey code logic简单在这里说明一下: not use the specail char to generate the Key use the each selfkey and selfKey length 作为一个单元;显然这种编程风格非常的规范,特别是针对Server,这样企图通过输入参数破坏程序逻辑就变得很困难了。51Testing软件测试网:@$I0p;YtU