简介:自己算是阿里的老兵了,从实习开始一直投身在 toB 业务的质量保障领域内,不能说是资深的专家,但所经历的、感受的业务特点和体会还是具有一定的代表性,希望能通过这篇文章,总结一下过往,并能和已经躬身进入这个业务领域,以及将要进入的同学们产生一些共鸣。

眼中的ToB业务

自己算是阿里的老兵了,从实习开始一直投身在 toB 业务的质量保障领域内,不能说是资深的专家,但所经历的、感受的业务特点和体会还是具有一定的代表性,希望能通过这篇文章,总结一下过往,并能和已经躬身进入这个业务领域,以及将要进入的同学们产生一些共鸣。

服务专有钉客户的这两年,更像是场战斗,只有躬身入局的胜利者才能这个竞争激烈的市场上存活。专有钉的深度用户已经将专有钉作为日常工作的一部分,跟我们使用钉钉一样,是生产力工具;再小的体验问题,再小概率出现的偶发问题,在大规模日活下,都极易被放大和激化。

即便都是协同办公的业务诉求,也会因为客户行业特性不同而大相径庭。所带来的定制化需求量会随着不同行业客户的增加出现指数上升,这对产品架构的适配、产品研发交付服务链路上的资源投入均带来巨大的挑战。

虽然服务这些不同行业的头部客户很艰难,但是一旦认可我们,口碑就会在这些行业内迅速传播,带动客户的增长。

结合跟 ToC 产品的对比,我眼中 ToB 业务特别明显的特点有如下几个:

质量保障的难度

2年的建设,专有钉已经成为国内第一大政务协同办公平台产品。对于这份答卷很骄傲,组织也给予了认可,但同时,焦虑、压力也在持续积累,因为这个业务实在是太难做了。

1  客户对质量容忍度极低

专有钉在钉钉产品矩阵中,所承担的责任是服务好政府客户、行业头部大型企业客户。这些客户最大的特点,对数字化是有较深的理解和应用,并非小白客户。我们需要展现出较他们更强的专业性,较之前他们所使用产品更好的体验,他们才能接受我们,认可我们,把我们当成数字化改革的同路人。

原先做公司内部产品,在项目周期紧张的情况下,最先想到的解决方案就是保障主干业务,但做专有钉不能固化这样的意识,因为有 VIP 客户这种角色存在。他们是决策者,但也是一个个人,不同人的产品使用路径、所认为的核心产品功能均不同,但有一个相同点,就是对质量的容忍度都极低,客户认为,已经为产品买单了,高质量就应该是标配。这带来的结果是“主干业务”的定义变得边界模糊,在有限的项目周期内,如何做到测全?

另一个特点,是出现问题时,有人可能会质疑,这明显是你们系统运行指标监控没做好。但公有云上常规的系统指标监控方案在专有云环境下,通常无法运转。问题排查难度大,造成口碑积累的难度也极大。

2  安全生产难做

专有钉跑在专有云环境中,资源、数据、产品,所有的一切都属于客户所有,做安全生产,一要严守用户信息安全,二要严控方案所消耗的资源成本。专有云网络基础设施复杂,目前尚无成熟的全链路问题排查工具,且不同客户环境的云底座、中间件差异大,方案复用度低。

组织协同配合困难,安全生产会涉及产研、交付、一线运维、二线运维、三方isv,且后四者在不同的项目也通常会由不同的公司组织来承接。能力参差不齐,职责清晰的难度大。

3  测试技术融入研发过程的迫切性高

专有钉产品在极其有限的版本周期内,既要实现 70~80 个业务需求,又要严格遵守质量门禁,压力极大。质量团队在坚守质量原则的基础上,需要在研发自测阶段提供给研发效率高、覆盖广的测试能力,以此将质量风险消灭在项目前期。

开放生态的背景下,大规模的isv产出物将融入专有钉产品,质量团队需要做质量兜底。将 isv 纳入到质量保障体系中,任重而道远。

4  云原生适配难度大

专有云发展了多年,市场上不乏竞品。客户看中专有钉的专业性,但要让他替换昂贵的云底座成阿里云飞天底座,可能就会迎难而退,发展云原生是出路之一。 当前云原生产品缺少标准化,这对测试工作就是场灾难。辛苦完成了测试,由于客户现场部署架构不同,所用的云原生产品规格不同,导致 bug 频出,打脸的同时也无奈。非标下,测试结论无法复用,甚至显得无意义。

