上线代码质量审查解决方案

2023-11-10

前言

使用自动化工具和人工审查并行方式检查程序源代码是否存在安全隐患,或者有编码不规范的地方。利用自动化代码审计工具,如CheckStyle、FindBugs、PMD、JTest 进行代码审计,以及每周定期组织对最近开发的业务进行代码评审。

本文主要使用FindBugs工具。

服务内容

针对Eclipse IDE中书写的Java代码进行分析。

其中包含正在开发中的代码和已经开发完毕的代码进行审查。在完成测试上线前重新检查一遍代码,防止出现重大错误漏洞,影响程序的运行和安全。

审查工具

FindBugs:是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。

FindBugs不能发现非java的Bug。对于非java撰写的代码,如javascript,SQL等等,要找出其中可能的bug,FindBugs是无能为力的。当然,javascript中的bug似乎还不至于使系统崩溃,而SQL中的bug往往又跟业务逻辑相关,只要测试仔细一些应该是可以发现的。

具体的审查工具安装方法在CodeReview.docx文档的有描述。

审查流程

每周定期组织对最近开发的业务进行代码评审,主要针对本周完成的上传SVN的代码进行分析,通过开发人员手动查看和FindBugs自动查询错误。

对于程序员和后期维护主要分为两个阶段,“开发阶段”主要是开发人员自己去完成对代码的校验和完善,“维护阶段”一般在上线完成,对没能发现的bug再处理问题。

开发阶段

一、程序员个人在书写代码的过程中或者写好代码后,通过FindBugs工具查找到一遍,排除基本的代码逻辑问题。

二、代码测试前查找一遍基本的错误。代码测试后,修改业务逻辑等代码后再次查找一遍排除基本问题。

三、整个模块完成后FindBugs对该模块涉及的java文件进行一次扫描,以发现一些不易察觉的bug或是效能问题。

四、交付新版的时候,开发团队可以跑一下FindBugs,除掉一些隐藏的Bug。

五、SVN提交代码后,项目经理通过分配任务,将所有的代码,互相转交给别人进行代码审阅,提出代码中的疑问,一起提高代码质量。

六、记录相关可能后期会引发其他错误的FindBugs日志,应对以后更方便的查找错误,完善对代码的理解和使用。

维护阶段

这里指的是系统已经上线,却发现因为代码中的某一个bug导致系统崩溃。在除掉这个已暴露的bug之后,为了快速的找出类似的但还未暴露的 bug,可以使用FindBugs对该版的代码进行扫描。

结束语

FindBugs不过是一个工具。作为开发人员,当然首先要在编程的时候努力避免引入bug,而不要依赖于某个工具来为自己把关。不过由于代码的复杂性,一些隐藏的bug确实很难靠咱们的肉眼发现。这时,应用一些好的工具或许就可以帮你发现这样的bug。这便是FingBug存在的价值。

不仅仅使用FindBugs,例如PMD审查工具可以同时使用,增加对代码的复查,坚固代码。

转载于:https://my.oschina.net/u/3670680/blog/3016090

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

