Tencent的TAPD是吸收了XP+SCRUM+FDD三者特点的并行迭代开发模式,涉及范畴包括敏捷项目管理和敏捷软件开发。
一、敏捷项目管理:
(1)Iteration
软件开发模型经历了从瀑布到螺旋再到敏捷的过程,迭代不是敏捷独有的创造,无论在RUP还是在MSF中迭代都是其核心特性之一。而在Tencent特别强调的是并行迭代,即多个版本并行,最大程度发挥资源的效率。
Release(发布)可理解成当实现的产品Feature累积到一定用户价值时的正式发布,它是比Iteration更大的概念;Iteration(迭代)是在固定时间内开发Feature的过程,Release一般包括多次Iteration。
(2)TimeBox
TimeBox(时间箱)反映了敏捷开发的节奏,即在固定时间内实现不固定特性的周期,抛开需求定义阶段,从设计-实现-测试到部署,在Tencent一般一至两周时间居多。
(3)Planning Game
对敏捷的一种常见误解是不要计划,其实在敏捷的体系中不仅强调计划,甚至区分Release计划、Iteration计划和Task计划等多种不同粒度、不同时长的计划。Planning Game突出的是让用户代表参与,由用户代表评估UserStory/Feature的优先级,开发人员评估任务的开发时间,由用户代表+项目经理+核心成员三方共同排序、组合,确定本次迭代计划需要实现的Feature List。在Tencent用户代表就是产品经理。
(4)IterationPlanningMeeting
IterationPlanningMeeting就是Planning Game实现的管理形式,通过会议沟通达成。
(5)Stand-up Meeting
团队成员围成一圈,逐个说明3个问题:昨天做了什么,今天计划做什么,有没有困难并计划如何解决。对Team而言这是检查进度、快速调整非常有效的形式,在Tencent这已经成为大家每天早上的固定习惯。
(6)ShowCase
提交测试前由开发人员演示实现的功能,产品经理到场Review是否符合当初的设想,避免接近发布时才反馈。
(7)Retrospect
每个迭代结束后,项目经理组织或轮流组织所有Team成员共同回顾本次迭代的得与失,整理Well/LessWell,因为敏捷的团队是自我反省、持续调整的团队。
二、敏捷软件开发:
(1)Story Card/Story Wall/Feature List
StoryCard是XP中推荐的需求定义方法,要求符合Invest和Moscow原则;StoryWall则用于跟踪StoryCard的变化状态,而FeatureList是Tencent一直沿用的需求表达形式,在Tencent的TAPD工具中已经实现了类似ThoughtWorks 的Mingle的StoryCard管理功能,对于需求跟踪而言这是不错的方法,一目了然。
(2)Refactoring
相信我们都听过这句话:好的代码不是设计出来的,而是重构出来的。
(3)TDD
“测试驱动开发”在Tencent执行地并不太好,Tencent的产品以Web形式居多、业务逻辑相对简单,C++下的单元测试有些力不从心。相反自动化测试在Tencent比较盛行,因为有测试部门专门的自动化测试Team在推动,而且链接的是正式生产环境,可以即时反映产品当前的状态。
(4)Pair Programming
理论上结对编程可以提高代码的质量,而且并不会降低开发效率,但Tencent的业务繁忙,资源上不允许两人结对。
(5)CI
持续集成可以降低发布前集成阶段的难度与成本,Tencent的自动化构建系统推行的比较早,覆盖了大多数产品,而且正在朝自动化构建-自动化测试-自动化发布三者协同的目标迈进。
(6)灰度发布
灰度发布是Tencent的又一创新,它将产品试用扩大到海量用户一端,在小范围及时吸取用户反馈,分析用户行为和喜好,持续修正自己产品的功能体验。