【连载3】对产品开发和测试的思考

< 上一篇 | 连载目录 | 下一篇 >
我和《僵尸榨汁机》的故事,系列连载(3)

《僵尸榨汁机》产品是基于 Zombie Catchers上的二次开发,整个项目开发周期在4个月左右,从2015年10月到2016年1月,团队成员7人。

对于一款休闲游戏的修改,这个人员配置和周期应该是不差了,但是整个开发过程是困难重重。首先公司当时的业务重心不在这个项目上,各方面资源投入有限;其次主程因为个人原因,在项目刚开始开发阶段就离开了公司,新来的小朋友完全不在状态;另外之前完成的一个项目顺风顺水,所以个人对于这个项目有些轻敌。

因此项目开始阶段,开发进度非常缓慢,让人一筹莫展,每天都感到很焦虑。后来在10月中的时候,进行了一次项目团队重组,补充了精干人力,总算有了明显的起色。但是为了补上之前拉下的进度,每天都加班,有很长一段时间都是工作到11点12点,甚至更晚。

从这个项目上得到的血和泪的教训,不得不让我去好好整理思路,重新思考产品开发过程中的关键因素。很多问题可能会具有普遍性,事后诸葛亮般的提了很多应对措施和建议,希望以后能够少趟一些这样的坑。

【连载3】对产品开发和测试的思考_第1张图片

产品主要里程碑和修改内容

时间点 主要里程碑
2015年8月 合同签署,收到代码交付
2015年10月 人员变化,团队重组
2015年11月 调整项目计划,重新确定上线日期
2016年1月12日 iOS上线
2016年1月15日 获得App Store首页推荐

修改内容:

游戏原先的核心玩法、美术、音乐音效已经非常不错,所以修改内容集中在提高留存、增加付费、本地化这3块。

对于僵尸战斗:增加沼泽地图BOSS和BOSS飞碟,目的是增加游戏的玩法,避免玩法过于单一,给玩家带来疲劳感,提高留存;增加了HP,调整僵尸攻击力,调整了道具和服装效果,从而给付费增加了空间。这块修改从玩家反馈来看,是非常成功的。

为了增加长线留存,增加了僵尸养成系统、僵尸工厂系统,玩家可以养成自己的僵尸,升级发展僵尸工厂;对应的增加了召唤僵尸功能,作为一个大的付费点。但是从实际效果来看,这块并不成功,后续的连载中会进行针对性分析。

本地化,主要是语言和各类SDK的替换,比如广告SDK,微信代替Facebook等。(版号规定之后,所有图片字都需要替换,这个简直没法活了……)

项目开发,总计代码近5万行;开发人均生产效率为200行/日;发现有效bug总计392个;每千行代码发现bug数为8个。开发效率还不错,但是bug偏多,这和团队重组后,没有太多时间研读代码有直接关系。


项目过程中主要问题和风险

01 项目初期预估

遇到问题:

  • 项目初期,由于没有专职的人全心全意在项目上,对项目难度和工作量,缺乏有效的评估,导致整个项目初始计划的过于乐观;
  • 结果在后续项目实施中,进度严重落后于计划,非常被动,不得不简化和删减了很多内容;
  • 实现新功能的技术方案,拖到项目上线前期,发现并不可行,只能匆忙调整技术方案,并延期上线。

应对措施:

  • 项目立项前或者实际执行前,应该有技术专家,对于项目难度和工作量做出合理估计;
  • 对于难度较高的功能,尽早进行方案的试验,验证方案是否可行;
  • 把大功能拆成低耦合的小功能点,降低实现上的风险;
  • 对于需要的资源,要竭力去争取。

02 外包质量监控

遇到问题:

  • 原主程离职后兼职做外包,导致交付的质量和时间点都难以控制。

应对措施:

  • 尽量使用全职员工,外包需要定期检查交付物和质量;
  • 一旦发生问题,需要提前考虑备份方案;
  • 人员稳定对于小项目至关重要。

03 产品缺乏试商用

遇到问题:

  • 为了赶苹果推荐位,内部测试后就直接上线,导致大量使用问题。

应对措施:

  • 加强内部测试人力和周期,尽量动员所有公司员工进行测试;
  • 选择一个小的区域,如港澳台地区,进行试商用(Soft Launch);
  • 也可以使用邀请码方式或者TestFlight方式进行封闭测试;
  • 确保在正式上线前,有足够的用户进行了较长时间的使用,数据都已调优。

04 第三方SDK更新

遇到问题:

  • 友商广告SDK更新后,莫名出现无广告卡死、广告无法关闭的问题,导致用户的很多差评。

