代码走查该走查什么

2023-11-02

代码走查在很多公司都是一个必要的过程,但是很多时候却时候一个形同虚设的过程,通常检查的同事只要保证你的代码能够编译通过,不出现问题就pass了。到底代码走查有没有一定的规范性呢?

如果公司是严格按照开发流程来的话,那么代码走查可能也会是下图中红色,它标示着代码走查可以使得设计人员和开发人员之间识别出错误,防止出现设计一套方案开发又开发自己又写出了另一套方案的问题发生。这在一些业务性比较强的系统中代码走查尤为重要,如果开发人员因为业务不熟导致理解错误那么出现的问题也能就会不可预估了,这个时候的代码走查就可以及早发现问题,也是一个开发人员向其他人员阐述自己所理解的业务信息的一个渠道。

大部分的公司代码走查是在同事之间互查,通常我们会遇到这样开头说的情况,只是保证编译通过或者没有一个详细的步骤来执行这个步骤。本文的重点也将放在这里,讨论如何进行这种情况下C++的代码走查。我觉得可以将代码审查从大到细分为几个步骤,只要按照这样的流程下来,基本上可以过滤掉大部分不需要犯的错误。

 

 

²文档审查

1        文档时候有说明信息,写明文件的主要作用类信息,文件名等

2        头文件是否只用宏定义防止重复引用

Exp:         #ifndef_A_HH_

                   #define_A_HH_

                   ………//class info

                #endif //_A_HH_

3        函数声明时候有明确的返回值

Exp:默认情况下编译器会提为什么返回值的函数设置为返回类型为int ,这种情况下很难判断要返回是数据类型。很有可能是手误操作导致。

²函数审查

1        函数声明时候得当,好的函数什么使得调用者和后期维护都将受用

2        入参个数合理性检查,一般不要超过6个,超过的可以考虑用结构体。

参数多了函数调用效率就将下来了。在如下这些情况下传送指针作为参数是更好的选择:

     1需要传送大量的数据和大型的数据结构作为输入

     2被调函数需要修改调用函数的数据

3        入参合法性检查(空指针,取值范围,内存越界),

Exp

         1.NULL  == param

         2.如果带了一个buf最好跟一个参数表明buf的长度。

…..

²变量审查

1        是否初始化

2        是否存在类型不匹配的比较操作(尤其是unsigned 类型和 signed类型的比较)对于unsigned 类型注意边界判断。

3        是否定义了变量但是没有使用

²内存资源审查

1        是否对数组进行了越界操作。

2        内存拷贝时是否判断了长度。Strcpy的时候要注意dst 要比src 内存大,否则导致内存越界

3        申请内存后是否判断了内存申请成功。

Exp:char p=new char[100];

          If( NULL == p )

         {

                   Return;

         }

4        对异常情况的处理时是否直接return而忘记了释放内存,尤其在一些抛出异常的时候有没有注意在catch的时候释放资源。

5        文件句柄的释放。Open对应close。

²语句规范性检查

1        { } 是否独占一行(习惯问题。。)。

Exp:

         If()

         {

                 。。。。

         }

         Else

         {

                  。。。

         }

2        一行是否只定义一个变量。

3        内存开辟malloc 和free 对应;new 和delete对应.

4        是否将 == 写错了 =。

建议做判断将常量放在前面可防止这类错误

