Code Review代码审查的思路-1

上一篇 / 下一篇  2012-07-16 13:12:06 / 个人分类:杂谈

51Testing软件测试网 G\!vh#C0LF

  1、关于Code Review

7rn7s6b B]0

K`E)dU Z J_0  1.1 Code Review的目的

#p P \C:@ ?i6n+R0

6ps&|I#q0  Code Review主要用来在软件工程过程中改进代码质量,通过Code Review可以达到如下目的目的:

R dz)l/Mgs}9?G051Testing软件测试网d+XI#g wLH"Lh

  (1)在项目早期就能够发现代码中的BUG

?Kbz!q0

dM#r2y6Ar0  (2)帮助初级开发人员学习高级开发人员的经验,达到知识共享

&g n/[Y;^DF*}&?051Testing软件测试网/Q"v'd&F/vQ

  (3)避免开发人员犯一些很常见,很普通的错误51Testing软件测试网5`%_Ft;} Ln

6e.m P[m W0  (4)保证项目组人员的良好沟通51Testing软件测试网Pt1fJ1I I

G0EV,i5~4J6CJ:F@I0  (5)项目或产品的代码更容易维护

lCTQ$Xq!b"m*i051Testing软件测试网:g.[gD5L

  1.2 Code Review的前提

QWBM!Y(|(h051Testing软件测试网O x9@^4N8a

  进入Code Review需要检查的条件如下:51Testing软件测试网+rUV$`^$d4rr+T?Q

51Testing软件测试网*bM3eL c

  (1)Code Review人员是否理解了Code Review的概念和Code Review将做什么51Testing软件测试网R wl hx

Un$a'M+V#o0  如果做Code Review的人员不能理解Code Review对项目成败和代码质量的重要程度,他们的做法可能就会是应付了事。51Testing软件测试网$un2d0Q]!QV

!?.[f WDr*J W$[1O0  (2)代码是否已经正确的build,build的目的使得代码已经不存在基本语法错误51Testing软件测试网4G3a-lMc

51Testing软件测试网1]M4{dh/Rt{

  我们总不希望高级开发人员或是主管将时间浪费在检查连编译都通不过的代码上吧。

dNu;ni4sHJ051Testing软件测试网-}#f*x-k5S,s

  (3)代码执行时功能是否正确

*kddw6aUP%vp GR0

8bw!V&t!a fS k0  Code Review人员也不负责检查代码的功能是否正确,也就是说,需要复查的代码必须由开发人员或质量人员负责该代码的功能的正确性。51Testing软件测试网y`#Ax"P

[QKD/U0  (4)Review人员是否理解了代码

v#B7D~x"p051Testing软件测试网[0t m } o~8B#~

  做复查的人员需要对该代码有一个基本的了解,其功能是什么,是拿一方面的代码,涉及到数据库或是通讯,这样才能采取针对性的检查51Testing软件测试网$U{t\ `!_

51Testing软件测试网3pD5rb|NKV5H

  (5)开发人员是否对代码做了单元测试51Testing软件测试网Y4O3^R)\'k,N

51Testing软件测试网$[5`'V0z1a)uCwCs[H

  这一点也是为了保证Code Review前一些语法和功能问题已经得到解决,Code Review人员可以将精力集中在代码的质量上。51Testing软件测试网H @ OEh%@TZ9M4l-_

*y1])O-XK,jBJ E k0  1.3 Code Review需要做什么

&Y!x-cek051Testing软件测试网S3p1f(GX/LB

  Code Review主要检查代码中是否存在以下方面问题:

+T\7u3X6n+sQ"R3p051Testing软件测试网]]#AC _}#j'OT D

  代码的一致性、编码风格、代码的安全问题、代码冗余、是否正确设计以满足需求(性能、功能)等等

/F1S [ Wh@0

0MN k1p1Ij0  1.3.1 完整性检查(Completeness)51Testing软件测试网/z`s#{#k2M!a

51Testing软件测试网L!d*D R0EN^k_0o xJ2x`

  代码是否完全实现了设计文档中提出的功能需求51Testing软件测试网*E?5h0ui0i7P

F8K}B%w.H)Nl0  代码是否已按照设计文档进行了集成和Debug51Testing软件测试网@/{N*Q7[n

51Testing软件测试网 q}8B/tX,f ]&ea1Z

  代码是否已创建了需要的数据库,包括正确的初始化数据

l"[l5O6_051Testing软件测试网LP_f-Mm,lJwr

  代码中是否存在任何没有定义或没有引用到的变量、常数或数据类型51Testing软件测试网MIm9}(s8U#eR

`{\ O!\v| d0  1.3.2 一致性检查(Consistency)51Testing软件测试网zj ~ G|JYf

51Testing软件测试网)K(B{,_Sn^;hT

  代码的逻辑是否符合设计文档

#Y*`1X Cc9AZ051Testing软件测试网4D H#K,N,G6Bn

  代码中使用的格式、符号、结构等风格是否保持一致51Testing软件测试网8m"F V5Vk)A/F o @

;uS/fnLo)n0  1.3.3 正确性检查(Correctness)

9H/xv2rC8r U0

MS%DDGtV0q0  代码是否符合制定的标准51Testing软件测试网3Pc*NYq hG

ntQi X(yj6V'Mj0  所有的变量都被正确定义和使用

'f1c+y2C-{P.T0

/O5t'v1g]Rx0  所有的注释都是准确的51Testing软件测试网3n-|;W4M]r*l

K#c#j d*qV8If0  所有的程序调用都使用了正确的参数个数

/ez}j y8il L#r(K$U0

8q Ou9OP4@+Aj0  1.3.4 可修改性检查(Modifiability)51Testing软件测试网M B(i.Fr/F,g

gQO"eR0  代码涉及到的常量是否易于修改(如使用配置、定义为类常量、使用专门的常量类等)

u!bypU#{zr051Testing软件测试网Zg/Z_.{B

  代码中是否包含了交叉说明或数据字典,以描述程序是如何对变量和常量进行访问的

m2Z$c'XS+E?0

Z @v|"k XN0  代码是否只有一个出口和一个入口(严重的异常处理除外)51Testing软件测试网+E'w+]~HL{,K

51Testing软件测试网 GtEEA:k

  1.3.5 可预测性检查(Predictability)

3x^P#u&?X~c4Y*A0

2L+wf$[ J'xD,`0  代码所用的开发语言是否具有定义良好的语法和语义

D|i:d'K}.X051Testing软件测试网(Y9dA'N+z Sh/?

  是否代码避免了依赖于开发语言缺省提供的功能

.V/lUV#y3d]4}Y[!d0

+BS:H,Mw$O,j0  代码是否无意中陷入了死循环

9Tw+w})wEWuY0

/C6U#X5_p0c"i+hy%z0  代码是否是否避免了无穷递归

q1Rx)C"x{"P4J051Testing软件测试网{pn$y9t0z5}o7i/f

  1.3.6 健壮性检查(Robustness)51Testing软件测试网*]$Bx y)t/v+m R%]9F

