课件
软件团队的重要性
现在是一个知识经济的时代,单靠个人的能力无法应对各种复杂的问题,很难做得又快又好,而依靠团队合作的力量就可以创造出奇迹。
在软件企业,最重要的资产就是一批掌握技术、熟悉业务和懂得管理的人,一个软件项目的好坏,很大程度上就体现在软件团队的建设与管理。
团队组织与管理
团队组织与管理主要包括四个方面:
- 人力资源规划:首先是要识别项目团队中所需要的人员角色,确定他们的职责和所需要的技能,制定出人员需求计划;
- 项目团队组建:根据人员需求计划,选择和获得项目需要的人员,组建项目的团队;
- 项目团队建设:然后通过一系列活动,提高团队成员个人的技能,增强成员之间的信任感和凝聚力,从而保证更好的协作和更高的效率;
- 项目团队管理:同时在项目进展过程中,跟踪团队成员的表现,解决问题和管理冲突,优化项目的绩效;
软件开发过程有各种不同的活动,每一个开发人员可能只擅长软件开发的某一个特定方面,所以整个开发需要多种不同角色的分工与协作:
- 对于系统分析员来说,其主要任务是要获取和定义用户的需求,在需求分析的基础上,系统设计人员(系统架构师)与分析员一起工作确定系统的整体结构;
- 系统架构师与编程人员一起完成代码编写工作;
- 开发工作进入测试阶段时,程序员负责单元测试,测试人员负责集成测试和系统测试;
- 系统交付时,培训人员负责用户培训工作;
- 系统交付使用后会进入维护阶段,各种角色的开发人员将参系统的缺陷修复和新功能开发;
人员的选择
人员需求计划
项目初期,首先要做人力资源规划,上图表格显示的是某一个项目的人员需求计划,它包括了团队需要的开发角色和数量、进入和退出项目团队的时间、所需要的基本技能以及获取相关人员的方式等。
人员选择考虑的因素
在制定了人员需求计划之后,就要开始选择和获得所需要的团队成员。看下面的案例描述:
某公司需要在原有技术的基础上,开发一个报警系统的新产品,这个产品服务于独立生活的老年人和残疾人。
根据常规的要求,项目团队应该包括需求分析人员、设计人员、编程人员和测试人员等。我们在选择团队成员的时候应该注重哪些方面呢?
- 首先产品是针对老年人和残疾人的,所以需求分析人员必须熟悉老年人和残疾人的生活,善于和他们进行沟通;
- 其次,整个产品基于公司现有的技术,产品涉及到软件和硬件的开发,所以开发人员中应该有人对原有产品的开发比较熟悉,并且具有软硬件产品的开发经验;
建立一支优秀的项目团队,是从选择合适的人开始的。在选择人员的时候需要考虑的因素有:
- 教育背景可以显示候选人应该掌握的基础知识和学习能力,但是开发人员的经验也可以在项目实践中学习和获得,所以这个因素并不是关键性的,往往刚毕业的学生在进入一个企业时可能会考察他的教育背景,但是在工作之后这个因素就没有太大的作用了;
- 对于项目来说,开发人员对于应用领域、开发平台和编程语言的知识、经验比较重要;
- 除了技术条件之外,候选人的工作态度、性格和能力也是非常关键的因素;
- 解决技术难题的能力至关重要,通常会被优先进行考虑,只要有较强的解决问题能力,或许可以弥补其他因素的不足;
- 由于项目成员经常需要和其他人员、管理者和客户进行口头和书面的交流,所以沟通能力是一个必须要考察的因素;
- 适应性可以通过候选人的各种经历进行判断,这个因素反映出一个人的学习能力;
- 项目成员应该有积极的工作态度,乐于学习新技术;
- 由于软件开发需要团队的协作,所以候选人必须与团队成员关系融洽,目前还没有关于软件工程方面的特定个性类型;
- 工作态度和个性,这两个因素很重要,但都比较难以评估;
人的性格类型
不同性格的人会表现出不同的工作风格,心理学家荣格提出了下图这样的一个模型,来描述人的性格类型:
横轴表示交流风格,纵轴表示决策风格。一般人的工作风格可以对应到图中的 4 个象限中:
- 第一种感性内向的人:他们比较内向敏感,在意周围人对自己的看法,通常是个好的倾听者,但是自己做决策比较困难。西游记中沙僧比较符合这种特质。
- 第二种感性外向的人:大部分的决策是建立在情感反映的基础上,喜欢把自己的想法直接告诉别人,凭直觉做决策,做事有时比较随意而且耐心不足。猪八戒是典型的感性外向的人;
- 第三种理性内向的人:遇事深思熟虑,善于思考,注重长远目标,做事细致,追求完美,但有时因为过于谨慎而变得优柔寡断。唐僧具备这样的性格特点;
- 第四种理性外向的人:这种人依靠逻辑推理进行决策,坚持自己的想法,注重实干,具有很强的执行力和突出的业绩,由于往往偏重关注工作结果,对他人的情感关心不够。孙悟空是这样性格的人;
在组建团队的时候:
- 应该考虑团队中的技术、经验和个性,在整体上取得平衡。
- 选择性格互补的成员,组成的团队可能比单纯选择技术能力的团队更有活力和效率。
- 团队的领导力来自于成员的尊重,而不是名义上的头衔。
团队的概念
团队是由若干人组成的一个群体,他们具有互补的技能,对一个共同目的、绩效目标及方法做出承诺并彼此负责。
现实中也有很多团队的例子。团队并不只是简单的把一组人聚集在一起,团队的共同特点是:
- 具有一致的集体目标;
- 营造出一种互相交流和协作学习的工作环境;
- 团队成员有自豪感;
- 团队内部有各自的分工,互相依赖,共同协作完成任务;
- 团队工作有正确的绩效评估;
开发团队组织模式
软件开发团队有各种不同的组织形式,适合不同人员和项目的需要。
民主式结构
民主式结构:团队成员完全平等,享有充分民主,成员之间通过协商做出决策。
这是一种比较极端的模式,该组织结构具有以下特点:
- 团队成员完全平等,名义上的组长与其他成员没有任何区别;
- 项目工作由全体讨论协商决定,并根据每个人的能力和经验进行分配;
- 这种结构的团队一般规模小、成员间关系紧密、能互相学习,同等的项目参与权,可以激发大家的创造力,有利于攻克技术难关;
- 但该结构缺乏明确的权威领导,很难处理意见分歧的情况,在组内多数成员技术水平不高或者缺乏经验的情况下,不适合采用;
主程序员式结构
主程序员式结构:以主程序员为核心,主程序员既是项目管理者也是技术负责人,团队其他人员的职能进行专业化分工。
考虑到多数开发人员是缺乏经验的,软件开发过程中还有许多事务性的工作。《人月神话》一书中提出了一种主程序员的团队模式,其借鉴了外科手术队伍的组织结构:
- 主程序员就像是主刀医生,负责所有的开发决策,并完成主要模块的设计和实现工作;
- 后备程序员作为一个替补,在必要时替代主程序员;
- 其他程序员完成主程序员分配的编程任务;
- 秘书负责维护项目文档,并进行初步的测试工作;
这种模式中,所有成员都听从主程序员的安排,只和主程序员进行交流和沟通,降低了项目沟通的复杂性。但在现实中,很难找到技术和管理才能兼备的主程序员。
矩阵式结构
矩阵式结构:将技术与管理工作进行分离,技术负责人负责技术上的决策,管理负责人负责非技术性事务的管理决策和绩效评价。
在大型的软件企业中,还有一种层次化的矩阵式结构,在这种结构中,开发人员隶属于不同的职能部门,项目经理可以从不同部门选择合适的成员组成开发团队,项自经理负责整个项目的过程管理和绩效评价。另外还有专门的技术负责人,负责软件开发的技术决策和方案设计,开发人员按照不同角色分工,协作完成开发任务。
这种结构的好处是将技术和管理工作进行分离,有效解决了技术和管理能力无法兼备的问题。但是,由于团队成员受到双重的领导,明确地划分技术负责人和管理负责人的权限显得尤为重要。
建立高效的项目团队
团队建设的好坏对软件项目的成败具有举足轻重的作用。我们需要通过召开项目会议,明确团队成员的角色分工,形成共同的信念和一致的目标,建立起团队运行的规则,激发团队成员的激情,产生 1+1 大于 2 的合力,最终实现项目的成功。
团队建设活动
团队建设活动有各种形式,并且贯穿整个开发过程。比如在项目启动时,要建立团队章程,针对开发任务组织兴趣小组和团队作战史,在每个阶段组织评审、验收和总结活动,对于项目工作要进行绩效沟通和有效激励,在项目结束时举行庆功活动等等。
绩效评估
绩效评估是通过对团队成员工作绩效的考察和评价,反映成员的实际能力和业绩,以及对某种工作职位的适应度。为物质奖励、人员调配和精神激励提供依据。
如果用个人工作量来衡量,比如说代码量是不是合理?代码写得多并不代表这些代码写得好而且有价值,过分强调代码量反而会造成大量不必要的代码。
如果用个人工作时间,看谁加班多、走得晚,情况又会怎么样呢?时间并不能反映出工作成果和效率,磨洋工可能会更糟糕。
团队平均主义又会怎样呢?大锅饭会使优秀的人走掉,最后只剩下平庸的人在过平均主义的日子。
应该说不存在完美的评价方法,但是完全不评价就会更槽糕。
绩效评估应该是多维度的,下表给出的是是一种二维评价体系:
- 个人完成任务维度主要是由团队成员和直接经理商量工作目标,直接经理根据任务完成情况给出好、中、差三个级别的评价;
- 团队贡献维度采用团队内部互评的方式,评出团队中最好的 20%、中间的 70% 和最需要改进的 10%。这个体系反映了个人的工作情况,也反映了他对整个团队的贡献;
绩效考核做得好可以有效地激发员工积极性,改进个人的工作绩效最终实现整体绩效的提升,如果不合理就会影响人员士气、稳定性,后续合作和产品质量,所以必须要认真对待慎重考虑。