演讲 | 蔡泸炜(宝宝巴士 CTO)
活动 | 又拍云 Tech Minds NO.08 福州场
整理 | 西北
又拍云主办的 Tech Minds NO.08 福州场,宝宝巴士 CTO 蔡泸炜作为嘉宾带来《宝宝巴士的工作流程和自动化》的分享,揭开宝宝巴士同时运营 150 款 App 的秘密。
蔡泸炜,宝宝巴士 CTO,资深系统架构师。主导并开发大型对日系统,2D 网游引擎,自动化模拟/测试引擎等,最早敏捷开发的推进者,崇尚开源、自动化及极简主义。拥有丰富的团队管理经验与扎实的研发技能的开发者。
宝宝巴士CTO蔡泸炜
宝宝巴士是一家提供智能早教产品的互联网公司,目前已成功出品 150 款 App、近 600 款儿歌和 50 集的动画片。
App Store 流量排行榜
2016 年 8 月 App Store 的全球公司流量排行榜,宝宝巴士仅次于腾讯、百度和阿里巴巴。
经过三年稳健发展,宝宝巴士每款产品支持 17 种语言,已覆盖全球超过 50 个国家,在东南亚、俄罗斯、美国、日本、阿拉伯地区都受到诸多小朋友们的喜爱。
宝宝海外市场发展情况
海外市场印尼发展最好,阿拉伯和阿联酋占有率也很高。
宝宝巴士拥有一系列用户体量巨大的产品,需要我们开发一套通用的标准化生产流程解决方案,支撑起庞大数量的产品维护和创新。
宝宝巴士研发SOP
宝宝巴士的工作流程包括选题、开发、用户验证、测试和发布上线。其中最重要的一点是:保证选题质量,后面整体的开发、测试和快速迭代才能高度适配。
如何选题?
首先由策划选定项目,产品体验组与策划 PK,选题是否符合问卷调查的结果,是否满足孩子和家长的实际需求等,经过严格的筛选,保证选题质量。
经历两轮敏捷开发升级后,我们现在的开发过程是策划先行,接着美工设计,最后程序员开发。这种方式可以保证程序员介入时,能够马上运作,并且和美工高效配合。
开发完成之后,签出版本,进行自动化测试,包括简单的 Monkeying 测试和闪退性测试,保证程序不出现大的异常,再将测试出来的产品,让美工、技术一起和幼儿园的孩子体验改进。我们对测试比较严格,从生产开发到测试,会限定三轮测试,一旦超过三轮,这款产品必须上线或者打回。
宝宝巴士产品结构图
从支撑产品的技术结构来说,“框架支撑”是 App 研发环节较为重要的一环,框架会开发通用的 SDK 套件如自媒体广告,游戏特效,同时联动工具组、自动化组进行配合,提供自动化测试、打包服务,形成一套标准的流水线。
宝宝巴士已开发了 200 多款产品,但是由于苹果不允许同时在市场上存在大量产品,我们现在市场上有 150 款产品,在高峰的时候包含 iOS、安卓、TV、桌面端 ( Window 和 Mac ),还有第三方游戏机等 40 多个渠道。
早期我们需要将产品分发到不同的渠道上进行下载,获取来源,判断哪个渠道效果最好。当时总共的渠道数有 40 个,语言数有 11 个,意味着宝宝巴士要出大概 60000 多个安装包。这时就需要合并部分长尾渠道,重点抓量大的前 15 名。同时语种进行优化,最小化差异包,只剩下阿拉伯包(文字左右字颠倒)和通用包的情况。后面,通过公式的进一步优化,优化的安装包在 150x20x(2~3) 个。
我们是如何完成周周有新品和月月有更这两件事情的呢?必须要有一个稳定,扩展性好,定制化强,可以支撑服务各种需求、多引擎,App 和渠道的工作流程。
我们会分两条开发线,一条新功能尝试线,一条全线升级线。首先,新功能尝试线会尝试某个新功能,并进行快速上线验证,并通过 A/BTest 观察发布出去的产品效果,如果稳定运行并且效果正向,那么我们再合并到真正的全线升级当中去。其次,全线升级线完全进行每月稳定开发、上线,保证市场版单的活跃。所以实际上是的两条路径并行,达到快速配合。同时技术团队要求每年技术实力、工作效率提升 20% 以上,快到让别人根本没有办法追上我们。
宝宝巴士团队架构
宝宝巴士的技术团队分成游戏团队、应用团队和服务团队三个。
游戏团队分成 2D 和 3D 团队,下面有四个组,第一个是新品组,只负责持续开发新品,后面的操作由其他的组完成,如:产品加国际化语种,产品再更新等。第二个是框架组,负责联动其他部门,进行接下来的测试、发布等。第三个是插件部门,负责下一版本内容集成,类似于新功能组或者效果组。第四个综合组负责这三件以外的事情,比如说打包和更新。
应用团队即家长线团队,包括应用产品组和微信组。应用产品组主要服务于家长群体,制作宝宝巴士大全产品,微信组负责辅助账号的建立和家长用户的沟通。
服务团队分为服务端团队和工具团队,工具组包含了四大块业务,第一是基础工具的研发,通过流程定制生成工具;第二插件组负责如 IDE、3Dmax、Eclipse、Sublime 等插件;第三数据组负责数据统计,并结合第三方数据统计平台进行整合分析,推导出有效结论。第四自动化组负责自动化开发、自动化测试、自动化发布、自动化运维、自动化模拟。
宝宝巴士制作流程经历了三代,第一代是在 2013 年之前,处于市场红利期,我们推出的产品,在移动早教行业是比较高端的,市场会主动帮你推荐给用户,带来流量。但 2013 年以前 iOS 和 Android 是独立开发的,且 Android 使用微云引擎开发成本高昂,所以团队基本上只有开发和策划。当时就已实现周周有新品,我们需要考虑加速整个产品线流程。
我们的做法是:策划八款产品,iOS 和 Android 两个部门同时接单各接四款产品,同时开发。三个月之后,两组将开发出来的产品交叉,iOS 去翻译 Android,Android 去翻译 iOS,以保证最快的开发速度。
我们应该算是比较早使用 Lua 的,大概 2011 年下半年,我们已经开始用 cocos2d- iphone 做游戏,尝试整合 Lua 并制作,只不过当时的游戏是网游。第二阶段,从 2014 年开始,我们 iOS 和 Android 做平台合并,同时邀请专家给全团队进行敏捷开发培训,并定制专属于宝宝巴士的敏捷开发流程。
第三个阶段,我们正在进行多维孵化式开发。我们并没有所谓的真正的组,一个程序员他既可能属于技术部,也可能属于某个孵化项目组的成员。一个阶段可能我作为程序员要和美工、策划一起完成工作,下一个阶段位置就变了,我马上要和另外的程序、美工完成工作,依造团队的需求来调整工作。在进行快速孵化的同时,敏捷开发也进行了全面升级。宝宝巴士会开发供策划使用的 UI 定制编辑器,程序员可以同步和美工写代码。当美工画出线框图之后,程序员假想,这是熊猫或者其他动物,再写入逻辑,后期美术程序进行迭代和整合,形成真正呈现给大家的产品。
框架组构建出整个框架体系以及一整套流程之后,宝宝巴士 2D 的开发人员只要懂得一门开发语言,如 Java,经过三天就可以上手进行游戏开发。复杂如 Unity3D,大概经过十五天培训也可以进行开发。这其中我们会通过一对一、结对编程、视频教程、自动化开发工具的使用进行人员培养。
这里需要强调最小化编程思想,程序员仅仅需要去做实际业务开发,不需要关注其他事情。做安卓开发如启动、出错定位和打包缓慢,调试麻烦,很多时候老的机器运行效率极低。宝宝巴士有自己高度定制的模拟器,能保证快速的开发,不用对修改的产品代码进行再编译,再打包,刷新 1 秒内立刻功能就出来了。
U3D的整体流程
以 U3D 开发为例,在完成策划内容后,我们会邀请体验组和一位具有决策权的产品经理启动判断策划内容是否优质。
如果策划通过,会进入到美工的简单设计和 Demo 的制作。Demo 制作完会去验证,如果验证通过,则进行详细的功能开发。待开发到大体完成,进行内测,之后会同步加入音频、上线文案、美宣等。2D 的业务流程也类似。
全线升级是最复杂的,在开发完成后,会产生五六千甚至七八千个包。全线升级团队会使用自动化工具进行出包,并且实现隔夜出包(自动化测试在白天完成,晚上能够把通过的安装包全部打出来,第二天交由测试组进行人为的功能性测试)。综合组即全线升级的后期负责团队,将打包工作交给机器完成,配合市场进行产品对接。
全线升级工作流程
家长线只有一款重头产品-宝宝巴士大全,所以家长线这块我们会直接采用 AB 组同时进行,增加工作效率。同时每周为产品迭代周期的快速迭代,持续集成。
家长线开发流程
由于游戏的第三方框架研发速度不够快,且早期它不支持物理引擎、骨骼动画、高低清图智能处理、图像压缩、音视频压缩等功能,且不同设备的支持也不完备。我们就独立的对基于 QuickCocos2d-X 2.1.4 的版本进行封装,编写宝宝巴士需要的逻辑内容,改写底层业务,形成了宝宝巴士独有的一套 1.0 的游戏引擎。
要实现在屏幕上渲染一个居于屏幕正中央能够对点击产生反应的精灵,我们采用极简标签化设计及链式设计方式之后,能够将采用传统编程方式 cocos2d-x 需要的 15~20 行代码精简成 1 行代码。
2.0 的架构的升级,从前者如此简易升级到后者,iOS 也是类似的。
构架升级前
构架升级后
自动化打包是自动化发布的一个环节,宝宝巴士现在每个月要发布几千个安装包,我们使用 App-admin 的产品后台,自动同步产品后台中的产品信息进打包配置环境,根据需求选择打包引擎、渠道,配置插件。
在打包时,它根据游戏框架版本会有既定的模板,进行模板的快速复制,修改,完成打包。并且打包机制已经实现了分布式接单,可以自由配置物理机器,如:1 台 Mac Pro,1 台 Mac Mini,再加上几个 Windows。 自动打包特点: 1.打包人员一键点击打包; 2.打包完成还可以一键上传到共享方便与测试的沟通 3.统一打包模板和易于找到出包位置,调试方便
分布式接单特点: 1.有机器就可以介入接单打包 2.打包机器自由竞争,任何一台电脑出了问题不会影响其他电脑继续打包 3.接单电脑拔插式,减缓负荷 4.方便调试,不影响正常出包
使用 django xadmin 制作的界面,在打包的时候出现的错误都可以捕获,并且显示在对应的文件和运行界面当中。
打包日志页面
产品的基础配置需要怎样的插件可以通过下图所示界面进行选择,比如百度渠道要有百度广告的插件。如果这款游戏支持相册、摄象头,也会在这边进行配置。配置完成之后,就可以出包。现在安卓的打包速度平均值是 25 秒,极限出包虽然速度快但它存在不稳定因素,所以我们取消了极限出包。iOS 的打包速度我们会控制在 60 秒左右。
打包配置
Tech Minds 是又拍云主办的高端技术领导人私享会系列活动,每个月在全国不同城市巡回举办。为了保障私享会的分享效果,参会人数控制在 15 人左右,邀请国内优秀互联网企业的 CTO、技术 VP、运维总监及有技术背景的 CEO 等技术领导者齐聚一堂,彼此交流与分享,共同打造一场围绕技术话题的交流与学习的全干货的社交聚会。