你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

12 月 27 日 QClub 深圳活动要点速报

2008 年 12 月 29 日

2008 年 12 月 27 日在深圳举办的活动是 QClub 第一次走进华南地区,50 多位同行聚集在华为互联网业务部漂亮的新办公区里,与王速瑜和周代兵两位嘉宾一起分享腾讯公司在开发互联网产品过程中的经验和体会,以及华为软件公司的敏捷之路。

腾讯公司在开发互联网产品过程中的经验和体会

主讲是腾讯公司的 R&D 研发总监王速瑜。腾讯的互联网产品要求新求快,需求不确定的程度很高,必须快速适应变化。


用 QQ 漫画形式推介敏捷

在腾讯敏捷产品开发流程 TAPD(Tencent Agile Product Development)中,结合了类似 FDD 的做法,由产品经理归纳的特性去驱动开发,过程上借鉴 Scrum,具体实践借鉴 XP。迭代计划会议强调所有人员都参与,包括 UI、QA 等等部门,共同探讨各种困难,评估工作量。每开发完一个需求,都要根据用户调研、会员测试等途径得到的数据做回顾。互联网应用用户基数大、产品分发容易,而且他们可以很容易地根据后台数据分析用户行为,以之判断新特性是否成功。利用以上特点,他们通过逐步增加新特性的用户量、多个版本交叉升级的“灰度发布”方式,做到早发布、常发布。

通过明星产品 QQMail 的实践,观察到团队成员的心情在逐步向好,同时用户量也有 10 倍以上的增长,这些效果坚定了他们继续推行的信心。

腾讯很重视工具建设,比如有内部门户帮助团队间的交流研讨,有类似 Mingle 的迭代计划工具等等。王速瑜还提到一个“团队股市”的有趣应用,可以反映出团队的敏捷能力上升情况,帮助衡量团队能力,也起到激励的作用。

实践中也遇到一些困难。比如站立会议对于二三十人的较大团队负担较大,时间长了之后变得形式化和呆板。为此他们采取了轮流主持等方式加强参与感和增加刺激,但结果还不能令人满意。有的团队改用虚拟方式增进效率,也更适合分布式团队。

结对编程的推行也不太成功。开始的时候效果很好,因为看到质量提高,团队成员也愿意去做,但逐渐由于项目压力大而放弃。

其他困难还有每年上千毕业生要融入团队,大型产品 QQ 客户端发布周期长达半年以上,诸多问题尚在探索之中。

华为软件公司的敏捷之路

第二位分享的是周代兵,华为软件公司软件工程部经理。华为的转变经历了很长的过程。首先是引入 IPD(Integrated Product Development)改变了游击队做法,成功将企业从自行摸索的技术导向转变为市场导向。接着引入 CMM(I),大大提高产品质量。IPD+CMM 形成的项目管理、质量保证体系确保了企业的正常运作。

然而, 在华为的传统做法中,过于偏重对过程的控制,忽视了人与工具的因素。流程控制使得产品质量可控,进度有保证,管理层亦较容易了解进度。但软件开发不同于生产线上的重复劳动,是创造性的工作。严守流程能完成任务,但其成效是未知的。片面追求运作规范,结果是完美的报告的背后,可能是质量完全不相称的交付物。

华为还引入了 RUP,尝试用迭代去解决瀑布方法交付周期长的问题,但发现 RUP 虽然全面、完善,但并不能切合需要。于是 Scrum 和 XP 进入了他们的视野。


复习了一遍 Scrum 和 XP

在实施中,他们利用精益思维去发现需要改进的地方,有选择地采纳一些 XP 实践,并以 Scrum 去补足 XP 在管理上的弱点。举例来说,他们用结对去代码复审和沟通的问题;用 TDD 去“做刚好够用的事情”,避免在无用的产品功能上浪费资源(曾有产品高达 50% 的功能无用);用看板和 ScrumWorks 等软件工具去维持项目进度的可视化;整合原先按照开发、测试等阶段划分的团队,消除“停工等活”的浪费。

在转变的过程中,他们并非全盘放弃传统做法,而是将 IPD 移到上层用在决定投资决策方面。然后用敏捷团队逐渐代替 CMM 团队。团队被赋予对自身采用何种方式的选择权,运作良好的项目可以继续下去。同时他们观察到以前所谓的“烂项目”会主动选择变化,正说明这些项目不适合瀑布方法。

他们也认识到改变需要很长的时间,从关注过程到对人的关注牵涉到文化的转变,而习惯根深蒂固,利益不同更是会产生以邻为壑的做法。为此他们用“一体化团队”去打破部门之间由于利益不同造成的 “部门墙”,将交付成功与所有人的利益关联起来;帮助成员做角色的转变,比如将过去充当警察角色的 QA 变成教练和 Scrum Master 的角色;重新设计办公室布局以促进交流。

周代兵将华为的敏捷之路形容为“一夜的引入,长时间的改变”,他们还在“Moving”之中。

Q&A

