敏捷过程中如何保证代码质量

简介: 本文讲的是敏捷过程中如何保证代码质量,在软件开发过程中,当一个功能开发完成后,如何去保证代码是可用的、没问题的?一般情况下,基本都会有单元测试、每日构建、功能测试等环节来保证。但是,保证代码可用就够了吗?显然不是。

本文目录:
一、为什么要做代码质量分析
二、常见的代码质量分析工具
三、DevOps平台中的代码质量分析
四、DevOps平台中如何为代码质量提供保障

一、为什么要做代码质量分析

本文讲的是敏捷过程中如何保证代码质量,在软件开发过程中,当一个功能开发完成后,如何去保证代码是可用的、没问题的?一般情况下,基本都会有单元测试、每日构建、功能测试等环节来保证。但是,保证代码可用就够了吗?显然不是。
image

一个软件项目开发完一个版本会有下一个版本,会有新的需求,原来的功能也可能会变更。你写的代码可能会被别人使用,你也可能需要修改别人写的代码。如果只考虑代码的可用性,不考虑代码质量,那么后期遇到的问题其维护成本将会很高,不利于版本迭代。为了避免或减少维护和迭代成本,重视代码质量,做好代码质量分析和管控是最好的方式。

二、常见的代码质量分析工具

既然要做代码质量分析,那我们先看看常用的代码分析工具。

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的有哪些组件。
image

可以看到SonarQube主要有这几部分组成:

SonarQube Server
a) Web服务:供开发者、管理人员浏览质量指标和SonarQube的配置;
b) 搜索服务:提供页面搜索功能;
c) 计算引擎:处理生成的分析报告,并将数据保存到数据库;

SonarQube Database
a) 存储SonarQube的所有配置(指标、用户配置、插件配置等);
b) 存储被分析项目的质量报告,各种视图数据;

SonarQube Plugins
a) 支持各种插件,包括开发语言,SCM,持续集成,安全认证等等;

SonarQube Scanner
a) 运行在构建环境或持续集成环境中用于分析项目的一个或多个分析器;
SonarQube的各个组件是如何工作的呢?
image

可以看到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平台的核心流程。
image

从图中看到,DevOps平台的核心流程主要有定义,计划,构建,测试,部署,运行几个环节。代码分析是构建环节的组成部分。那么DevOps平台中如何进行构建呢?这就引出下面这张图。

image

在DevOps平台中,通过配置构建定义,将多个构建任务进行编排,通过自动或者手动的方式触发构建。在构建任务中增加“代码质量检测“任务,执行构建时,将对代码进行分析。
image

上面讲到的代码分析是作为构建任务去执行的,除此之外,代码分析也可以单独去执行。在项目中关联代码库后,就可以新建代码分析,直接进行分析了。

image

不管是在构建过程中执行代码分析构建任务,还是单独执行代码分析,都离不开构建引擎Jenkins的支持。

在构建环节,DevOps平台的职责是:配置构建的触发方式、保留策略、参数,根据构建定义配置生成对应的Jenkins Pipeline配置,调用Jenkins的API触发创建和执行Jenkins Job,然后查询Jenkins Job的执行进度和结果;Jenkins的职责是:实际去创建和执行Jenkins Job,并提供Job执行情况的查询API供DevOps平台调用。

当代码分析构建任务执行完成后,分析报告将会发送到SonarQube Server进行处理,最终我们看到的是代码的各种度量指标。

image

四、DevOps平台中如何
为代码质量提供保障

上面介绍了DevOps平台如何进行代码质量分析。那现在让我们看下在DevOps平台中的代码质量分析结果。

在构建结果中代码质量分析的报告

image

报告比较简单,点击链接可以直接在SonarQube中查看详细报告

image

单独执行代码分析的报告
image

除此之外,我们还能在DevOps平台中看到一些报表。

单元测试覆盖率报表
image

可维护性报表
image

根据报告,我们可以从可靠性,安全性,可维护性,覆盖率,重复代码,代码规模大小等维度对代码质量有一个全面的了解。代码质量分析本身并不能直接减少缺陷数量,但是代码质量分析能让我们在构建环节及时发现并处理潜在缺陷和漏洞,让我们能清楚了解到代码复杂度,代码是否符合开发规范,从而让我们做出正确的决策,避免风险和减少技术债务。

因此,代码分析正是DevOps平台保证代码质量的重要手段。

原文发布时间为: 2017-06-13
本文作者:田新会
本文来自云栖社区合作伙伴EAWorld,了解相关信息可以关注EAWorld。

相关文章
|
25天前
|
监控 测试技术 持续交付
【软件设计师备考 专题 】软件质量管理:保证软件的可靠性和性能
【软件设计师备考 专题 】软件质量管理:保证软件的可靠性和性能
63 0
|
3月前
|
开发框架 监控 测试技术
产品迭代过程中如何保证产品质量的稳定性
产品迭代过程中如何保证产品质量的稳定性
|
8月前
|
敏捷开发 测试技术 持续交付
软件开发过程中的最佳实践和代码质量评估
在软件开发过程中,采用最佳实践和评估代码质量对于确保软件的稳定性和可维护性至关重要。通过明确的需求、合理的开发流程、良好的代码规范以及严格的代码评估,我们可以降低软件开发过程中的风险,并提升开发效率和软件质量。
205 2
|
8月前
|
敏捷开发 数据可视化 测试技术
如何做好敏捷迭代管理?过程及工具分享
Leangoo领歌是ScrumCN(scrum.cn)旗下的一款永久免费的敏捷研发管理工具。 Leangoo领歌覆盖了敏捷研发全流程,包括小型团队敏捷开发,Scrum of Scrums大规模敏捷以及SAFe大规模敏捷框架等,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、缺陷管理、测试管理、进展跟踪、统计度量等。领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速创新,在数字时代赢得竞争。
如何做好敏捷迭代管理?过程及工具分享
|
11月前
|
测试技术
【系统架构】可靠性测试用例设计时重点考虑的特殊情况
【系统架构】可靠性测试用例设计时重点考虑的特殊情况
81 0
|
存储 缓存 监控
【软件测试】稳定性和可靠性测试在软件开发中的重要性
软件测试的某些方面经常会在那些刚接触流程的人中造成混淆——例如在稳定性和可靠性测试之间划清界限。 两者通常可以互换使用,并且有一个共同的目标,即确保系统可以在选定的时间范围内稳定运行。
|
Java 测试技术 应用服务中间件
软件测试面试题:交付一个性能测试项目,请阐述你的性能测试流程?
软件测试面试题:交付一个性能测试项目,请阐述你的性能测试流程?
135 0
|
测试技术
软件测试面试题:如何去提升用例的稳定性?
软件测试面试题:如何去提升用例的稳定性?
236 0
|
安全 jenkins 程序员
代码审查的必要性和最佳实践
代码审查的必要性和最佳实践
231 0
代码审查的必要性和最佳实践
|
监控 安全 程序员
软件开发的过程
在软件工程中,软件开发方法(也称为系统开发方法,软件开发生命周期,软件开发过程,软件过程)是将软件开发工作划分为包含旨在更好的活动的不同阶段(或阶段)。规划和管理。
3080 0