您的位置:首页 > 编程语言

从静态检查工具谈代码编程规范

2016-01-10 10:05 393 查看
提升自身编程能力是每一个码农的追求,也许我们每日都可以写上几百几千行代码,抑或每日只能修修补补添加几行代码,可是编写代码的行数的增加确实是提升编程能力的体现吗?从我个人的理解来看并不是这样。

从学校到步入职场的过程中,我也接触过多种编程语言,C、C++、Java、Python、PHP等。对于其中的多数高级语言来说,其实入门上手很快,只要有一门编程语言的基础,投入其他语言的开发,需要投入的时间成本并不高。但是想做到熟悉、精通,确实还是需要花一些功夫。但并不是仅仅通过代码行数的增加来实现,量变也许确实可以带来质变,但如果不结合更有效的手段那效率将是极低。

从我的理解来看,编程能力的提升包括编程语言的熟悉,既编程速度的加快;代码质量的提高,既编写出的代码漏洞少、缺陷密度低;以及编程风格改善,代码易于阅读、鲁棒性好;代码安全性好,能考虑到多种安全场景,避免遗留安全方面的坑。

今天我想通过对静态检查的一些简单介绍为大家提供一种学习改善代码风格、提升代码质量的手段。静态检查工具也许很多人并不熟悉,但是行业内的大型公司一般都会引入静态检查,从而达到提升程序员编码质量、保证代码安全性能的目的。常见的静态检查工具有PCLint、Fortify、Coverity等,每一种静态检查工具检查的重点虽然有重合,但是也各有特点,具体各种工具之间的差异大家可以搜索了解,涉及的分析对比帖子也很多。下面我介绍几种C语言中常见的Fortify告警项以及它们所体现的代码编程要求,从而让大家了解静态检查告警项的了解如何提升大家的编程能力。

1、Dangerous Function,在代码中使用诸如memcpy之类的函数,它们的问题在于没有对目的缓冲区的大小做限制,如果源的长度大于目的缓冲区的长度,那么会导致目的区的溢出,因此需要结合目的缓冲区长度进行限制,防止溢出,可以采用memcpy_s之类的安全函数。所以在编码过程中要尽量杜绝非安全函数的使用。

2、Often Misused:Authentication,如果将IP地址或者DNS名称等投入到鉴权认证的机制中就会存在风险,因为DNS是可以被欺骗的,所以避免通过获取IP地址做登录的限制等鉴权操作。

3、Unchecked return value,未对返回值做检查,我们不能相信任何一个函数是安全的一定可以返回预期值的,即使是大规模使用的C库函数,也有可能出现各种低概率的异常情况,对于我们在开发产品时,必须对返回值做校验检查,记录一条日志可以为我们在分析错误情况时提供十分有利的帮助,当然各种杂乱的日志也会为我们定位问题增加负担,因此如果经过分析确实不需要考虑某些函数的返回值异常情况,那就是放弃获取它的返回值吧,请记住在调用处加上(void)。

4、Dead Code,死代码是我们在编写调试代码极易产生的,有一些在编码初期或调试过程中加入的代码,在最终产品上永远不会跑到的地方,何必留着它呢?当然有些诸如入参判断、提升鲁棒性的处理分支还是有必要的,但是那些影响代码阅读、腐化代码框架的代码还是及时清理掉吧。

5、Double Free,内存的二次释放,这个便是极度危险的情况了,如果出现便会立即导致程序Core掉,对于使用Java编程的程序员来说,不存在指针的概念以及有JC的存在,因此对于内存分配释放的要求没那么严格,但是对于C程序员来说,内存的释放是非常重要的,但是一不小心对内存二次释放那也是极度危险,这个需要重点关注。

6、Memory Leak,内存泄露,请牢记,这个是C程序员最基本的要求,一定不能出现内存泄露的情况,分配的内存一定要及时释放,如果你步入企业进行开发,这是对编程的基础要求,一定要牢记。出现这种问题会被人鄙视至死。

7、Null Deference,空指针引用,这个问题在各种编程语言中都可能出现,在Java中可能指引用的对象为空,如果我们调用null.method(),那结果可想而知,因此不要吝啬自己的非空判断,在每次使用一个指针或者引用时,加上非空判断一不小心就可以为你避免一个意想不到的异常。

8、Poor Style:Value never read,这个是编程风格的问题,对于一个变量如果赋值后没有对其进行任何操作,随即又重新赋值,那么第一次的赋值就是无意义的,赋值也会占用资源的嘛,既然无意义何必要执行呢,好的代码就是通过一点一滴积累出来的,如果你写了一百万行代码的产品呢,无数多处重复赋值肯定是有效率降低的。

好了,借用8这个吉利的数字,在这里只简单介绍常见的八种Fortify的告警项,希望做到的就是让大家了解到这些告警项的含义,是不是确实很有道理以及相当有意义?也许有些已经是我们知道的、已经养成的良好的编程习惯,但是其中必定有我们平时不注意的编程要求,如果我们都能一一做到,岂不是编程能力又得到了一个很大程度的提升呢?一起进步吧。

附上网上找的一个Fortify告警项描述的连接:http://www.docin.com/p-268037705.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息