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

摘自http://www.51testing.com/html/45/n-3720945.html

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

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

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

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

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

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平台保证代码质量的重要手段。

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

推荐阅读更多精彩内容