当前缺少成熟的安全生产、质量保障的云原生产品,线上可运维性差,稳定性保障能力不足,巧妇难为无米之炊。

5  测试工作具有专业性难度

除了要攻克专有云的技术屏障,在其之上测试功能、性能、安全生产能力建设外,还需要针对核心业务做业务专项测试,比如 IM、音视频、文档等。

略有成效的方法

上述难点有些是做专有钉产品第一天就要面对的,比如专有云的技术屏障,而有些是在业务发展中逐渐出现,比如云原生的适配难度。应对这些难点的策略方法也同样并非一蹴而就,在攻克老问题,迎接新问题的反复中,专有钉质量团队也沉淀了一套适配当前 ToB 业务的质量保障体系,体系取名“定坤”。

1  数据为基础

专有钉产品从诞生便以推动政企客户数字化改革为己任,高质量、高稳定、优体验是这个产品必有的特性,保障体系从建设之初便和产品本身一样,以数字化来驱动,把所有可定义的过程、结果均尽可能地做了结构化,并在其基础上做加工、分析、决策、驱动。

数字化驱动质量风险防控

质量/过程风险数据的结构化,需要标准化的研发流程、缺陷流转规则做匹配,让离散的数据通过规则分析,具备决策和驱动能力。专有钉的研发流程将集团产品 Aone 的能力用到了极致,需求管理、版本管理、缺陷管理全部标准化执行,完全可以作为 Aone 的样板工程存在。

数字化推动研发测试能效提升

专有钉的客户对数据极其敏感,数据安全等级极高,引流回放等的获取均存在天然屏障,如何获取尽可能多的脱敏数据,用到质量保障策略和方案中,是急需但必须谨慎对待的课题。

线上客户数据获取困难,但线下每一个功能用例的执行流量却蕴含着价值,流量基于 jvm-sandbox 获取。可以从中挖掘出sql执行、缓存使用等过程中的性能隐患;也可以沉淀出业务调用链路,基于此,结合故障等级定义、监控覆盖情况、预案覆盖情况,形成产品安全生产能力视图和工作台,直观、高效地开展安全生产工作。下图就是其中一条流量,存在缓存重复调用的性能隐患。

数字化推动产品体验提升

专有钉产品以客户端作为用户体验的前沿阵地,集团提供了较为成熟、丰富的移动端专项评测能力,我们在此基础上完善了整体调度、自动触发执行,以及自动生成竞品报告等能力,用竞品分析数据来推动客户端体验的提升。专有钉在 PC 端有着更加广泛的应用前景,科创端是当前国家大力发展的方向,而集团缺少相应的专项评测能力,我们采取了自建的模式,目前已具备端稳定性、端性能的PC端专项评测能力。

2  风险防控为基调

由于客户的容忍度低下,交付周期又极短,无法通过长时间的灰度或者靠出现问题后做改进的方式来提升产品稳定性,而必须在转交付前做好充足的测试、防控工作。

高可用测试防控稳定性风险

阿里云飞天底座相对成熟,但云原生不同,商用刚开始,尚未经受过磨炼,在交付前

必须进行高可用测试。这里要给阿里云 ADP 团队做个广告,他们已有相对成熟的平台来进行中间件的高可用测试,业务团队只需整理出基于业务的测试场景即可。

故障演练防控安全生产能力不足带来的风险

最理想的状态是在每个版本转交付前,将增量业务的故障等级定义做完善,同时梳理出增量业务的全链路,并进行故障演练,推动完善安全生产能力,包括监控、故障降级/恢复预案、强弱依赖治理等等(当然现实比较残酷,项目周期过于紧张,无法每个版本都进行常态化演练)。专有云上缺少免费的演练平台支持(富裕的可以参考下AHAS),我们采用专有化chaosblade的方案来实现能力,同时搭建平台用来沉淀演练场景,便于常态化高效执行。

容量规划防控机器资源风险

专有云上的容量规划完全是理想很美好,现实很残酷的工作。最早做容量规划的时候,过于单纯,将“具备线性扩容”能力认为是云上机器的标配能力。但现实十足的打脸,实际测试下来完全不具备线性扩容能力,这导致在实验室环境测试下来的容量需求,做推算后和实际不符,必须在每个专有云环境下做真实的性能压测,成本和可行性都备受挑战。当前虽然用了各种算法来做尽可能接近的估算,但依然无法减少真实压测这一环节的资源消耗。

