1         框架结构

1.1         产品

TAPD采用FDD模式开发,FDD即特征驱动开发。

FDD的核心是面向产品的功能点,但这个功能点是从客户角度出发的,并不是从系统角度出来的。功能点是用一个短句描述出一个业务需求,而这个业务需求的粒度是按开发时间来衡量的(一般不超过两个星期)。

特征与用例的相似之处是,两者都可以用短句(动宾短语)来描述;两者的不同之处在于,用例用UML的用例图来表示,而特征是用四色原型(类图)来表示。

注意,TAPD只是参考了FDD,不是完全的FDD。所有的开发团队都是由产品经理所归纳出来的产品特性去驱动整个产品的研发。

产品经理这个角色有点Scrum的Product Owner的味道。但产品特性和backlog相差甚远,因为产品特性只是一个动宾短语,而backlog却是一个完整的故事(story),包括一系列的元素:

  1. ID(统一标示)
  2. Name(名称)
  3. Imp(重要程度)
  4. Est(初始估算)
  5. How to demo(如何做演示)
  6. Notes(其它)

1.2         项目管理过程

TAPD参考了Scrum,项目管理过程同Scrum的过程比较类似,包括每天的晨会、迭代、timebox、每个迭代之后会有showcase、回顾总结等。

Scrum中的timebox是指迭代要有固定的时长,不能超过六个星期。

1.3         开发实践

参考了很多XP的实践,因为XP的完整实践比较“理想化”,所以只采纳了某些部分,比如自动化测试和持续集成。

2         框架实现

2.1         故事墙

把正在开发的系统功能与在白板上,让团队所有成员都知道大家在做什么。

写在白板上比用Excel或者其它工具管理好,因为写在白板上让人感觉更紧迫、更正式、更一目了然,有一种别人在监督、在注视的感觉——增加适当的压力并不是坏事。

2.2         每日晨会

晨会上每个人的发言不超过3分钟为宜,整个会议15分钟为宜。这是按照5人团队来制定的。如果团队人数超过5人,甚至达到10人、20人,那么建议成立两个团队。

Scrum的晨会是站立着开的,一方面是为了不让会议拖沓,另一方面也是为了让大家注意力集中(如果坐下肯定有人会顺便打开电脑,然后开始上网)。

在每天的晨会上,团队成员每人都叙述对昨天的工作做一个总结,总结由Scrum Master记录在白板上。

总结的内容包括:

  1. 工作完成的情况。只需要选择以下状态即可:未开始、正在开发、已完成。
  2. 工作遇到的难点(如果未按时完成);工作中值得注意的地方(可以是系统框架的体会、业务的特殊性、封装了哪些公共功能等)。
  3. 今天要做什么(如果昨天的工作已完成)。

当某人遇到问题的时候,其他成员如果有解决办法或者建议,那么可以“举手”,但不用说出解决的办法,由Scrum Master安排两人结对编程。

2.3         时间盒

一切任务都有timebox。Scrum的时间盒最长可以达到6个星期(一个半月),感觉太长了,建议时间盒按照FDD的建议,不超过两个星期为宜(半个月)。

2.4         一个完整的迭代过程

包括分析、设计、开发、测试和发布五个过程。

  1. 分析过程决定了本次迭代过程的工作目标(系统要达到什么效果)、工作内容(FDD的功能点)、发布日期。
  2. 设计过程采用快速原型法。快速原型法对业务复杂度不高,着重客户体验的项目有着很好的效果。
  3. 系统后台(业务模型)的设计,无论是采用数据库模型还是领域模型,都由主力程序员/系统架构师负责。之所以要主力程序员全程设计,是因为他要走读(review)其他人的代码,在没有理解设计思路的情况下,是无法review的。而且成员的水平和风格参差不齐,每个人都参与设计,最后一定会乱套。
  4. 做好测试计划,除了猴子测试,还要有业务模拟测试。
  5. 提倡单元测试,为以后自动化测试做准备。
  6. 考虑到TDD太复杂,需要面向接口编程的思想,以及转换原来的编码思想,并非短时间内能改变,所以不强制使用。
  7. 使用持续集成。持续集成除了降低代码合并的成本,还保障了提交上来的代码至少在语法上是可以通过的,不会导致别人下载了新版本的代码之后编译失败。

其中分析、设计、开发、测试、发布这五个过程可以内部再迭代,而且这五个过程不是分阶段开展的,即不是分析完了之后才设计,全部设计完了才开发,开发结束了才测试,测试通过了才发布。而是边分析边设计——在业务不复杂的情况下,这是可行的——边设计边开发,开发完一个功能就测试一个功能,同时开发下一个功能。

考虑到小团队不会配备专人测试,所以可以直接让客户进行测试,即测试与发布(不是最终发布)合并,由客户决定是否测试通过(最终发布)。

2.5         灰度发布

发布并不是一口气全面铺开,所有用户同时使用,面是先挑出有代表性的用户试用。

2.6         迭代总结

每一次系统发布的时候都会有一个总结,把做得好的发扬光大,做得不好的注意改进。总结是团队所有成员都参加,并且需要记录所有发言,会后发给每个人。

2.7         用户研究

这是腾讯,或者说是网站建设的独有特点。

