编辑推荐: |
本文主要介绍了为什么要做代码质量分析、常见的代码质量分析工具、DevOps平台中的代码质量分析及DevOps平台中如何为代码质量提供保障。
本文来自于微信公账号EAWorld,由火龙果软件Linda编辑、推荐。 |
|
一、为什么要做代码质量分析
在软件开发过程中,当一个功能开发完成后,如何去保证代码是可用的、没问题的?一般情况下,基本都会有单元测试、每日构建、功能测试等环节来保证。但是,保证代码可用就够了吗?显然不是。
一个软件项目开发完一个版本会有下一个版本,会有新的需求,原来的功能也可能会变更。你写的代码可能会被别人使用,你也可能需要修改别人写的代码。如果只考虑代码的可用性,不考虑代码质量,那么后期遇到的问题其维护成本将会很高,不利于版本迭代。为了避免或减少维护和迭代成本,重视代码质量,做好代码质量分析和管控是最好的方式。
二、常见的代码质量分析工具
既然要做代码质量分析,那我们先看看常用的代码分析工具。
PMD: 注重检查源文件中的潜在问题,可以检查Java代码中是否有未使用的变量、私有方法,是否有空的try/catch、是否过于复杂的表达式等等。
CheckStyle:注重代码格式、代码规范,通过检查编码格式、命名约定、Javadoc、类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范,提供常见IDE的插件,如eclipse,IDEA等。
FindBugs:注重检测潜在的Bug和性能问题,通过检查类文件或jar文件将字节码与一组缺陷模式进行对比从而发现代码缺陷,提供UI界面和常见IDE插件。
HP Fortify:商用的代码安全分析工具,侧重于代码中的安全漏洞检测。Fortify通过与安全漏洞规则库进行匹配,将源码中的安全漏洞扫描出来,并生成报告和修复意见。
SonarQube:开源的代码质量管理平台,涵盖了架构设计、注释、编码规范、潜在缺陷、代码复杂度、单元测试、重复代码7个维度。通过强大的插件扩展机制,支持对主流编程语言的指标分析,目前可以支持超过20种以上主流编程语言。
三、DevOps平台中的代码质量分析
在DevOps平台中我们是如何做代码分析的呢?我们的选择是SonarQube。
SonarQube主要有一下特点:
支持多种语言:20种以上主流编程语言
自动化分析:通过与持续集成平台进行集成可以实现自动化质量分析
提交前预检查:IDE插件SonarLint可以让开发者在提交代码前进行自检查
扩展性强:插件扩展机制强大,已有60+插件,还可以开发自己的插件
问题关联到源码:所有问题都关联到具体的代码行,比较直观
易于集成:通过插件支持多种软件生命周期管理平台
下面我们详细了解一下SonarQube。看看SonarQube的有哪些组件。
可以看到SonarQube主要有这几部分组成:
SonarQube Server
a) Web服务:供开发者、管理人员浏览质量指标和SonarQube的配置;
b) 搜索服务:提供页面搜索功能;
c) 计算引擎:处理生成的分析报告,并将数据保存到数据库;
SonarQube Database
a) 存储SonarQube的所有配置(指标、用户配置、插件配置等);
b) 存储被分析项目的质量报告,各种视图数据;
SonarQube Plugins
a) 支持各种插件,包括开发语言,SCM,持续集成,安全认证等等;
SonarQube Scanner
a) 运行在构建环境或持续集成环境中用于分析项目的一个或多个分析器;
SonarQube的各个组件是如何工作的呢?
可以看到SonarQube各组件的工作流程:
a) 开发者在IDE中编码,并使用SonarLint执行本地代码分析;
b) 开发者向软件配置管理平台(Git,SVN,TFVC等)提交代码;
c) 代码提交触发持续集成平台自动构建、使用SonarQube Scanner执行分析;
d) 分析报告被发送到SonarQube Server进行处理;
e) 处理好的报告生成对应可视化的视图,并将数据保持到数据库;
f) 开发者可以在页面通过查看,评论,解决问题来管理和减少技术债;
再让我们看看SonarQube中的一些重要概念。
指标:SonarQube中的主要指标有可靠性,安全性,可维护性,测试覆盖率,复杂度,重复代码,规模(大小),问题等。
代码规则:在SonarQube中,通过插件提供的规则,在执行代码分析时对代码进行分析并生成问题。由于规则中定义了修复问题话费的成本(时间),解决问题的代价以及技术债可以通过这些问题进行计算。规则一般有三种类型:可靠性(Bug),可维护性(坏味道),安全性(漏洞)。
质量配置:质量配置提供了根据需求配置一组代码规则的能力,这组代码规则将被用于分析某些指定的组件(项目)。例如,项目A对应什么编程语言,适用于那些代码规则等等。
质量阈:质量阈是一系列对项目指标进行度量的条件。项目必须达到所有条件才能算整体上通过了质量阈。例如,配置质量阈为新增Bugs大于10,新代码可靠率低于评级A,新代码可维护率低于评级B,那分析完成后若指标符合这些标准,则代码质量将被认为是不合格的。
SonarQube Server处理分析报告时,根据质量配置中的代码规则进行匹配,从而生成具体的指标数据,然后根据质量阈中的阈值判断出项目的代码是否合格。
说了那么多,在DevOps平台是如何做代码分析的?先让我们看看DevOps平台的核心流程。
从图中看到,DevOps平台的核心流程主要有定义,计划,构建,测试,部署,运行几个环节。代码分析是构建环节的组成部分。那么DevOps平台中如何进行构建呢?这就引出下面这张图。
在DevOps平台中,通过配置构建定义,将多个构建任务进行编排,通过自动或者手动的方式触发构建。在构建任务中增加“代码质量检测“任务,执行构建时,将对代码进行分析。
上面讲到的代码分析是作为构建任务去执行的,除此之外,代码分析也可以单独去执行。在项目中关联代码库后,就可以新建代码分析,直接进行分析了。
不管是在构建过程中执行代码分析构建任务,还是单独执行代码分析,都离不开构建引擎Jenkins的支持。
在构建环节,DevOps平台的职责是:配置构建的触发方式、保留策略、参数,根据构建定义配置生成对应的Jenkins
Pipeline配置,调用Jenkins的API触发创建和执行Jenkins Job,然后查询Jenkins
Job的执行进度和结果;Jenkins的职责是:实际去创建和执行Jenkins Job,并提供Job执行情况的查询API供DevOps平台调用。
当代码分析构建任务执行完成后,分析报告将会发送到SonarQube Server进行处理,最终我们看到的是代码的各种度量指标。
四、DevOps平台中如何
为代码质量提供保障
上面介绍了DevOps平台如何进行代码质量分析。那现在让我们看下在DevOps平台中的代码质量分析结果。
在构建结果中代码质量分析的报告
报告比较简单,点击链接可以直接在SonarQube中查看详细报告
单独执行代码分析的报告
除此之外,我们还能在DevOps平台中看到一些报表。
单元测试覆盖率报表
可维护性报表
根据报告,我们可以从可靠性,安全性,可维护性,覆盖率,重复代码,代码规模大小等维度对代码质量有一个全面的了解。代码质量分析本身并不能直接减少缺陷数量,但是代码质量分析能让我们在构建环节及时发现并处理潜在缺陷和漏洞,让我们能清楚了解到代码复杂度,代码是否符合开发规范,从而让我们做出正确的决策,避免风险和减少技术债务。
因此,代码分析正是DevOps平台保证代码质量的重要手段。
|