问题引入

多人协作开发的项目,没有统一的代码规范,那么最终的编写状态必定风格迥异,产生的结果:对内,阅读审核代码是很痛苦的;对外,公司形象就是差。

单干的项目也必须要严格按照代码规范,因为最终还是会对内和对外。

要改变一个误解的常识,代码规范并不影响代码质量,代码质量的维度可从运行稳定、执行性能、易维护性三方面考虑。

解决方法

将代码规范控制在源头:格式化工具 Astyle           -- 易维护性

阶段性检查代码质量:静态检查工具 Cppcheck     -- 运行稳定

最终的质量保证手段:业务流程化和审核专业化    -- 执行性能

人是最容易犯错的,减少犯错就得借助三化:工具化、流程化、专业化。

方案论证

格式化工具:
    Astyle
    官网:http://astyle.sourceforge.net/
    功能介绍:
        A Free, Fast, and Small Automatic Formatter for C, C++, C++/CLI, Objective‑C, C#, and Java Source Code.

许可:开源且商用免费
    源码:https://sourceforge.net/p/astyle/code/HEAD/tree/
    优劣:功能强大、易用、免费,支持以IDE插件方式使用,如MDK、IAR、SourceInsignt、VS-Code、Notepad等,但不支持代码风格检查

Cpplint
    官网:https://google.github.io/styleguide/cppguide.html
    功能介绍:
        Cpplint is a command-line tool to check C/C++ files for style issues following Google's C++ style guide. Cpplint is developed and maintained by Google Inc. at google/styleguide, also see the wikipedia entry
    许可:开源且商用免费
    源码:https://github.com/cpplint/cpplint
    优劣:功能强大,遵从Google C++代码规范的强烈建议使用,支持以IDE插件方式使用,但自有代码规范需要修改源码,难度较大

    静态检查工具:

静态检查工具罗列:https://github.com/analysis-tools-dev/static-analysis

部分介绍

Cppcheck
    官网:http://cppcheck.net/
    功能介绍:
        Cppcheck is a static analysis tool for C/C++ code. It provides unique code analysis to detect bugs and focuses on detecting undefined behaviour and dangerous coding constructs.
    The goal is to have very few false positives. Cppcheck is designed to be able to analyze your C/C++ code even if it has non-standard syntax (common in embedded projects).

许可:开源且商用免费
    源码:https://github.com/danmar/cppcheck
    优劣:功能强大、免费、易用,支持 windows、linux

SonarQube
    官网:https://www.sonarqube.org/
    功能介绍:
    

许可:社区版和收费版,C/C++收费版才有
    源码:社区版
    优劣:功能强大,但用于C/C++需要付费

推荐文章(工具对比):《C++静态检测工具有哪些值得推荐?
    简要如下图,详细参见上述链接
    静态检查项:
    

工具对比:

推荐文章(工具对比):《九大顶级静态代码分析工具 - 知乎 (zhihu.com)

 推荐文章(工具对比):《C++静态代码扫描哪家强?

简要如下图,详细参见上述链接

从易用性和免费角度出发的最终方案选择:

Astyle 可在源头有效控制编码风格且免费易用,故选择Astyle作为编码风格工具

Cppcheck 功能强大,支持单文件和目录方式检查,可与Jenkins集成,检查规则全面且检查出的问题都是编译正常的且免费易用

接受收费的情况下,建议选择 SonarQube,功能很强大,支持语言丰富,检查规则全面,易于集成且支持多阶段检查,出问题时技术支持也更迅速

实施过程

AStyle推荐文章:

《在IAR中利用AStyle插件格式化代码》:https://blog.csdn.net/qq_20222919/article/details/103857352

《STM32开发中Keil使用Astyle自动格式化整理代码》:https://blog.csdn.net/yuleitao/article/details/103408567

《如何在notepad++实现代码自动化排版(调用Astyle)》:https://www.cnblogs.com/libra13179/p/9120360.html

《vscode添加 Artistic Style(AStyle)》:https://blog.csdn.net/tianma666666/article/details/103478792

《Source Insight 4.0集成格式化工具AStyle》:https://blog.csdn.net/redeagle_gbf/article/details/81566871

详细使用方法见官方手册:http://astyle.sourceforge.net/astyle.html

    Cppcheck检查演示

数组越界赋值:

类模板递归次数太多潜在问题:

详细使用方法见Cppcheck官方手册:https://cppcheck.sourceforge.io/manual.html

总结建议

规范的代码可提升团队开发效率;

规范的代码可减少编写引入的bug;

规范的代码可降低维护的成本;

规范的代码可使代码审查更容易;

规范的代码可帮助自身和公司成长;

工具、流程只是为了将犯错减少但并不能实现零错误,所以为了将犯错降至更低只能以专业化的态度认真对待代码规范这个事,只有对代码质量报以敬畏之心,代码才会有质量可言,切不可迷之自信!

建议业务流程:

1、代码编写/修改,实现业务功能

2、Astyle格式化,满足公司或团队的代码风格,也是为了后期维护

3、Cppcheck静态检查,将隐含错误遏制在开发阶段

4、开发本地功能验证,主要是验证功能逻辑的准确性,这一步是必须要做的,是代码质量的第一道关卡,无法用工具替代

5、Jenkins构建版本,且生成Cppcheck检查报告,与步骤3相互印证,检查上库代码是否与仓代码冲突,是否有语法错误,有问题回到步骤1

6、Gerrit代码审核(专业团队),任何工具都无法检测逻辑正确性,所以审核者要对编码规范、语法错误、功能逻辑要认真审核,有问题回到步骤1,这是代码质量的关键环节