项目研发过程质量风险管理

基于质量、风险数据,结合标准化的研发、交付、服务流程,制定了全生命周期软件质量分体系,覆盖了版本研发阶段、交付阶段以及上线使用阶段整个生命周期,分成准入准出标准和质量分两个载体。当前版本研发阶段的质量分和标准相对成熟,质量分用于事后总结,做后续版本的问题规避,而标准则代表着能否进入集成回归,能否转交付。

要达到标准,获得质量高分,均是有前人总结的方法论,结合这些方法论,并融合质量分数据现状,“在合适的时机智能化地提供解决方案,规避风险”,这是当前建设中的质量风险管理能力的目标。

3  研发效能做加持

2年,我们一直在为业务奔跑,但只要有间隙,提升研发效能必定被提上日程,因为我们坚信这是提升幸福感的出路之一。

自测工作台提升自测效能

要做好开发自测,首先要做的是联合开发,跟PM争取到固定的、合适的自测时间。我们提供了开发主动要求的功能自动化、测试用例,同时提供了专有云下的服务链路调试、版本前后链路对比、测试数据工厂、服务MOCK、基于流量数据的性能隐患识别、性能问题初步筛查等增值能力。“越早发现 bug,修复成本越低”,这乃亘古不变的道理。未来要思考的是,即使自测时间被榨干,也能在提测前充分自测。

分层自动化提升测试效能

自动化从来没有像当前如此被需要,测试团队需要,研发团队也需要,交付团队更需要,根本还是业务特性和当前所处阶段决定。互联网产品搬的迭代周期,军工级的产品品质要求。通过自动化做越多的内容,就有越多的人力出来覆盖那些原本无人力、无技术覆盖的部分。自动化测试我们认定分层的理念,不同层就应该用合适的自动化手段。

专有云服务端低代码自动化平台具备支持 LWP、HSF、HTTP接口测试的能力,同时能支持服务端SDK的自动化测试。之所以叫“低代码”,是因为这个平台从孕育开始(在宜搭出现之前)就开始秉承“低代码”的理念,让所有想做接口自动化的同学能上手,无关编码能力,目前提供了简单配置实现、流量自动生成两种用例生成方式。下图是配置页面:

客户端不仅采用了 UI 自动化做端到端的功能覆盖,同时对 JSAPI、端上 SDK支持自动化测试。UI自动化还需要考虑一码多端适配,即一套代码能在不同的端稳定运行,端越多,自动化发挥的价值就越显著,节省的人工投入就越可观。

自动化不仅仅体现在功能测试上,在性能测试、客户端体验专项测试,均是优先考虑通过自动化来实现。一站式性能测试平台实现从执行、结果分析、瓶颈定位、基线控制的闭环自动化。客户端体验的大多数专项测试均能自动触发执行,自动生成竞品对比分析报告。在产品版本质量保障过程中,自动化也无所不在,自动生成质量日报、自动生成转交付申请、自动生成版本质量报告、每天定时自动播报风险......

质量标准提升组织协同效能

钉钉希望携手合作伙伴一起投入数字化改革的浪潮中,随着生态开放,钉钉提供底层能力,让 ISV 在上面随意畅享,实现他们的梦想。梦想的实现不能务虚,而是需要实实在在的协同机制、约定来保障,质量就是所需要保障的其中一块。专有钉的开放平台上连接了数千个 ISV 产出的应用、数量庞大的 SDK 和 API,为了保护自己,也更好的协助 ISV 提供高质量的产品,测试团队制定了ISV 产物的质量准入标准,同时逐步将我们用的成熟的测试能力提供给 ISV,让质量保障更加的容易,更加的公平。

结语

专有钉产品当前的质量保障体系势必需要应对更深层次的挑战,以持续保障我们的专有钉以军工级的质量来帮助到我们的客户,始终让体系的名字“定坤”实至名归。

原文链接

本文为阿里云原创内容,未经允许不得转载。

