Dante_7
本帖最后由 凋灵兔子 于 2019-8-30 13:00 编辑

使用 SonarQube 检查代码

SonarQube 是一个代码分析工具, 能够帮助你检查项目中存在的 BUG 和隐患. 有一些隐藏比较深或是不太起眼, 它都能检查出来. 更重要的是在修改的过程中可以学到一些好的编码习惯.

下载, 安装以及使用

〇, 准备
1. 需要 JRE 环境(最新的 7.9 需要 JDK 11, 我用的是 7.7, java8 也能运行)
2. MAVEN 或 GRADLE 工具
3. MYSQL 数据库(可以没有, 但是功能上会受到限制. 但是这里需要注意的是不支持 MYSQL8)


一, 下载
科学地登录 SonarQube 官网 然后下载社区版. 因为不知道别的版是不是收费, 但是社区版一定是免费的. 这个步骤不多说了, 连下载都下不下来还写个铲.


二, 安装及配置
这个步骤在 简书 和 CSDN 有大量的教程, 我简单说一下就好:

1. 将压缩包解压到文件夹中



2. 找到配置文件


3. 设置数据库相关信息(不想用数据库的话可以跳过这一步)
这里配置文件里自带的, 但是分散在整个文件中, 截图很不方便, (这里插一句, 今天真凉快, 在窗前看外面学妹的腿子真是爽爆了, 可惜我已经毕业了, 同学们一定要珍惜在校的时光啊)所以手动写在文件前面方便看
要先创建数据库, 它不会自动创建的



4. 启动
找到这个文件夹, 根据你的操作系统, 启动它




打开浏览器, 输入 localhost:9000 如果能打开页面就说明安装成功了. 登陆账号密码都是 admin, 我明明设置的是 root 和 123456 也没蛋用, 我也不知道是咋回事

有的同学可能需要汉化, install 完成后重启就可以了(以前安汉化都是本地安装, 但是现在汉化包找不到了, 网上安的这个汉化启动以后感觉变卡了, 也不知道是不是我的错觉)


需要注意的是这个翻译可能不是国人翻的, 很多词汇用的都不是很准确, 需要慢慢适应

三, 创建项目
汉化完成后屏幕上会有一个体积小但是非常显眼的, 点就行了
然后


接下来就是一步一步点点点, 没什么好说的, 然后给项目引用相关的插件, 它都给你列出来了, 代码都写好了

插件还在安装, 趁这个机会安利一波 gradle: 赶紧入手吧, 真的很好用, 比 maven 灵活多了

四, 上传代码
网页中已经给出了上传的代码, 但是这里需要注意的是 windows 电脑需要对命令进行一些修改才能使用. 也就是改成 windows 风格的命令(xxx.bat)

第一次上传需要一段时间, 其实第二次也需要差不多一样的一段时间. 上传完成后他会自动开始分析, 并在分析完成后刷新页面, 给你看结果


五, 查看结果
这个项目是我从 github 上下载下来的, 很好用的通信类库


其中, Bugs 所列出的十有89都存在逻辑问题或者是安全隐患, 而 "漏洞" 则是 SQ 认为有比这更好的实现方法, 在修复漏洞的过程中不要只是机械地照着软件给出的提示改代码, 而是要思考为什么要这么写, 和原来的写法相比有什么改进. 如果实在不理解为什么这里会报错, 他还会提示你他认为应该怎么写, 虽然不一定正确, 但是七八成是有的.

下面的 "债务" 指的是它认为你修复这些问题所需要的时间, "异味" 指的是不好的书写习惯, 这个酌情修改就好, 不过好的书写习惯能方便别人阅读你的代码. 下面还有代码重复率和测试覆盖率, 如果代码重复过多而你却无法通过复用方法来降低它, 往往意味着项目在设计上存在失误, 也就是说你在开始写代码前没有好好思考应该怎么写. 测试覆盖率这个值不能盲目追求, 因为有的方法没必要测试.


六, 再次上传
在你修改了一些 bug 后, 需要再次上传代码来康康你修改的结果, 这个只需要再次执行他给你的指令即可, 在上传后它会告诉你两个版本的比较情况:


