基于Sonar推动DevOps流程中的代码质量优化

简介:

一、DevOps自动化


1、DevOps


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


2、持续集成


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


 

二、代码质量检查自动化


1、代码的希腊债务危机


我在《消除技术债务?DevOps可以这么用!》这篇文章中探讨了技术债务的定义、分类以及形成的原因,技术债的出现是由于开发者这7种致命的原罪所造成的:


  • 重复

  • 糟糕的复杂性分布

  • 意大利面式设计风格

  • 缺少单元测试

  • 缺乏代码标准

  • 潜在的bug

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


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



 


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



 

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


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


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


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


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


 

三、基于Sonar推动代码质量优化


1、Sonar质量管理平台


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


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


2、代码规范的定义


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


所以必须对代码扫描规则进行筛选、定制,前期尽量挑选适量的、高级别的规则进行扫描应用,等开发习惯后再分阶段逐步应用更多的规则。


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


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平台实现代码自动检查,通过筛选规则、小范围逐步引入逐步习惯的方式,推动开发优化代码质量的具体做法。


作者介绍:陈能技


  • 2016全球敏捷运维峰会特邀嘉宾。

  • 【DBA+社群】专家,新炬网络首席APM架构师。

  • 14年开发测试与质量架构经验,擅长DevOps及APM、Docker、持续集成、持续交付在企业中的落地实施。

  • 著有《软件性能测试诊断分析与优化》、《软件自动化测试成功之道》、《深入浅出性能测试与LoadRunner实战》等书。 


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-03-22
目录
相关文章
|
27天前
|
运维 监控 Devops
图解 DevOps 流程,7 大关键步骤总结,非常详细!
本文详解 DevOps 流程的 7 大关键步骤,快速掌握 DevOps 的核心实践。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
图解 DevOps 流程,7 大关键步骤总结,非常详细!
|
1月前
|
运维 Devops 测试技术
自动化运维的魔法——打造高效的DevOps流程
【10月更文挑战第28天】在数字化浪潮不断推进的今天,企业对运维效率的追求如同古人探索魔法一般充满好奇与渴望。本文将带你走进自动化运维的世界,揭秘如何通过DevOps实践,实现从代码到部署的无缝连接,提升企业的IT运营效能。我们将一起探索自动化工具的选择与配置,以及如何构建一个既能快速响应业务需求,又能保障系统稳定性的高效流程。
|
1月前
|
监控 Devops jenkins
自动化部署与监控:打造高效的DevOps流程
【10月更文挑战第24天】在追求快速迭代和持续交付的软件开发时代,DevOps成为提升团队效率的关键。本文深入探讨如何构建一个高效的DevOps流程,包括自动化部署、监控和故障排除等关键环节。通过实际案例,我们将学习如何利用工具简化运维任务,确保系统稳定运行,并快速响应生产问题。
58 2
|
4月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
95 1
|
3月前
|
运维 监控 Devops
DevOps实践:构建高效运维流程
【9月更文挑战第3天】在当今快节奏的技术环境中,高效的运维流程是企业成功的关键。本文旨在揭示如何通过DevOps实践,构建一个既灵活又高效的运维体系。我们将深入探讨自动化工具、持续集成与持续部署(CI/CD)策略以及监控和日志管理的最佳实践,以实现运维工作的优化。文章将用简洁明了的语言,结合生动的比喻,带领读者走进DevOps的世界,学习如何将理论应用到实际工作中去。
|
4月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
88 0
|
5月前
|
运维 监控 Devops
DevOps实践:构建高效运维流程
【7月更文挑战第23天】在当今快速发展的信息技术时代,DevOps作为一种文化和实践,正在彻底改变软件开发和运维的方式。本文将深入探讨如何通过实施DevOps原则和工具来构建高效的运维流程,旨在帮助读者理解DevOps的核心概念、实施步骤以及面临的挑战,并提供实用的解决方案和最佳实践。文章将重点介绍自动化部署、持续集成、监控和反馈机制等关键要素,以促进团队协作,提升软件交付速度和质量。
|
4月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何优化克隆代码时长
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6月前
|
运维 监控 Devops
DevOps实践:构建高效运维流程
【6月更文挑战第29天】在现代软件开发周期中,DevOps已成为推动开发和运维团队紧密合作的重要哲学。本文将探讨如何通过DevOps实践来构建一个更高效的运维流程,从而提升软件交付速度、提高产品质量,并确保系统的稳定性和安全性。我们将从持续集成、自动化测试、配置管理、容器化部署、监控与告警等关键方面入手,深入分析DevOps实施过程中的关键环节及其对运维工作的影响。
95 3
|
6月前
|
敏捷开发 缓存 前端开发
阿里云云效产品使用问题之流水线构建前端项目比较慢。该如何优化
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。