查看原文
其他

研发效能工具的破局:产品化与场景化

The following article is from VCEC Author VCEC


腾讯平台与内容事业群工程效能平台部研发流程协作平台中心负责人张力柯带来了《研发效能工具的产品化设计与重构》的精彩演讲,他分别从自动化测试、Devops流水线、项目管理三个领域来探讨如何以产品思维看待互联网研发效能工具,以及如何将现代软件架构思想用于对应工具的重构开发,从根本上解决对应领域中的一些常见痛点,如自动化测试中的持续稳定,流水线的人工介入,及项目需求定义扩展性和实施跟进。



1

国内工具平台的困惑

 

中台这个词也引起了一阵热烈地讨论。当时说到国内的一个现状,每个团队员工都有很多工具(烟囱式的工具),如果一个像腾讯级别的公司要去梳理的话,可能会高达数百个,然后出现说要做中台,这些都交给中台处理。

 

 

1、研发平台:硅谷VS国内


国外对于数据的监控是一个很平滑很深入式的过渡,并没有人对其中有什么争议,包括说怎么去做。但是国内对这个比较纠结。但是在具体的落地场景中,发现有些问题可能是用户习惯、公司习惯的问题。国内一些做事的方法跟国外有比较大的差别,也许是这些原因造成了我们在国内的一些困惑。因为国外比较很细分而且比较专注,要用什么工具,中间不会需要对接很多,但是国内不一样。

对国内的现状,不说优劣,确实效率非常高,在一些大事情的时候,有时候可能会说国内的一些问题比如说现场监控不完善,但是真正去看,不管是腾讯还是阿里,监控是非常完善的。


实际上我们真正要面对的是针对这种情况我们怎么去做自动化测试,怎么去Demo以及怎么去做研发项目管理。

 

2、破局:技术产品思维


其实以上的情况在国外也不是没有过,美国硅谷技术的发展也不是一蹴而就的。以亚马逊这个工程为例,他们一开始说所有社会继续使用API,东西多了之后,各个服务全部API提供一堆,出现完全混乱的局面。后来几年,最大程度减少耦合,最大程度去减少接入成本,最大程度去避免实现的细节,这是它的设计理念。


放到一个产品的层面去说,用户希望最快完成工作,而且用户一旦形成习惯,这个习惯难以改变。至于技术层面怎么去处理这些异常,怎么去扩展,怎么去提供稳定性,就是后面要去做的事情。这个概念其实是老生常谈的,但是实际上做工具的时候,工具品牌思路未必能真正扭转过来。


Kafka的设计理念

  • 最大程度减少耦合
  • 最大程度减少接入
  • 最大程度避免细节

产品层面
  • 用户:最快完成工作
  • 用户习惯一旦建立,不可改变

技术层面
  • 异常处理(用户能够处理或清楚问题在哪里)
  • 扩展性:容易扩张,功能通过插件来实现
  • 稳定性(底层实现对用户透明)

 
2
从自动化工具到云游戏AI服务
 
1、自动化测试的困局:理想与现实

人们从代码生成自动化测试的代码,就是一个Hello World 和一个国家型东西的差别。学术界有很多东西经常是没有问题,做到80%都可能是可行的,问题就在于产品化的最后20%难度比很多人想象的要大得多。

2、自动化测试的困局:传统方案的技术问题

要用产品化的思维去做效能的工作。不管是自动化脚本、自动化SDK,抑或是自动化框架,有其各自的特点,但是也有各自的问题。比如自动化框架,异常问题处理,也是一个要去考虑的问题,这些工具实际上是把工具实现平台化、产品化的时候,比方说我们现在建立一个新的手机应用,需要考虑招聘人选,有价值的事情,以及针对问题的一些预案。 
 
3、需要解决的问题

脚本碎片化
  • 有多少测试脚本?
  • 多少测试流程?
  • 每个脚本谁在负责?
  • 每个脚本的成功率有多少?

人员分工
  • 定义测试案例(TM) != 设计测试流程(SDET)!= 执行测试流程(QA)
  • “谁开发谁负责”Feature Owner => “谁测试谁负责”(Test Owner)
  • 自动化(执行自动化) != 测试 (发现问题)

投入产出性价比
  • 测试脚本是case by case,无法复用
  • 在测试之外的领域?

异常问题快速处理
  • 没有100%稳定可靠的自动化
  • 未定义弹框?
  • 识别失败?
  • 游戏更新?
  • 处理时间的统计与优化?

4、向互联网产业借鉴O2O的启示
 
5、O2O与自动化测试
 
6、重定义自动化平台

数据驱动
- 以流程标注代替流程脚本
 
