近 20 年来,许多新一代的软件技术、 过程和方法的发展异常迅速,但软件工业仍然是一个人力密集的过程,离工业化生产方式的差距相当遥远,软件开发人员的素质、 技术、 能力以及软件开发团队建设的好坏,对软件项目的成败有者举足轻重的作用。为了提高软件开发的效率,提高软件开发的质量,减少软件开发的成本,降低软件开发的风险,就必须加强软件开发人员的管理,建立高效的开发团队。
1 软件开发团队在软件开发中的重要性
软件企业与传统工业企业不同,与现代企业的其他行业也不同。其最主要特征就是,企业最主要的 “资产” 是一批掌握技术、 熟悉业务、 懂得管理的 “人”。软件企业主要的成本是人的成本,软件企业主要的财富积累是知识和经验的积累。因此,软件企业的人力资源管理,是企业最主要的管理内容。软件项目组的管理过程,几乎全部是围绕 “人” 来进行的管理。而作为被管理对象的 “人” 本身管理的讨论,则越来越成为软件领域所要讨论的核心问题。软件项目队伍是项目的基本工作单元,队伍的作用非常重要,是顺利实施项目的基础平台,值得花时间研究,探讨与项目成败的关系,以便更好地组建队伍,最大限度地提高工作效率。软件项目管理的主体是软件开发团队。一个软件项目管理的好坏,很大程度就体现在软件开发团队的建设和管理上。软件开发团队是软件项目实施的基础,它直接影响和制约着软件项目管理的最终效果。软件开团队在软件开发中的作用越来越突出。团队管理非常重要,它是项目顺利进行的基础,对于一个球队来说,要大力培养他们的团队精神,要求队员深刻认识自己球队的特点,团队精神能使球队更具有竞争力,可以打败实力相同而没有团队精神的球队。同理,对于软件项目团队也一样,在开发复杂软件的时候,通常每个人开发不同的部分,运行这些软件的设备又可能来自不同的供应商,而事后将软件的不同模块集成在一起,带来的问题会更多。一个软件模块本身没有问题,但是合在一起却可能不能工作。所有这些都需要一个高效合作的团队来共同完成的,所以建立一支工作效率高的队伍非常重要。
2 软件开发团队的建设内容
高效的软件开发团队是建立在合理的开发流程及团队成员密切的合作基础之上的,成员共同迎接挑战,有效地计划、 协调和管理各自的工作以至完成明确的目标,高效的开发团队具有如下特征:
(1)具有明确清晰的共同目标。高效的开发团队对要达到的目标有清楚的理解,并知道目标的重大意义和价值。清晰明确的目标会激励团队成员把个人目标升华到群体目标,团队的成员愿意为团队目标做出承诺,共同努力实现目标。项目经理及团队成员对于实施什么样的项目;为什么要实施这样的项目;团队的工作范围有哪些;实施项目的主要目标,包括时间要求、 成本指标、 质量性能参数等;完成项目的重要交付成果及其衡量标准,以及实施项目的制约因素及假设前提等问题有着共同的认识与一致的理解。有了明确清晰的目标,团队的每个成员都十分清楚团队要取得什么样的成就以及由此给团队、 给个人带来的益处,他们能将个人目标与项目目标有效地结合起来,会积极地完成工作从而为团队带来高效率的开发,为设计出高质量的软件提供了重要的保证。项目团队参与充分的策划活动,对于如何实现项目的目标,包括采取的步骤,应用的工具、 技术与方法,采用的规章制度与作业流程,以及应遵循的价值观和行为准则达成共识。由于观念上的统一,队员很容易在行为上步调一致,他们都强烈希望为争取项目成功付出努力,能满腔热忱地为实施项目活动付出自己的智慧、 时间和努力,并且能自觉地运用团队精神和共同的价值观去规范自己的行为,去争取项目的成功。
(2)团队成员相互信任,精诚合作。成员间相互信任是高效团队的显著特征。只有相互信任才能够真诚地相互交流,相互支持,共享工作成果,能够围绕项目展开紧密的合作,能够相互指出工作中存在的不足,从而减少相互推卸责任、 相互指责,增加团队的凝聚力,提高项目开发的效率。相反,缺乏信任会使团队散乱,给项目的开发带来不可估量的负面影响。精诚合作是队员强烈地意识到个人和团队的力量,充分了解团队合作的重要性,视彼此的合作是团队智慧和力量的源泉,而不仅限于完成自己的任务。他们充分相信团队比任何一个个人都能做出更好的决定,制定更科学的方案,解决更复杂的难题。团队队员不羞于寻求他人的帮助,能够自觉地以双赢思维相互协调、彼此配合,积极主动地向他人提供所需要的指导与支持,分担团队发展和领导的责任。在冲突和问题面前能够设身处地地站在对方的立场上看问题,能够集思广益倾听团队中其他人的意见。
(3)融洽的关系及通畅的沟通。团队成员之间高度信任、 相互尊重,既关注工作本身,更珍惜彼此之间的友谊,能够共同营造和谐、 宽松、 友爱的工作环境。他们意愿分享知识、 经验和信息,互相关心,使团队有一种强烈的凝聚力,成员在团队中有一种归属感与自豪感,彼此能够分享他人及团队的成功。团队致力于进行开放性的信息交流与沟通,承认彼此存在差异,鼓励不同的意见,并允许自由地表达出来。队员能毫无顾忌地表达他们的意见、 观点和想法,大胆地提出可能产生争议或冲突的问题,而不用担心遭到打击报复。每个人不仅仅是热情的表达者同时也是忠实的听众,团队成员不同的意见和观点能得到尊重和包容。面对冲突和问题,当事人能够就事论事寻求彼此接受的解决问题的方案,并通过诚恳而友善的反馈来帮助团队成员认识他们的长处及弱点,帮助团队实现项目目标。
(4)具有共同的工作规范和框架。软件项目的开发是创造性的工作,但要有必要的开发纪律。建立共同的工作框架使团队成员知道如何达到目标,知道应该做到什么及对开发过程达成共识;建立规范使各项工作有标准可以遵循,使成员知道团队的风格是怎样的;建立一定的纪律约束保证计划的正常执行。在项目策划阶段,团队对如何完成任务、 由谁去完成、 完成任务的期限、 所需技术等方面通过责任分配矩阵(LRM)得到清楚的界定,团队成员分工清晰、 权责对等,每个人都清楚自己在项目中的角色、 职责及汇报关系,包括上级是谁,下级是谁,遇到困难从何处取得支持等。每个人都能得到充分的授权,在完成他应该做的事情的同时,还有一种整体观念,知道自己工作上的失误将对他人、 对整个项目造成的影响。
(5)高昂的士气与高效的生产力是标志。团队成员对项目工作有满腔的热情和高度的信心,大家在一起工作配合默契、 心情舒畅、 其乐融融,彼此能从工作中体会到成功的乐趣,每个队员都强烈地感到作为项目团队一员的骄傲和自豪。团队能够认同和利用个人的特长,依靠集体的力量和智慧去制定项目计划、 优化项目决策、 平衡项目冲突、 解决项目问题,结果团队比任何个人更出类拔萃,做出的决策更正确、 制定的计划更完善、 解决的问题更复杂,能以更低的成本、 更少的投入,产生出高质量、 高标准、 更快捷的项目成果。
3 软件开发团队建设的方法和技术
3.1 选拔或培养适合角色职责的人才开发团队人才选拔和培养是建设高效团队的基础。一个软件项目的完成是由项目经理、 系统分析员、 设计员、 程序员和测试员共同协作完成的,在这个过程中每个角色的职责是不一样的,因此在人才选拔和培养的标准上各有不同。各角色的职责和
要求如下:
3.1.1 项目经理
职责:制定产品的目标;制定各个工作的详细任务表,跟踪这些任务的执行情况,进行控制;组织会议对程序进行评审;综合具体情况,对各种不同方案进行取舍并做出决定;协调各项目参与人员之间的关系。人员要求:对产品有激情,具有领导才能;对问题能正确而迅速地做出确定;能充分利用各种渠道和方法来解决问题;能跟踪任务,有很好的日程观念;能在压力下工作。
3.1.2 系统分析员
职责:了解用户需求,写出 《软件需求规约》 ;建立用户界面原型。人员要求:担任系统分析员的人员应该善于协调,并且具有良好的沟通技巧。担任此角色的人员中必须要有具备业务和技术领域知识的人才。
3.1.3 设计员
职责:定义类的方法和属性以及各个类之间的关联,画出类图;进行数据库设计。
人员要求:掌握面向对象分析与设计技术,统一建模语言
(UML) 。
3.1.4 程序员
职责:按项目的要求进行编码和单元测试。人员要求:良好的编程技能和测试技术。
3.1.5 测试员
职责:执行测试,描述测试结果,提出问题的解决方案。人员要求:了解被测试的系统,具备诊断和解决问题的技能,编程技能。
3.2 增强项目的凝聚力
项目团队的凝聚力不仅是维持项目团队存在的必要条件,而且对项目团队潜能的发挥、项目团队生产效率的提高有重要作用。因此在工作中采取必要的措施不断增强项目团队的凝聚力,并引导团队成员努力为
现项目目标而工作。要增强项目团队的凝聚力,应采取以下措施:
(1)建立共同的愿景。愿景是项目经理与项目组织成员共同
建立起来的、 融项目目标与个人目标于一体的、 项目组织成员们努力要追求的目标。有了这样一个目标,项目团队就可以对团队成员产生强大的吸引力,从而增强团队的凝聚力。另外,愿景使组织目标与团队目标高度一致,因此可以使团队的生产效率大大提高。
(2)采取措施满足项目组织成员各种物质和精神需求。除了建立共同的愿景之外,在项目建设的过程中,项目经理应注意采取必要的措施满足项目组织成员各种物质和精神需求,使其不断受到激励,从而增强团队对他们的吸引力。如:通过使成员承担的工作内容更有挑战性,授予他们在工作中更大的自主权,来满足他们希望实现自我价值的精神需要;通过为成员提供学习的机会,来满足他们希望不断提高自身价值、 不断成长的需要;通过公平合理的工资和奖金的发放,来满足他们希望不断改善生活条件的需要;通过各种各样丰富多彩的业余活动的安排,如聚餐、 郊游等,来满足他们希望与人交往、 沟通的需要。
3.3 营造良好的沟通氛围和交流环境
与 IT 项目成功有直接关系的3个主要因素分别为:用户的积极参与,明确的需求表达,管理层的大力支持。这三要素全部依赖于良好的沟通技巧。要营造良好的沟通氛围和交流环境,具体来说应该做到以下几点:
(1)加强团队成员之间的沟通。成员之间由于价值观、 性格、处世方法等方面的差异会产生各种冲突,人际关系往往会陷入紧张的局面,甚至有可能出现敌视情绪以及向领导者挑战等各
种情况。为此,软件开发经理要进行充分沟通,引导团队成员调整心态和准确定位角色,把个人目标与项目目标结合起来。
(2)促使团队成员尽快熟悉工作环境。团队成员与周围环境之间也会产生不和谐,如对软件开发团队采用的信息技术不熟悉等。软件开发经理要帮助团队成员熟悉工作环境,学习并掌握相关的技术,以利于软件项目目标的及时完成。
(3)加强软件开发团队与其他部门之间的沟通。在软件开发过程中,开发团队与其他部门也会产生各种各样的矛盾冲突,这需要软件开发经理与这些部门的管理者进行很好的沟通和协调,为软件开发团队争取更充足的资源与更好的环境。
3.4 鼓舞项目团队士气项目团队的士气依赖队员对项目工作的热情及意愿,为此,项目经理必须采取有效措施激发成员的工作热情与进一步发展的愿望,创造出信任、 和谐而健康的工作氛围,让每个成员都知道,如果项目成功了,每个人都是赢家,个人的价值也得到了实现,否则便是双输,而且,任何人都没有比团队更聪明、 更有战斗力。鼓励成员相互协调、 彼此帮助,开诚布公地表达自己的思想,