写点什么

实践中的质量度量

  • 2012-07-30
  • 本文字数:2529 字

    阅读完需:约 8 分钟

上周末 InfoQ 与支付宝技术大学携手将 QClub 线下技术沙龙带入了支付宝上海分公司,本次活动的主题为“质量度量 123”。随着软件及互联网行业逐步走向正规化、规模化,软件质量正日益受到大家的重视,无法进行合理的度量就无法保证质量。因此,这一话题吸引了很多同学来到现场。

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

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

  • 与组织的目标一致:代码度量模型的底线要与组织的要求一致,和业务相关的东西会体现在规范里。在支付宝,代码安全规范、敏感信息处理规范被作为代码质量最基本的要求。
  • 有针对性:要做针对性分析,比如对线上故障的研发原因进行分析,分析的规则会有周期性变动的,但不要太频繁,而且规则会随着组织的成熟度而改变。
  • 可操作性:要对度量维度做进一步分解,比如测试要有明确的检查点,覆盖要完整,可重复运行。支付宝就制定了具体的度量维度,从多个维度对系统加以度量。
  • 有工具支持:这不是必要条件,工具不能解决所有问题!能用工具最好,不行的话就人工检查。工具检测维度要按照优先级和操作性,逐步增加精细化维度。这一点上,支付宝将一些编码规则的检查放入了持续集成工具之中,以求尽早检查、频繁检查。

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

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

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

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

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

  • 获得管理层认同:让管理层能看得见目标,看得到做法,往往有技术背景的管理层更容易说服。
  • 流程保障:把要求放入日常流程之中。
  • 组织保障:要有人专门负责制定、维护、解释标准,并将标准落地,因此可以成立专门的组织(可以是一个虚拟组织),在支付宝就有一个名为 SQPG 的组织。

目前的质量度量主要还是集中在开发阶段,今后可能会将部署阶段也囊括进来,部署的度量主要包括系统依赖性检查、配置一致性检测、应用部署验证、DB 部署验证、性能极限验证和业务验证。此外还要寻求更科学的度量指标,在实践中圈复杂度也会有这样那样的问题,需要寻找一些更合适的度量指标。

在简短的休息之后,来自 51Testing 的宋光照为大家介绍了如何构建可维护的自动化测试。首先,他分享了他对软件质量特性中的可维护性的理解,可维护性包含易测试性(降低发现缺陷的成本)、易分析性(降低定位缺陷的成本)、易改变性(降低修改缺陷的成本)和稳定性(减少频繁修改而导致的不稳定),其中易测试性是最为重要的。测试自动化和自动化测试常被混为一谈,宋光照解释到自动化测试偏重于测试的执行,而测试自动化则包含自动化测试管理、自动化测试执行和工具支撑三个部分。自动化测试目前面临了很多挑战,比如软件测试的时间越来越短,变更越来越多越来越频繁,回归测试成本压力越来越大。业界对自动化测试的需求大致可以归纳为:

  • 要求是执行快、效率高、可重复的自动化测试资产
  • 自动化测试工具成本要低
  • 要有易学易用的自动化测试方法
  • 对提高软件质量有评价或质量度量指标

而开发对自动化测试也有自己的需求:

  • 能尽早快速发现软件缺陷
  • 工具要有自我检查和任务闭环管理功能
  • 对提高编程质量有指导性意义
  • 自动化测试工具链支撑能适应自身开发模式

从自动化的角度来看,底层从单元测试开始时比较现实的,只要提供了框架,传递了合适的方法即可。面向函数级别,请考虑单元测试;面向 API 层面,构建功能测试,快速做验收;面向 GUI 层面,开展录制回放;从使用者角度来关注质量,做一些手工测试。宋光照强调了测试自动化开发也是软件开发,要多考虑可测试性设计。随后,他为大家演示了两套自动化测试工具,介绍了一些实际使用案例。

在成本方面,自动化测试也要有投资回报考虑,至少要回归 3 次才会有收益,随着版本迭代次数增加,收益会明显提高,如果考虑其他平台兼容性问题,收益还会成倍增加。在实施前期,需要投入自动化测试管理、人员和研发过程管理,做到人员清楚定位、合理分层。自动化测试在起步阶段,重在用例转化,将手动测试转为自动化测试;在成熟阶段则重在效率,提高用例重用度,提高持续集成和每日构建效率。

关于质量度量与自动化测试,还有很多值得深入讨论的内容,如何把控软件质量,各位读者,您是怎么做的?

2012-07-30 00:224924
用户头像

发布了 135 篇内容, 共 61.1 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

利用Nginx流量镜像,优雅的接入waf

运维研习社

nginx WEB安全 waf 5月日更

数据挖掘从入门到放弃(三):朴素贝叶斯

数据社

机器学习 5月日更

小谈音视频质量检测

箭上有毒

音视频 5月日更

我的Serverless实战—玩转腾讯云Wordpress

liuzhen007

Serverless 5月日更

架构师实战营 模块四作业(设计千万级学生管理系统的考试试卷存储方案)

代廉洁

架构实战营

架构师实战营 模块四总结

代廉洁

架构实战营

一文看懂 slice

Rayjun

Go 语言

架构实战营模块4作业

En wei

架构实战营

没有发生GC也进入了安全点?这段关于安全点的JVM源码有点意思!

CoderW

Java 源码分析 JVM GC

这5个浏览器工具,让你的上网舒适度提升150%

彭宏豪95

效率 工具 浏览器 脚本 5月日更

大数据中的工作流调度

五分钟学大数据

大数据 5月日更

Python 之父爆料:明年至少令 Python 提速 1 倍!

Python猫

Python

zstd c++ string 压缩&解压

hashyong

c++ 程序员 架构 5月日更 zstd

10年后,区块链的世界将会变成什么样子?

CECBC

行车数据上链,国产汽车很上道

CECBC

SaaS的前世、今生与未来[下篇]

LigaAI

SaaS

用 Python 打印九九乘法表 - DAY7

Qien Z.

Python 5月日更

学会这12个Java开发框架轻松拿到30K+

北游学Java

Java spring Netty mybatis 框架

perf + 火焰图用法 小结

hashyong

程序员 架构 5月日更 perf

<精益创业>读后感

Bruce Talk

敏捷 随笔 Agile

重学Scrum三大支柱 《Scrum指南》重读有感(1)

Bruce Talk

Scrum 敏捷 随笔 Agile

架构实战训练营 - 模块4 - 作业

Presley

Impala架构剖析

大数据技术指南

大数据 5月日更

架構實戰營 - 模塊 4 作業

Frank Yang

架构实战营

想要做网页游戏怎么办 ?PixiJs 篇(四)

空城机

JavaScript 大前端 游戏 pixi 5月日更

高耦合:为何代码一直被绑架?

Jxin

【LeetCode】数组中两个数的最大异或值Java题解

Albert

算法 LeetCode 5月日更

《Redis入门指南(第 2 版)》读后感

codists

redis

架构师实战营 模块四作业(设计千万级学生管理系统的考试试卷存储方案)

代廉洁

架构实战营

模块4作业

Geek_2e7dd7

架构训练

cri-o技术探秘3

xumc

Docker 容器 cri-o pinns

实践中的质量度量_语言 & 开发_丁雪丰_InfoQ精选文章