其他: 查看项目统计信息
点击 "指标", 就可以看到项目统计信息, 除了前面提到的之外, 这里还有很多(比如你写了多少行代码)


这篇帖子写的只是 SonarQube 最基本的使用方法, 刚刚接触, 有很多图像我也看不太懂, 很多功能也不会用, 不过现在用这也挺好的...
...写了这么多, 感觉好像写完了但又好像只开了个头. 在文中我反复提到一个词: 思考. 只有思考才能够提高编程水平, 如果只是用用别人的类库, 复制复制别人的方法, 知其然而不知其所以然, 那水平永远不会得到提高, 得到的顶多也就是敲代码更加熟练罢了, 最终变成了敲代码的机器. 可怕的是如果拒绝思考成为了思维定势, 那在计算机这个技术更新换代极快的领域是完全混不下去的.

最后感谢 dalao @
ruhuasiyu排版, 第一次用这么高端的排版我还有点紧张...

2021.12 数据,可能有更多内容
使用 SonarQube 检查代码

SonarQube 是一个代码分析工具, 能够帮助你检查项目中存在的 BUG 和隐患. 有一些隐藏比较深或是不太起眼, 它都能检查出来. 更重要的是在修改的过程中可以学到一些好的编码习惯.


丑话说在前面, 影响代码质量的主要因素是开发人员本身的水平, 用代码质量分析工具只能告诉你一些最基本的语法问题和简单的逻辑问题. 不过说真的, 论坛中很多开发者就连基本的语法掌握的都不好, 脑子里都是 "功能能实现就行了, 我管他NND性能怎么样呢". 比如: 不复用对象, 不用资源池或是连接用完了不关, 同步IO, 频繁创建大对象(尤其是数组, 这个在 RPG 和某些能在信息栏发送字符画的的插件中应该常用), 以及为了所谓的 "多线程" 瞎加锁... 其实这些在服务端运行中都是非常致命的问题, 有的人写了这样的代码, 但是服务端却没事, 那唯一的解释就是服务器人不多, 在并发量低的时候这些都可以用服务器的性能来顶住, 但是一旦并发量提高, 就会出现各种各样的问题. 我们常说的 "老问题没有修复, 新问题不断涌现" 主要的问题就是不规范, 存在隐患的代码导致的.


不过提升水平是一个逐渐积累的过程, 主要是需要开发者在写代码的时候要积极思考. 我的老师曾经说: 如果在写的时候积极思考, 几百行代码就足够让一个人上一个台阶; 如果只是机械地敲字母, 那写几万行照样是个辣鸡货(她原句不是这样的, 但是是这个意思). 当然, 这些在假定你以后想吃写代码这碗饭, 或是真的对编程有兴趣, 想要变强的基础上的. 如果只是想在 MCBBS 发几个插件, MOD 的话应该没必要, 因为现在大的服务器也就几千人, 只要不是遭到专门针对垃圾代码的压测, 那代码差点是没有任何影响的.
下载, 安装以及使用

〇, 准备
1. 需要 JRE 环境(最新的 7.9 需要 JDK 11, 我用的是 7.7, java8 也能运行)
2. MAVEN 或 GRADLE 工具
3. MYSQL 数据库(可以没有, 但是功能上会受到限制. 但是这里需要注意的是不支持 MYSQL8)



一, 下载
科学地登录 SonarQube 官网 然后下载社区版. 因为不知道别的版是不是收费, 但是社区版一定是免费的. 这个步骤不多说了, 连下载都下不下来还写个铲.



二, 安装及配置
这个步骤在 简书 和 CSDN 有大量的教程, 我简单说一下就好:


1. 将压缩包解压到文件夹中




2. 找到配置文件



3. 设置数据库相关信息(不想用数据库的话可以跳过这一步)
这里配置文件里自带的, 但是分散在整个文件中, 截图很不方便, (这里插一句, 今天真凉快, 在窗前看外面学妹的腿子真是爽爆了, 可惜我已经毕业了, 同学们一定要珍惜在校的时光啊)所以手动写在文件前面方便看
要先创建数据库, 它不会自动创建的




4. 启动
找到这个文件夹, 根据你的操作系统, 启动它





打开浏览器, 输入 localhost:9000 如果能打开页面就说明安装成功了. 登陆账号密码都是 admin, 我明明设置的是 root 和 123456 也没蛋用, 我也不知道是咋回事


