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

从学校到步入职场的过程中,我也接触过多种编程语言,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

从静态检查工具谈代码编程规范相关推荐

  1. Jenkins 在 Tomcat 中的部署及代码静态检查工具集成

    Jenkins 的简单部署 在安装了 Jenkins 运行所需的依赖(主要是 JDK)之后,可以通过如下步骤简单快速地部署 Jenkins: 下载 Jenkins. 打开终端并切换至下载目录. 运行命 ...

  2. 代码静态检查工具PC-Lint运用实践

    代码静态检查工具PC-Lint运用实践 如何提交zero bug的产品,如何尽早发现bug,是软件开发工程师和测试工程师都需要思考的问题.我认为高质量的代码是关键,具体实施保障办法有:框架约束,代码评 ...

  3. 一些代码静态检查工具的简介

    1.KLOCWORK: 适用语言:C, C++, JAVA 是否开源:否, 是否需要编译:是 作用:代码静态检查工具.用于高效检测软件缺陷和安全隐患,提供优秀的静态源代码分析解决方案.软件号称是业界领 ...

  4. 代码质量静态检查工具

    一 点睛 代码质量静态检查工具可以自动快速发现劣质代码,潜在Bug,给出代码优化建议.因此代码静态检查工具在实际项目研发中有举足轻重的作用,利用好各种优秀检查工具是做好品质管理的重要环节. 二 静态分 ...

  5. cppcheck 自定义规则_cppcheck代码静态检查工具及相关工具插件用法介绍

    摘要:介绍代码缺陷静态检查工具(static code analyzer)cppcheck,以及其vs.qtcreator.git.jenkins插件及用法. Cppcheck着重于检测未定义的行为和 ...

  6. C/C++代码缺陷静态检查工具cppcheck

    cppcheck介绍和安装 CppCheck是一个C/C++代码缺陷静态检查工具.静态代码检查是检查代码是否安全和健壮,是否有隐藏问题. CppCheck只检查编译器检查不出来的bug,不检查语法错误 ...

  7. React Native工程中TSLint静态检查工具的探索之路

    背景 建立的代码规范没人遵守,项目中遍地风格迥异的代码,你会不会抓狂? 通过测试用例的程序还会出现Bug,而原因仅仅是自己犯下的低级错误,你会不会抓狂? 某种代码写法存在问题导致崩溃时,只能全工程检查 ...

  8. 项目代码编程规范(设计类和方法、变量、for语句格式 、while语句、 switch语句 、封装事务)

    项目代码编程规范 应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JAVABEAN,EJB)JS代码.HTML代码及数据库设计均应遵守这个规范.同时 ...

  9. linux shell脚本 静态检查工具 shellcheck 简介

    简介 shellcheck 是一款实用的 shell脚本静态检查工具. 首先,可以帮助你提前发现并修复简单的语法错误,节约时间.每次都需要运行才发现写错了一个小地方,确实非常浪费时间. 其次,可以针对 ...

最新文章

  1. (10)Spring Boot修改端口号【从零开始学Spring Boot】
  2. web设计经验七13步打造优雅的WEB字体
  3. 12cR2 RAC+RAC+ADG ORA-16854
  4. AI解救“工具人”:RPA+AI,让万物皆可自动化
  5. 百度联合长虹发布第二款云手机 售价900元以下
  6. Ubuntu下deb与rpm包的安装方法
  7. 2018百度原创力排行榜公示(转载)
  8. [转]百度地图的一些应用方法
  9. 地图测量面积工具app_GPS地图测量尺
  10. 简单数论入门和基础数学知识(未完)
  11. flashfxp怎么下载文件到本地
  12. Redhat Crash Utility-Ramdump
  13. 如何修改iTunes的iPhone备份路径?
  14. 四轴飞行器的设计与开发过程
  15. 《C》C语言编程实现指定阶“m序列”并通过gnuplot绘图
  16. python名字起源_你知道这些编程语言名字的由来吗
  17. 知乎运营推广方案PPT模板-优页文档
  18. 概率论_证明_伯努利大数定律
  19. 利用Python自动生成及发送Excel报表
  20. unity 捏脸相关

热门文章

  1. iOS汉字字符串转拼音
  2. Python文本文件的输入输出
  3. 妙用分部积分处理双重积分
  4. 思科模拟器实验6:rip基础配置
  5. centos c++ mysql_腾讯云Linux CentOS C++连接MySQL
  6. A Game of Thrones(41)
  7. 十二、Vue项目 - 详情页动态路由、banner布局和公用图片画廊组件拆分
  8. python开源编译器,python开发编译器
  9. 根轨迹起始角与终止角的确定
  10. 解决eclipse debug运行项目时下一步按钮一直为灰色不可用的问题