做ToB软件质量保障的这两年的更多相关文章

  1. 软件质量保障初探_Chris

    关于软件质量保障的体会 首先,软件质量保障的重要性不言而喻,书中说软件质量体现在以下方面 软件开发过程的可见性 软件开发过程的风险控制 软件内部模块,项目中间阶段的交付质量,项目管理工具的因素 软件开 ...

  2. 使用nginx做为静态服务器--监听两个域名配置

    #user  nobody; worker_processes  1; #error_log  logs/error.log; #error_log  logs/error.log  notice; ...

  3. List中的Contains方法内部其实是用对象的equals方法做比较,所以如果比较两个类就重写类的equals方法即可;而Set是调用equals和hashCode

    public class Person { private String name; private int age; public String getName() { return name; } ...

  4. 质量保障&&质量体系建设

    一.质量保障 先引用一段 百度百科 上对软件质量保障的解释:软件质量保障是建立一套有计划,系统的方法,来向管理层保证拟定出的标准.步骤.实践和方法能够正确地被项目所采用.软件质量保证的目的是使软件过程 ...

  5. 异步编程系列第05章 Await究竟做了什么?

    p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...

  6. Android APP 两种用程序拨号的方式

    想在APP中添加一个拨号功能该怎样做呢?Android提供了两种方式,一种是ACTION_CALL方式直接拨打,另一种是ACTION_DIAL方式打开系统的拨号界面. 下面我们来做个小例子 首先需要在 ...

  7. [转]关于AS3 Socket和TCP不得不说的三两事

    磨刀不误砍柴工,让我们从概念入手,逐步深入. 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...

  8. 两个list<object> 比较 得到相同数据 差异数据

    package com.lizi.admin.utils.contrast;import java.lang.reflect.InvocationTargetException;import java ...

  9. [Node.js] 使用node-forge保障Javascript应用的传输安全

    原文地址:http://www.moye.me/2015/12/19/protect_jsapp_tsl_by_using_node-forge/ 引子 半年前的最后一次更新(惭愧  ),提到了对称与 ...

  10. tomcat6 使用comet衍生出的两个额外问题

    开发了一个轮询推送功能,网上也有很多文章讲这个就不说怎么做的了.现在发现两个问题: 一:就是登录进主页面后,由于浏览器在不停轮询,导致后端认为前端一直在操作,而正常设定的session超时就跳转到登录 ...

随机推荐

  1. socket本地通信服务端

    #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <str ...

  2. FFmpeg命令行之ffmpeg

    一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...

  3. CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

    前言: 在 CYQ.Data 版本更新的这么多年,中间过程的版本都在完善各种功能. 基于需要支持或兼容的代码越多,很多时候,常规思维,都把相关功能完成,就结束了. 实现过程中,无法避免的会用到大量的反 ...

  4. 记录--不定高度展开收起动画 css/js 实现

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 不定高度展开收起动画 最近在做需求的时候,遇见了元素高度展开收起的动画需求,一开始是想到了使用 transition: all .3s; ...

  5. 重新记录一下ArcGisEngine安装的过程

    前言 好久不用Arcgis,突然发现想用时,有点不会安装了,所以这里记录一下安装过程. 下载Arcgis 首先,下载一个arcgis版本,我这里下的是10.1. 推荐[ gis思维(公众号)],[麻辣 ...

  6. [.NET项目实战] Elsa开源工作流组件应用(三):实战演练

    补充 之前的文章简单介绍了工作流和Elsa工作流库,这里再补充说明两点 工作流的使用场景非常广泛,几乎涵盖了所有需要进行业务流程自动化管理的领域. 学习一个开源库,最简单的方法就是看源码,Elsa的工 ...

  7. 快速上手系列:XML

    一 xml 简介extensible markup language :可扩展标记型语言(1)标记型语言:html 也是标记型语言,即使用标签来操作(2)可扩展: 1)html 里面的标签是固定的,每 ...

  8. KingbaseES V8R3 集群运维系列之 -- network_rewind.sh磁盘检测功能详解

    ​ 案例说明: 在KingbaseES V8R3集群,network_rewind.sh用于当节点数据库服务down时,实现数据库服务的自动恢复功能.在network_rewind.sh执行时,会对数 ...

  9. MySQL和Oracle里面SQL转换

    oracle环境有关sql的注意事项 比较特殊的: 1. 原有 MySQL字段设置为 not null default '' 原因: ORACLE 数据库 不允许存空字符串, 认为它跟null是一样的 ...

  10. SQL CREATE INDEX 语句- 提高数据库检索效率的关键步骤

    SQL CREATE INDEX 语句 SQL CREATE INDEX 语句用于在表中创建索引. 索引用于比其他方式更快地从数据库中检索数据.用户无法看到索引,它们只是用于加速搜索/查询. 注意: ...