静态测试方法

2023-11-17

本文讨论人工静态测试方法和自动静态测试方法,来帮你理解研发流程上是如何保证代码质量的,以及如何搭建自己的自动静态代码扫描方案,并且应用到项目的日常开发工作中去。

人工静态方法

人工静态方法检查代码错误,主要有代码走查、结对编程,以及同行评审这三种手段。

代码走查

代码走查(Code Review),是由开发人员检查自己的代码,尽可能多地发现各类潜在错误。但是,由于个人能力的差异,以及开发人员的“思维惯性”,很多错误并不能在这个阶段被及时发现。

结对编程

结对编程(Pair Programming),是一种敏捷软件开发的方法,一般是由两个开发人员结成对子在一台计算机上共同完成开发任务。其中,一个开发人员实现代码,通过被称为“驾驶员”;另一个开发人员审查输入的每一行代码,通常被称为“观察员”。当“观察员”对代码有任何疑问时,会立即要求“驾驶员”给出解释。解释过程中,“驾驶员”会意识到问题所在,进而修正代码设计和实现。实际执行过程中,这两个开发人员的角色会定期更换。

同行评审

同行评审(Peer Review),是指把代码递交到代码仓库,或者合并代码分支(Branch)到主干(Master)前,需要和你同技术级别或者更高技术级别的一个或多个同事对你的代码进行评审,只有通过所有评审后,你的代码才会被真正递交。如果你所在的项目使用 GitHub 管理代码,并采用 GitFlow 的分支管理策略,那么在递交代码或者分支合并时,需要先递交 Pull Request(PR),只有这个 PR 经过了所有评审者的审核,才能被合并。这也是同行评审的具体实践。目前,只要你采用 GitFlow 的分支管理策略,基本都会采用这个方式。

对于以上三种方式,使用最普遍的是同行评审。因为同行评审既能较好地保证代码质量,又不需要过多的人工成本投入,而且递交的代码出现问题后责任明确,另外代码的可追溯性也很好。结对编程的实际效果虽然不错,但是对人员的利用率比较低,通常被用于一些非常关键和底层算法的代码实现。

自动静态方法

自动静态方法具有自动化程度高,检查发现问题的成本低以及能够发现的代码问题广等特点,所以该方法被很多企业和项目广泛应用于前期代码质量控制和代码质量度量。

在实际工程实践中,企业往往会结合自己的编码规范定制规程库,并与本地 IDE 开发环境和持续集成的流水线进行高度整合。

代码本地开发阶段,IDE 环境就可以自动对代码实现自动静态检查;当代码递交到代码仓库后,CI/CD 流水线也会自动触发代码静态检查,如果检测到潜在错误,就会自动邮件通知代码递交者。

自动静态方法通常能够以极低的成本发现以下问题:

使用未初始化的变量;变量在使用前未定义;变量声明了但未使用;变量类型不匹配;部分的内存泄漏问题;空指针引用;缓冲区溢出;数组越界;不可达的僵尸代码;过高的代码复杂度;死循环;大量的重复代码块;

 C 语言的自动静态扫描工具 splint

Python中可以pylint进行检查

主流的自动静态工具 Sonar

(可以在IDE的pluin管理界面安装SonarLint,安装完重启IDE,可以在IDE环境中实时看到Sonar的静态分析结果,IDE 中绑定 SonarQube,就可以把 SonarLint 和 SonarQube 集成)

目前,自动静态扫描通常都会和持续集成的流水线做绑定,最常见的应用场景是当你递交代码后,持续集成流水线就会自动触发自动静态扫描,这一功能是通过 Jenkins 以及 Jenkins 上的 SonarQube 插件来完成的,当你在 Jenkins 中安装了 SonarQube Plugin,并且将 SonarQube 服务器相关的配置信息加入 Plugin 之后,你就可以在 Jenkins Job 的配置中增加 Sonar 静态扫描步骤了。

实践:要求每个开发提交代码前都需要做sonar扫描。

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

