7.1人力资源管理7.2软件资源管理7.3硬件资源管理7.4案例故事解析7.5小结第7章软件项目资源管理7.1人力资源管理7.1.1人力资源管理概念7.1.2人力资源分析与策划7.1.3人力资源的获取7.1.4团队组织和分工7.1.5团队建设7.1.6人力资源评估7.1.7案例:诺基亚如何建设优秀团队一般来说,人力资源管理是一项复杂的工作,其具有的内容是由下列若干相互联系的任务所组成。(1)分析人力资源需求、规划人力资源配备情况(2)获取人力资源信息、招聘员工、确定劳资关系(3)聘任员工、任用员工(4)制定报酬和福利制度。7.1.1人力资源管理概念软件项目人力资源管理的主要内容在于人力资源规划和分析。人在软件项目中既是成本,又是资本。一般来说,人力成本占软件项目成本构成的主要部分。这就要求我们从成本角度去衡量人力资源,尽量使人力资源的投入最小、产出最大。由于软件开发人员的个人素质与差异很大,因此对软件开发人员的选择、分工十分关键。软件人员的合理选择及分工,充分发挥每个人的特长和经验显然是十分重要的。因为软件产品不易理解、不易维护,因此软件人员的组织方式十分关键。一个重要的原则是,软件开发人员的组织结构与软件项目开发模式和软件产品的结构相对应,这样可以达到软件开发的方法、工具、与人的统一,从而降低管理系统的复杂性,有利于软件开发过程的管理与质量控制。7.1.1人力资源管理概念7.1.1人力资源管理概念图7.1人力资源管理工作的主要内容7.1.1人力资源管理概念图7.2人力资源规划的过程7.1.2人力资源分析与策划7.1.2人力资源分析与策划制定软件项目的人力计划,主要基于工作量和进度预估。一般来讲,工作量与项目总时间的比值就是理论上所需要的人力数,但选取和分配人力有许多值得研究的问题。人员-进度权衡定律Brooks定律Norden-Rayleigh曲线人员-进度权衡定律估算软件开发工作量时得出的公式:433/tCSE其中,E是以人年为单位的工作量,S是以LOC为单位的源代码行数,C是技术因子,t是以年为单位的耗费时间(直到产品交付所用的时间)。软件项目的工作量(E)与交付时间(t)的4次方成反比,软件开发过程中人员与时间的折衷是十分重要的问题。7.1.2人力资源分析与策划Brooks定律向一个已经拖延的项目追加新的开发人员,可能会使这个项目完成得更晚。时间与人员不能线性互换的原则。7.1.2人力资源分析与策划Norden-Rayleigh曲线图7.3用作人力计划的Norden-Rayleigh曲线开始阶段人力过剩,造成浪费(①);到开发后期需要人力时,又显得人手不足(②);以后再来补偿,已为时过晚(③),甚至可能如Brooks定律所指出的,会导致越帮越忙的结果。7.1.2人力资源分析与策划在制定人力资源计划时,就要在基本按照上述曲线配备人力的同时,尽量使某个阶段的人力稳定,确保整个项目期人员的波动不要太大。这一目标被称为“人力资源计划的平衡”例子P203-2047.1.2人力资源分析与策划7.1.3人力资源的获取人力资源获取的3种渠道:组织内部选拔招聘熟人介绍项目经理的必备素质:良好的交流沟通能力良好的文档的能力解决冲突的能力和项目实践经验7.1.4人员的组织与分工软件团队中的角色一个富有工作效率的软件项目团队应包含负责各种业务的人员。每位成员扮演一个或多个角色。常见的一些项目人员承担的岗位包括:分析师、策划师、数据库管理员、设计师、操作/支持工程师、程序员、项目经理、项目赞助者、质量保证工程师、需求分析师、主题专家(用户)、测试人员。开发人员的组织项目团队的组织可采取垂直方案、水平方案或是混合方案。按垂直方案组织的团队,其特点是成员由多面组成,每个成员都充当多个角色。按水平方案组织的团队,则其成员由各方面的专家组成,每个成员充当一到两个角色。以混合方案组织的团队既包括多面手,又包括专家。7.1.4人员的组织与分工水平团队方案水平团队由专家组成。此类团队同时处理多个用例,每个成员都从事用例中有关其自身的方面。优点:(1)能高质量完成项目各个方面(需求、设计等)的工作。(2)一些外部小组,如用户或操作人员,只需要与了解他们确切要求的一小部分专家进行交互。缺点:(1)专家们通常无法意识到其他专业的重要性,导致项目的各个方面之间缺乏联系;(2)“后端”人员所需的信息可能无法又“前端”人员来收集;(3)由于专家们的优先权、看法和需求互不相同,所以项目管理更为困难7.1.4人员的组织与分工水平团队方案成功的关键因素:(1)团队成员之间需要有良好的沟通,这样他们才能彼此了解各自的职责;(2)需要制度专家们必须遵循的工作流程和质量标准,从而提高移交给其他专家的效率。一个较为极端的水平团队的组织形式是所谓基于“主程序员”开发方式,其在开发小组有且仅有一个技术核心,就是主程序员。在这组织方式里,主程序员负责规划、协调和审查小组的全部技术活动;其他人员,包括程序员、后备工程师等,都是主程序员的助手。这一方式的成败主要取决于主程序员的技术和管理水平7.1.4人员的组织与分工垂直团队方案垂直团队方案,其组织形式是建立软件民主开发小组。这种组织结构是无核心的,每个人都充当开发的多面手。强调组内成员人人平等,组内问题均由集体讨论决定。优点:(1)有利于集思广益,组内成员互相取长补短,开发人员能够掌握更广泛的技能;(2)以单个用例为基础实现平滑的端到端开发。缺点:(1)多面手通常是一些更价很高并且很难找到的顾问;(2)多面手通常不具备快速解决问题所需要的特定技术专长;(3)主题专家可能不得不和若干开发人员小组一起工作,从而增加了他们的负担;(4)所有多面手水平各不相同。7.1.4人员的组织与分工垂直团队方案成功的关键因素:(1)每个成员都按照一套共同的标准与准则工作;(2)开发人员之间需要进行良好的沟通,以避免公共功能由不同的组来实现;(3)公共和达成共识的体系结构需要尽早在项目中确立。7.1.2人员的组织与分工混合型团队方案混合方案团队由专家和多面手共同组成。优点:(1)外部小组只需要与一小部分专家进行交互;(2)专家们可集中精力从事他们所擅长的工作;(3)各个用例的实现都保持一致。缺点:(1)拥有前两种方案的缺点;(2)多面手仍然很难找到;(3)专家们仍然不能认识到其他专家的工作并且无法很好地协作,尽管这应该由多面手来调节;(4)项目管理仍然很困难。7.1.4人员的组织与分工混合方案团队的成功关键因素:(1)项目团队成员需要良好的沟通;(2)需要确定公共体系结构;(3)必须适当地定义公共流程、标准和准则。衡量项目成功与否的一个重要因素是项目结束后团队的士气。7.1.4人员的组织与分工7.1.4人员的组织与分工服务保障人员配备软件项目或软件开发小组可以配置若干个秘书、软件工具员、测试员、编辑和律师等服务保障人民。其主要职责:负责维护和软件配置中的文档。源代码、数据及所依附的各种磁介质;规范并收集软件开发过程中的数据;规范并收集可重用软件,对它们分类并提供检索机制;协助软件开发小组准备文档,对项目中的各种参数,如代码行、成本、工作进度等,进行估算;参与小组的管理、协调和软件配置的评估。7.1.4人员的组织与分工各阶段人员需求软件项目的计划与分析阶段;此时只需要少数人,主要是系统分析员、从事软件系统论证和概要设计的软件高级工程师和项目高级管理人员;项目概要设计:此时要增加一部分高级程序员;详细设计:此时要增加软件工程师和程序员;编码和测试阶段:此时还要增加程序员、软件测试员。软件开发过程中,人员的选择、分配和组织是涉及软件开发效率、软件开发进度、软件开发过程管理和软件产品质量的重大问题,必须引起项目负责人的高度重视。7.1.4人员的组织与分工7.1.5团队建设团队建设贯穿于整个项目周期团队建设不仅指团队的组建还包括团队的管理。团队建设的目的就是为了提高团队的效率实现项目目标。优秀的项目经理。7.1.6人力资源评估绩效考核:项目绩效个人绩效激励正激励负激励7.1.7案例:诺基亚如何建设优秀团队提倡平等,开放沟通鼓励创新借企业文化塑造团队精神没有完美的个人,只有完美的团队7.2软件资源管理7.2.1软件资源基本概念7.2.2软件资源的服用方式7.2.3软件复用的粒度7.2.4可复用软件资源的管理7.2.5CASE工具及其管理7.2.1软件资源基本概念可复用软件资源:这些软件资源不仅包括源代码,还包括软件开发方法、需求规格说明、设计结构、开发工具与支撑环境、测试分析数据和维护信息等。7.2.2软件资源的复用方式实践已经证明,软件复用技术不仅可以提高软件生产率和软件质量,而且也是降低开发成本、缩短开发周期的重要途径。软件资源的复用方式(1)源代码的复用属最低级复用。这种复用方式将一直存在。但是它的缺点也很明显,一是程序员需要花费大量的精力读懂源代码;二是程序员经常会在复用过程中因不适当地更改源代码而导致错误的结果。(2)目标代码级复用通常以函数库的方式来体现。这种形式的复用可能会受限于所用语言,软件复用的灵活性将降低。目标代码级复用最根本的缺点是无法和数据结合在一起。(3)设计结果复用这种形式是对某个应用系统的设计模型(即求解域模型)的复用。(4)分析结果复用当用户需求未改变,而系统体系结构发生根本改变时,可以复用系统的分析模型。7.2.2软件资源的复用方式(5)类模块复用类库与库函数有本质区别,主要表现在:独立性强高度可塑性接口清晰、简明。类具有封装性,软件开发人员勿需了解类的实现细节,只需清楚类提供的对外接口,就可复用类提供的功能(方法)。根据类的特性,类模块复用又可进一步分为以下三种方式:实例复用、继承复用、多态复用。7.2.2软件资源的复用方式软件复用的粒度(1)小粒度复用小粒度复用即小规模复用。源代码复用和目标代码复用属于小粒度复用。(2)中粒度复用中粒度复用即中等规模复用。按复用粒度的大小,又分为两种:微体系结构的复用和宏体系结构的复用。7.2.3软件复用的粒度(3)大粒度复用大粒度复用即大规模复用,复用对象是独立开发的应用程序或子系统。在服用过程中,它们不能作任何修改和扩充。类模块复用和构件技术属于大粒度复用。为提高软件生产率和软件质量,需要把重用价值的软件模块或控件收集起来,再把相关的资料组织在一起,标注说明,建立索引,从而建立可复用的软件部件库。目前流行的软件复用思想正是如此,其具体方法是通过利用现有的构件技术建立可复用的软件构件库。7.2.3软件复用的粒度7.2.4可复用软件资源的管理在课本第6.5节介绍过了构件,现在从软件资源管理的角度讲解构件库的管理构件资源的分类构件资源的分类是以构件分类体系为依据对构件进行的一种预处理。在分类体系中,可按构件的标准、使用范围、系统类型、应用领域、应用场合、功能和粒度都属性对构件进行划分。构件库的检索系统开发人员根据自己的需要从构件库中查找与之匹配的构件的过程,称之为可复用构件的检索。检索的一半步骤如图7.8所示:图7.8构件检索模型7.2.4可复用软件资源的管理7.2.5CASE工具及其管理CASE工具“CASE”的意思就是计算机辅助软件工程。CASE作为软件开发自动化支持的代名词,目前已被软件工程界普遍接受。CASE工具是除操作系统之外的所有软件工具的总称。我们可以简单地把CASE理解为:CASE=软件工程+自动化工具。目前市场上已经出现了较多的CASE工具,按其应用类型可分为以下三类:(1)辅助设计工具(2)辅助计算工具(3)辅助管理工具按照CASE对于软件工具之间的集成方式,也有以下三种:(1)单独运行方式(2)工具与工具之间直接连通(3)通过IPSE(IntegratedProjectSupportEnviornment)CASE工具产品目前常见的CASE工具产品如表7.5所示:7.2.