应对措施:

  • 不要急着更新第三方的SDK,需要对方有成功案例,并稳定运行一个月以上再进行更新;
  • 国内SDK质量参差不齐,尽量选择大厂或者海外厂商的SDK。

05 单机版的破解

遇到问题:

  • 上线初期版本是单机版,破解和修改时间的问题在iOS也较多,远远超过我们的想象;
  • 存档没有联网保存,可能引起玩家存档丢失,从而导致不少差评。

应对措施:

  • 弱联网功能是单机游戏的必须要求,不管iOS还是安卓。本地加密,长期来看,还是有被破解的风险;
  • 弱联网功能应当尽早实现,避免在产品运营中进行联网改造。因为网络、手机、操作系统各方面原因,非常容易出问题;
  • 需要开发一个相对通用的后台,甚至自己的SDK,为后续游戏做好准备。(功能需求不高的话,可以考虑BaaS平台)

如何提高测试的质量?

01 墨菲定律

  • 任何事都没有表面看起来那么简单;
  • 所有的事都会比你预计的时间长;
  • 会出错的事总会出错;
  • 如果你担心某种情况发生,那么它就更有可能发生。

那么对于一个软件:任何可能出bug的地方都会出bug!
这不是在开玩笑,以我十多年软件行业的经验,这绝对是一个真理。
我们来看一下《僵尸榨汁机》初期的一些问题:

【连载3】对产品开发和测试的思考_第2张图片
僵尸项目初期的问题

02 测试质量的提高

质量意识:

  • 质量是所有人的责任,不只是测试或者开发的责任,要加强对工作完成(Definition of Done)的共同理解;
  • 任何代码修改,哪怕是修改已有bug,哪怕只改了1行代码,都可能引起新bug;
  • 任何交付前,都必须经过完整测试,哪怕时间再紧;

测试执行:

  • 测试工作需要尽早开始准备,甚至可以和开发并行;
  • 考虑不同的条件组合,尽量提高测试覆盖度;
  • 重要的测试用例,可以进行多次测试,便于发现偶发性问题;
  • 有效利用网上的工具,提高测试覆盖度,增强软件兼容性,例如:云测Testin,腾讯WeTest等;
  • 定义好回归测试(Regression Test),及早发现重大问题;
  • 开发有助于进行测试的功能或者小工具,提高测试效率。

测试管理:

  • 将测试工作分为不同级别,例如单元测试、集成测试等,合理分配好测试工作;
  • 使用工具进行bug跟踪和管理,责任明确到人,任何修改都必须进入系统进行跟踪,例如:禅道,JIRA等;
  • 联合开发对于测试中的重大问题进行分析,使用“5 Why” 方法,寻找根本原因,帮助提高开发的质量;
  • 对于上线后的重大问题进行分析,使用“5 Why” 方法,寻找根本原因,提高测试质量,持续改进。

人员配置:

  • 很多中小团队,都会忽视对测试人员的配置,觉得随便找人玩一玩就可以了,结果导致很多问题都无法有效测试到;
  • 测试人员必须专职,足够耐心和细致,非常熟悉游戏的各个细节;
  • 自动化测试环境目前比较缺乏,如果需要实现敏捷开发,提高交付效率,增加测试人员势在必行;
  • 看一下《梦幻西游手游》团队构成,23%的人是QA!
【连载3】对产品开发和测试的思考_第3张图片
梦幻西游团队构成

03 测试驱动(Test Driven)

  • 尽早得到市场和玩家的反馈,从而指导游戏的设计和开发;
  • 持续跟踪游戏数据指标,结合版本内容进行数据分析,总结规律;
  • 运用A/B测试和灰度发布,进行小规模的用户测试和对比;
  • 策划和设计,要考虑功能是否好实现、是否好测试,好的质量是设计出来的
  • 建立持续集成和自动化测试环境,进行每日构建(Daily build)。

写在最后

质量是产品的生命,需要通过开发和测试来保证。产品的质量是用户体验的必备要求,试问经常莫名闪退的游戏,你还会玩吗?

另外一点,工作中最重要的是考虑如何提高效率,而不是一味提高劳动强度(加班)。在工作过程中,要不断去学习和总结,提高自身的能力,并且掌握合理的方法,才能事半功倍,做出更高质量的产品!


参考资料

[1] 这样的工作流程让网易在14个月修复2000个bug
[2] 在游戏产品中使用敏捷方法

【连载3】对产品开发和测试的思考_第4张图片
2015年底的一张照片,每天都是这么过来的...

你可能感兴趣的:(【连载3】对产品开发和测试的思考)