Advanced Software Engineering, Team Structure and Development Process软件团队和开发流程

 

非团队和团队

在讲团队之前我们要讲什么是非团队王屋村里经常发生这样的一幕:

王屋村的大智要把一堆砖头从村头搬到村尾。  他到顶球酒吧前看到前面三三两两地蹲着一些人有些人前面放着一块从包装箱扯下来的纸板上面写着“Java,  五毛一行”;“网页前端,  不酷不要钱”;“专做 PS擅长人体”;“通吃SQL, NoSQL”等等。

现代软件工程讲义 4 团队和流程_包装箱

 

(来源:  论坛)

 

大智冲这些人喊了一嗓子:  搬砖的有没有?  一百块砖一毛钱!

地上蹲着的一些人抬头看了看 有一两个人慢慢站起来了。

大智看了看人数又喊了一声中午有盒饭!

这时七八个人都站起来了拍拍屁股就凑到大智面前。大智就带着他们走了。

 

这七八个人是团队team)么?  不是,他们只是一群乌合之众,临时聚集在一起,各自完成任务就领钱走人(work group) 

 

下面是一些团队的例子:

现代软件工程讲义 4 团队和流程_包装箱_02

 

 

 

现代软件工程讲义 4 团队和流程_软件工程_03

可以看出这些团队有共同的特点:

 

1.       团队有一致的集体目标团队要一起完成这目标。

一个团队的成员不一定要同时工作,   例如接力赛跑,

(王屋村搬砖的非团队” 成员则不然每个人想搬多少就搬多少不想干了就结算工钱走人)

2.       团队成员有各自的分工互相依赖合作共同完成任务

(王屋村搬砖的非团队” 成员则是各自行动自行独立把任务完成,有人不辞而别对其他的搬砖人无实质影响)

 

回过头想想学生在小学中学的学习过程虽然大家在一个班集体但是大部分工作都是以“非团队”的形式完成的。  大家津津乐道的团队精神集体主义” 得到了多少锻炼?

 

软件团队的形式

软件团队有各种形式适用于不同的人员和需求。第一感好用的形式未必是最适合的。例如幼儿园大班小朋友的刚开始踢足球的时候大家都一窝蜂地去抢球球在哪里一堆人就跟到哪里这是一个好的团队形式么 

要把一这群小朋友培养成一个团队(如下)需要时间:

 

现代软件工程讲义 4 团队和流程_Java_04

体育团队从一窝蜂抢球演变到有明确的分工阵型战术的团队需要时间。  类似地软件团队的形式最初是混沌的一窝蜂形式 : 一群人开始写代码希望能写好好软件。随着团队的成熟和坏境的变化,  团队模式会演变成下面的几种形式之一:

一窝蜂模式  (chaos team):

不能否认,这样的团队也有只不过他们在这样的模式下存活的时间一般都不长没有机会让别人很好地观察。

主治医师模式 (Chief-Programmer Team, surgical team)

就像在手术台上那样,  有一个主刀医师其他人 (麻醉护士器械各司其职为主刀医师服务。

也有首席程序员  (Chief-programmer)/她处理主要模块的设计和编码其他成员从各种角度支持他的工作 (backup programmer, admin, tool-smith, language lawyer, specialist)Frederic Brooks Jr. 在设计IBM System 360 的时候就是采用这种模式。

主治医师模式的退化在一些学校里软件工程的团队模式往往退化为“一个学生干活其余学生跟着打酱油”

明星模式 (Super-star model):

主治医师模式运用到极点,  可以蜕化为明星模式在这里明星的光芒盖过了团队其他人前一阵子喧嚣一时的“翔之队”就是一个例子。明星也是人也会受伤犯错误如何让团队的利益最大化而不是明星的利益最大化如何让团队的价值在明星陨落之后仍然保持这是这个模式要解决的问题。 

社区模式 (Community Model):

社区由很多志愿者参与每个人参与自己感兴趣的项目贡献力量大部分人不拿报酬。这种模式的好处是“众人拾柴火焰高”,但是如果大家都只来烤火,不去拾柴;或者捡到的柴火质量太差最后火也熄灭了。  社区” 并不意味着“随意”,  一些成功的社区项目(例如开发和维护Linux 操作系统的社区)都有很严格的代码复审和签入的质量控制。

业余剧团模式 (Amateur Theater Team):

这样的团队在每一个项目(剧目)中不同的人会挑选不同的角色。在下一个剧目中这些人也许会换一个完全不同的角色类型。各人在团队中听从一个中央指挥(导演)的指导和安排。在学生实践项目或培训项目中这样的事情经常发生。

秘密团队 (skunk work team):

一些软件项目在秘密状态下进行别人不知道他们具体在做什么。 Apple 公司在研发 Macintosh 之后的系统时就有两三个团队在不同时期进入秘密状态开发。现在一些创业团队也是处于类似状态。  这种模式的好处是:  团队内部有极大的自由没有外界的干扰 (不用每周给别人介绍进展听领导的最新指示),团队成员有极大的投入。

特工 (SWAT) 团队:

就像电影电视中的特工组《加里森敢死队》等等影片一样,软件行业的一些团队由一些有特殊技能的专业人士组成,负责解决一些棘手而有紧迫性的问题。例如2000 年之前很多公司都需要专业人士去解决 Y2K 问题。这些团队成员必须了解传统语言和老式系统才能胜任这样的任务。现在还有一些团队专门做网站安全性服务。 

交响乐团模式 (Orchestra):

大家看过交响乐团的演奏。我觉得有下面一些特点:

·         家伙多门类齐全。

·         各司其职各自有专门场地,演奏期间无聊天走动随意交流等现象。

·         演奏都靠谱同时看指挥的。

·         演奏的都是练习过多次的曲目重在执行。

 

现代软件工程讲义 4 团队和流程_Software_05

 

现代软件工程讲义 4 团队和流程_Software_06