构建高效软件Software开发流程和团队(Team)1. 前言本人曾就职于多家公司
![](/icons/41842dou.gif)
但留给我印象最深刻、开发管理最规范标准
![](/icons/41842de.gif)
公司是I公司
![](/icons/41842dou2.gif)
该公司总部位于美国硅谷
![](/icons/41842dou.gif)
其开发
![](/icons/41842de.gif)
产品曾获得PC Magazine
![](/icons/41842de.gif)
最高 5星级
![](/icons/41842de.gif)
优秀好评
![](/icons/41842dou2.gif)
现我根据在此公司中所感受到
![](/icons/41842de.gif)
经历及自身
![](/icons/41842de.gif)
![](/icons/41842yi.gif)
些感想写出来
![](/icons/41842dou.gif)
希望能给大家和其它公司有所借鉴
2. 项目计划在
![](/icons/41842yi.gif)
个产品发布并使用的后
![](/icons/41842dou.gif)
其中肯定有许多地方不如意和值得改进
![](/icons/41842de.gif)
地方
![](/icons/41842dou2.gif)
客户在使用
![](/icons/41842de.gif)
过程中会发现
![](/icons/41842yi.gif)
些问题
![](/icons/41842dou.gif)
提出更高
![](/icons/41842de.gif)
需求
![](/icons/41842dou.gif)
市场也在发生变化
![](/icons/41842dou.gif)
我们
![](/icons/41842de.gif)
竞争对手也在发展
![](/icons/41842dou.gif)
新
![](/icons/41842de.gif)
技术不断地产生
![](/icons/41842dou.gif)
这些原因推动着我们
![](/icons/41842de.gif)
产品不断地向前发展
![](/icons/41842dou.gif)
使它
![](/icons/41842de.gif)
版本不停地往上增长
![](/icons/41842dou2.gif)
这些发展
![](/icons/41842de.gif)
需求不是
![](/icons/41842yi.gif)
下子提出来
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
在客户使用
![](/icons/41842de.gif)
过程中发现某些不如意不方便
![](/icons/41842de.gif)
地方
![](/icons/41842dou.gif)
他们会向我们
![](/icons/41842de.gif)
技术支持人员提意见
![](/icons/41842dou.gif)
而技术支持人员会把这些需求以BUG
![](/icons/41842de.gif)
形式存入BUG数据库中
![](/icons/41842dou.gif)
其级别
![](/icons/41842yi.gif)
般定义为下
![](/icons/41842yi.gif)
个版本
![](/icons/41842de.gif)
Feature.有些上
![](/icons/41842yi.gif)
个版本未解决
![](/icons/41842de.gif)
BUG也可能需要在本版本中来解决
![](/icons/41842dou2.gif)
因此当我们来开发下
![](/icons/41842yi.gif)
个版本时
![](/icons/41842dou.gif)
其许多特性已经存在于BUG数据库中了
![](/icons/41842dou2.gif)
当然新版本
![](/icons/41842de.gif)
特性不是只从BUG中获得
![](/icons/41842dou.gif)
管理层可能从市场
![](/icons/41842de.gif)
角度来提出新
![](/icons/41842de.gif)
特性以求领先竞争对手
![](/icons/41842dou.gif)
开发人员本身也可提出某些要求来纳入新版本开发
![](/icons/41842de.gif)
计划中
![](/icons/41842dou.gif)
如要求对某部分代码进行重构以使其结构更清晰更容易维护
![](/icons/41842dou.gif)
执行效率更高
每个人把同自己相关
![](/icons/41842de.gif)
功能模块收集起来
![](/icons/41842dou.gif)
同时预估时间
![](/icons/41842dou.gif)
其中主要包括写文档
![](/icons/41842de.gif)
时间、开发时间和单元测试
![](/icons/41842de.gif)
时间
![](/icons/41842dou.gif)
![](/icons/41842yi.gif)
般要求精确到工作日
![](/icons/41842dou2.gif)
这些信息发送给组长
![](/icons/41842dou.gif)
组长再把本小组人员
![](/icons/41842de.gif)
任务和预估时间发送给管理层
![](/icons/41842dou.gif)
由管理层对此任务及进度进行评估审核
![](/icons/41842dou.gif)
管理层会根据产品发布时间及客户需求、市场原因等方面作出选择
![](/icons/41842dou.gif)
可能某些功能由于时间紧急会被推迟到下
![](/icons/41842yi.gif)
个版本中去
![](/icons/41842dou2.gif)
若预估出来
![](/icons/41842de.gif)
时间同预计
![](/icons/41842de.gif)
产品发布时间有较大冲突
![](/icons/41842dou.gif)
而且此功能是本版本中必须得做
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
则开发小组会被要求重新预估时间
![](/icons/41842dou.gif)
加快开发速度来达到这个要求
虽然这个开发进度时间是
![](/icons/41842yi.gif)
个大概
![](/icons/41842de.gif)
估计时间
![](/icons/41842dou.gif)
但我们要尽力按照这个开发进度来执行
![](/icons/41842dou2.gif)
每个星期 5下午我们有
![](/icons/41842yi.gif)
个Status Meeting(
![](/icons/41842yi.gif)
般那时工作效率较低
![](/icons/41842dou.gif)
适合开会)
![](/icons/41842dou.gif)
在此会议上我们会根据这个进度来review我们
![](/icons/41842de.gif)
工作
![](/icons/41842dou.gif)
每个人手上
![](/icons/41842de.gif)
工作是否按照这个进度在走
![](/icons/41842dou.gif)
是否有人延后了
![](/icons/41842dou.gif)
是否block住别人
![](/icons/41842de.gif)
工作了
![](/icons/41842dou2.gif)
在此会议上每个人都要报告自己
![](/icons/41842de.gif)
进度
![](/icons/41842dou.gif)
同时还要报告上个星期做了什么
![](/icons/41842dou.gif)
正在做什么
![](/icons/41842dou.gif)
以及下个星期打算做什么
![](/icons/41842dou2.gif)
通过这个会议
![](/icons/41842dou.gif)
会让你觉得有人在监督你
![](/icons/41842dou.gif)
无形的中迫使你不断地督促自己不要使任务延后
![](/icons/41842dou.gif)
如果有延后
![](/icons/41842de.gif)
迹象也会尽早发现而赶上
![](/icons/41842dou2.gif)
若某些经过努力不能赶上
![](/icons/41842dou.gif)
那也没有办法
![](/icons/41842dou.gif)
只能修改原先
![](/icons/41842de.gif)
进度表
![](/icons/41842dou.gif)
![](/icons/41842yinwei.gif)
那是我们
![](/icons/41842de.gif)
估计和现实发生了偏差
![](/icons/41842dou.gif)
我们必须使我们
![](/icons/41842de.gif)
进度表符合实际情况
![](/icons/41842dou.gif)
这可以避免许多项目发生最后
![](/icons/41842de.gif)
20%
![](/icons/41842de.gif)
工作量会占据80%甚至
![](/icons/41842yi.gif)
直拖后
![](/icons/41842de.gif)
情况
![](/icons/41842dou2.gif)
修改进度表
![](/icons/41842de.gif)
情况我们曾经发生过
![](/icons/41842dou.gif)
有
![](/icons/41842yi.gif)
次在按照原先
![](/icons/41842de.gif)
进度执行到将要完成
![](/icons/41842de.gif)
状态时突然接到通知由于市场及客户
![](/icons/41842de.gif)
原因要求加入另
![](/icons/41842yi.gif)
项重大
![](/icons/41842de.gif)
功能
![](/icons/41842dou.gif)
这个功能对我们
![](/icons/41842chengxu.gif)
![](/icons/41842de.gif)
结构有非常大
![](/icons/41842de.gif)
影响
![](/icons/41842dou.gif)
因此我们就要重新制定
![](/icons/41842yi.gif)
个进度来满足需求
![](/icons/41842dou2.gif)
在这种情况下
![](/icons/41842dou.gif)
产品原先
![](/icons/41842de.gif)
开发进度被打乱
![](/icons/41842dou.gif)
发布时间也因此推迟
![](/icons/41842dou2.gif)
当然这种情况应当尽力避免
![](/icons/41842dou.gif)
尤其在项目后期产生新
![](/icons/41842de.gif)
需求
![](/icons/41842dou.gif)
若不得已也应重新规划进度
![](/icons/41842dou.gif)
而不是仍旧依照原先
![](/icons/41842de.gif)
进度去执行
![](/icons/41842dou.gif)
![](/icons/41842yinwei.gif)
老
![](/icons/41842de.gif)
进度已不能反映现实
![](/icons/41842de.gif)
情况
3. 开发文档在项目进度安排中我们已经把写文档
![](/icons/41842de.gif)
时间也规划进去了
![](/icons/41842dou.gif)
这里虽然是写文档
![](/icons/41842dou.gif)
其实是设计
![](/icons/41842chengxu.gif)
![](/icons/41842dou.gif)
整理
![](/icons/41842yi.gif)
下思路和架构
![](/icons/41842dou.gif)
磨刀不误砍柴工
![](/icons/41842dou.gif)
这样在实际写代码时会流畅很多
![](/icons/41842dou.gif)
节省时间
![](/icons/41842dou.gif)
因此可以说真正有思想性
![](/icons/41842de.gif)
东西都在写文档这段时间内完成了
![](/icons/41842dou2.gif)
当然我们这里
![](/icons/41842de.gif)
文档格式不象ISO那样规定了条条框框
![](/icons/41842dou.gif)
我们
![](/icons/41842de.gif)
文档格式相对自由
![](/icons/41842dou.gif)
基本上能随意发挥
![](/icons/41842dou.gif)
但对于几个主要点
![](/icons/41842yi.gif)
般来说是需要介绍说明
![](/icons/41842de.gif)
![](/icons/41842dou2.gif)
要求写
![](/icons/41842de.gif)
文档能让他人比较容易地看明白
![](/icons/41842dou.gif)
能把问题讲清楚
![](/icons/41842dou.gif)
能反映你
![](/icons/41842de.gif)
设计思想
![](/icons/41842dou2.gif)
文档
![](/icons/41842de.gif)
数量也不多
![](/icons/41842dou.gif)
开发文档有两类
![](/icons/41842dou.gif)
![](/icons/41842yi.gif)
类是function Spec
![](/icons/41842dou.gif)
另
![](/icons/41842yi.gif)
类是Design Document. function Spec中需要写明
![](/icons/41842de.gif)
是本模块完成
![](/icons/41842de.gif)
任务
![](/icons/41842dou.gif)
解决什么问题
![](/icons/41842dou.gif)
有什么作用
![](/icons/41842dou.gif)
为什么要这些功能
![](/icons/41842dou.gif)
此外我们还会添加进适用范围
![](/icons/41842dou.gif)
有什么不足
![](/icons/41842dou.gif)
注意点是什么
![](/icons/41842dou.gif)
还有哪些地方在以后可以进行改进
![](/icons/41842dou2.gif)
在这个function Spec中不涉及到任何非常详细
![](/icons/41842de.gif)
算法
![](/icons/41842dou2.gif)
此文档不光给开发人员看
![](/icons/41842dou.gif)
还让QA及其他成员以及后来
![](/icons/41842de.gif)
新人能根据此文档来了解此模块
![](/icons/41842de.gif)
大致功能
![](/icons/41842dou.gif)
同时也会给文档编写者看
![](/icons/41842dou.gif)
他们会根据这些function Spec整理出
![](/icons/41842yi.gif)
份用户手册
![](/icons/41842dou.gif)
告诉用户此版本中新增了哪些功能
![](/icons/41842dou.gif)
各功能模块有什么作用
![](/icons/41842dou.gif)
如何使用等信息
![](/icons/41842dou2.gif)
因此在我们
![](/icons/41842de.gif)
开发过程中function Spec是很重要
![](/icons/41842de.gif)
文档
![](/icons/41842dou.gif)
此文档完成后会抽出
![](/icons/41842yi.gif)
段时间同相关人员及QA
![](/icons/41842yi.gif)
起review这个文档
![](/icons/41842dou.gif)
让QA了解设计者
![](/icons/41842de.gif)
意图
![](/icons/41842dou.gif)
同时熟悉新
![](/icons/41842de.gif)
功能模块
![](/icons/41842dou.gif)
为接下来
![](/icons/41842de.gif)
测试作准备
![](/icons/41842dou2.gif)
如果其中有误解或不明的处
![](/icons/41842dou.gif)
大家会提出来探讨并由开发者修正
Design Document中主要描述实现此模块所涉及到
![](/icons/41842de.gif)
主要算法、数据结构、类
![](/icons/41842de.gif)
层次结构及
![](/icons/41842diaoyong.gif)
关系
![](/icons/41842dou2.gif)
这个文档
![](/icons/41842de.gif)
阅读者主要是开发人员
![](/icons/41842dou.gif)
包括任何想了解详细实现代码
![](/icons/41842de.gif)
人
![](/icons/41842dou.gif)
帮助人们理解代码
![](/icons/41842dou2.gif)
在某些功能模块比较简单
![](/icons/41842de.gif)
![](/icons/41842chengxu.gif)
中
![](/icons/41842dou.gif)
此文档所描述
![](/icons/41842de.gif)
信息会比较少
![](/icons/41842dou2.gif)
此文档不象function Spec要在开始写代码前就编写完成
![](/icons/41842dou.gif)
它可以随着代码编写
![](/icons/41842de.gif)
进行而增加
![](/icons/41842dou.gif)
但基本上遵循文档先行原则
![](/icons/41842dou.gif)
也就是要增加新
![](/icons/41842de.gif)
代码或修改代码前若有涉及到文档部分
![](/icons/41842de.gif)
应先修改文档
![](/icons/41842dou.gif)
然后再修改代码
4. 编写代码由于我们用JAVA语言进行开发
![](/icons/41842dou.gif)
因此我们借助了Jbuilder IDE工具
![](/icons/41842dou2.gif)
有关代码风格
![](/icons/41842dou.gif)
我们基本上套用Jbuilder中自动
![](/icons/41842de.gif)
代码格式编排
![](/icons/41842dou.gif)
但其中需要改变
![](/icons/41842de.gif)
是缩进是4个
![](/icons/41842zifu.gif)
![](/icons/41842dou.gif)
类和类的间间隔2行
![](/icons/41842dou.gif)
思路方法和思路方法的间间隔2行
![](/icons/41842dou.gif)
import类时用完整
![](/icons/41842de.gif)
类名
![](/icons/41842dou2.gif)
写代码时要对类及
![](/icons/41842hanshu.gif)
提供详细
![](/icons/41842de.gif)
注释及介绍说明
![](/icons/41842dou.gif)
基本做到看它们
![](/icons/41842de.gif)
介绍说明就能知道这个类或
![](/icons/41842hanshu.gif)
![](/icons/41842de.gif)
功能以及主要算法
![](/icons/41842de.gif)
实现原理
![](/icons/41842dou2.gif)
在开发过程中对主要
![](/icons/41842de.gif)
模块要编写UnitTest
![](/icons/41842dou.gif)
同时要UnitTest先行
![](/icons/41842dou.gif)
也就是遵循XP规则中
![](/icons/41842de.gif)
测试驱动原则
![](/icons/41842dou.gif)
当所有
![](/icons/41842de.gif)
单元测试代码通过时
![](/icons/41842dou.gif)
此功能也就基本上完成了
5. 代码管理我们采用VSS+SourceOffsite进行版本控制
![](/icons/41842dou.gif)
其中存放了此产品
![](/icons/41842de.gif)
所有源代码、库文件、文档及release时
![](/icons/41842de.gif)
安装
![](/icons/41842chengxu.gif)
![](/icons/41842dou.gif)
各个部分存放在区别
![](/icons/41842de.gif)
目录中
![](/icons/41842dou2.gif)
每天早上要求开发人员从VSS中get latest version
![](/icons/41842de.gif)
源代码
![](/icons/41842dou.gif)
然后进行编译并开始
![](/icons/41842yi.gif)
天
![](/icons/41842de.gif)
工作
![](/icons/41842dou2.gif)
在下班的前理论上要求员工check in所有当天修改
![](/icons/41842de.gif)
代码
![](/icons/41842dou.gif)
在check in的前要保证编译是能通过
![](/icons/41842de.gif)
![](/icons/41842dou2.gif)
若有谁check in
![](/icons/41842de.gif)
代码导致daily build失败则会被要求某些惩罚措施或警告
![](/icons/41842dou.gif)
象微软公司要负责照看当日
![](/icons/41842de.gif)
每日构建
![](/icons/41842dou2.gif)
有时我们编写
![](/icons/41842de.gif)
代码涉及到多个文件
![](/icons/41842dou.gif)
而且此改动是比较复杂需要花费多天
![](/icons/41842de.gif)
工作量
![](/icons/41842dou.gif)
如果现在check in进去可能会导致BVT(Build Ver
![](/icons/41842if.gif)
y Test)测试通不过
![](/icons/41842dou.gif)
![](/icons/41842yinwei.gif)
有些代码没有完全完成
![](/icons/41842dou.gif)
而的前
![](/icons/41842de.gif)
代码能使BVT测试通过
![](/icons/41842dou.gif)
而且这些代码基本上不会涉及到他人
![](/icons/41842dou.gif)
在这种情况下可以不check in进去
![](/icons/41842dou.gif)
直到全部代码完成能提交BVT测试时再
![](/icons/41842yi.gif)
起check in进去
每天我们都会做daily build
![](/icons/41842dou.gif)
![](/icons/41842yi.gif)
般是在凌晨4点进行
![](/icons/41842dou.gif)
那时有个
![](/icons/41842chengxu.gif)
会自动从VSS中拉下最新
![](/icons/41842de.gif)
代码并进行编译
![](/icons/41842dou2.gif)
![](/icons/41842yinwei.gif)
我们同美国进行同步开发
![](/icons/41842dou.gif)
因此如果想要把修改
![](/icons/41842de.gif)
代码进入到这个build中去那就需要在凌晨4点的前把相应
![](/icons/41842de.gif)
代码check in进去
![](/icons/41842dou2.gif)
若有人check in进去
![](/icons/41842de.gif)
代码导致编译通不过则会在本步骤中被发现
![](/icons/41842dou2.gif)
当编译完成的后自动产生安装包
![](/icons/41842dou.gif)
测试部门将会对这些代码进行BVT测试
![](/icons/41842dou.gif)
同时对VSS中开发库打上label
![](/icons/41842dou.gif)
如果发现了什么BUG就能根据这个label知道是哪个时候开始出现这个BUG
![](/icons/41842de.gif)
![](/icons/41842dou2.gif)
BVT是指Build Ver
![](/icons/41842if.gif)
y Test
![](/icons/41842dou.gif)
是对组件中基本功能
![](/icons/41842de.gif)
测试
![](/icons/41842dou2.gif)
这个测试每天都会进行
![](/icons/41842dou.gif)
看新加入
![](/icons/41842de.gif)
代码或修改是否会影响系统
![](/icons/41842de.gif)
基本功能
![](/icons/41842dou.gif)
便于及早发现
![](/icons/41842cuowu.gif)
6. 测试在开发人员完成了function Spec后
![](/icons/41842dou.gif)
测试部门开始了测试规划
![](/icons/41842dou.gif)
确定需要测试哪些方面
![](/icons/41842dou.gif)
如何测试及进度安排
![](/icons/41842dou2.gif)
测试人员需要写许多测试代码
![](/icons/41842dou.gif)
有些测试代码需要集成进BVT测试
![](/icons/41842dou.gif)
有些可能需要进行单独
![](/icons/41842de.gif)
测试
![](/icons/41842dou.gif)
目
![](/icons/41842de.gif)
都是为了使产品符合要求
![](/icons/41842dou.gif)
使开发人员容易找出问题所在并改正
![](/icons/41842dou2.gif)
产品功能是否符合了要求
![](/icons/41842dou.gif)
是否能被发布是由测试人员决定
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
因此测试人员也比较辛苦
![](/icons/41842dou.gif)
责任重大
![](/icons/41842dou2.gif)
通过了每天
![](/icons/41842de.gif)
BVT测试
![](/icons/41842dou.gif)
还有
![](/icons/41842yi.gif)
些性能测试、兼容性测试、灾难测试等需要在产品发布前进行
![](/icons/41842dou2.gif)
在完成这些测试的后由测试人员决定本产品是否能release出去了
![](/icons/41842dou.gif)
如果没有什么问题则会给某些关系较好
![](/icons/41842de.gif)
用户进行β测试
![](/icons/41842dou.gif)
的后再最终release出去
7. BUG管理由于我们每天进行着测试
![](/icons/41842dou.gif)
因此经常有BUG被测试部门发现
![](/icons/41842dou.gif)
![](/icons/41842yi.gif)
旦发现了新
![](/icons/41842de.gif)
BUG
![](/icons/41842dou.gif)
就会被添加进BUG Tracking
![](/icons/41842System.gif)
中
![](/icons/41842dou2.gif)
目前较流行
![](/icons/41842de.gif)
BUG Tracking
![](/icons/41842System.gif)
有TestTrack、ClearQuest、Bugzilla等
![](/icons/41842dou2.gif)
BUG tracking system是开发人员和QA的间
![](/icons/41842de.gif)
纽带
![](/icons/41842dou.gif)
开发人员和QA通过BUG tracking system联系着
![](/icons/41842dou2.gif)
每个BUG有其类型和级别
![](/icons/41842dou.gif)
预定
![](/icons/41842de.gif)
类型有Crash-Data Loss
![](/icons/41842dou.gif)
Crash-No Data Loss
![](/icons/41842dou.gif)
Incorrect functionality
![](/icons/41842dou.gif)
Cosmetic
![](/icons/41842dou.gif)
Feature request等
![](/icons/41842dou.gif)
级别有P1、P2
![](/icons/41842yi.gif)
直到P6
![](/icons/41842dou.gif)
它们分别代表了重要性及紧急程度
![](/icons/41842dou.gif)
P1
![](/icons/41842de.gif)
BUG需要很快fix
![](/icons/41842dou.gif)
P5的前
![](/icons/41842de.gif)
BUG在本版本release的前必须fix掉
![](/icons/41842dou.gif)
若真
![](/icons/41842de.gif)
不能或不重要则由QA确定并降低优先级进入到下
![](/icons/41842yi.gif)
个版本中去fix.QA发现
![](/icons/41842yi.gif)
个BUG后在BUG Track中增加
![](/icons/41842yi.gif)
个BUG
![](/icons/41842dou.gif)
同时填入相关信息并assign给相应
![](/icons/41842de.gif)
开发人员
![](/icons/41842dou.gif)
开发人员收到BUG分析并fix后assign给QA去ver
![](/icons/41842if.gif)
y
![](/icons/41842dou.gif)
其中要填上分析
![](/icons/41842de.gif)
结果以及如何解决
![](/icons/41842de.gif)
详细介绍说明
![](/icons/41842dou2.gif)
若QA对此BUG ver
![](/icons/41842if.gif)
y通过则close BUG
![](/icons/41842dou.gif)
否则ver
![](/icons/41842if.gif)
y failed并重新assign给开发人员并等待其fix.每星期在Status Meeting上会进行BUG状况报告
![](/icons/41842dou.gif)
主要由QA组长报告BUG
![](/icons/41842de.gif)
状况
![](/icons/41842dou.gif)
主要是新增BUG数
![](/icons/41842dou.gif)
fix掉多少
![](/icons/41842dou.gif)
还有多少处于open状态
![](/icons/41842dou.gif)
有多少处于等待ver
![](/icons/41842if.gif)
y
![](/icons/41842de.gif)
状态
![](/icons/41842dou.gif)
据此可以了解开发及测试情况
![](/icons/41842dou2.gif)
有时在Status Meeting上我们也会进行BUG Review
![](/icons/41842dou.gif)
BUG Review有时是单独
![](/icons/41842yi.gif)
个小组内进行
![](/icons/41842dou.gif)
其主要作用是重新明确每个人头上
![](/icons/41842de.gif)
BUG以及了解每个BUG
![](/icons/41842de.gif)
状况
![](/icons/41842dou.gif)
如开发人员对此BUG将作何处理等
![](/icons/41842dou.gif)
以此来了解开发中是否有碰到比较棘手
![](/icons/41842de.gif)
问题
![](/icons/41842dou.gif)
增加了产品发布风险
![](/icons/41842dou2.gif)
在QA增加BUG和开发人员fix BUG
![](/icons/41842de.gif)
游戏中
![](/icons/41842dou.gif)
BUG
![](/icons/41842de.gif)
数量曲线图会象股市曲线
![](/icons/41842yi.gif)
样上下波动
![](/icons/41842dou.gif)
但总体趋势
![](/icons/41842yi.gif)
般是前期BUG放量攀升
![](/icons/41842dou.gif)
后期震荡下挫
![](/icons/41842dou.gif)
若到了后期新open
![](/icons/41842de.gif)
BUG数量
![](/icons/41842yi.gif)
直上升则介绍说明风险在增大
![](/icons/41842dou.gif)
有可能无法控制
![](/icons/41842dou.gif)
也就是说fix了
![](/icons/41842yi.gif)
个BUG导致了多个新
![](/icons/41842de.gif)
BUG产生
![](/icons/41842dou2.gif)
在量化开发进度中也可以用代码数量
![](/icons/41842de.gif)
曲线图来粗略
![](/icons/41842de.gif)
呈现
![](/icons/41842dou2.gif)
在有大量新功能增加时可能代码量
![](/icons/41842de.gif)
增加会较快
![](/icons/41842dou.gif)
当在fix bug阶段
![](/icons/41842dou.gif)
代码
![](/icons/41842de.gif)
修改较多
![](/icons/41842dou.gif)
因此代码数量
![](/icons/41842de.gif)
增幅会降低
![](/icons/41842dou.gif)
依据代码量可以看出开发
![](/icons/41842de.gif)
状况处于何种阶段
需要指出
![](/icons/41842de.gif)
是我们对BUG
![](/icons/41842de.gif)
定义比较广泛
![](/icons/41842dou.gif)
![](/icons/41842yi.gif)
些新功能也可以作为BUG被提出
![](/icons/41842dou.gif)
只不过这些BUG级别比较低
![](/icons/41842dou.gif)
让它们进入到下
![](/icons/41842yi.gif)
个版本中去实现
![](/icons/41842dou2.gif)
因此BUG
![](/icons/41842de.gif)
创建者也可以是技术支持人员、市场人员甚至开发人员本身
![](/icons/41842dou2.gif)
有关开发人员本身
![](/icons/41842dou.gif)
![](/icons/41842yinwei.gif)
他可能会找出
![](/icons/41842yi.gif)
些BUG
![](/icons/41842dou.gif)
有些是其他开发者
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
有些可能是此开发者本身
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
把这个BUG添加进BUG库中可以帮助开发人员在以后产生新问题时或类似
![](/icons/41842de.gif)
BUG时有
![](/icons/41842yi.gif)
个借鉴和思路
![](/icons/41842dou.gif)
但此BUG
![](/icons/41842de.gif)
ver
![](/icons/41842if.gif)
y必须要让测试本模块
![](/icons/41842de.gif)
测试人员来ver
![](/icons/41842if.gif)
y. 8. Code Freeze当P5的前
![](/icons/41842de.gif)
BUG都被修复了
![](/icons/41842dou.gif)
这时离产品发布日期也就不远了
![](/icons/41842dou.gif)
![](/icons/41842yi.gif)
般是2个星期后就能release产品
![](/icons/41842dou.gif)
这时要对VSS中
![](/icons/41842de.gif)
代码进行freeze
![](/icons/41842dou.gif)
以保证代码库
![](/icons/41842de.gif)
稳定性
![](/icons/41842dou2.gif)
Code freeze阶段
![](/icons/41842yi.gif)
般会把各开发人员
![](/icons/41842de.gif)
check in和check out
![](/icons/41842de.gif)
权限关闭
![](/icons/41842dou.gif)
若在这时仍有BUG报告上来并经讨论确定是重大
![](/icons/41842de.gif)
且必须在本版本中fix
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
则需要经管理层同意并特殊地授予权限
![](/icons/41842dou.gif)
在修改完成后修改者要把修改了哪些文件
![](/icons/41842dou.gif)
影响了哪些文档等信息上报给各部门如QA、build人员、文档编写者等
![](/icons/41842dou2.gif)
在code freeze阶段
![](/icons/41842dou.gif)
测试部门在紧张地进行着各种测试
![](/icons/41842dou.gif)
得出各种数据
![](/icons/41842dou.gif)
并决定本版本是否可以release了
9. Tech Talk计算机知识更新速度非常快
![](/icons/41842dou.gif)
经常有
![](/icons/41842yi.gif)
些新
![](/icons/41842de.gif)
术语、新
![](/icons/41842de.gif)
名词、新
![](/icons/41842de.gif)
思想、新
![](/icons/41842de.gif)
技术所产生
![](/icons/41842dou.gif)
如过离开此行业几个月后重新回来就会对这些新
![](/icons/41842de.gif)
事物不解
![](/icons/41842dou.gif)
而我们平时为了自己
![](/icons/41842de.gif)
项目埋头苦干可能忘了周围
![](/icons/41842de.gif)
世界发生了什么
![](/icons/41842dou2.gif)
Tech Talk就提供了
![](/icons/41842yi.gif)
个让我们了解新知识和最新发展趋势
![](/icons/41842de.gif)
机会
![](/icons/41842dou.gif)
让大家把知识共享
![](/icons/41842dou.gif)
共同提高
![](/icons/41842dou2.gif)
Tech Talk
![](/icons/41842yi.gif)
般会在项目不是太忙碌
![](/icons/41842de.gif)
时候进行
![](/icons/41842dou.gif)
主持人会提前
![](/icons/41842yi.gif)
个星期指定某个人去准备
![](/icons/41842yi.gif)
下Tech Talk
![](/icons/41842dou.gif)
![](/icons/41842yi.gif)
般此人可能对某方面比较感兴趣
![](/icons/41842dou.gif)
然后他会花
![](/icons/41842yi.gif)
些时间去了解这方面
![](/icons/41842de.gif)
情况
![](/icons/41842dou.gif)
写成
![](/icons/41842yi.gif)
个文档如PowerPo
![](/icons/41842int.gif)
并上传到局域网内
![](/icons/41842dou.gif)
同时通知大家可以先去浏览
![](/icons/41842dou2.gif)
Tech Talk
![](/icons/41842de.gif)
内容非常广泛
![](/icons/41842dou.gif)
不
![](/icons/41842yi.gif)
定同我们
![](/icons/41842de.gif)
项目紧密相关
![](/icons/41842dou.gif)
任何新
![](/icons/41842de.gif)
思想、新
![](/icons/41842de.gif)
知识(当然
![](/icons/41842yi.gif)
般是限在计算机领域内)都可作为Tech Talk
![](/icons/41842de.gif)
内容
![](/icons/41842dou.gif)
而在主讲人讲完的后还有
![](/icons/41842yi.gif)
段时间被大家提问
![](/icons/41842dou.gif)
共同对这个话题进行讨论
![](/icons/41842dou.gif)
答疑解惑
![](/icons/41842dou2.gif)
当然Tech Talk也可同我们
![](/icons/41842de.gif)
项目相关
![](/icons/41842dou.gif)
如研究
![](/icons/41842yi.gif)
下竞争对手
![](/icons/41842de.gif)
产品技术
![](/icons/41842dou.gif)
本公司产品
![](/icons/41842de.gif)
架构等
![](/icons/41842dou2.gif)
研究本公司
![](/icons/41842de.gif)
产品架构可以使大家对本公司
![](/icons/41842de.gif)
产品有
![](/icons/41842yi.gif)
个全局
![](/icons/41842de.gif)
概念
![](/icons/41842dou.gif)
从整体上来看自己
![](/icons/41842de.gif)
产品
![](/icons/41842dou.gif)
顺便整理
![](/icons/41842yi.gif)
下产品
![](/icons/41842de.gif)
架构使的更加清晰有条理
![](/icons/41842dou2.gif)
平时大家都只注重于自己负责
![](/icons/41842de.gif)
其中
![](/icons/41842de.gif)
![](/icons/41842yi.gif)
小块
![](/icons/41842dou.gif)
在Tech Talk中可以跳出自己
![](/icons/41842de.gif)
小框框来了解全局
![](/icons/41842dou.gif)
同时这也是新员工了解公司核心技术整体框架
![](/icons/41842de.gif)
好机会
![](/icons/41842dou2.gif)
每个模块
![](/icons/41842de.gif)
负责人需要阐述此模块
![](/icons/41842de.gif)
方方面面
![](/icons/41842dou.gif)
让大家来了解并回答问题
10. Code Review当进行工作移交时我们会进行Code Review
![](/icons/41842dou.gif)
在碰到棘手
![](/icons/41842de.gif)
BUG时也会进行Code Review
![](/icons/41842dou.gif)
Code Review是大家了解其详细实现
![](/icons/41842de.gif)
![](/icons/41842yi.gif)
个好机会
![](/icons/41842dou2.gif)
在Code Review的后会对此代码产生亲切感而不是陌生惧怕感
![](/icons/41842dou.gif)
相信很多人在读他人代码时会有非常痛苦
![](/icons/41842de.gif)
经历
![](/icons/41842dou.gif)
Code Review是减少此痛苦感
![](/icons/41842de.gif)
好药方
![](/icons/41842dou2.gif)
在进行Code Review前
![](/icons/41842dou.gif)
主讲人会提前发出
![](/icons/41842yi.gif)
个通知告诉相关人员要review哪些代码
![](/icons/41842dou.gif)
这样参和者可以抽出时间提前了解相关代码
![](/icons/41842dou.gif)
对不懂
![](/icons/41842de.gif)
地方做个笔记以便在Code Review进行中提出疑问
![](/icons/41842dou2.gif)
在我们碰到比较棘手
![](/icons/41842de.gif)
BUG没有什么思路或大惑不解时
![](/icons/41842dou.gif)
这时找几个相关人员或对此代码也熟悉
![](/icons/41842de.gif)
人进行
![](/icons/41842yi.gif)
次Code Review
![](/icons/41842dou.gif)
这时形式比较随意
![](/icons/41842dou.gif)
大家可以临时提出问题
![](/icons/41842dou.gif)
让主讲人解答
![](/icons/41842dou.gif)
在这个过程中可能听
![](/icons/41842de.gif)
人并不会非常快地了解其中
![](/icons/41842de.gif)
详细过程
![](/icons/41842dou.gif)
但是讲
![](/icons/41842de.gif)
人在这个过程中重新理了
![](/icons/41842yi.gif)
下思路
![](/icons/41842dou.gif)
对所写
![](/icons/41842de.gif)
代码被迫重新审视了
![](/icons/41842yi.gif)
遍
![](/icons/41842dou.gif)
在其中可能就会发现出解决问题
![](/icons/41842de.gif)
办法
![](/icons/41842dou2.gif)
在Code Review时有时代码非常多
![](/icons/41842dou.gif)
但可以
![](/icons/41842yi.gif)
个功能模块
![](/icons/41842yi.gif)
个功能模块地从总体到局部
![](/icons/41842dou.gif)
由浅入深层层递进
![](/icons/41842de.gif)
方式进行
![](/icons/41842dou2.gif)
![](/icons/41842yi.gif)
次Code Review
![](/icons/41842de.gif)
时间不要太长
![](/icons/41842dou.gif)
但可以分多次进行
![](/icons/41842dou2.gif)
Code Review中大家会提出问题和建议
![](/icons/41842dou.gif)
集思广益
![](/icons/41842dou.gif)
多个人共同出主意
![](/icons/41842dou.gif)
有些可能
![](/icons/41842yi.gif)
个人没有想到
![](/icons/41842de.gif)
问题会被大家发现
![](/icons/41842dou.gif)
互相学习
![](/icons/41842dou.gif)
共同进步
11. 沟通和交流大部分员工
![](/icons/41842de.gif)
大部分时间是在公司里度过
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
因此公司
![](/icons/41842de.gif)
生活成了大家主要组成部分
![](/icons/41842dou2.gif)
员工的间关系
![](/icons/41842de.gif)
融洽
![](/icons/41842dou.gif)
交流
![](/icons/41842de.gif)
畅通显得非常重要
![](/icons/41842dou.gif)
同时大家也不想自己
![](/icons/41842de.gif)
生活这样枯燥乏味
![](/icons/41842dou.gif)
![](/icons/41842yi.gif)
直同机器打交道
![](/icons/41842dou2.gif)
沟通无处不在
![](/icons/41842dou.gif)
交流随时发生
![](/icons/41842dou.gif)
有许多关系是在工作的外建立起来
![](/icons/41842de.gif)
![](/icons/41842dou2.gif)
软件Software公司内是很容易产生各种矛盾
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
![](/icons/41842yinwei.gif)
这是由你
![](/icons/41842de.gif)
工作性质所决定
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
比如QA或用户会对你
![](/icons/41842de.gif)
实现不满意
![](/icons/41842dou.gif)
提出各种要求时
![](/icons/41842dou.gif)
我相信你有时会有所抱怨
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
无形的中就产生了对立
![](/icons/41842dou.gif)
发展到后来会有抵触心理
![](/icons/41842dou2.gif)
我相信大部分人都会有此感受
![](/icons/41842dou.gif)
这不是你
![](/icons/41842de.gif)
错
![](/icons/41842dou.gif)
这主要是由我们
![](/icons/41842de.gif)
工作性质决定
![](/icons/41842de.gif)
![](/icons/41842dou2.gif)
如果你
![](/icons/41842de.gif)
工作是把财富带给对方
![](/icons/41842dou.gif)
则对方会非常欢迎你
![](/icons/41842de.gif)
到来
![](/icons/41842dou.gif)
把你奉为财神爷来对待
![](/icons/41842dou.gif)
同你
![](/icons/41842de.gif)
关系会非常融洽友好
![](/icons/41842dou2.gif)
因此我们需要在工作的外来消除这种对立矛盾
![](/icons/41842de.gif)
关系
![](/icons/41842dou.gif)
建立
![](/icons/41842yi.gif)
种融洽
![](/icons/41842de.gif)
工作氛围
![](/icons/41842dou2.gif)
我们在平时吃饭
![](/icons/41842de.gif)
时候饭桌上大家互相聊天沟通
![](/icons/41842dou2.gif)
我们建立了happy邮件列表
![](/icons/41842dou.gif)
其中会发
![](/icons/41842yi.gif)
些幽默笑话的类
![](/icons/41842de.gif)
邮件
![](/icons/41842dou.gif)
给我们紧张
![](/icons/41842de.gif)
工作增加点轻松
![](/icons/41842de.gif)
氛围
![](/icons/41842dou2.gif)
在下班后大家可以组织
![](/icons/41842yi.gif)
下活动
![](/icons/41842dou.gif)
增加了公司
![](/icons/41842de.gif)
凝聚力
![](/icons/41842dou2.gif)
![](/icons/41842yi.gif)
个产品发布后组织
![](/icons/41842yi.gif)
下旅游
![](/icons/41842dou.gif)
让绷紧
![](/icons/41842de.gif)
神经松弛
![](/icons/41842yi.gif)
下
![](/icons/41842dou.gif)
更好地迎接下
![](/icons/41842yi.gif)
个挑战
12. 后记区别公司有区别
![](/icons/41842de.gif)
做法
![](/icons/41842dou.gif)
我只是把我认为比较好
![](/icons/41842de.gif)
流程和管理方式呈现出来
![](/icons/41842dou.gif)
让大家有个借鉴
![](/icons/41842dou.gif)
当然它也不是十全十美
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
也不是放的 4海而皆准
![](/icons/41842de.gif)
![](/icons/41842dou.gif)
如果你觉得某些地方对你有所帮助或值得推广
![](/icons/41842dou.gif)
这是本文最想达到
![](/icons/41842de.gif)
效果
![](/icons/41842dou2.gif)
非常感谢I公司给了我这么美好
![](/icons/41842de.gif)
经历
![](/icons/41842dou.gif)
也非常感谢I公司
![](/icons/41842de.gif)
同事们曾给我
![](/icons/41842de.gif)
巨大帮助
![](/icons/41842dou.gif)
在此衷心地祝福I公司越来越壮大
![](/icons/41842dou.gif)
逐步走向成功!也衷心地祝福我
![](/icons/41842de.gif)
同事们幸福快乐!
延伸阅读
最新评论