第一章 软件项目管理导论
第二章 项目需求管理
第三章 软件项目成本管理
第四章 软件项目进度管理
第五章 软件项目风险管理
第六章 软件项目配置管理
第七章 软件项目资源管理
第八章 软件项目质量管理
软件工程的背景和历史: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
对于一个项目来说,最理想的情况就是“多、快、好、省”。“多”-工作范围大,“快”-时间短,“好”-质量高,“省”-成本低。
8.采购管理
采购管理是确保项目进行过程中所需的各种原材料、资源和服务得到满足的过程,由采购计划编制、计价计划编制、计价、供方选择、进货检验、合同管理和合同收尾构成。
9.风险管理
风险管理是对项目可能遇到的风险进行识别、分析和应对的一系列过程。它涵盖了将对项目目标起正面作用的因素的作用发挥到最大及将对项目目标起负面作用的因素的作用降到最小这一理念,由风险管理计划、风险识别、风险分析、风险应变和风险监控构成。
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) 编写管理文档
项目管理人员根据软件合同确定软件项目是否完成。项目一旦完成,则检查项目完成的结果和中间记录文档,并把所有的结果记录下来形成文档并保存。
软件项目管理的内容
① 软件项目需求管理
② 软件项目估算与进度管理
③ 软件项目配置管理
④ 软件项目风险管理
⑤ 软件项目质量管理
⑥ 软件项目资源管理。
项目管理的基本特性:普遍性、目的性、独特性、集成性、创新性、过程性。