静态测试方法 的相关文章

  • 用户注册及登录测试用例小记

    用户注册及登录测试用例
  • 软件测试笔记(九)- 兼容性测试

    了解如何针对不同的软件应用程序和操作系统交互的问题进行测试 一 兼容性测试综述 随着用户对来自各个厂商的各种类型程序之间共商数据能力和充分利用空间同时执行多个程序能力的要求 测试程序支架能否写作变得越来越重要 软件兼容性测试 softwar
  • 软件测试从自学到工作,软件测试学习到底要怎样进行?

    前言 首先 请不要奢望有多么简单的办法 学习没有捷径 这里只是让你明白这一点 顺便根据个人经验帮你理一下学习的过程 其实有文章是说怎么学习以及学习什么的 但是可能还是有些抽象 或者内容有点多 有点杂 以至于不少朋友仍然觉得不知道如何下手 大
  • 登录界面测试用例设计

    登录界面测试用例设计 一 界面测试点 1 界面的设计风格是否与UI的设计风格统一 2 界面中的文字简洁易懂 3 界面中没有错别字 二 用户名与密码在输入时 要考虑 1 正确的用户名与正确的密码 2 正确的用户名与错误的密码 3 错误的用户名
  • 使用缺省的拷贝构造函数带来的危险性

    我此前另外一篇文章通过类String看拷贝构造函数 赋值函数的作用和区别 对于更深的拷贝构造函数讨论大家可以参见这篇帖子 C 类对象的复制 拷贝构造函数 通过编写类String的拷贝构造函数和赋值函数介绍了一些拷贝构造数 本文着重介绍拷贝构
  • 各种系统框架图简介(转载)

    原文出处 http space itpub net 6517 viewspace 609654 1 Spring 架构图 Spring 是一个开源 框架 是为了解决企业 应用程序开发复杂性而创建的 框架的主要优势之一就是其分层架构 分层架构
  • 可连接点对象及示例(二)

    转载请标明是引用于 http blog csdn net chenyujing1234 例子代码 包括客户端与服务端 http www rayfile com zh cn files de82908f 7309 11e1 9db1 0015
  • 【测试】三张图解读 CI/CD

    文章目录 前言 CI CD 的概述 CI持续集成 Continuous Integration 持续集成小结 CD 持续交付 Continuous Delivery 持续交付小结 CD 持续部署 Continuous Deployment
  • python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    前言 1 环境准备 python3 6 requests xlrd openpyxl HTMLTestRunner api 2 目前实现的功能 封装requests请求方法 在excel填写接口请求参数 运行完后 重新生成一个excel报告
  • 整理一下go的ci工具

    代码格式化 go fmt fileName go goimports 自动格式化import goimports w fileName go mod 自动更新 删除包 go mod tidy 检查注释是否符合导出 1 安装revive go
  • ASP.NET Core 中间件详解及项目实战

    前言 在上篇文章主要介绍了DotNetCore项目状况 本篇文章是我们在开发自己的项目中实际使用的 比较贴合实际应用 算是对中间件的一个深入使用了 不是简单的Hello World 如果你觉得本篇文章对你有用的话 不妨点个 推荐 目录 中间
  • 高效程序员的40个好习惯和行为方式

    每一个好的习惯 开头都会相应有一个唱反调的句子哦 1 做事 出了问题 第一重要的是确定元凶 找到那个人 一旦证实了是他的错误 就可以保证这样的问题永远也不会再发生了 指责不会修复bug 把矛头对准问题的解决办法 而不是人 这是真正有用处的正
  • oracle批量绑定 forall bulk collect用法以及测试案例

    一 如何使用批挷定提高性能 How Do Bulk Binds Improve Performance 在PL SQL 和SQL引擎 engines 中 太多的上下文切换 context switches 会影响性能 这个会发生在当一个循环
  • Python开发环境Wing IDE如何查看调试数据

    Wing IDE具有一个十分有用的特性 就是处理复杂bug的时候可以以各种各样的方式查看调试数据值 这个功能具体是由Watch工具实现的 查看数据值 在PrintAsHTML中发生异常时 右键单击Stack Data工具中的本地数值 这将显
  • 使用Minitab解决Excel的限制问题

    前两天 当我在做数据转置以期获得更好分析图形的时候 我碰到了传说中excel的限制 如图 在解决这个问题的过程中 我发现了用来做数据分析 比excel更好的工具Minitab 打开minitab 把纪录数据的Excel表以File gt O
  • 组合测试方法PK正交分析方法

    测试过程中 我们经常遇到需要覆盖多个变化参数的测试场景 如我们测试BS配置控制客户端组织资源远程配置一个设备时 进行一个设备通道视频参数设置的各种组合测试 如下图 多数情况下 类似于这种多组合测试时 老员工则是依靠经验去进行有针对性的测试
  • AngularJs单元测试

    这篇文章主要介绍了angularJS中的单元测试实例 本文主要介绍利用Karma和Jasmine来进行ng模块的单元测试 并用Istanbul 来生成代码覆盖率测试报告 需要的朋友们可以参考下 以下可全都是干货哦 当ng项目越来越大的时候
  • 重命名文件或目录(renameTo)

    File or directory with old name File file new File oldname File or directory with new name File file2 new File newname R
  • 008-黑盒测试和白盒测试的优缺点

    黑盒测试和白盒测试的优缺点 黑盒测试的优点有 比较简单 不需要了解程序内部的代码及实现 与软件的内部实现无关 从用户角度出发 能很容易的知道用户会用到哪些功能 会遇到哪些问题 基于软件开发文档 所以也能知道软件实现了文档中的哪些功能 在做软
  • Mockito3.x详解

    目录 Mockito 1 简单示例 2 打桩测试 3 参数匹配器 4 调用次数验证 5 通过打桩为无返回值函数抛出异常 6 验证调用顺序 7 验证从未发生过的交互