上线代码质量审查解决方案 的相关文章

  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 南方cass显示未知命令_cass9.1安装完成后,展高程点出现:未知命令"1".按 F1 查看帮助.请问怎么回事?...

    答 再看一下你的展点文件格式对不对 用记事本打开DAT 应该是 sz01 0 598137 111 5243969 952 249 486 点名 编码 x y z 答 在保证那些显示字体不一致的所有的高程点的数字注记确实是同一种字体样式 且
  • 复旦nlp实验室 nlp-beginner 任务三:基于注意力机制的文本匹配

    任务三 基于注意力机制的文本匹配 输入两个句子判断 判断它们之间的关系 参考ESIM 可以只用LSTM 忽略Tree LSTM 用双向的注意力机制实现 参考 神经网络与深度学习 第7章 Reasoning about Entailment
  • npm install安装时MSBUILD error MSB3428 未能加载 Visual C++ 组件“VCBuild.exe”

    首先可以通过npm i node sass sass binary site https npm taobao org mirrors node sass来解决但是我还是没有解决 随后我又试了安装windows build tools 使用
  • check the manual that corresponds to your MySQL server version for the right syntax to use near

    check the manual that corresponds to your MySQL server version for the right syntax to use near WHERE 价格 11 at line 1 注意
  • 利用fairygui界面滚动组件实现滑动屏幕

    我在做一个小游戏的时候需要实现界面滑动效果 开始第一念头是用监听鼠标的滑动位置改变来做 但是fairygui有一种滚动组件就可以很方便的实现 我们需要用到滑动界面情况 通常是因为游戏的背景图片比游戏可视界面大 暂不考虑背景循环 图片加载 首
  • 开发要点-微信小程序

    微信小程序教程 基于微信平台的接触即用应用 兼有服务号的功能 同时提供类似原生的体验 以前叫应用号 适合做用完即走的应用 与用户的关系不是重依赖的关系 体验官方示例 了解小程序组件 组件 UI组件 接口 动态API 传统接口 微信开放接口
  • python3 题解(36 补齐为回文串)

    补齐为回文串 问题 回文串也中镜像串 就是左右对称的串 a aba baab 都是回文串 给定一个串 至少要添加上多少个字母 才能将它改造为回文串呢 分析 这可以通过递归的方法 不断缩小规模来实现 如果一个串的首尾两个字符相同 那么最小次数
  • 2018之后的Unity3d制作AR教程

    自2017 4以后的unity版本 AR的SDK已经被集成 那么如何用2018unity3d制作AR呢 1 首先打开Unity3d2018 然后打开File gt Building Setting 接着打开PlayerSetting 找到X
  • Linux基础IO

    基础IO 一 C语言文件操作 C语言文件接口汇总 C语言文件接口使用 二 Linux文件操作系统调用 open write read close 使用系统接口 三 文件描述 fd 文件描述符原理 文件描述符分配规则 如何理解一切皆文件 四
  • Java IO流处理 面试题汇总

    说明 本节内容来源于网络汇总 输入输出流是相对于内存而言的 1 面试题汇总 1 java中有几种类型的流 2021 08 19更新 从编码方式上 分为字符流和字节流 如上图可知 字节流继承inputStream和OutputStream 字
  • StableDiffusion入门教程

    目录 介绍 模型的后缀 ckpt模型 safetensors模型 文件夹 VAE 模型在哪下载 Hugging face
  • Docker-Compose一键部署

    Docker Compose一键部署 文章目录 Docker Compose一键部署 Docker 网络模式 一键部署 Docker 网络模式 关于 docker 网络模式 有时间会另出一篇博客详细介绍 或者在该博客下继续补充 docker
  • d3dcompiler_47.dll缺失怎么修复?多种解决d3dcompiler_47.dll丢失的方法分享

    在使用电脑过程中 我们有时可能会遇到各种各样的错误提示信息 其中之一就是 d3dcompiler 47 dll缺失 的问题 这个错误意味着你的计算机上缺少了一个重要的组件文件 可能导致某些程序无法正常运行 尽管对于非专业用户来说 这个问题可
  • Python开发技术—文件和异常2

    第1关 读取CSV文件1 任务描述 本关任务 编写一个能读取csv文件的程序 将指定的文件按照要求的格式输出 相关知识 为了完成本关任务 你需要掌握 1 csv模块 测试说明 平台会对你编写的代码进行测试 在你的程序的当前目录下存在一个bo
  • QGIS二次开发08:QGIS的二次封装例子

    QGIS体系过于庞大 对二次开发有一定的学习难度 同时在后续的多个项目中会有大量相同功能的应用 因此有必要进行二次封装 暴露必要的实现接口 从而简化开发的难度 一 基础封装功能 1 空间数据加载和显示 实现工程文件加载和显示 2 地图交互动
  • 【CSS】背景图定位问题适配不同机型

    需求 如图 实现一个带有飘带的渐变背景 其中头像必须显示飘带凹下去那里 需要适配不同的机型 一不下心容易错位 实现 因为飘带背景是版本迭代中更新的 所以飘带和渐变背景实则两个div 飘带切图如下 圆形部分需要契合头像
  • 20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用

    真火 作为最近一段时间人工智能领域内的顶流之一 AIGC AI Generated Content 早已火爆出圈 频登各大互联网平台热搜 cite 微软亚洲研究院官方微博 这段时间以来 基于深度学习的内容生成在图像 视频 语音 音乐 文本等
  • 融合网络位置服务器,4G/5G定位的关键技术及异构融合一体化定位系统的网络架构...

    摘要 如何提高室内定位精度并实现室内外定位的连续无缝覆盖是定位领域急需解决的问题 针对该问题 首先介绍了4G定位的标准与技术 并分析了其特点与不足 然后 分析了面向5G的超密集组网下的定位技术 AOA TDOA定位技术以及上下行定位技术 最
  • 【python教程】之try--except异常捕获

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 异常简介 捕获异常 try except except捕获异常类型 捕获多个异常的方式 不明确错误类型的情况 try except else try except
  • 上线代码质量审查解决方案

    前言 使用自动化工具和人工审查并行方式检查程序源代码是否存在安全隐患 或者有编码不规范的地方 利用自动化代码审计工具 如CheckStyle FindBugs PMD JTest 进行代码审计 以及每周定期组织对最近开发的业务进行代码评审