1、第二章第二章 软件项目管理软件项目管理了解软件项目管理的内容了解软件项目管理的内容软件项目产品的特点软件项目产品的特点软件项目管理的内容软件项目管理的内容对项目进行计划对项目进行计划ITIT项目估算、计划和进度管理项目估算、计划和进度管理组织管理组织管理软件管理的目标就是保证软件项目的成功,软件管理的目标就是保证软件项目的成功,就是保证在规定的时间内、预算计划内开发就是保证在规定的时间内、预算计划内开发出令用户满意的软件产品。软件开发的所有出令用户满意的软件产品。软件开发的所有成员都紧紧围绕这一个目标进行工作。成员都紧紧围绕这一个目标进行工作。那么,针对上一章选取的软件项目进行项目那么,针对上
2、一章选取的软件项目进行项目管理,应该包含哪些具体的内容呢?管理,应该包含哪些具体的内容呢?3 3软件项目管理的任务软件项目管理的任务根据项目合同书的要求,制定项目计划和工程进根据项目合同书的要求,制定项目计划和工程进度安排、监督和检查项目实施过程、保证工程满度安排、监督和检查项目实施过程、保证工程满足要求的质量标准、分析确定并排除风险、在规足要求的质量标准、分析确定并排除风险、在规定的期限和预算成本内完成项目。定的期限和预算成本内完成项目。软件项目产品的特点软件项目产品的特点抽抽象性象性缺缺陷检测的困难性陷检测的困难性高高度的复杂性度的复杂性缺缺乏统一规则乏统一规则5 5什么是软件项目管理什么
3、是软件项目管理软件项目管理是为了使软件项目能够按照预定的软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。进度、质量、风险等进行分析和管理的活动。软件项目管理的对象是软件工程项目,它所涉及软件项目管理的对象是软件工程项目,它所涉及的范围覆盖了整个软件工程过程。的范围覆盖了整个软件工程过程。6 6项目管理的主要要素项目管理的主要要素范围,也称工作范围。指为了实现项目目标必须完成的所范围,也称工作范围。指为了实现项目目标必须完成的所有工作。一般通过定义交付成果和交付成果的标准来定义有
4、工作。一般通过定义交付成果和交付成果的标准来定义工作范围。工作范围。时间,也称为项目进度。与项目时间相关的因素用进度计时间,也称为项目进度。与项目时间相关的因素用进度计划来描述,进度计划不仅说明了完成项目工作范围内所有划来描述,进度计划不仅说明了完成项目工作范围内所有工作需要的时间,也规定了每个活动的具体开始日期和完工作需要的时间,也规定了每个活动的具体开始日期和完成日期。成日期。成本,也称为项目费用。指完成项目所需要的所有款项的成本,也称为项目费用。指完成项目所需要的所有款项的费用,包括人力成本、原材料、设备租金、分包费用和咨费用,包括人力成本、原材料、设备租金、分包费用和咨询费用等。询费用
5、等。质量。指项目满足明确或隐含需求的程度,与绩效和满意质量。指项目满足明确或隐含需求的程度,与绩效和满意度密切相关。一般通过定义工作范围中的交付物标准来明度密切相关。一般通过定义工作范围中的交付物标准来明确定义,这些标准包括各种特性及这些特性需要满足的要确定义,这些标准包括各种特性及这些特性需要满足的要求。求。7 7项目管理的过程项目管理的过程启动软件项目启动软件项目制订项目计划制订项目计划评审项目计划评审项目计划编写管理文档编写管理文档8 8项目管理的内容项目管理的内容项目的范围管理项目的范围管理时间管理时间管理成本管理成本管理质量管理质量管理人员的组织管理人员的组织管理沟通管理沟通管理风险
6、管理风险管理采购管理和集成管理采购管理和集成管理9 9一个软件项目如果要进入到系统实施阶段,需要做一个软件项目如果要进入到系统实施阶段,需要做的准备工作可能包括如何对项目进行阶段性的划分的准备工作可能包括如何对项目进行阶段性的划分,在每个阶段中的工作重点和任务是什么,完成本,在每个阶段中的工作重点和任务是什么,完成本阶段工作和任务的人力、资源需求,时间期限,阶阶段工作和任务的人力、资源需求,时间期限,阶段工作和任务的成果形式等等,这些都是在项目启段工作和任务的成果形式等等,这些都是在项目启动时需要进行考虑的内容。那么,针对于我们目前动时需要进行考虑的内容。那么,针对于我们目前的项目,应该如何组
7、织管理这些任务呢?的项目,应该如何组织管理这些任务呢?1010影响影响ITIT项目进度的因素项目进度的因素低低估估ITIT项目实现的条件项目实现的条件项项目参与者的失误目参与者的失误不不可预见事件的发生可预见事件的发生项项目状态信息收集的情况目状态信息收集的情况计计划变更调整的及时性划变更调整的及时性1111ITIT项目进度控制项目进度控制识别偏差识别偏差分析偏差原因分析偏差原因确定对既发偏差的态度确定对既发偏差的态度关注进度正偏差关注进度正偏差调整项目进度计划调整项目进度计划1212人员是软件机构中最重要的资产,他们代表人员是软件机构中最重要的资产,他们代表着智力资本。着智力资本。合理地调配
8、人员是成功完成软件项目的切实合理地调配人员是成功完成软件项目的切实保证。保证。因此软件项目管理的关键是人员管理。项目因此软件项目管理的关键是人员管理。项目管理者必须利用其团队成员,用可能最有效管理者必须利用其团队成员,用可能最有效的方式解决技术和非技术上的问题。的方式解决技术和非技术上的问题。软件机构要尊重员工,管理者要激励员工。软件机构要尊重员工,管理者要激励员工。软件项目成功的关键是能够将高素质的软件软件项目成功的关键是能够将高素质的软件开发人员合理地组织起来,使他们有效地分开发人员合理地组织起来,使他们有效地分工协作,共同完成开发工作。工协作,共同完成开发工作。项目组的组织原则项目组的组
9、织原则软件开发小组的规模不宜太大,人数不能太多,软件开发小组的规模不宜太大,人数不能太多,一般一般3-53-5人左右为宜。人左右为宜。切忌在开发过程中增加人员,这将使人员之间的切忌在开发过程中增加人员,这将使人员之间的联系增多,造成通信成本的增加而导致效率降低联系增多,造成通信成本的增加而导致效率降低。项目组的组织方式项目组的组织方式民主制程序员组民主制程序员组主程序员组主程序员组现代程序员组现代程序员组民主程序员组民主程序员组小组成员完全平等,享有充分民主,通过协商做出决策。小组成员完全平等,享有充分民主,通过协商做出决策。小组成员之间的通讯是平行的,如果小组有小组成员之间的通讯是平行的,如
10、果小组有n n个成员,则个成员,则可能的通讯信道为可能的通讯信道为 条。条。民主制程序员组通常采用非正式的组织方式,虽然名义上民主制程序员组通常采用非正式的组织方式,虽然名义上有一个组长,但其与组内其它成员完成同样的任务。有一个组长,但其与组内其它成员完成同样的任务。由小组全体成员讨论协商决定应该完成的工作,并依据各由小组全体成员讨论协商决定应该完成的工作,并依据各成员能力和经验分配适当的任务。成员能力和经验分配适当的任务。n(n-1)/2优点:优点:组员对发现程序错误持积极的态度,这种态度有助于组员对发现程序错误持积极的态度,这种态度有助于更快地发现错误,从而导致高质量的代码;更快地发现错误
11、,从而导致高质量的代码;组员享有充分民主,小组有高度凝聚力,组内学习气组员享有充分民主,小组有高度凝聚力,组内学习气氛浓厚,有利于攻克技术难关。氛浓厚,有利于攻克技术难关。缺点缺点在组内多数成员技术水平不高或缺乏经验情况下采用在组内多数成员技术水平不高或缺乏经验情况下采用该组织方式,将会因为没有明确的权威指导项目进展该组织方式,将会因为没有明确的权威指导项目进展,小组成员间缺乏必要的协调,而导致项目失败。,小组成员间缺乏必要的协调,而导致项目失败。应用应用适合于研制周期长、难度大的项目。日本大多数软件适合于研制周期长、难度大的项目。日本大多数软件开发公司都采用这种形式。开发公司都采用这种形式。
12、主程序员组主程序员组主程序员组使用经验丰富、技术好、能力强的程主程序员组使用经验丰富、技术好、能力强的程序员作为主程序员。同时,利用人和计算机在事序员作为主程序员。同时,利用人和计算机在事务性工作方面给主程序员提供充分支持,而且保务性工作方面给主程序员提供充分支持,而且保证所有通讯都通过一两个人进行。证所有通讯都通过一两个人进行。后备程序员后备程序员后备程序员也应该技术熟练而且富于经验,他协助主后备程序员也应该技术熟练而且富于经验,他协助主程序员工作并且在必要时程序员工作并且在必要时(主程序员生病、出差或跳槽主程序员生病、出差或跳槽)接替主程序员的工作。所以后备程序员必须和主程序接替主程序员的
13、工作。所以后备程序员必须和主程序一样优秀,一样深入了解项目。一样优秀,一样深入了解项目。主程序员主程序员主程序员既是成功的管理人员,又是经验丰富、技术主程序员既是成功的管理人员,又是经验丰富、技术好、能力强的高级程序员,负责体系结构设计和关键好、能力强的高级程序员,负责体系结构设计和关键部分的详细设计,并且负责指导其他程序员完成详细部分的详细设计,并且负责指导其他程序员完成详细设计和编码工作设计和编码工作编程秘书编程秘书编程秘书负责完成与项目有关的全部事务性工作,如编程秘书负责完成与项目有关的全部事务性工作,如,维护项目资料库和项目文档,编译、连接、执行源,维护项目资料库和项目文档,编译、连接
14、、执行源程序和测试用例。程序和测试用例。虽然主程序员组有很多优点,但是,我们还应看虽然主程序员组有很多优点,但是,我们还应看到这种组织方式固有的不切实际的地方:到这种组织方式固有的不切实际的地方:主程序员既是高级程序员又是优秀管理者,但现实中主程序员既是高级程序员又是优秀管理者,但现实中这种人才很难见到。这种人才很难见到。后备程序员更难找。人们希望后备程序员像主程序员后备程序员更难找。人们希望后备程序员像主程序员一样优秀,但他们必须坐在一样优秀,但他们必须坐在“替补席替补席”上,拿着较低上,拿着较低的工资等待接替主程序员。的工资等待接替主程序员。编程秘书也很难找。专业的软件技术人员一般都厌烦编
15、程秘书也很难找。专业的软件技术人员一般都厌烦日常的事务性工作。日常的事务性工作。现代程序员组现代程序员组特点特点将将“主程序员组主程序员组”中的主程序员的职则划为两个人来承担中的主程序员的职则划为两个人来承担:一个技术负责人,负责小组的技术活动一个技术负责人,负责小组的技术活动一个行政负责人,负责所有的非技术的决策活动一个行政负责人,负责所有的非技术的决策活动现代程序员组 大型项目的技术管理组织结构包含分散决策的组织方式 优点优点将管理和行政分开,有助于调动组员的积极性将管理和行政分开,有助于调动组员的积极性行政组长和技术组长分工明确行政组长和技术组长分工明确避免了避免了“主程序员组主程序员组
16、”中,全才主程序员难找的问题中,全才主程序员难找的问题缺点缺点有时行政组长和技术组长的管理权限界限不明有时行政组长和技术组长的管理权限界限不明选择软件工程小组结构时应考虑的选择软件工程小组结构时应考虑的7 7个因素个因素待解决问题的困难程度待解决问题的困难程度要开发程序的规模要开发程序的规模小组成员在一起工作的时间小组成员在一起工作的时间问题能够被模块化的程度问题能够被模块化的程度对待开发的系统的质量和可靠性的要求对待开发的系统的质量和可靠性的要求交付日期的严格程度交付日期的严格程度项目要求的社交项目要求的社交(通信通信)程度程度通过对一些知名企业的调研,在整个软件项目活动的五个阶段大致涵盖了
17、通过对一些知名企业的调研,在整个软件项目活动的五个阶段大致涵盖了1414个职位个职位 ;项目经理、需求分析师、系统分析师、系统架构设计师、软件架构设计师、网络架构设计师、数据库设计师、软件界面设计师、软件工程师、编码程序员、网络工程师、软件测试工程师、质量保障工程师及产品发布工程师;实现阶段实现阶段构成阶段构成阶段立项阶段立项阶段需求分析阶段需求分析阶段需求分析师项目经理系统架构设计师软件架构设计师数据库设计师软件界面设计师网络架构设计师系统分析师软件开发工程师编码程序员网络工程师软件测试工程师质量保障工程师产品发布工程师结束阶段结束阶段项目经理ITIT组织管理组织管理软件开发组织机构设置软件开发组织机构设置组织机构的职责分工组织机构的职责分工软件开发项目组的角色软件开发项目组的角色2828总结总结理解理解项目组的组织方式及其特点项目组的组织方式及其特点掌握掌握项目计划的内容项目计划的内容3030