7、构建版本开发验证,有问题回到步骤1,无问题即可Merge到代码仓

8、构建版本测试验证,Jira提单跟踪反馈至开发,这一步是对外发布的最后一道关卡,必须严格按照测试用例进行验证,同步骤5一样是代码质量的关键环节

9、测试用例满足,即可对外发布

【C/C++】 代码质量控制手段的更多相关文章

  1. 提高代码质量 CheckStyle FindBugs PMD

    提高代码质量-工具篇 注:这是一篇翻译文章,原文:How to improve quality and syntax of your Android code,为了理解连贯,翻译过程中我修改了一些陈述 ...

  2. 重读 code complete 说说代码质量

    重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...

  3. 使用JSLint提高JS代码质量

    随着富 Web 前端应用的出现,开发人员不得不重新审视并重视 JavaScript 语言的能力和使用,抛弃过去那种只靠“复制 / 粘贴”常用脚本完成简单前端任务的模式.JavaScript 语言本身是 ...

  4. JSLint JavaScript代码质量审查工具汉化中文版隆重发布

    JSLint是一款JavaScript代码质量审查工具,它可以指出代码中错误.不规范的地方,非常之严格,甚至多写一个空格都会发出警告. JSLint的审查规则,根据众多前辈多年编程经验而写,字字珠玑, ...

  5. sonar的安装与代码质量检测实例

    说明:sonar依赖数据库. mysql优化 1.笔者使用的是mysql数据库.首先对mysql做简单的优化配置. [root@localhost bin]# cat /etc/my.cnf [mys ...

  6. 提高 Android 代码质量的4个工具

    在这篇文章中,我将通过不同的自动化工具如CheckStyle,FindBugs,PMD以及Android Lint来介绍(如何)提高你的安卓代码质量.通过自动化的方式检查你的代码非常有用,尤其当你在一 ...

  7. [git]安装git-pylint-commit-hook提高python项目中的代码质量

    什么是'git-pylint-commit-hook' 我在工作中,团队为了保证代码和提高代码的质量,要求每个项目都要求安装git-pylint-commit-hook,它是个钩子,会在你提交代码到本 ...

  8. 提高Objective-C代码质量心机一:简化写法

    提高OC代码质量的小心机 一.OC特性 OC 为 C 语言添加了面向对象特性,是其超集; OC 使用动态绑定的消息结构,也就是,在运行时才会检查对象类型; 接收一条消息后,究竟应执行何种代码,由运行期 ...

  9. ESLint 检查代码质量

    利用 ESLint 检查代码质量 其实很早的时候就想尝试 ESLint 了,但是很多次都是玩了一下就觉得这东西巨复杂,一执行检查就是满屏的error,简直是不堪入目,遂放弃.直到某天终于下定决心深入看 ...

  10. 程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...

    程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...

随机推荐

  1. 一步一步教你写kubernetes sidecar

    本文分享自华为云社区<一步一步教你写kubernetes sidecar>,作者: 张俭. 什么是sidecar? sidecar,直译为边车. 如上图所示,边车就是加装在摩托车旁来达到拓 ...

  2. Vulkan学习笔记之开发环境搭建

    一.概述 最近因为工作需要开始学习Vulkan的相关知识,作为初学者,发现相对较好的学习资料莫过于vulkan-tutorial,在自己学习Vulkan的过程中,决定将自己的理解记录下来,一是为了加深 ...

  3. 【scikit-learn基础】--『监督学习』之 K-近邻分类

    KNN(K-近邻),全称K-Nearest Neighbors,是一种常用的分类算法.KNN算法的历史可以追溯到1957年,当时Cover和Hart提出了"最近邻分类"的概念.但是 ...

  4. DVWA Brute Force(暴力破解)全等级

    Brute Force(暴力破解) 目录: Brute Force(暴力破解) 1.Low 2.Medium 3.High 方法1--Burp爆破 方法2--Python脚本爆破 4.Impossib ...

  5. 文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题

    二.假设我们将球投入到b个箱子里,直到某个箱子中有两个球.每一次投掷都是独立的并且每个球落入任何箱子的机会均等.请问投球次数期望是多少? 文心一言: 这是一个典型的鸽巢原理(Pigeonhole Pr ...

  6. 技术驱动,数据赋能,华为云GaussDB给世界一个更优选择

    摘要:5月16日,"数智深耕 让美好发生 2023华为云城市峰会广州站"成功举行. 5月16日,"数智深耕 让美好发生 2023华为云城市峰会广州站"成功举行. ...

  7. 输入的查询SQL语句,是如何执行的?

    摘要:输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程. 本文分享自华为云社区<一条查询SQL是如何执行的>,作者: 共饮一杯无 . 执行如下SQL,我们看到的只 ...

  8. 从“概念”到“应用”,字节跳动基于 DataLeap 的 DataOps 实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台 VeDI Meetup「超话数据」在深圳举办,来自火山引擎的产品专家分享了字节跳动基于 D ...

  9. Kubernetes(K8S) 安装Nacos,报 No DataSource set

    原因,数据库为 MySQL 5.7 需要在yaml加上参数 mysql.db.param: "characterEncoding=utf8&connectTimeout=1000&a ...

  10. 【PS算法理论探讨三】 Photoshop中图层样式之 颜色叠加/渐变叠加/图案叠加 算法原理初探讨。

    这三个表面上看上去很简单,我们就先描述简单的部分. 颜色叠加:这个和编辑菜单下的填充 颜色 基本是一个意思,相当于在原有的图层上部添加了一个纯实色的虚拟图层,选项里的不透明度和混合模式和普通的概念是一 ...