随着软件及互联网行业逐步走向正规化、规模化,软件质量正日益受到大家的重视,无法进行合理的度量无法保证质量。因此,上一场主题为“质量度量123”活动吸引了很多同学来到现场。

  在马良(花名)的简单开场之后,活动便进入正题,由来自支付宝SQA团队的西剑(花名)为大家分享了一些持续集成中的代码度量模型与实际应用。首先,西剑做了一个现场调查,在场多少人的公司在实施持续集成,结果现场几十名同学约有10人举手,而当问及有多少公司在做代码度量时,只有一位爱立信的同学依然举手。由此可见,经过一段时间的推广,持续集成这一实践已开始为大家所认识,并开始尝试,而代码度量的实施情况不容乐观。

  统一配置管理(UCM)指出对代码变更的范围是可以进行精细化管控的。说起代码质量管控,目前面临三大挑战――、快速、协同。那代码质量到底是什么?现场有人提出稳定性、健壮性、可维护性,其实有很多衡量代码质量的模型,比如圈复杂度。这么多模型,该如何在实践中加以用?西剑提出有效的代码度量模型应具备以下特征:

  ● 与组织的目标一致:代码度量模型的底线要与组织的要求一致,和业务相关的东西会体现在规范里。在支付宝,代码安全规范、敏感信息处理规范被作为代码质量基本的要求。

  ● 有针对性:要做针对性分析,比如对线上故障的研发原因进行分析,分析的规则会有周期性变动的,但不要太频繁,而且规则会随着组织的成熟度而改变。

  ● 可操作性:要对度量维度做进一步分解,比如测试要有明确的检查点,覆盖要完整,可重复运行。支付宝制定了具体的度量维度,从多个维度对系统加以度量。

  ● 有工具支持:这不是必要条件,工具不能解决所有问题!能用工具好,不行的话人工检查。工具检测维度要按照优先级和操作性,逐步增加精细化维度。这一点上,支付宝将一些编码规则的检查放入了持续集成工具之中,以求尽早检查、频繁检查。

  西剑介绍了支付宝正在构建的一套持续集成平台,自上而下分为DashBoard、服务管理层与服务层,其中为基础的服务层中提供了单元测试(构建服务、静态扫描、单元测试、CodeReview)、集成测试(API测试)、系统测试(SIT、UI测试)等众多服务。

  当被问及人工CodeReview是靠的工程师来做,还是质量部门自己来做时,西剑认为佳的方式是项目成员进行交叉CodeReview。如果靠的架构师来进行CodeReview,他可能只会关注代码规范或者一些上层的东西,无法深入细节,因为他本身的视角太高,不清楚业务实现的具体细节,而项目的成员或者开发Owner可能更清楚这些东西。

  代码度量模型又该如何应用?首先,要有度量模型作为代码质量标准,引导团队代码质量意识和方向;其次,辅以持续集成,实时监测代码复合模型中客观质量度量的情况,再配合人工CodeReview保证业务一致性。持续集成相对客观,而人工的CodeReview则较为主观。产品在发布之前,必须满足组织的代码度量模型,否则不予上线。

  在进行了度量之后,系统代码质量可以在多个系统间进行横向比较,其中服务型系统与应用型系统质量要求会有所区别,新老系统会有区别,检查系统量目标是否达成,以此确定部门改进的系统范围和目标。单个系统也可进行纵向比较,了解系统质量的变化趋势,分析原因,确定单个系统质量改进月度目标。

  质量度量并不是一个人,或者几个人能轻松实现的,需要建立有效的执行体系,西剑建议可以从以下几个方面着手:

  ● 获得管理层认同:让管理层能看得见目标,看得到做法,往往有技术背景的管理层更容易说服。

  ● 流程保障:把要求放入日常流程之中。

  ● 组织保障:要有人专门负责制定、维护、解释标准,并将标准落地,因此可以成立专门的组织(可以是一个虚拟组织),在支付宝有一个名为SQPG的组织。