软件项目管理导论
第一章 软件项目管理导论
第二章 项目需求管理
第三章 软件项目成本管理
第四章 软件项目进度管理
第五章 软件项目风险管理
第六章 软件项目配置管理
第七章 软件项目资源管理
第八章 软件项目质量管理
第一章 软件项目管理导论
软件市场
- 软件市场:软件生产的特殊性导致了作为商品销售的软件与传统经济学中分析的实物商品存在显著的不同。
- 软件商品特征:作为商品,软件同样具有一般商品本质的特性:价值和使用价值。但是软件产品是无形的,没有物理属性。
- 软件是与计算机系统有关的程序、过程和文档的完整集合。
- “软件”的特性:软件是无形的(intangible)、软件副本的大批量生产轻而易举、软件业是劳动密集型的(软件的设计与编程完全实现自动化,需要真正“智能”的机器)、一个没有经过充分训练的软件开发人员很容易编写出难以理解和修改的软件 、软件本身很容易修改、软件不像其他的工业产品那样会因使用而磨损,随着反复修改,它的设计会逐渐退化。
- 软件商品特定的性质包括3个基本方面:无形性、无损耗性、易复制性
- 软件的成本:在传统的经济学理论中,产品的总成本是由固定成本和可变成本所组成。 固定成本是指不会随着生产的产量变动而变动的成本(如厂房、机器和研发成本);可变成本是随着产量变化的成本,是生产每一件产品所需的原材料和劳动力成本(因此生产n件产品的变动成本是生产1件产品的n倍。);
- 软件的定价:传统商品的定价遵循边际定价原则。软件商品无法遵循传统商品定价的原则(软件作为知识密集产品的价值成本,其构成特点是:边际成本低,高劳动力成本,高附加值。)。
- 软件市场的垄断现象:低端支撑软件系统的垄断日益突出(新的需求规律:销售量越多,价格越高。系统级软件:操作系统和数据库软件)、固定成本形成的价格效应(软件成本主要是前期固定成本,当某种软件形成一定规模后,后来的软件企业想进入同样的市场难度非常大。原因一:若研发不成功,前期投入的成本无法挽回;原因二:垄断企业可以为了打击竞争对手把其产品价格降至接近于零。)软件产业的“先入为主”现象(一旦某个软件在市场上拥有绝对优势的市场份额,它的产品将形成一种事实标准)。
软件产业
- 软件产业的特点:软件市场容量巨大、软件企业成长迅猛、软件产品品种繁多、软件行业竞争激烈、行业发展日新月异。
- 软件产业在国民经济中的地位:软件产业具有带动经济增长的双重作用、软件是先进管理思想和管理模式的载体(软件能够促进和加快企业的信息采集、交流,降低管理成本,提高管理效率。软件促进管理规范化)。
软件工程
-
软件工程的背景和历史:1968年由NATO (北大西洋公约组织)在德国召开的学术会议上,Feitz Bauer首先提出了“软件工程”概念。
-
软件工程定义:1968年由NATO定义、1983年,IEEE的软件工程定义(软件工程是开发、运行、维护和修复软件的系统方法)、1993年,IEEE的一个更加综合的定义(将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中)、软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件,并有效的维护它。、软件工程是一类求解软件的工程,它应用计算机科学、数学以及管理科学等原理、借鉴传统工程的原理、方法,创建软件以达到提高质量、降低成本的目的,使计算机设备的能力借助于软件成为对人类有用的东西。
-
软件工程框架:软件工程作为一种工程,同其他工程项目一样,有自己的目标、活动和原则。
-
软件工程的目标是“生产正确、可用及具有经济效益的产品”、正确性指软件产品达到预期功能的程度、可用性是指软件的基本结构、实现和文档为用户可用的程度、具有经济效益指软件开发、运行的整个开销满足用户要求的程度。
-
软件工程活动:指生产一个最终满足需求且达到工程目标的软件产品所需要的步骤。它列出了需要完成的一系列任务的框架(Framework),它规定了完成各项任务的工作步骤。
1.问题定义
2.可行性研究
3.需求分析
4.概要设计
5.详细设计
6.编码和单元测试
7.综合测试
8.软件维护
所有的软件工程活动必须进行管理。
软件项目管理贯穿于软件工程的演化过程之中 -
软件工程原则
(1) 选取适宜的开发模型
(2) 采用合适的设计方法
(3) 提供高质量的工程支持
(4) 重视开发过程的管理 -
软件工程模型
软件工程模型也称为软件开发模型,是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略
常见的软件工程模型有:线性模型(瀑布模型)、快速原型模型、螺旋模型和渐增式模型等。 -
传统瀑布模型存在的问题:
(1)过于理想化,事实上人在工作过程中不可能不犯错误
(2)在设计阶段可能发生规格说明文档中的错误;而设计上的缺陷或错误可能在实现过程中显示出来
(3)在综合测试阶段将发现需求分析、设计或编码阶段的许多错误 -
瀑布模型
优点:
(1)奠定了软件工程方法的基础
(2)流水依赖,便于分工协作
(3)推迟物理实现,易于修改文档,有复审质量保证。
(4)可强迫开发人员采用规范的方法(例如,结构化技术);
(5)严格地规定了每个阶段必须提交的文档;
(6)要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
不足:
1.与用户见面晚,成功率低,一般为25%
2.实际项目很少按照该模型给出的顺序进行;
3.用户常常难以清楚地给出所有需求;
4.用户必须有耐心,等到系统开发完成;
5.开发者常常被不必要地耽搁。
适用范围:适用于系统要求明确的系统,各种应用软件的开发均可使用。 -
原型模型
快速原型模型工作过程
1.原型模型从需求收集开始。 开发者和用户在一起定义软件的总体目标,标识出已知的需求,并规划出进一步定义的区域。
2.然后是“快速设计”,快速设计集中于软件那些对用户可见部分的表示。“快速设计”导致原型的建造。
3.原型由用户评估,并进一步精化待开发软件的需求,逐步调整原型使其满足客户的要求。同时开发者对将要做的事情有更好的理解, 这个过程是迭代的。
4.按线性模型构建软件系统 -
增量模型(渐增模型)
构件思想:
第一构件完成软件提供的基本最核心的功能。
后面的增构件是为了第一构件提供服务提供功能的。
而且避免把难题退后,首先完成的应该是高风险和重要部分。
增量模型的优点
1.在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做 一些有用的工作。
2.整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。
3.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
4.采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。
使用增量模型的困难:
1.增量构件必须不破坏原来已经开发出的产品。
2.软件的体系结构便于进行扩充,加入新构件的过程必须简单、方便,即软件体系结构必须是开放的。
3.开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。
4.多个构件并行开发,具有无法集成的风险。 -
螺旋模型
螺旋模型的设计思想:使用原型方法或者其他方法降低风险。可看作在每个阶段之前都增加了风险分析过程的快速原型模型。(快速原型模型+风险分析)
“螺旋模型”的核心螺旋模型的核心是关注风险。
瀑布模型与螺旋模型的优缺点比较:
1.瀑布模型强调的保证软件的质量,忽略人力,时间,资源等成本因素,以质量为第一目标,每次需求发生变更都要从头再来…适合于一些大型稳定的项目。
2.螺旋模型是比较适合于前期需求不稳定,后期需求新增变更较多的项目,他是一种增量迭代开发的模型,每一次循环都是一次版本的升级。
螺旋模型的优点
(1)有利于已有软件的重用
(2)降低风险
(3)减少过多测试;维护只是模型的另外一个周期
螺旋模型的缺点
1.需要软件开发人员具有丰富的风险分析和排除风险的知识。
2.很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。
螺旋模型的适用性 适用于风险大,产品需求变动大的内部开发大规模的项目。
项目管理框架
-
有组织的活动分为两种:
一类是连续不断、周而复始的活动,称之为“运作”(Operations),如企业日常的生产产品的活动;
另一类是临时性、一次性的活动,称之为“项目”(Projects),如企业的技术改造活动、一项环保工程的实施。
项目:是指在一定约束条件下具有特定目标的一项一次性任务;项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力。 -
项目的特征:
有明确的目标
项目之间的活动具有相关性
限定的周期
有独特性
资源成本的约束性
项目的不确定性 -
项目与日常运作的区别:
项目是一次性的,日常运作是重复进行的,
项目是以目标为导向的,日常运作是通过效率和有效性体现的,
项目是通过项目经理及其团队工作完成的,而日常运作是职能式的线性管理;
项目存在大量的变更管理,而日常运作则基本保持连贯性的。 -
软件项目的特殊性
逻辑实体,软件是逻辑实体,不是具体的物理实体,具有抽象性
软件是相互作用的系统,系统包括彼此相互作用的部分,软件项目中涉及的因素越多,彼此相互作用就越大
变更:是软件项目中常见的现象,如需求的变更、设计的变更、技术的变更、社会环境变更等,这些均说明了软件项目管理的复杂性
渐近明细:表明项目的定义会随着团队成员对项目、产品等的理解、认识的逐步加深而得到逐渐深入的描述 -
项目的生命周期
项目从开始到结束,一般都要经历几个阶段,包括启动阶段、计划阶段、实施阶段和结束阶段,称之为项目的生命周期
项目启动:可行性研究,确定是否接受项目。
项目计划:建立解决需求或问题的方案,向客户提交各种计划书。
项目实施:执行解决方案,在各种因素的制约下实现项目目标。
项目结束:验收项目。
软件项目可分为:需求分析、设计、实现、测试和维护等阶段。 -
项目管理概念
按PMI的定义:项目管理就是“在项目活动中运用一系列的知识、技能、工具和技术,以满足或超过相关利益者对项目的要求”。
中国项目管理研究委员会对项目管理总结为两种不同的含义:其一指一种管理活动;其二是指一种管理学科,前者是一种客观的实践活动,后者是前者的理论总结;前者以后者为指导,后者以前者为基础。
项目管理贯穿整个项目的生命期,是对项目的全过程管理。 -
项目管理特点:
综合性:项目管理是一项复杂的工作,一般由多个部分组成,工作跨越多个组织,需要运用多种学科的知识解决问题
创造性:项目具有一次性特点,既要承担风险又必须发挥创造性。创造性依赖于科学技术的发展和支持。在项目的前期构思中,重视科学技术情报工作和信息的组织管理,这是产生新构思和解决问题的主要途径;为较快进度和提高成功率,需要多个试验方案并进。
时间性:项目具有寿命周期,其本质是计划和控制一次性的工作,在规定期限内达到预定目标。在项目生命周期中一个明确的阶段顺序。
项目管理的6要素:范围、时间、成本、质量、组织及客户满意度
范围:也称工作范围,指为了实现项目目标必须完成的所有工作。一般通过定义交付物及其标准定义工作范围,工作范围根据项目目标分解得到。
范围指出:
完成那些工作可以达到项目目标;
完成那些工作项目可以结束。
时间:时间相关因素用进度计划描述。进度计划说明工作范围内所有工作需要的时间,以及每个活动开始时间和结束时间。
成本:指完成项目需要的款项。包括人力成本、原材料、设备租金、分包费用及咨询费等。项目总成本以预算为基础,最终成本应控制在预算之内。
质量:指项目满足明确或隐含需求的程度。一般通过定义工作范围内的交付物标准来定义,包括各种特性及这些特性需要满足的要求。另外还可能对项目的过程有明确要求。
组织:常见的三种组织模式:职能型模式;项目型模式;矩阵型模式
职能型模式体现严格的等级制度,每个成员都有明确的上级,各成员的权力和职责十分明晰。
项目型模式中,项目经理负责产品的定位和发展方向,有很大的独立性和权威,在产品的发展过程中起着重要的作用。
矩阵型模式混合了智能型和项目型的特点,项目组通常有全职的项目经理,项目组的其他人员来自各个职能部门,他们在必要时可以为项目兼职或全职工作一段时间。
客户满意度:衡量产品的根本尺度。“客户满意,自己获利”。
时间、质量和成本这个三要素简称TQC
对于一个项目来说,最理想的情况就是“多、快、好、省”。“多”-工作范围大,“快”-时间短,“好”-质量高,“省”-成本低。
项目管理知识体系
- 目前有两大项目管理的研究体系
以欧洲为首的体系 – 国际项目管理协会(International Project Management Association, IPMA)
以美国为首的体系 – 美国项目管理学会PMI
PMI成员以企业、大学、研究机构的专家为主,它开发了一套项目管理知识体系(Project Management Body of Knowledge, PMBOK)。
PMBOK6分为10个知识领域:
1.整合管理
整合管理确保项目的各个部分有机地整合在一起,协调并权衡各个相互冲突的目标和解决方案,以满足或超过客户的预期需求。具体过程有:
(1) 项目计划的制订,集成并协调所有的项目计划以产生一个一致的、有内在联系的最终文档。
(2) 项目计划的执行,进行项目计划中的每个活动以使计划得到执行。
(3) 集成变更控制,协调整个项目的变更。
2.范围管理
范围管理就是界定项目的范围,描述用以保证项目包含且只包含所有需要的工作
范围管理由启动、范围计划编制、范围定义、范围核实和范围变更控制构成,并在此基础上对项目进行管理。
范围是以后一系列决策的基础。
3.进度管理
进度管理是项目管理的重要一环,描述用以保证项目能够按时完成所需的各个过程,以确保项目在预定的时间内顺利完成,由活动定义、活动安排、活动历时估算、进度计划编排和进度计划控制构成。
4.成本管理
成本管理描述用以保证在批准预算内完成项目所需的各个过程,是为了确保在预算范围内完成项目所需要的一系列过程,由资源计划编制、成本估算和成本控制构成。
5.质量管理
质量管理是为了确保项目的结果满足用户需求并达到质量要求所需实施的一系列过程,由质量计划编制、质量保证和质量控制构成。
6.资源管理
资源管理是为了确保与项目有关的所有成员发挥其最佳效能的管理过程,由组织的计划编制、人员获取和团队组建构成。分为规划资源管理,估算活动资源,获取资源,建设团队,管理项目团队,控制资源。
7.沟通管理
沟通管理是对项目过程中产生的各种信息进行收集、存储、分发和最终处理,有沟通计划编制、信息发送、性能报告和阶段(或项目)的结束构成。
8.采购管理
采购管理是确保项目进行过程中所需的各种原材料、资源和服务得到满足的过程,由采购计划编制、计价计划编制、计价、供方选择、进货检验、合同管理和合同收尾构成。
9.风险管理
风险管理是对项目可能遇到的风险进行识别、分析和应对的一系列过程。它涵盖了将对项目目标起正面作用的因素的作用发挥到最大及将对项目目标起负面作用的因素的作用降到最小这一理念,由风险管理计划、风险识别、风险分析、风险应变和风险监控构成。
- 项目管理的发展现状:当代的项目管理已经发展为:一门学科,一个专业,一种职业
- 项目管理学科发展的特点:
(1)项目管理的全球化发展:主要表现在国际间的项目合作日益增多、国际化的专业活动日益频繁、项目管理专业信息的国际共享
(2) 项目管理的多元化发展:应用行业及项目类型的多样性,导致了各种各样项目管理理论和方法的出现,从而促进项目管理的多元发展。
(3) 项目管理的专业化发展:突出表现在PMBOK的不断发展和完善、学历教育和非学历教育竞相发展、项目与项目管理学科的探索及专业化项目咨询机构的出现 - 项目管理学科在双向探索中前进:
各领域专家探讨如何将本学科领域的专业理论及方法应用于项目管理【向科学化方向发展】
各行各业的专家研究如何把项目管理的理论及方法应用到本行业中去【向实用化方向发展】 - 项目管理学科发展趋势
项目学主体是应用项目学,应用项目学主体是微观项目管理
世界各国研究的PMBOK是当前项目管理学科发展的重要内容
项目学是知识创新与市场相结合的综合化发展
项目学是科学、技术和艺术的综合
10.相关方管理为了识别能够影响项目或会受项目影响的人员、团体或组织,分析相关方对项目的期望和影响,制定合适的管理策略来有效调动相关方参与项目决策和执行。用这些过程分析相关方期望,评估他们对项目或受项目影响的程度,以及制定策略来有效引导相关方支持项目决策、规划和执行。这些过程能够支持项目团队的工作。分为识别相关方,规划相关方管理,管理相关方参与,控制相关方参与
软件项目管理
-
软件项目是以软件为产品的项目,软件产品的特质决定了软件项目管理和其他领域的项目管理有不同之处。
1.抽象性
2.缺陷检测的困难性
3.高度的复杂性
4.缺乏统一规则 -
软件失控项目:指软件项目在进行时遇到困难,导致大大超过可控制范围(时间、费用、功能性需求)的项目。
软件项目失控的量化定义:
显著未实现目标和至少超出原定预算30%的项目。
Robert L.Glass 观点:30%提高到100%
失控项目状态:
两难境地(Crunch Mode):处于无法达到最初目标的威胁,而项目团队仍然在努力跨越此困难。两难境地的状况可能会持续几天、几周甚至几个月。
死亡行军(Death March)项目的各项指标超过正常标准50%。
失控:接近于或已经失败的项目。
软件项目失控的原因:
1.需求不明确
需求过多,大型项目比小型项目更容易失败。
需求不稳定,用户无法决定他们真正想要解决的问题。
需求模棱两可,不能确定需求的真实含义。
需求不完整,没有足够的信息来创建系统。
2.不充分的计划
工作责任范围不明确;
每个开发阶段的提交结果不明确;
开发计划没有指明里程碑或检查点,也没有规定设计评审期;
开发计划没有规定进度管理方法和职责,导致无法正常进度管理。
3.过于乐观估算
处于客户和公司上层的压力在工作量估算上妥协;
设计者过于自信或出于自尊心问题,对于一些技术问题不够重视;
过分相信经验。
4.采用新技术
技术无法扩展,所有新技术都有限制,在项目使用新技术之前完全了解新技术的限制很重要。
技术是错误的解决方案,技术是新技术,并不意味着它适用于你所试图解决的所有问题。
技术不具有要求的功能性,不是现在不能,而是技术本身的限制导致了它永远不能。
5.管理方法缺乏或不恰当:开发出的系统无法快速地运行以便及时地满足用户的需求,在软件工程领域,这种问题被称为“性能”问题。
6.性能问题:开发出的系统无法快速地运行以便及时地满足用户的需求,在软件工程领域,这种问题被称为“性能”问题。
7.团队组织不当
项目组织过小:每个软件开发组织都希望以最小的成本完成项目,因而项目组织过小成为许多项目都会面临的问题。另外,有些软件开发组织对项目提供分配好的技术人员,而这些技术人员的水平达不到特定项目的要求。
缺乏资深人员:项目团队缺少人员,从而设计能力不足,是项目失败的原因之一。
8.人际因素
(1) 开发商和客户:开发商是软件产品的提供者,客户是软件产品的使用者,两者之间应是一种公平交易的关系,但这种关系很容易被扭曲。
(2) 销售人员和技术人员:销售人员为了提高其工作效益,经常屈从于客户的压力而答应客户的许多要求,也可能由于对技术的不了解而随意答应客户的一些要求,而有些要求在技术人员看来是无法满足的。
(3) 项目管理者和开发人员:项目管理者把与开发人员的关系扭曲成管理与被管理的强制性关系。 -
软件项目管理的意义
软件项目管理的概念涵盖了管理软件产品开发所必需的知识、技术及工具。
根据PMI项目管理的定义总结:在软件项目活动中运用一系列的知识、技能、工具和技术,以满足软件需求方的整体要求。 -
软件项目管理的过程
(1) 启动软件项目
启动软件项目是指必须明确项目的目标和范围、考虑可能的解决方案以及明确技术和管理上的要求等,这些信息是软件项目运行和管理的基础。
(2) 制订项目计划
软件一旦启动,就必须制订项目计划。计划的制订以以下的活动为依据:
估算项目所需要的工作量
估算项目所需要的资源
根据工作量制订进度计划,继而进行资源分配
作出配置管理计划
作出风险管理计划
作出质量保证计划
(3) 跟踪及控制项目计划
在软件项目进行过程中,严格遵守计划。对于一些不可避免的变更,要进行适当的控制和调整,但要确保项目计划的完整性和一致性。
(4) 评审项目计划
对项目计划的完成程度进行评审,并对项目的执行情况尽心评价。
(5) 编写管理文档
项目管理人员根据软件合同确定软件项目是否完成。项目一旦完成,则检查项目完成的结果和中间记录文档,并把所有的结果记录下来形成文档并保存。 -
软件项目管理的内容
① 软件项目需求管理
② 软件项目估算与进度管理
③ 软件项目配置管理
④ 软件项目风险管理
⑤ 软件项目质量管理
⑥ 软件项目资源管理。
项目管理的基本特性:普遍性、目的性、独特性、集成性、创新性、过程性。
![](http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png)