探索DEVOPS的世界07

前两篇我们重点介绍了一下持续集成和持续部署的大体的技术落地原理以及实现思路,总体而言,现在有很多很好的开源产品来支撑持续集成部署的落地,如果企业的研发情况有一定的规模的话,是可以依照企业内部的情况做一定的二次改造以及平台化,并且现在平台化其实已经逐渐成为一个趋势。 那么我们今天就来讨论下程序员身上的三座隐形大山怎么去解决?

我们回忆一下前面几章,程序员身上有包括代码规范、代码质量、单元测试覆盖率三座大山,传统的方式,我们可能经常会通过CR的方式去相对地解决,但是还是比较偏向于人工方式,那么有没有一些自动化的工具来支撑呢?

首先我们先说下代码规范和代码质量。 这个话题其实是很多程序员乃至老板都比较感兴趣的话题,说起这个问题其实我们要先提另外一个话题,就是规范。 传统意义上的企业中的规范都会以文档或者口头认同等方式在企业里面进行知识传承,但由此带来的问题是,除了通过人工长时间的CR,基本无法去完美地检测出研发同学所写的代码是否遵循了一定的规范,从而导致规范虽然有,但是基本上都是停留在口头上。所以程序员自己就会去思考怎么将这些规范能够进行工具化,因此社区就衍生出了很多优秀的产品。

首先是FindBugs

FindBugs是一款代码静态分析工具,其无需人工参与即可以检测出代码中的缺陷。它除了提供客户端集成的工具外,也提供UI界面对整体的检测情况进行分析。同时它也支持插件式的嵌入到代码从构建到打包的生命周期中。比如如果是java应用的话就可以通过FindBugs的maven插件进行代码分析。

另外一款就是SonarQube

按照我对SonarQube的研究与落地使用,此产品在流程、功能和体验上做的相当丰富。比如如果你的企业有很多代码的规约,你可以自定义很多代码检测示例进行集成,另外它提供技术债务的时效管理,前面也说过,技术债的时效管理是IT中的一门学问。当然和FindBugs一样,其也支持很多插件以及命令操作,也正是有了这些插件和命令才得以将平台进行集成。

另外一个也不能算是平台,可以说是一个规范。 就是阿里所出的java开发规范,这个规范目前在各个企业中使用也比较广,而且基于这个规范还向社区贡献了基于IDEA的检测插件以及基于sonar的示例等等。当然阿里的开发规范并不是业界唯一一个,比如google的java开发规范我之前也一直使用,比如唯品会的java开发规范也属于一个比较不错的案例。

所以也正是有了这些平台以及规范工具,才得以将CI这个过程做得更好。 以我所经验的一些落地场景看,目前有一定规模的企业内还是以SonarQube为主,主要原因还是SonarQube在集成上方便,同时支持丰富的功能对质量进行分析。后面在实操部分我也会做详细的讲解。

讲完了代码规范和质量,我们再讨论了下单元测试覆盖率。 我们知道软件开发领域有一种开发模式叫做TDD,所谓的测试驱动开发,它是敏捷开发的一种方式,我理解它的核心本质就是让研发人员能够树立一种以结果为导向的研发方式,从而让自己的代码与业务目标逐步靠齐。 当然,我几天不是想重点讨论TDD,这是一个比较大的实践话题。其实主要是想说关于单元测试。 单元测试其实我觉得也是TDD理念中的一种,就是研发同学通过代码来驱动自己的代码案例,从而与预期业务目标对齐。

那有哪些工具可以做单元测试呢?最主流的当属Junit,除了它之外,还有比如Spock、Agitator,以及还有一些Mock的工具,这边就不做详细介绍。

那么又有哪些成熟的开源工具可以去对我们的单元测试覆盖率做检测呢?

第一款产品叫做Jacoco

其使用asm动态修改字节码,在代码中进行打桩,从而进行统计,并且支持插件模式、命令行模式。其使用方式包括两种,第一,执行测试用例的时候使用jacoco参数,会生成覆盖率分析文件。第二,使用jacoco命令根据exec文件生成覆盖率报告。所以一旦看到命令,我们就能够去找它对应的语言插件做集成。其包括包括指令级覆盖(Instructions,C0coverage)、分支(Branches,C1coverage、圈复杂度(CyclomaticComplexity)、行覆盖(Lines)、方法覆盖(non-abstract methods)、类覆盖(classes),并且你也可以调整它的覆盖率阈值从而保证少于这个阈值的不会通过。 不过,我个人有个观点,一个应用也不能纯粹为了单元测试而测试,因为单元测试无疑会降低迭代的速度,可以找一些重点的场景写单元测试,并且每个团队也要根据团队内部的研发能力、迭代速度去合理评估自己的阈值,按照我所经历过的公司看,有些其实是将这块从CI中去除的。

如上就是今天要介绍的内容。 那么质量能够相对保证了后,我们就要去思考对于一个已经上线的应用,我们如何去做质量保证以及日常的监控运维工作,有哪些成熟的开源的工具可以帮助我们去逐步地落地我们的思考内容,我们下一章再继续讨论。

—————–EOF——————



Previous     Next
mjgao /