51Testing软件测试网2j0Kf*Z5fU

  代码是否采取措施避免运行时错误(如数组边界溢出、被零除、值越界、堆栈溢出等)51Testing软件测试网I6?P9?Z+vkF

51Testing软件测试网 z+e A0{;Qs?m

  1.3.7 结构性检查(Structuredness)

v#`$RaU0

2[/twb[ c(~0  程序的每个功能是否都作为一个可辩识的代码块存在51Testing软件测试网(J|i"].J e:s?-O

*F]5eG O8y6z Fv0  循环是否只有一个入口

:p ?b0Q B.d UF051Testing软件测试网ls1J3A&T-[Y1o

  1.3.8 可追溯性检查(Traceability)

}Y\Sh&^WqS0

8?gM5^m0  代码是否对每个程序进行了唯一标识

:v\#]bd;~"@z051Testing软件测试网*e,[!|Z%rqOr8Q

  是否有一个交叉引用的框架可以用来在代码和开发文档之间相互对应

[5X T }'Us.}C0

"Cq e2M;Re_,kdw9f0  代码是否包括一个修订历史记录,记录中对代码的修改和原因都有记录51Testing软件测试网'rq vk[5|

[z0vyo9P0  是否所有的安全功能都有标识

T3`1DZ:^y:p mF8b051Testing软件测试网]w9R V;S2m+KW q

  1.3.9 可理解性检查(Understandability)51Testing软件测试网(P;bp7t[~ E)Y3]H

51Testing软件测试网HcU3C x`w6[

  注释是否足够清晰的描述每个子程序51Testing软件测试网%fXe:gD#u

P)x.d8Y"zN+DG0  是否使用到不明确或不必要的复杂代码,它们是否被清楚的注释51Testing软件测试网G{6O:tS'dK6@

51Testing软件测试网X&Rzu D$B gm

  使用一些统一的格式化技巧(如缩进、空白等)用来增强代码的清晰度51Testing软件测试网]qJh]Gh0a

IR3J"{B/d Ms0  是否在定义命名规则时采用了便于记忆,反映类型等方法51Testing软件测试网+k[2fj^ R\

51Testing软件测试网5V0Zf9pb.Y,A9r

  每个变量都定义了合法的取值范围

b.S!y*q!T5a,?R0

H!n*H5z9t7l0  代码中的算法是否符合开发文档中描述的数学模型51Testing软件测试网"iYO:Lw,l

51Testing软件测试网:R)X }9D7e

  1.3.10 可验证性检查(Verifiability)

?z&Z C` Z0JUZ5d.?0

Ndxf;Ta3A%|\\!n0  代码中的实现技术是否便于测试

9f h%zC%U0

TAG:

 

评分:0

我来说两句

Open Toolbar