欢迎来到天天文库
浏览记录
ID:39866901
大小:550.60 KB
页数:34页
时间:2019-07-13
《华为代码review准则》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Page1检视方法触发式检视分类专项检视交叉检视每日新合入检视版本差异检视其他检视方法分类专项检视1内存使用类1.内存申请后,是否有是否申请成功?2.函数退出,特别是异常分支退出时,是否释放了内存?3.内存是否被重复释放?4.操作内存时是否存在溢出使用。5.申请与释放的接口是否一致?6.跨函数释放尤其要关注,写代码时尽量不要设计成跨函数释放。7.释放后要对指针置空。Page2分类专项检视2指针使用类1.是否对函数的指针参数做了合法性检查?2.是否使用了空指针、已经释放的指针?3.对指针的偏移计算是否正确?4.指针合法性检查后是否有正确的处理?5.判断到指针为空,应
2、清理已申请的全部资源,并退出正常流程6.多个指针变量同时指向同一块内存地址,用其中一个指针释放该内存后,其它指针是否置空或重新赋值;(如果对其它指针进行置空,则需要在使用这些指针的地方进行判断是否为空的保护)Page3越界访问类1.字符串拷贝时,是否保证字符串的长度合法?2.字符串初始化、拷贝、连接的入参是否正确?3.必须有一个地方保证内存不溢出,这个保证要么是编写代码时的静态保证(定义的内存足够大),要么是运行时的动态检查,由函数提供者或调用者进行检查。建议由函数提供者进行检查,或用strncpy等方式避免拷贝过多的内存提示:使用strncpy后注意在结尾处增加
3、' '。4.典型错误是字符串越界1字节;Page4分类专项检视3分类专项检视4数组溢出类1.使用数组时,数组下标是否在数组范围之内?2.尤其是当循环语句和数组一起使用时,一定要注意边界值不能溢出。重点检查:边界值处理不正确,最大、最小值处理不正确,重点关注(for/while)循环变量的上下限检测;错误案例说明:1、(ULONG型变量>=0)恒真循环;(恒真的原因:ULONG型变量为零时减1产生数值翻转,变为0xFFFFFFFFUL);2、循环上下限是由外部函数传入,没有对传入值进行合法性检查导致死循环等问题;Page53、多层循环时,禁止使用同一个循环变量,否
4、则很容易导致死循环;4、循环变量做为数组下标时,要防止数组下标越界;5、在循环体内修改循环变量时要慎重;如:对循环变量同时有加减操作时,很可能会出现死循环,要特别关注;Page6分类专项检视4资源泄漏类1.在过程/函数退出之前是否释放了所有需要释放的资源(内存/文件句柄等)?2.信号量、waitlist等申请后,是否有进行释放?3.跨函数的释放,如果不是产品中早已明确的通用资源管理机制,则要在申请内存的地方写作注释4.调用可能会返回失败的函数,一定要判断返回值并做资源回收。异常处理类1.异常分支是否进行了处理?是否处理正确?2.如switch语句一定要包含defa
5、ult分支;3.如有if分支就应该包含else分支(对于else分支中不需要特殊处理的情况,使用注释说明)Page7分类专项检视5资源保护类1.可重入函数使用全局变量时,应通过关中断、信号量(即P、V操作)等手段对其加以保护2.只对简单全局变量(如整型)进行读操作的函数可以不申请互斥保护,但操作复杂全局变量(如链表,树)时,即使仅仅读取,也必须申请互斥保护,因为存在中途被其它任务破坏数据结构的可能性3.任务切换需重点关注数据溢出类1.强制的数据类型转换,是否导致了数据的丢失?2.是否数据精度不足,导致可能发生数据溢出或翻转?3.如对计数变量,一般是进行定时读取,要
6、保证在定时器超时前数据不能溢出。Page8分类专项检视6差1错误1.此类错误一般是由于把“<=”误写成“<”或“>=”误写成“>”等造成的2.如:VlanID有效值为1~4095,通常会定义宏,比如MAX_VLAN_NUMBER为4096,这时需要注意在参数合法性判断时,需要用“>=MAX_VLAN_NUMBER”,不要误用“>MAX_VLAN_NUMBER”。返回值类1.函数返回值的类型需要和函数声明的类型一致2.在异常情况下,需要返回不同的错误码,而不是返回OK3.函数返回值returnok、error、true、false是否用混?Page9分类专项检视7代
7、码审查九字真言看见了If,就想Else。看见malloc,就去找Free。函数调用要小心,需要看看返回值。看到for循环,就找边界值。看见return要注意,要去前面找资源。看见数组把神提,问题往往在下标。不要小看字符串,长度是个大问题。得到函数不要急,看看变量初始化,各种路径要小心。赋值函数最危险,变量没有初始化。九句句真言不孤立,相互结合显神威。Page10真言详解1看见If,就想Else看到if语句,就要想到else语句。如果没有else语句,就要分析是不需要,还是异常情况没有处理,如果是异常情况没有处理,可以提单。看见malloc,就去找Free看到mal
8、loc语句
此文档下载收益归作者所有