《腾讯敏捷框架TAPD》研究的更多相关文章

  1. 解读腾讯敏捷研发核心驱动力 腾讯TAPD TAPD 2020-12-17

    解读腾讯敏捷研发核心驱动力 腾讯TAPD TAPD 2020-12-17

  2. React Native移动框架功能研究

    React Native移动框架功能研究 此篇只研究React Native框架的功能. 一.React Natvie是什么 React Native是使用React(或者说JS)来开发原生APP的框 ...

  3. 简介 - SAFe(Scaled Agile Framework,规模化敏捷框架)

    简介 SAFe(Scaled Agile Framework,规模化敏捷框架) SAFe:https://www.scaledagileframework.com/ Scaled Agile Fram ...

  4. 【腾讯敏捷转型No.2】帅哥,来多少敏捷?

    上回腾讯敏捷转型系列第一篇文章<敏捷到底是什么鬼?>讲到公司铁了心要推进敏捷,这是战略层面的决定,为什么呢? 当时的我们并不知道公司为什么一定要推行敏捷的新概念,但是后来公司的变化帮助我们 ...

  5. 【腾讯敏捷转型No.3】Scrum有什么好?

    在敏捷转型的过程中,除了敏捷宣言中的四个价值观和十二条原则以外,并没有太多比较权威的理论实践. 如图一,敏捷宣言中的四个价值观: (图一) 四条敏捷核心价值观指出了敏捷的核心思想,但是并没有仔细说明具 ...

  6. 【腾讯敏捷转型No.8】你爱上手机QQ了么?

    上一篇文章<QQ邮箱如何利用敏捷做到中国第一>,“QQ邮箱之母”马化腾带领QQ邮箱团队,从流量思维向产品思维转变,“QQ邮箱之父”张小龙也是在这个敏捷转型过程中,剔除固有的成见,激发对优秀 ...

  7. 【腾讯敏捷转型No.7】QQ邮箱如何通过敏捷成为行业第一

    前几篇文章讲到2006年的腾讯是如何开始敏捷转型的,接下来这篇文章,我将向大家讲述,腾讯开始敏捷转型之后,QQ邮箱是如何通过敏捷成为行业第一. 众所周知,张小龙是“微信之父”,对他熟悉的人,应该也知道 ...

  8. 【腾讯敏捷转型No.6】如何打造称手的敏捷工具

    通常情况下,大家对于敏捷的感受就是:大家一起来开站立晨会啦!然后一大早,大家拿着早餐,围成一个圈,听一个人在讲话. 在很多公司,决定采用敏捷之后,都会从晨会开始,因为很多人觉得敏捷其它模块都很难学习, ...

  9. 力软敏捷框架 jfGrid 的使用说明

    很多人使用力软敏捷框架的一个困扰就是表格控件,力软并没有使用常规的jqgrid,而是用了自己的一套 jfgrid.所以今天在这做个简单的说明,如果你有什么疑问也可以在评论区提出来,后期的文章会做说明. ...

随机推荐

  1. iOS开发 获取手机信息(UIDevice,NSBundle,NSlocale)

    在开发中,需要获取当前设备的一些信息,可以通过UIDevice,NSbundle,NSlocale获取. UIDevice UIDevice 提供了多种属性,类函数及状态通知,可以检测手机电量,定位, ...

  2. Android沉浸式(侵入式)标题栏(状态栏)Status(一)

     Android沉浸式(侵入式)标题栏(状态栏)Status(一) 现在越来越多的APP设计采用这种称之为沉浸式状态栏(Status)的设计,这种沉浸式状态栏又称之"侵入式"状 ...

  3. jQuery:如何验证某个元素是否为空

    [要求]:使用jQuery 如何验证某个元素是否为空   ♪ 答: <body> <div id="div1">aa</div> <inp ...

  4. 《单页Web应用--温故JavaScrpt》学习笔记整理

     变量作用域,函数提升和执行环境对象 1. 变量作用域 在 JavaScript 中,变量 的 作用域 由 函数 限定,即:唯一能定义变量作用域的语块就是 函数. 变量 要么是全局的,要么是局部的. ...

  5. 常用的Hash算法

    1.RSHash unsigned int RSHash(const std::string& str) {    unsigned int b    = 378551;    unsigne ...

  6. Apache HttpClient使用之阻塞陷阱

    前言: 之前做个一个数据同步的定时程序. 其内部集成了某电商的SDK(简单的Apache Httpclient4.x封装)+Spring Quartz来实现. 原本以为简单轻松, 喝杯咖啡就高枕无忧的 ...

  7. 382. Linked List Random Node

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  8. SQLITE SUBSTR

    insert into t_user values(4,'u1234567890'); sqlite> select substr(username,1,1) from t_user where ...

  9. SQL注入测试平台 SQLol -3.INSERT注入测试

    访问首页的insert模块,http://127.0.0.1/sql/insert.php,开始对insert模块进行测试. insert语句: INSERT INTO [users] ([usern ...

  10. cron 配置计划任务的书写格式(quartz 时间配置)

    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 1.秒(0~59) 2.分钟(0~59) 3.小时(0~23)  4.天(月)(0~31,但是你需要考虑你月的天数) 5 ...