有的同学可能需要汉化, install 完成后重启就可以了(以前安汉化都是本地安装, 但是现在汉化包找不到了, 网上安的这个汉化启动以后感觉变卡了, 也不知道是不是我的错觉)


需要注意的是这个翻译可能不是国人翻的, 很多词汇用的都不是很准确, 需要慢慢适应


三, 创建项目
汉化完成后屏幕上会有一个体积小但是非常显眼的
, 点就行了
然后


接下来就是一步一步点点点, 没什么好说的, 然后给项目引用相关的插件, 它都给你列出来了, 代码都写好了

插件还在安装, 趁这个机会安利一波 gradle: 赶紧入手吧, 真的很好用, 比 maven 灵活多了


四, 上传代码
网页中已经给出了上传的代码, 但是这里需要注意的是 windows 电脑需要对命令进行一些修改才能使用. 也就是改成 windows 风格的命令(xxx.bat)

第一次上传需要一段时间, 其实第二次也需要差不多一样的一段时间. 上传完成后他会自动开始分析, 并在分析完成后刷新页面, 给你看结果



五, 查看结果
这个项目是我从 github 上下载下来的, 很好用的通信类库



其中, Bugs 所列出的十有89都存在逻辑问题或者是安全隐患, 而 "漏洞" 则是 SQ 认为有比这更好的实现方法, 在修复漏洞的过程中不要只是机械地照着软件给出的提示改代码, 而是要思考为什么要这么写, 和原来的写法相比有什么改进. 如果实在不理解为什么这里会报错, 他还会提示你他认为应该怎么写, 虽然不一定正确, 但是七八成是有的.


下面的 "债务" 指的是它认为你修复这些问题所需要的时间, "异味" 指的是不好的书写习惯, 这个酌情修改就好, 不过好的书写习惯能方便别人阅读你的代码. 下面还有代码重复率和测试覆盖率, 如果代码重复过多而你却无法通过复用方法来降低它, 往往意味着项目在设计上存在失误, 也就是说你在开始写代码前没有好好思考应该怎么写. 测试覆盖率这个值不能盲目追求, 因为有的方法没必要测试.



六, 再次上传
在你修改了一些 bug 后, 需要再次上传代码来康康你修改的结果, 这个只需要再次执行他给你的指令即可, 在上传后它会告诉你两个版本的比较情况:



其他: 查看项目统计信息
点击 "指标", 就可以看到项目统计信息, 除了前面提到的之外, 这里还有很多(比如你写了多少行代码)



这篇帖子写的只是 SonarQube 最基本的使用方法, 刚刚接触, 有很多图像我也看不太懂, 很多功能也不会用, 不过现在用这也挺好的...
...写了这么多, 感觉好像写完了但又好像只开了个头. 在文中我反复提到一个词: 思考. 只有思考才能够提高编程水平, 如果只是用用别人的类库, 复制复制别人的方法, 知其然而不知其所以然, 那水平永远不会得到提高, 得到的顶多也就是敲代码更加熟练罢了, 最终变成了敲代码的机器. 可怕的是如果拒绝思考成为了思维定势, 那在计算机这个技术更新换代极快的领域是完全混不下去的.


最后感谢 dalao @
ruhuasiyu排版, 第一次用这么高端的排版我还有点紧张...

3TUSK
那么问题出现了,为什么我需要 SonarQube?
不论是 Eclipse 还是 IntelliJ IDEA 都自带代码静态分析,并且有相当数量的配置选项。
在网上也有很多这样的代码分析服务,搭配 GitHub 等源码托管平台和 Travis CI 等持续集成服务使用似乎比自己在本地部署要方便很多?

Dante_7
本帖最后由 凋灵兔子 于 2019-8-30 20:49 编辑
u.s.knowledge 发表于 2019-8-30 14:51
那么问题出现了,为什么我需要 SonarQube?
不论是 Eclipse 还是 IntelliJ IDEA 都自带代码静态分析,并且 ...

当然是为了应对 IDEA 和 EC 受到月全食的影响而无法启动或者是无法上网的情况啦~

唉....我就知道这种辣鸡教程是赚不到人气的....QAQ