Sonar的代码质量优化

DevOps自动化

1、DevOps

DevOps逐渐成为开发运维领域的一种趋势,对DevOps 的定义有很多种,但“自动化” 很可能是该定义的一部分。Continuous Integration(CI,持续集成)、Continuous Delivery(CD,持续交付)、Continuous Testing(CT,持续测试)都是与 DevOps 相关的词语,CI、CD、CT都强调自动化。

2、持续集成

持续集成是在每天的基础上(或在开发人员将新的源代码签入入源代码库时)执行一个自动化的软件构建过程,包括编译、打包、测试、部署等环节,这个过程重点关注软件构建和单元/特性测试、代码质量。

代码质量检查自动化

1、代码的希腊债务危机

技术债务的定义、分类以及形成的原因,技术债的出现是由于开发者这7种致命的原罪所造成的:

重复 

糟糕的复杂性分布

意大利面式设计风格

缺少单元测试

缺乏代码标准

潜在的bug

注释不足或过多,或者干脆不正确(单元测试对这种类型的bug无能为力)

当企业想要迁移到一个DevOps模型时,经常需要偿还高等昂的技术债务,往往陷入“技术债务的恶性循环”中,以至于任何迅速、敏捷的迁移方式都无法使用,这是技术债务中的“希腊债务危机水平”。

最近,我们看到的一个趋势是:如果企业不断地在DevOps自动化上寻找空间,就必须打破这种恶性循环,重新开辟一个新的良性循环。

如果可以自动完成一些常规的、容易出错的和时间密集型的任务,便可以利用效率和投资,就可以将更多的时间和成本投入技术负债偿还中。

在技术债务偿还后,企业将得到一个质量更高、更稳定和更灵活的应用程序,从而可以重新在自动化工作上投入更多的时间,并启动下一个周期的改善和提升。

2、持续集成与代码质量检查

代码质量的检查是持续集成中的一个关键环节,也是最容易低成本实现自动化的一个环节。代码质量的重要性不言而喻,代码质量水平决定了软件的可靠性、可维护性、执行效率、安全性等软件质量水平。

而大规模的软件系统的代码庞大而复杂,必须借助自动化手段辅助完成代码审查。

基于Sonar推动代码质量优化

1、Sonar质量管理平台

随着 IT 行业中软件产品的推陈出新,客户对于软件产品的要求也越来越高,因此如何高质量的管理软件代码,及时地对代码质量进行分析并给出合理的解决方案就成为了当下必须要解决的一个问题。与当今众多的代码质量管理工具相比,Sonar更具有特色和竞争力,其优势主要体现为:它是一个开源的代码质量管理系统,支持 25+ 种语言,可以与Jenkins、Eclipse 和 JIRA 等其他外部工具集成,从而实现了对代码的质量的全面自动化分析和管理。

Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测如 PMD、FindBugs 等工具进行整合,可以说是目前最强大的代码质量管理开源工具之一。

2、代码规范的定义

在应用Sonar辅助实施DevOps,帮助开发改进代码质量的实践过程中,我们发现会碰到很多的问题,其中最大的问题是,由于之前累积的技术债务比较庞大,缺乏代码质量规范,代码质量低下,导致应用Sonar默认规则进行代码扫描时,扫描出来的违反代码规则的代码量非常大,一下子给开发人员巨大的压力,开发下意识会拒绝修改这么大量的问题。

所以必须对代码扫描规则进行筛选、定制,前期尽量挑选适量的、高级别的规则进行扫描应用,等开发习惯后再分阶段逐步应用更多的规则。java建议加入阿里巴巴的p3c开发规范。详见文章:sonar集成ail-p3c插件

下面介绍常用的筛选策略:

1)针对不同系统(项目)进行评审、筛选、定制扫描规则集

企业内不同的系统(项目)的重要程度是有差异的,例如分为核心、重要、一般3种级别的系统,对不同系统定义的代码扫描规则集不同,例如:越重要的系统,规则范围越大(挑选的规则数量越多)、规则的严重级别设定越高。

2)针对不同系统(项目)的特点选取重点关注的规则类型

不同类型的系统(项目)的特点不一样,对代码质量的要求侧重点也会有差异,例如,有些系统侧重性能和执行效率,有些系统侧重可移植性。代码规则大致可分为以下几类:

可维护性(Maintainability)

性能(Efficiency)

可移植性(Portability)

可用性(Usability)

可靠性(Reliability)

3)每个规则有默认严重级别,需要根据项目情况调整重要级别

例如,在Sonar中展示的代码规则违反分类数量统计,分为5个级别:Blocker、Critical、Major、Minor、Info

可通过Sonar的配置管理界面对具体某个规则的严重程度(Severity)进行调整设置。

通过一系列的筛选和调整后,Sonar的规则会适当减少,例如,下面是挑选了Sonar中专门由Findbugs进行扫描的规则,并且仅挑选严重级别为Blocker、Critical的规则,代码扫描规则的数量由原来的500多个降到了200多个。

有了定制化的代码规则集后,我们还可以结合研发流程做质量门(质量标准),例如,下面是某企业对代码合规等代码质量标准的指标定义:

3、如何辅助开发更高效地完成代码质量优化?

定义好代码规则集、质量门之后,我们还需要做一些辅助性的工作,以便开发能更高效地完成代码质量优化。

例如,借助Sonar的SCM Activity插件,在代码扫描出问题时,定位关联到SVN库,查找最近是谁、在什么时间签入了这段代码,从而精准地通知相关开发人员复查和修改对应的代码问题。

另外,由于Sonar工具中的规则描述通常是简单的语句,开发人员(尤其是一些初级开发人员)对规则的原理、相关的编码技术不熟悉、不了解的情况下,会导致问题的修复速度减慢。因此,通常需要整理规则集文档辅助开发人员加速这个过程,例如对规则进行描述解释、举例说明问题、解决的办法的描述等:

小结

本文介绍了DevOps推进过程中,如何结合持续集成的代码检查环节,基于Sonar平台实现代码自动检查,通过筛选规则、小范围逐步引入,从而在研发团队里形成编码规范,提高代码编程的质量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354