以下是部分 Q&A(根据编辑笔记整理要点,非原话):

  • Q:开发与测试如何配合分工?
    王:测试不是某一部分人的责任,也不是到后期才做,从迭代计划就已经提出目标。需要平台工具才能保证。

  • Q:FDD 如何实现对程序员的质量约束,TDD 放在什么位置?
    王:FDD、TDD 使用到不同阶段。FDD 的目的在于让成员关注产品目标,鼓励成员提出想法。没有做 FDD 的建模部分,更接近于产品 Backlog。Web 产品对建模的要求低,因为很容易得到用户反馈,第二天就可以发布新版本给一部分用户。TDD 处理编码部分的问题。有了持续集成之后,才将所有实践贯穿起来。

  • Q:结对的目的?
    王:把培训放到结对中,还有代码复审的作用。

  • Q:是否轻文档、重代码?
    王:不是没有文档,关键文档仍然是必须的要求。但文档写到什么程度,团队成员达成一致意见即可。团队之间交换成员,把人员放到不同项目中去,也有助于发现哪些文档是沟通中不可缺少的。

  • Q:推行敏捷是否“一把手工程”,如何使领导觉得敏捷是成功之路?
    周:绝对是,没有管理层的认可不可行。推动者有教育管理层的任务,可以借助外力推广理念,可以用标杆项目增加说服力。不打旗号地去传播经验。

  • Q:绩效考核如何适应敏捷方法?
    周:华为过去非常重视可度量化,现在也仍然如此。曾经根据很细致的数据去做度量,但发现过程性的东西对产出的结果没有太大关系。因此现在改为关注结果,只用很少、很粗的数据去量化。由于传统的惯性还需要做很多说服工作才能扭转。

  • Q:测试人员的绩效如何衡量?
    周:过去用测试发现的问题量去衡量;现在用客户反馈的问题量去衡量绩效。

  • Q:计划时如何确定功能点数量?
    周:先确定迭代周期,一般为 2~4 周,根据在此期间能完成多少来确定。开始的时候不熟悉会少一些,后期可多一些。

  • Q:生产力提高多少?
    周:差不多。但明显改变交付能力,客户满意度增加。不同团队的生产力数据离散度增加了,可能与团队能力参差有关,还有待研究。

  • Q:实在多次迭代之后重构,还是每次都重构?
    周:重构有不同的维度。小范围的重构,个人编程的时候就会频繁进行。在增加许多功能之后可能发现架构上不适应,需要做大层面的重构。


分组讨论


谢谢大家

PPT 和现场视频正在制作之中,还要晚一些才能呈现给各位热心读者。

2008 年 12 月 29 日 20:21836
用户头像

发布了 225 篇内容, 共 49.0 次阅读, 收获喜欢 30 次。

关注

评论

发布
暂无评论
发现更多内容

回“疫”录(20):世界从来不会欺负听话的人

小天同学

疫情 回忆录 现实纪录 纪实

程序员的晚餐 | 5 月 18 日 瓠子,年少时的味道

清远

美食

Web3极客日报#127

谢锐 | Frozen

区块链 开源 技术社区 Rebase Web3 Daily

识别代码中的坏味道(二)

Page

Java 面向对象 复杂代码优化 重构 CleanCode

PhotoShop切图,一篇文章就够用了

cwang

Web 工具 PhotoShop

解决 Django 多进程下,logging 记录日志错乱问题

AlwaysBeta

Python django 编程 日志 log

Jenkins权限管理

kcnf

走进Golang之编译器原理

何磊

go golang 编译原理

CentOS 6 升级 glibc

wong

centos glibc

MySQL事务解析

一个有志气的DB

MySQL 事务隔离级别 mysql事务

用原理认知世界,用情绪驱动行为

史方远

职场 心理 成长

一想到有95%的问题还没解决,我就calm down了

赵新龙

科普 宇宙 后真相时代

汉字不能编程?别闹了,只是看着有点豪横!容易被开除!

小傅哥

spring 小傅哥 aop 汉字编程

如何用一套引擎搞定机器学习全流程?

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

如何发布一个npm包-创建,发布,更新,撤销及常见问题解决

Brave

npm

写在开头

宋胖子

新mac笔记本需要做的事情

好好学习

Mac

JAVA内存模型与线程

颇风

Java 内存模型 JVM

英语学习中听和说的区别

七镜花园-董一凡

学习

Dart 进阶 | 深入理解 Function & Closure

LitaVadaski

flutter dart

Android | Tangram动态页面之路(三)使用

哈利迪

android

华为“补洞”:去年重新设计超过6000万行代码

罗燕珊

华为 实体清单

Web3极客日报 #128

谢锐 | Frozen

区块链 开源 技术社区 Rebase Web3 Daily

Design Sprint 教你五天完成产品迭代

Yanel 说敏捷产品

产品 敏捷 设计 产品设计 团队

一文带你了解 HTTP 黑科技

cxuan

前端 HTTP

Kotlin 协程实践(2)之 异步和Callback地狱

陈吉米

Java kotlin 协程

从零开始制作一台计算机-概述

小兵

计算机基础

谈谈控制感(6):虚幻的控制感也好用

史方远

职场 心理 成长

中小企业如何做运维自动化?

Spug运维

运维 spug 运维自动化 jenkins ansible

Live2D for Unity入门篇 4.x

波波

编程 游戏开发 Live2D Unity

半小时手工解决的活,让我意外学会了 python 的 pdfkit 库

小匚

Python python教程

PingCAP DevCon 现场直播

PingCAP DevCon 现场直播

12月27日QClub深圳活动要点速报-InfoQ