随机推荐

  • Android在EditText中只能输入中文或者指定类型的内容

    之前做过一个需求 在EditText中只能输入中文或者英文字符不能输入特殊字符和数字等一些其他内容 查阅了一些资料 需要重写一下EditText中的相关方法就可以完成该功能 总结一下 方便之后使用 看一下效果图 可以看到在EditText中
  • Redis系列之二:Redis基础知识

    引言 正所谓万丈高楼平地起 学习一项技术都需要从其基础知识开始 上一篇介绍了Redis在Linux环境下的安装步骤 本文主要介绍了Redis的基础知识 包括数据结构以及常用命令等 废话不多说 我们直接开始吧 Redis基础数据结构 Redi
  • GPT-4 的创造力全方位持平或碾压人类

    文章目录 一 前言 二 主要内容 三 总结 CSDN 叶庭云 https yetingyun blog csdn net 一 前言 最近 一项有关 GPT 4 的创造力思维测试火了 来自蒙大拿大学和 UM Western 大学的研究团队发现
  • 工作——自动化测试中用到的SQL server查询语句的格式调整

    SELECT CONVERT VARCHAR 100 GETDATE 0 05 16 2006 10 57AM SELECT CONVERT VARCHAR 100 GETDATE 1 05 16 06 SELECT CONVERT VAR
  • 深入理解sed模式空间——sed ‘n;p‘

    在进入正题之前我们先来了解一下sed的模式空间 如下 什么是sed的模式空间 答 仅供参考 就是从文件读取一行文本然后存入的缓冲区 然后命令操作模式空间的内容 在初始状态下模式空间是没有内容的 在每次循环读取数据的过程中 模式空间都会被清空
  • Mybatis+Mysql 实现树形结构查询

    Mybatis
  • v3+element管理系统----主题定制 && 刷新 && 全屏

    目录 暗黑模式 如何启用 应用 自定义主题 应用 全屏 刷新 router view的v slot transition 标签 动态组件 nextTick 暗黑模式 现在 Element Plus 终于支持了暗黑模式 我们提取并整理了所有的
  • Linux中gcc/g++ gdb make/Make 的基本使用和理解

    1 gcc g 的基本使用 gcc和g 是两种编译器 也就是用来编译c c 源文件的编译器 其中 gcc用来编译c语言 而g 用来编译c 当然由于c 兼容c 所以说 g 也是可以编译c语言源文件的 但是我们不经常这么做 gcc和g 的使用没
  • 编写 LuCI CBI 模型

    编写 LuCI CBI 模型 CBI模型是描述UCI配置文件结构的Lua文件 并且CBI解析器将lua文件转为HTML呈现给用户 所有 CBI 模型文件都必须返回类型为luci cbi Map的对象 CBI 模型文件的范围由 luci cb
  • Qt绘图编程-绘制多边形、椭圆、多条直线

    1 说明 所有的绘图操作是在绘图事件中进行 mainwindow h ifndef MAINWINDOW H define MAINWINDOW H include
  • PHP中对汉字进行UNICODE编码和解码的功能

  • oracle alter system命令使用

    我們可以利用alter system語句在數據庫咝羞 程中修改初始化參數的值 如果instance在啟動時使用的是文本初始化參數文件 那樣我們在利用alter system語句修改的初始化參數僅在當前的instance中有效 并且所做的修改
  • mac下安装mongoDB

    方式一 命令行 MongoDB的安装有好多种安装方法 有普通青年的HomeBrew方式 也有文艺青年的源码编译方式 我只想快速的装起来用一下 所以我选最简单的HomeBrew 请参考官方文档 http docs mongodb org ma
  • failed (2: No such file or directory)

    之前好好的 重启nginx时莫名的出现nginx emerg mkdir dev shm nginx temp client body failed 2 No such file or directory 解决办法 mkdir p dev
  • shell脚本命令

    Shell命令是在类Unix操作系统中使用的命令行解释器 shell 中执行的命令 Shell命令可以用于执行系统命令 操作文件 进行文本处理 管理进程等 以下是一些常见的Shell命令 1 ls 列出当前目录下的文件和文件夹 2 cd 切
  • 【.Net/C#之ChatGPT开发系列】四、ChatGPT多KEY动态轮询,自动删除无效KEY

    目录 ChatGPT多KEY轮询 一 Redis密钥管理 1 定义IChatGPTKeyService接口 2 实现IChatGPTKeyService服务 二 非依赖注入实现密钥轮换 1 取消IOpenAIService服务注册 2 取消
  • 解决VMware NAT service服务无法启动问题,VMware虚拟机的CentOS/Ubuntu无法上网的解决方法

    解决VMware NAT service服务无法启动问题 VMware虚拟机的CentOS Ubuntu无法上网的解决方法 今日使用VMware中的虚拟机CentOS 6 8 NAT模式 发现没有网络 新建了一个Ubuntu 14 04虚拟
  • Docker(三)实战:-Docker部署Golang项目并关联Mysql容器

    目录 前言 一 获取一个可执行的项目 1 拉取项目 2 配置 二 编写Dockerfile文件 1 作用 2 说明 1 FROM 2 WORKDIR 3 COPY 4 RUN 5 EXPOSE 6 ENTRYPOINT 三 构建Docker
  • Web服务器漏洞小结(中间件)

    IIS IIS是Windows Server中自带的一个Web服务器 IIS出现的漏洞 一 IIS目录解析漏洞 test asp 1 jpg IIS5 x 6 0 以 asp asa cer cdx 命名的文件夹 其目录内的任何扩展名的文件
  • 静态测试方法

    本文讨论人工静态测试方法和自动静态测试方法 来帮你理解研发流程上是如何保证代码质量的 以及如何搭建自己的自动静态代码扫描方案 并且应用到项目的日常开发工作中去 人工静态方法 人工静态方法检查代码错误 主要有代码走查 结对编程 以及同行评审这