这里只列举了本人认为相对比较重要的一些点,其他的细节就不多介绍了。。。睡觉啦,明天还得上班

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码走查该走查什么 的相关文章

  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 私有模板函数

    我有一堂课 C h class C private template
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • java web开发一个帐号同一时间只能一个人登录

    一个帐号同一时间只能一个人登录 对于一个帐号在同一时间只能一个人登录 可以通过下面的方法实现 1 在用户登录时 把用户添加到一个ArrayList中 2 再次登录时查看ArrayList中有没有该用户 如果ArrayList中已经存在该用户
  • springboot实现各种参数校验

    springboot实现各种参数校验 简单使用 Java API规范 JSR303 定义了Bean校验的标准validation api 但没有提供实现 hibernate validation是对这个规范的实现 并增加了校验注解如 Ema
  • 【JavaWeb】JSP使用Session、Cookie实现购物车

    购物界面shop jsp 初始页面 添加商品后 在session中设置属性 重定向回到shop jsp 然后根据session的内容显示结果 Cookie设置setMaxAge可以延长session的寿命 清空购物车就是清除session
  • 基于以太坊的USDT(基于ERC-20协议发行)

    这种USDT存储在以太坊地址上 相对应的 每次转账 链上转账 时 需要消耗Gas 也就是ETH 目前 市场上的USDT绝大部分是基于比特币的USDT 基于以太坊的USDT份额很低 约3 基于TRON网络TRC20协议的USDT 存储在TRO
  • 当心互联网抢了你的饭碗

    两年前 供职于帕洛阿尔托研究中心 Palo Alto Research Center 的学者布莱恩 亚瑟 Brian Arthur 做出了一项惊人预测 未来二三十年 西方数字网络履行的功能最终将相当于美国 实体 经济的规模 亚瑟写道 或者
  • Qt 信号和槽学习

    使用一个按钮按下时 我们可能想要窗口的 close 函数被调用 这个操作可以通过设置回调函数实现 但回调函数不够直观 而且容易出现参数类型错误等问题 Qt中使用的代替方案是信号和槽机制 信号和槽 当特定的事件出现时 一个信号被发出 槽函数作
  • 探索Java8——Lambda方法引用

    管中窥豹 方法引用让你可以重复使用现有的方法定义 并像Lambda一样传递它们 在一些情况下 比起使用Lambda表达式 它们似乎更易读 感觉也更自然 inventory sort Apple a1 Apple a2 gt a1 getWe
  • 数字孪生万亿市场显现,缺的不止是硬件落地

    数字孪生是从真实世界到虚拟世界的1 1映射 它通过控制虚拟世界中的生产过程和生产设备 模拟现实世界中的工业生产 更加注重 从虚拟到真实 工业元宇宙所反映的虚拟世界不仅具有现实世界的映射 而且具有现实世界中尚未实现甚至无法实现的体验和互动 这
  • Python实现发送邮件

    SMTP模块发送普通邮件 import smtplib from email mime text import MIMEText from email header import Header 发送方邮箱 msg from 授权码 pass
  • 实习周记1:跨vlan通信

    跨vlan通信 1 拓扑图 2 要求 不同vlan的两台pc通过二层交换机实现二层互通 3 命令 H3C GigabitEthernet2 0 1 port link type hybrid 把端口模式改为hydrid H3C Gigabi
  • Sybase服务无法启动

    刚刚改完数据库的最大连接数 重启服务时 却发现服务无法启动 找了大半天的原因 终于找到了 可惜不会弄 只好有网上搜索一下 发现这种问题还比较常见 服务起不来 在应用程序事件查看器中发现有如下错误 300122 The value of th
  • 工程师的基本素质

    昨天开会 印象最为深刻的是领导的这么一句话 工程师的基本素质 专注 专心 责任 放心 真的 我没有真正意识到并做到这些 所以对于人的准则的教育是必须的 要让人认识到 职责所在 用心做事 愧对自己 洗心革面矣
  • 【调制BFSK】二进制频移键控FSK的数字调制(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 相移键控 PS K 是利用载波相位直接表示
  • python给图片添加水印图片_python 给图片添加数字水印示例

    实例简介 实例截图 核心代码 coding utf 8 Spyder Editor This is a temporary script file from PIL import Image import numpy as np count
  • pycuda学习笔记(二)

    1 pycuda driver LogicError cuDeviceGet failed initialization error报错怎么办 Traceback most recent call last File usr lib pyt
  • 0-1背包问题:动态规划的经典应用

    文章目录 引言 背包问题简介 0 1背包问题定义 0 1背包问题的限制条件 动态规划解决思路 状态定义 状态转移方程 背包问题的Java实现 示例与分析 总结 引言 背包问题是在给定一组物品和一个背包容量的情况下 如何选择物品放入背包 以使
  • 人工智能里有至简的优雅吗?

    我很喜欢这首古诗 静夜思 唐 李白 床前明月光 疑是地上霜 举头望明月 低头思故乡 二十个简单汉字 勾画出生动的画面 并在无数人心里掀起波澜 物理学里 爱因斯坦用5个符号 简单到不能再简单 揭示了我们的世界的规律 目光转回我的本行 我在模式
  • 一文搞定全进程间通讯(IPC)八大方式-管道、命名管道、信号、信号量、消息队列、共享内存+内存映射、套接字

    目录 进程间通讯 IPC UNIX IPC 管道 Pipe 命名管道 FIFO 信号 Signal System V IPC 信号量 Semaphore 消息列队 Message Queue 共享内存 Shared Memory IPC 额
  • linux 中增加路由(route)命令详解

    linux route 命令 route n显示现在所有路由 root Ubuntu route 结果是自上而下 就是说 哪条在前面 哪条就有优先 前面都没有 就用最后一条default 添加一条路由 发往192 168 62这个网段的全部
  • 代码走查该走查什么

    代码走查在很多公司都是一个必要的过程 但是很多时候却时候一个形同虚设的过程 通常检查的同事只要保证你的代码能够编译通过 不出现问题就pass了 到底代码走查有没有一定的规范性呢 如果公司是严格按照开发流程来的话 那么代码走查可能也会是下图中