定义自动化流程DSL
  • 便于维护
  • 便于修正(结构化数据)
  • 图灵完备,可完成复杂逻辑
 
自动化决策后端服务
  • 后端执行,便于维护升级
  • 便于调试
 
轻量级客户端执行工具
  • 只负责执行后端指令
  • 简化逻辑,提高稳定性
 
AI驱动
  • 混合方案的图像识别服务
  • 自动探索AI
 
基于微服务的整体后端架构
  • 面向大规模自动化服务(云游戏)
  • 针对多业务的自动化中台
 
7、SMART平台架构一览

8、基于场景 vs. 基于流程
  • 基于场景更简单、更适用、更灵活 

 
9、流程标注
  • 解决流程问题就需要靠标注来自定义流程
 
10、数据驱动的流程定义: JSON DSL 

11、流程监控 

12、基于SMART的自动化实现:异常处理
 
……

WHY/为什么能解决碎片化?

碎片化成因——
  • 脚本开发工作量大,重复性高,最终交由外包开发
  • 外包开发沟通不畅,代码抛弃率高,最终多种“魔改”
  • 测试开发缺乏脚本执行的实时反馈和信息
  • 无法根据大规模应用下的问题进行迭代改进
  • 结果=>测试开发本地一切美好,一旦推广则失败

解决——
  • 抛弃脚本,外包只负责标注
  • 标注是业务熟悉问题,自动化实现是开发设计问题
  • 交付自动化引擎,而非业务内容
  • Design Automation as A Product

 
3
从开源工具学习
 
1、Why Devops is difficult?
 
2、Devops: With/Without the right tool
 

3、Learning From Jenkins
  • 开源
  • 很方便安装
  • 扩展性强

  • UI陈旧
  • 流水线定义文件需要特定语言
  • 扩展性强,但耦合紧密
  • 本地构建,构建环境维护成本高
  • 需要专业人员规划执行

  • 提供基本能力(小米加步枪)
  • 对人的要求高(高水平队伍)

产品视角:
  • 很好的技术工具
  • 不算出色的技术产品
  • 如何规范?如何一目了然?
 
4、Learning From CircleCI
  • 现代风格UI
  • YAML风格定义
  • 托管服务,直接对接代码仓库
  • CI过程统计/可视化

  • 较好的使用体验(现代化装备)
  • 对使用者要求略有降低(了解yaml规范)
 
产品思考:
  • 如何进一步降低学习成本?
  • 仅仅是CI?

5、Learning from Azure Devops
  • 完善的引导教程
  • 更丰富的自定义操作
  • 更具引导性的流程设计

产品思考:
  • 体验的易用性
  • 功能的丰富性
 
6、工具 vs 产品 


4
项目管理:敏捷开发与Devops

1、从敏捷开发到Devops
 
2、Devops时代的变化
 
敏捷开发时代
  • 项目规划形式
  • 需求开发节奏
  • 版本规划方案
  • 引入迭代周期概念
 
持续集成时代
  • 使用CI工具如Jenkins
  • 主要是自动构建验证
  • 不一定引入单测保障
  • 发布环节主要靠手动

Devops时代
  • 从需求创建到上线全流程覆盖
  • 各环节多角色参与
  • 需求从提出到上线全链路多角色跟进
  • 需求完成=需求上线稳定运行
  • 研发数据可视化
 
3、软件研发项目协作产品的演变
 
4、项目协作产品:JIRA的设计

5、项目协作产品:半成品的Phabricator
  • 基于图模型的数据关联

Pros:
  • 以代码为核心
  • 代码合入则任务完成
  • 需求-代码完美关联
  • 基本的需求迭代管理

Cons:
  • 未尽全功的项目管理
  • 未尽全功的扩展框架
  • 过时的UI设计
  • 过时的单体结构

适合团队:
  • 互联网开发团队
  • 较好的二次开发能力
  • 需要跨团队需求协作
  • 需要一站式工作平台
  • 需要内建的执行规范
 
6、产品设计出发:聚合与解耦 
 
7、Last Words
 
作者介绍
张力柯,腾讯平台与内容事业群工程效能平台部研发流程协作平台中心负责人
毕业于美国德克萨斯大学圣安东尼奥分校并获得计算机科学博士学位,曾先后在美国微软、BCG、Uber及硅谷多家创业公司担任过研发工程师、产品主管及公司创始人等多个角色。
2017年归国后在腾讯创立 Turing Lab,推进人工智能在游戏AI自动化、图像分析及RPA方面的落地。当前负责腾讯PCG工程效能平台部社交产品效能中心,致力于面向多产品多团队的大规模研发协作平台设计与实施。


——   THE END(获取PPT见置顶留言)   ——
参考:

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存