代码评审三步走-2
上一篇 / 下一篇 2012-07-24 10:16:39 / 个人分类:杂谈
#x\k8Ti G{%T#J0|2})o0 第二个参数mnsInfos在整个函数中很多地方都有使用,因此要详细分析。51Testing软件测试网do-w"px I
#RELZSw9n0 第一处用到是在初始化语句中:ivmnsInfos.length(mnsInfos.length());51Testing软件测试网oIj$pDZ*k
51Testing软件测试网[F G)^0uluR我们说过对输入参数仅用于外部调用的情况可以不关注,因此这句略过。51Testing软件测试网Z7R!T5J#@G S8P
;W+}#s~+C&[F~0 第二处是作为循环终了判断条件出现:
P%D6aG5B0c-M9S&~3neB051Testing软件测试网"h'Hf+}%dE|W
for (CORBA::ULong i = 0; i < mnsInfos.length(); ++i) |
这里提出第二条检视规则:输入参数参与循环判定或条件判定时,需对该参数取值进行分析,检查程序是否存在条件遗漏。51Testing软件测试网*\eM-Tq
51Testing软件测试网[YV$zE_a E这里的取值情况比较明显,只需检查当mnsInfos.length()取值为0时程序是否有正常处理即可。从代码看出,取值为0时,跳过整个循环,输出参数(序列)长度都置为0,如果这样的处理符合设计模型,就没有问题。51Testing软件测试网f:Mf*r!^wp
*N-_?T E I2xJgU0 请注意斜体字部分,对代码实现是否有问题不应简单、孤立地判定,而应结合设计与需求进行检查,切记。51Testing软件测试网.\ RQ:yE `6`$I,f5j
51Testing软件测试网#[ z!~(LVw接下来是一个赋值语句,将mnsInfos[i].monsterInfos赋值给局部变量mnsStatusSeq。
G'iM0e$w]ZG051Testing软件测试网y!Mt,WP这里提出第三条检视规则:变量以某种方式与输入参数建立关联的,等同于输入参数对待。
&c9qe%yQ.Y2HK04J'~ gi7{I0 这条规则的意思就是,变量与输入参数关联后,就同样适用于第一、第二两条规则。这里有点递归的意思。51Testing软件测试网.w)ez/Kk@5\f
51Testing软件测试网uK(FhRaH@'g]因此,对mnsStatusSeq的后续使用,同样要与输入参数mnsInfos一样进行分析,由于分析原则一样,就不作重复说明。51Testing软件测试网[/U"M m5m8lr
7AP}5e$O*w;[0 另外需要指出的是,在分析hrdId时,实际上有一个变量mnsTypes与hrdId建立了关联——尽管不是赋值,但是通过函数调用产生了关联(mnsTypes是函数getMonsterType的出参),因此对mnsTypes变量同样要进行相应的分析。51Testing软件测试网^1fN1l:c/I]&Sk
fw'No7go0 在此之后直接出现mnsInfos的地方全都是赋值,同样遵循规则三处理。
3p4v#h+Y1ckM3_051Testing软件测试网/t0z,w+j,C1_m对全部的(2个)直接输入参数分析完成后,就可以递归地对所有的“间接输入参数”(即前面提及的,通过某种方式与输入参数建立关联的局部变量,如mnsStatusSeq、mnsTypes等)进行分析。51Testing软件测试网a"gp ["b4y(V(E
`.{i"_|s/M0 所有输入参数分析完毕后,第二步就算是完成了。
:[#u ? dkr"Q051Testing软件测试网8{5gy9}$[;p"B?第三步:
5[.vXFg051Testing软件测试网"Ic*W8~t%^ uE.~接下来需要覆盖的,就是真正的“祸患之源”,即“非常规输入”,或者叫“隐性输入”。
1uC+uF5N-f w{+@0