type
status
date
summary
slug
tags
category
icon
password
题目类型
选择
判断
填空
简答
应用(2/3道)
往年题
2021-2022:
2022-2023:
‣
2023-2024:
项目与项目管理
软件与软件项目
什么是项目
项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力;是以一套独特而相互联系的任务为前提,有效利用资源,在一定时间内满足一系列特定目标的多项相关工作的总称。
项目特征
基本特征:
① 目标性
② 临时性:有明确的开始点和结束点
③ 相关性(ppt中没有,书上有)
④ 独特性:一定程度上,项目与项目之间没有重复性,每个项目有其独特的特点。
⑤ 资源约束性
⑥ 不确定性:实施过程中有风险和不确定性。
其他特征:
① 抽象性
② 复杂性
③ 经验在软件项目中起很大作用
④ 变更是软件项目中的常见现象
⑤ 项目的独特性和临时性是渐进明确的
⑥ 目前,软件项目的开发远没有其他领域的项目规范
项目与日常工作的区别
项目是一次性的,日常运作是重复进行的
项目是以目标为导向的,日常运作是通过效率和有效性体现的
项目是通过与项目经理及其团队工作完成的,而日常运作是职能式的线性管理
项目存在大量的变更管理,而日常运作基本保持持续的连贯性
项目目标实现的制约因素(4个)
项目范围,成本,进度计划,客户满意度
衡量项目是否成功,应该看该项目是否在工程允许范围内按照成本预算和进度计划 ,生产出客户满意的产品。
软件项目要素的组成
软件开发的过程
软件开发的结果
软件开发赖以生存的资源
软件项目的特定委托人(客户):需求者、资金提供者
项目管理
项目管理定义
定义一:指在项目活动中运用专门的知识、技能、工具和方法,使项目能够实现或超过项目干系人(stakeholder) 的需要和期望
定义二:一定主体,为实现其目标,利用各种有效的手段,对执行中的项目周期的各阶段工作进行计划,组织, 协调,指挥, 控制,以取得良好经济效益的各项活动总和
项目干系人
参与项目或受项目活动影响的人,包括项目发起人、项目组、协助人员、客户、使用者、供应商、项目反对者。
项目管理的特征
- 项目管理具有创造性:项目的一次性特点,决定了每实施一个项目都要具有创新性。
- 项目管理是一项复杂的工作,具有较强的不确定性:项目一般由多个部分组成,工作跨越多个组织、多个学科、多个 行业,可供参考的经验很少甚至没有
- 项目管理需要专门的组织和团队:项目管理通常要跨越部门的界限,在工作中将会遇到许多不同部门的人员
- 项目经理的作用非常重要:项目经理要在有限的资源和时间的约束下,运用系统的观点、科学合理的方法对与项目相关的所有工作进行有效的管理,因此项目经理对项目的成败起着非常重要的作用。
软件项目管理的特征
- 软件是纯知识产品,其开发进度和质量很难估计和度量,生产效率也难以预测和保障。需求在开始难以明确,与过早签订合同是矛盾的
- 周期长,复杂度高,变数多
- 软件需要满足一群人的期望,其对项目的关注点不同,利益也不同
- 软件项目管理的目的是让软件项目能在控制之下,以预定成本,按质完成
项目管理知识体系
PMBOK
项目管理知识体系 (Project Management Body Of Knowledge,PMBOK)
10个知识领域,5个标准化过程组,49个模块
PMBOK10个知识领域
项目集成管理:项目管理一定要协调各个方面,不能只顾局部的利益和细节,所以需要集成管理
项目范围管理:设定项目的工作和管理范围
项目进度管理
项目成本管理
项目质量管理
项目资源管理:投入足够的人力、物力
项目采购管理:投入足够的人力、物力
项目沟通管理:为了对项目团队人员进行管理,让大家目标一致地完成项目,需要沟通
项目风险管理:项目在实施过程中会遇到各种风险,所以要进行风险管理
项目干系人管理:为了对项目团队人员进行管理,让大家目标一致地完成项目,需要沟通
PMBOK 5个标准化过程组
启动过程组、计划过程组、执行过程组、控制过程组、收尾过程组
各个过程组通过其结果进行连接,一个过程组的结果或输出是另一个过程组的输入。 其中计划过程组、执行过程组、控制过程组是核心管理过程组
项目启动:确定项目目标、范围,制定项目章程、任命项目经理,对项目进行可行性研究分析,包 括经济性、风险性论证等。
项目计划: 明确项目目标,分解项目目标,确定项目方案,制定完成项目的工作计划。
项目执行: 项目的实施,协调人员、资源具体执行项目计划的过程,包括项目的详细设计与实施。
项目控制: 项目管理的过程控制,通过定期监控和评估项目进度,确保项目的有序进行和目标的实现。
项目收尾: 项目收尾过程是对项目完成后结果的验收,确认是否达到项目目标,形成完整的项目验 收文档。
软件项目管理知识体系
软件过程
软件项目的开发过程主要有系统调研、需求分析、概要设计、详细设计、编码、测试、实施与维护等
软件过程包括:流程、技术、产品、活动间关系、角色、工具等,是软件开发过程的各个方面因素的有机结合
从做过的项目中总结出的一些完善的过程,称为最佳实践,要使最佳实践可以在机构内部共享
软件过程管理
软件过程管理就是对最佳实践进行有效积累,形成可重复的过程,使最佳实践可以在机构内共享。
过程管理的内容包括过程定义和过程改进:
- 过程定义:对最佳实践进行总结,形成一套稳定的可重复的软件过程
- 过程改进:根据实践中对过程的使用情况,进行优化
过程管理与项目管理的关系
项目管理用于保证项目的成功
过程管理用于管理最佳实践
这两项管理不是相互孤立的,而是有机的紧密结合的。
过程管理的成果即软件过程可以在项目管理中辅助于项目管理工作。
敏捷项目管理
敏捷项目管理
敏捷软件开发(agile software development) :是一个灵活的开发方法,用于在一个动态的环境中向干系人快速交付产品
主要特点是关注持续地交付价值,通过迭代和快速的用户反馈管理不确定性和应对变更
敏捷宣言
① 个体和交互胜过过程和工具
② 可以工作的软件胜过面面俱到的文档
③ 客户合作胜过合同谈判
④ 响应变化胜过遵循计划
敏捷模型包含4个核心价值,对应12个敏捷原则
项目确立
项目评估
项目评估
真正启动一个项目之前,需要对项目进行评估。
主要从战略、操作性、计划、技术、社会可行性、市场可行性、经济可行性等方面进行评估
成本效益分析方法
这是评价项目经济效益的主要方法,它是将系统开发和运行所需要的成本与得到的效益进行比较,如果成本高于收益则表明项目亏损,如果成本小于效益则表明项目值得投资
成本效益评价指标
- 现金流预测:是描述何时支出费用、何时有收益的过程
- 净利润:是在项目的整个生命周期中总成本和总收入之差
- 投资回报期:是达到收支平衡或者偿还初始投入所花费的时间
- 投资回报率:(会计回报率)用于比较净收益率与需要的投入,常见的最简单的公式是 投资回报率=(平均年利润/总投资)x 100%
- 净现值:是一种项目评价技术,考虑了项目的收益率和要产生的现金流的时限,它是基于这样的观点:今天收到100元要比明年收到的100元更好
- 内部回报率:指可以直接与利润比较的百分比回报。如果借贷的资本少于10%,或者如果资本不投入到回报大于10%的其他地方,则具有10%的内部回报率的项目是值得做的
项目立项
项目立项
明确项目的目标、时间表、项目使用的资源和经费,而且得到执行该项目的项目经理和项目发起人的认可。这个阶段称为立项阶段。
立项流程

自造-购买决策 Make or Buy
确定待开发产品的哪些部分应当采购、外包开发或者自主研发。
自造:开发成本高,维护成本低
外包:开发成本低,维护成本高
项目招投标
项目立项分为:合同立项、内部立项
合同项目
甲方在招投标阶段的任务:
- 招标书定义;

招标书主要包括那几部分容?
答:招标书主要包括三部分容:技术说明、商务说明和投标说明。技术说明主要对采购的产品或者委托的项目进行详细的描述,商务说明主要包括合同条款。投标说明主要是对项目背景、标书的提交格式、容、提交时间等做出规定
- 供方选择

- 合同签署
乙方在招投标阶段的任务:
- 项目分析
- 竞标(提交建议书)
- 合同签署
内部项目
仅仅在合同签署过程中定义了一个协议签署过程
项目授权
项目授权
对项目进行授权和初始化,以便确认相关的人知晓这个项目
形式:文档化输出,主要是项目章程
项目章程
确认项目存在的文件,包括对项目的确认、对项目经理的授权和项目目标的概述等。
项目经理的责任
开发计划 组织实施 项目控制
生存期模型
可分为预测型/适应型
总结
在前期需求明确的情况下尽量采用瀑布模型或改进型的瀑布模型
在用户无信息系统使用经验,需求分析人员技能不足情况下一定 要借助原型
在不确定性因素很多,很多东西前面无法计划情况下尽量采用增量迭代和螺旋模型
在需求不稳定情况下尽量采用增量迭代模型
在资金和成本无法一次到位情况下可以采用增量模型,软件产品分多个版本进行发布
对于完全多个独立功能开发可以在需求阶段就分功能并行,但每个功能内都应该遵循瀑布模型
对于全新系统的开发必须在总体设计完成后再开始增量或并行
对于编码人员经验较少情况下建议不要采用敏捷或迭代等生命周 期模型
增量,迭代和原型可以综合使用,但每一次增量或迭代都必须有 明确的交付准则
生存期概述
生存期模型的基本特征
描述了开发的主要阶段
定义了每个阶段要完成的过程和活动
规范了每个阶段的输入输出
预测期生存模型
瀑布模型 Waterfall

要求所有的活动严格按照顺序自上而下的执行,上一个活动的输出作为下一个活动的输入。
适合的项目:
- 在项目开始之前,项目的需求很明确
- 在项目开始之前,项目的解决方案也很明确
如:财务系统,库存管理系统、短期项目
V模型

适用于:
- 在项目开始前,项目的需求很明确
- 在项目开始前,项目的解决方案很明确
- 对系统的性能安全很严格的项目
迭代型生存期模型
快速原型模型
从最核心的方面开始,向用户展示完成的部分,然后根据用户反馈信息继续开发原型,并重复这一过程。
直到开发者和用户都认为原型已经足够好了,在此基础上开发客户满意的软件产品。

适合于:
- 在项目开始前,项目的需求不明确
- 需要减少项目需求的不确定性
如:第一次开发的项目,验证可行性;确定显示界面
增量型生存期模型
增量式模型

适合于:
- 项目开始时,明确了需求的大部分,但是需求可能会发生变化。
- 对于市场用户把握不是很准,需要逐步了解
- 对于有庞大和复杂功能的系统进行功能改进,就需要一步一步实施的
螺旋式模型
螺旋模型沿着螺线旋转,四个象限分别表达了四个方面的活动:制定计划、风险分析、实施工程、客户评估

适合:
- 风险是主要的制约因素
- 不确定性和风险制约了项目进度
- 用户对自己的需求也不是很明确
- 需要对一些基本的概念进行验证
- 可能发生一些重大的变更
- 项目规模很大
- 项目中使用了新技术
渐进式阶段模型——最常用
可以将大的项目划分成几个小项目来做,将周期长的项目划分成几个明确的阶段。 “化繁为简,各个击破”是解决复杂问题的一个方法。
综合了增量式模型和螺旋模型的一个实用模型
- 渐进式前进
- 阶段式提交

特点:
阶段式提交一个可运行的产品,每个阶段提交的产品都是一个独立的系统
关键的功能更早出现,可以提高开发人员和客户的信心
早期预警问题,避免软件缺陷不知不觉的增长
阶段式提交产品说明进展,减少报告负担
阶段性完成可以降低估计失误
阶段性完成均衡了弹性和效率
适用于:从本质上讲,渐进式阶段模型可以适用于任何规模的项目;考虑到需要不断提交新的版本,因此渐进式阶段模型主要适用于中型或大型项目,是目前软件开发中常釆用的模型;采用这个模型可以随时看到项目的未来
敏捷型生存期模型
特点
① 需求会发生变更
② 增量交付
③ 迭代和增量方法能够提供反馈,便于项目与客户需求保持一致,并根据需要进行调整
Scrum模型
Scrum是一个框架,由Scrum团队及其相关的角色、活动、工件和规则组成
Scrum团队:由产品负责人、Scrum主管和开发团队组成
Scrum工作:增量,产品待办事项列表(产品订单),Sprint待办事项列表(Sprint订单),燃尽图
Scrum活动:产品待办事项列表梳理、Sprint计划会议、迭代式软件开发、每日站立会议、持续集成、Sprint评审会议和Sprint回顾会议组成
XP模型 极限编程
XP实施原则是:① 快速反馈;② 假设简单;③ 包容变化。
需求管理
软件需求定义
软件需求定义
软件需求是指用户对软件的功能和性能的要求
软件需求三个层次
业务需求:反映了组织或者客户对系统、产品高层次的目标要求,由管理人员或市场分析人员确定,他 们在项目视图与范围文档中予以说明。
用户需求:用户通过使用本产品必须要完成的任务。可以在用例或者场景中说明。
功能需求:定义了开发人员必须实现的软件功能,使得用户可以通过使用此软件能完成他们的任务,从而满足业务需求。

约束:对开发人员在软件产品设计和构造上的限制
软件需求规格
描述了软件系统应具有的外部行为,即系统展现给用户的行为和执行的操作
需求类型
功能需求:系统必须执行的功能
非功能需求:对实际使用环境所做的要求,如性能要求,可靠性,安全性。
非功能需求比功能需求要求更严格,更不易满足。
需求方面的问题
开发结束时,系统不满足用户要求被拒绝接受
由于需求定义和需求文档不正确,导致成本不断增加,进度滞后
软件需求管理过程
有效的需求管理,可在开发后期和整个维护阶段的返工的工作量可以大大减少
需求工程
定义:指应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科。
作用:保证软件需求以一种技术形式描述一个产品应具有的功能,性能和性质
5个独立过程:获取,分析,规格,验证,变更
需求工程的研究内容

软件需求管理的过程

需求开发和管理的界限

需求开发 - 1. 需求获取
需求获取是指通过与用户的交流,对现有系统的观察及对任务进行分析,从而开发、捕获和修订用户的需求。
就是将用户要求变成项目需求
主要任务:和用户方的领导层,业务层人员的访谈式沟通
目的:从宏观上把握用户的具体需求方向和趋势,了解现有的组织架构,业务流程,硬件环境,软件环境,现有运行系统等具体情况和客观的信息,建立起良好的沟通渠道和方式
获取需求需执行的活动:
- 了解客户方的所有用户类型及潜在的类型,然后根据他们的要求来确定系统的整体目标和系统的 工作
- 进行需求调查,对用户进行访谈和调研
- 需求分析人员对收集到的用户信息进行进一步的分析整理
- 需求分析人员将调研的用户需求以适当的方式呈交给用户方和开发 方的相关人员。大家共同确认需求。
需求开发 - 2. 需求分析
需求分析也叫需求建模
需求分析是为最终用户所看到的系统建立一个概念模型,是对需求的抽象描述,并尽可能多地捕获现实世界的语义
需求分析模型:

与需求获取的区别: 使用模型描述,以获取用户更明确的需求
需求分析需要进行的活动:
- 以图形表示的方式描述系统的整体结构,包括系统的边界与接口
- 通过原型,页面流或其他方式提供可视化界面,用户可以对需求做出自己的评价
- 以模型描述系统的功能项、数据实体、外部实体、实体之间的关系及实体之间的状态转换
基本策略:头脑风暴、专家评审、焦点会议组等方式进行具体的流程细化、数据项的确认
需求开发 - 3. 需求规格
软件需求规格的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解,使之成为整个开发工作的基础
需求分析完成的标志是提交一份完整的、规范的软件需求规格说明书 (SRS)
需求开发 - 4. 需求验证
需求规格提交后,开发人员需要与客户对需求分析的结果进行验证,以需求规格说明书为输入
以求需求规格中定义的需求必须正确、准确地反映用户的意图
验证需求的正确性及其质量能大大减少项目后期的返工现象
验证:正确性、一致性、完整性、可行性、必要性、可验证性(能写出测试用例满足需求)、可跟踪性(在每项软件需求与它的根源和设计元素、源代码、测试用例之间建立起链接)、最后的签字
需求开发 - 5. 需求变更
需求变更是软件项目一个突出的特点,也是软件项目最为普遍的一 个特点
需求变更的主要工作:
- 建立需求基线(需求基线是需求变更的依据)
- 确定需求变更控制过程
- 建立变更委员会
- 进行需求变更影响分析
- 跟踪所有受需求变更影响的工作产品
- 跟踪每项需求的状态,衡量需求稳定性
传统需求分析方法
需求分析的结果是提供需求分析模型,它是产品的原型样本,使最终产品更接近于解决需求,提高了用 户对产品的满意度,从而使产 品成为真正优质合格的产品。
原型分析方法
原型方法是通过不断地评价原型来确定需求的方法
基于数据流的结构化方法
结构化方法是:
- 面向数据流的方法
- 自顶向下逐步求精的分析方法
- 根据软件内部数据传递、变换的关系进行分析的
数据流图 (DFD) 、数据字典 (DD) 、实体联系图 (ERD) 、 系统流程图等都是数据流分析技术
数据流图DFD,是一种描述软件系统逻辑模型的图形符号,使用4种基本元素来描述系统的行为,即过程、实体、数据流和数据存储

数据字典由数据项、数据流和数据文件组成
基于UML需求建模方法
一种面向对象的场景分析方法
一个用例 ( use case ) 就是系统向用户提供的一个有价值的结果的某项功能。用例捕获的是功能性需求。
所有用例结合起来就构成了用例模型,描述系统的全部功能
该方法主要通过UML的用例视图、顺序视图、活动视图等表达需求模型
一个系统往往可以从不同的角度进行观察,从一个角度观察到的系统,就构成系统的一个视图



功能列表法
功能列表方法是对项目的功能需求进行详细说明的一种方法
是基于功能特性及其层次关系来描述需求的方法
敏捷项目需求分析
产品待办事项列表
待办事项列表的细化
用户故事(描述需求)
- 用户故事模板
- 评价用户故事
- 用户故事迭代优先级
项目范围管理—WBS
任务分解定义
任务分解过程定义
将一个项目分解为更多的工作细目或者子项目,使项目变得更小、更易管理、更易操作
任务分解结果:WBS ( Work Breakdown Structure:任务分解结构)
WBS是把所有项目工作逐层分解到较小的、便于管理的要素(可交付成果)
WBS是用来确定项目范围的,必须包括项目的所有工作
没有包含在WBS中的工作就不是项目范围内的工作,都不要做。如果要做,必须通过范围控制过程。
WBS的编制需要“全员参与”,项目经理主要发挥“整合者”的作用。
WBS的最底层组织部分是工作包(Work Package)。
在WBS中可以单独列出一个“项目管理”分支,包括项目管理相关工
作。
省流版:
WBS是对项目由粗到细的分解过程
WBS是面向交付成果的
WBS组织并定义了整个项目范围
任务分解的形式
提纲式WBS也称为清单式WBS,其任务分解方式是将任务分解的结果以清单的表述形式进行层层分解的方式
组织结构图式WBS也称为图表式WBS, 进行任务分解时采用以图表的形式进行层层分解的方式,类似组织结构图
工作分解的层次
从高到低如下:
- 项目群
- 项目
- 任务(完成项目必须进行的工作)
- 活动(完成任务需要做什么)
- 工作包(活动的构成单元,体现了活动是如何做的)
- 工作单元(执行工作包的具体动作或努力方向)
工作包 Work Package
WBS的最低层次的可交付成果,工作包可以再细分为具体动作。
项目经理通常只负责到工作包的层次,负责该工作包的团队成员负责把工作包细分为实际工作。
一个工作包必须由一个人或者一个部门来负责,而不能由两个或两个以上的人或部门来负责。
工作包单元的周期应该是最短周期
应明确本工作包与其他工作包之间的关系
WBS字典
WBS具体工作要素的阐述通常收集在 WBS字典 (WBS dictionary) 中,同时也包括一些其他信息的阐述。
WBS字典,是在制定WBS过程中生成,并与WBS配合使用的说明性文件。
可能包括:每个WBS要素,列出帐户编号、工作说明书、负责的组织、以及进度里程碑清单。
任务分解方法
模板参照方法
许多应用领域都有标准或半标准的WBS,它们可以当做模板参考使用
类比方法
许多项目有相同或相似周期和因此形成的相同或相似的工作细目要求,可以采用类似项目的WBS作为参考
自顶向下方法
自顶向下方法需要有更多的逻辑和结构,它也是创建WBS的最好方法
如果WBS开发人员对项目比较熟悉或者对项目大局有把握,可以使用自顶向下方法
是一个从主要问题逐渐细化到具体问题的过程
自底向上方法
自顶向下方法从一般到特殊的方向进行,而自底向上是从特殊向一般方向进行的
首先定义项目的一些特定任务,然后将这些任务组织起来,形成更高级别的WBS层。 将详细的任务罗列后,可以形成高的层次,然后将它们组织成更高的层次
自底向上方法是一种理想的发挥创造力的解决问题方法
如果对于项目人员来说,这个项目是一个崭新的项目,可以采用自底向上方法开发WBS。
任务分解的基本步骤
任务分解的基本步骤
① 确认并分解项目的组成要素(WBS编号)
② 确定分解标准
如:按生存期阶段分解,或按产品组成分解
分解标准应统一,不能同时使用两种标准进行分解
③ 确定分解是否详细
④ 确定项目交付成果(可以编制WBS字典)
⑤ 验证分解的正确性(建立一套编号系统)
检验分解结果的标准
最底层的要素是否是实现目标的充分必要条件
最底层要素是否有重复的
每个要素是否清晰完整定义
最底层要素是否有定义清晰的责任人
是否可以进行成本估算和进度安排
WBS任务分解建议
最低层是可控的和可管理的,但是不必要的过细
每个Work package必须有一个提交物
定义任务完成的标准
有利于责任分配
推荐任务分解到40小时以内
敏捷项目任务分解
成本计划
成本估算概述
成本估算
成本估算是对完成项目所需费用的估计和计划
成本估算的重要性和意义
- 软件成本估算是成本管理的核心
- 成本估算是项目计划中的一个重要组成部分
- 要实行成本控制,首先要进行成本估算
- 软件成本估算,一直是软件工程和软件项目管理中最具挑战、最为重要的问题
直接成本、间接成本
直接成本:指与项目有直接关系的成本费用,是与项目直接对应的,包括人员的工资、材料费用、外包外购成本等,包括开发成本、管理成本、质量成本等。
间接成本:(如房租、水电、员工福利、税收等) 不能归属于一个具体的项目,是企业的运营成本,可以分摊到各个项目中。
软件项目规模与成本
软件项目规模即工作量
软件成本估算,预测开发一个软件系统所需要的总工作量的过程
软件规模的单位
LOC(Lines of Code, 代码行):源代码长度的测量
FP(Function Point, 功能点):用系统的功能数量来测量
人月
人天
人年
成本估算
估算不是很准确,有误差
项目经验数据非常重要
不要太迷信某些数学模型
影响IT项目成本的因素
耗用资源的数量和价格:中间产品和服务、市场人力资源、硬件、软件的价格
项目工期:工期越长,直接费用越低,间接费用越高
项目质量:质量总成本由质量故障成本和质量保证成本组成,两者需要建立一个动态平衡(保证成本低,故障成本就高)
项目管理水平
人力资源对成本的影响
成本估算方法
代码行估算法
面向规模的度量
代码行(LOC)指所有的可执行的源代码行数
代码行依赖选择的硬件和软件,因此不被认为是软件度量的最优方法。
优点:代码是所有软件开发项目都有的产品,很容易计算代码行数
缺点:
- 对代码行没有公认的可接受的标准定义
- 代码行数量依赖于所用的编程语言和个人的编码风格
- 在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量
- 代码行强调编码的工作量,只是项目是现阶段的一部分
功能点估算法
面向功能点(FP,Function Point)的度量
功能点估算是对程序规模的一个综合量度,经常用于项目早期阶段,从需求说明书确定功能点比确定代码行容易。
功能点估计法要评估产品所需要的内部基本功能和外部功能,然后根据技术复杂度因子(权)对它们进行量化,产生产品规模的最终结果。
功能点计算步骤:
1)确定应用程序必须包含的功能
2)对于每个功能,通过4类外部行为或者事务的数目,以及一类内部逻辑文件的数目来估算由一组需求所表达的功能点数目
这五类功能计数项分别是:
- 外部输入EI:外部输入给软件提供面向应用的数据项(如屏幕、表单、对话框、控件、文件等)
- 外部输出EO:向用户提供(经过处理的)面向应用的信息,例如,报表和出错信息等。
- 外部查询EQ:一个输入引出一个即时的简单输出
- 内部逻辑文件ILF:数据完全存在于应用的外部,并且由另一个应用维护。
- 外部接口文件EIF
3)对五类功能计数项中的每一类按照其复杂度不同分为简单、一般和复杂。所有功能计数项加权的总和,就形成了该产品的未调整功能点计数(UFC)。

4)计算项目中14个技术复杂度因子(TCF)


技术复杂度因子TCF计算公式如下:
5)调整所计算的功能点(FP)
FP: 功能点
UFC: 未调整功能点计数
TCF: 技术复杂度因子
功能点可以按照一定的条件转换为软件代码行LOC。
AVC:指该语言在实现一个功能点时所要用的平均代码行(查表)
用例点估算法
计算步骤:
1)计算未调整的角色的权值UAW(Unadjusted Actor Weight)
C={simple, average, complex}
aCardinality(c)是参与的角色数目

2)计算未调整的用例的权值UUCW(Unadjusted User Case Weight)
C={simple, average, complex}
uCardinality(c)是参与的用例数目

3)计算未调整的用例点UUCP(Unadjusted User Case Point)

4)计算技术复杂度因子TCF - 13个 + 环境因子ECF - 8个

5)计算调整的用例点UCP(User Case Point)
6)计算工作量
PF是Productivity Factor,是项目生产率,其默认值为20
类比 (自顶向下)估算法
是一种自上而下的估算形式,通常在项目初期或者信息不足时采用此方法。
简单易行,花费少,但是具有一定的局限性,准确性差。
类比估算中,需要评价不同项目间的相似程度。


相似度计算非常麻烦,所以基本上使用主观推测,很少计算。
优点:
- 直观
- 能够基于过去实际的项目经验来确定与新的类似项目的具体差异以及可能对成本产生的影响
缺点:
- 不能适用于早期规模等数据都不确定的情况;
- 应用一般集中于已有经验的狭窄领域,不能跨领域应用;
- 难以适应新 的项目中约束条件、技术、人员等发生重大变化的情况。
自下而上估算法
利用任务分解图(WBS),对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本。
通常是在项目开始以后,或者WBS已经确定的项目,需要进行准确估算的时候釆用。
优点:准确度较好
缺点:
- 需要花费一定的时间
- 估算本身也需要成本支持
- 可能发生虚报现象
三点估算法
考虑项目的不确定性与风险,3种估算值:
- 最可能成本(CM):对所需进行的工作和相关费用进行比较现实的估算所得到的活动成本。这个估算值的概率最大。
- 最乐观成本(CO):基于活动的最好情况所得到的估算成本。
- 最悲观成本(CP):基于活动的最差情况所得到的估算成本。
基于上述3种估算值,可以使用以下两种分布计算与其成本CE:
- 三角分布:
- 贝塔分布:
参数估算法
参数模型也称为算法模型或经验导出模型,是一种使用项目特性参数建立数学模型来估算成本的方法,是通过大量的项目数据进行数学分析导出的模型,是一种统计技术。
找到软件工作量的各种成本影响因子,并判定它对工作量所产生影响的程度是可加的、乘数的还是指数的,以期得到最佳的模型算法表达形式。
当某个因子只影响局部,那么他是可加的
如果某个因子有全局性的影响,那么它是乘数的或者指数的
使用条件:
- 具有良好的项目数据为基础
- 存在成熟的项目估算模型
特点:
- 比较简单,也比较准确
- 如果模型选择不当或者数据不准,也会导致偏差
参数模型估计——IBM(Walston-Felix)模型
面向LOC驱动的静态单变量模型

COCOMO
将开发所需要的工作量表示为KLOC软件规模和一系列成本因子的函数,基本估算公式:
PM是工作量,通常表示为人月
A可以校准的常量;
S为KLOC软件规模;
E为规模的指数,说明不同规模软件具有的相对规模经济和不经济性;
EM为工作量乘数,反映某个项目特征对完成项目开发所需工作量的影响程度;
n为描述软件项目特征的成本驱动因子的个数。
COCOMO 81
Effort 表示工作量,即开发软件所需的人力(人月,PM
项目的模式:
有机/组织(Organic):规模较小的、简单的软件项目;各类应用程序
嵌入式(Embedded):规模和复杂性处于中等程度的软件项目;系统程序
半有机/半分离(Semidetached):指必须要求在一组紧密联系的硬件、软件及操作约束下开发的软件项目;各类实用程序,介于上述两种软件之间,例如编译器(程序)
有3个等级的模型,级别越高,模型的参数约束越多:
① 基本COCOMO 【相关信息极少情况下】
静态单变量模型,它用一个以已估算出来的源代码行数为自变量的函数来计算软件开发工作量。
a和b的数值可以通过查表获得

② 中等COCOMO 【需求确定之后使用】
在LOC为自变量函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算
表示15个成本驱动因子的取值,他们被按照影响分成了多个等级。
③ 高级COCOMO 【设计完成后使用】
包括中级COCOMO模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对项目过程中分析、设计等各步骤的影响
工作量及进度估算公式与中级COCOMO模型一致
COCOMO II
给出了3个等级的软件开发工作量估算模型,这3个层次的模型在估算工作量时,对软件细节的考虑逐级增加:
① 应用组装模型---规划阶段
主要适用于原型构造项目或者通过已有构件组合进行的软件项目的工作量估算
② 早期设计模型---设计阶段
适用于体系结构设计阶段。这个阶段设计了基本的软件结构,基于功能点或可用代码行。有5个规模指数因子、7个工作量乘数因子
A是常数,2000年定为2. 94;
S是规模;
E是指数比例因子, , B可以校准,目前设定B=0.91, SF是指数驱动因子,指数比例因子的效果是对于规模较大的项目,预计的工作量将增加,也就是说,考虑了规模的不经济性;
EM是工作量系数。
③ 后体系结构模型---开发阶段
适用于完成体系结构设计之后的软件开发阶段
该模型与早期设计模型基本是一致的,不同之处在于工作量系数不同,将后体系结构模型中的工作量系数(即成本因素)划分成产品因素、平台因素、人员因 素和项目因素4类,共17个属性。
专家估算法
专家估算法是由一些被认为是该任务专家的人来进行的,由多位专家进行估算,取得多个估算值,最后得出综合的估算值
Delphi(德尔菲)专家估算法
组织者确定专家,这些专家互相不见面
组织者发给每位专家一份软件规格说明
专家以无记名对该软件给出3个规模的估算值:最小值 ai、最可能的值 mi、最大值 bi
组织者计算每位专家的平均值
综合结果后,再组织专家无记名填表格,比较估算偏差,并査找原因
上述过程重复多次,最终可以获得一个多数专家共识的软件规模,即
优点:专家之间没有交流机会,可以避免相互影响
缺点:阻塞的专家之间交流的渠道,每个人的意见局限于自己的考虑中
猜测估算法
是一种原始的估算方法,进行估算的人有专门的知识和丰富的经验,据此提出一个近似的数据。
估算方法综述
1)任务分解(WBS)
对项目任务进行分解,并对分解的任务进行编号(WBS编号):
2)每个任务的规模估算
如果某个任务,是固定成本类型(如采用固定价格外包),则不
用先计算工作量
若不是,可以采用以下任一计算:
① 估算该任务的最大值Max、最小值Min、最可能值Avg,则
② 估算任务工作量最可能值Avg,则任务T_i规模估算
3)每个任务的成本估算
如果任务是固定成本类型(例如采用固定价格外包),则可以直接
给出成本,否则任务T_i的成本估算取=×人力成本参数
例如,一个软件项目的规模是3人月,企业的人力成本参数为2万/人月,则这个任务的成本是6万元。
4)估算直接成本
如果WBS中不包括质量、管理等任务,这时可以采用简易估算方法估算管理、质量工作量(单位:人月)
例如:管理、质量工作量规模Scale(Mgn)=a×Scale(Dev),其中Scale(Dev)是开发工作量规模,a是比例系数(可以根据企业的具体情况而定,例如,a可以是20%~25%之间的参数)
5)估算间接成本
间接成本可以根据企业的具体成本模型计算,如果企业没有成熟的成本模型,则可以采用简易的算法计算。
例如:间接成本=直接成本×间接成本系数,间接成本系数可根据企业的具体情况而定,如间接成本系数为15%
6)项目总估算
成本总估算成本=直接成本+间接成本
如果项目的总规模为E,则直接成本=E×人力成本参数
成本预算
项目成本预算
成本预算是将项目的总成本按照项目的进度分摊到各个工作单元中去
成本预算的目的是产生成本基线,作为度量项目成本性能的基础
分配项目成本预算分为三种情况:
① 给任务分配资源成本,例如:“李四”费用为200元/时
② 给任务分配固定资源成本,例如:“张三”需要固定资源2万元,不用算他的工时
③ 给任务分配固定成本,例如:某模块外包费用是10万元
成本基线 cost baseline
成本基线是每个时间阶段内的成本,是项目管理者度量或监控项目的依据

进度计划
进度管理基本概念
进度
进度是对执行的活动和里程碑制定的工作计划日期表
进度计划的重要性
按时完成项目是项目经理最大的挑战
时间是项目规划中灵活性最小的因素
进度问题是项目冲突的主要原因
进度计划的主要过程
① 根据WBS分解出主要的任务(活动)
② 确立任务之间的关联关系
③ 估计每个任务需要的资源、时间
④ 最后编织出项目的进度计划
任务定义
确认和描述一些特定的活动的过程
任务间关系(硬逻辑关系、软逻辑关系、外部依赖关系)的依据
硬逻辑关系(强制性依赖关系): 固有的、不可违背的
软逻辑关系:认为的、主观的
外部依赖关系:项目活动与非项目活动之间
进度管理图示——网络图
网络图是活动排序的一个输出,展示项目中各个活动以及活动之间的逻辑关系。 分为PDM和ADM(就是任务在点上还是边上的区别)
PDM中节点表示活动,箭头表示活动之间的关系。 PDM也叫优先图法、节点法。

ADM中节点表示前一个活动的结束,后一个活动的开始,箭头表示任务。

虚活动:为了定义活动,表示逻辑关系,不消耗资源

进度管理图示——甘特图

特点:
显示基本的任务信息
可以查看任务的工期、开始时间和结束时间以及资源的信息
只有时标,没有活动的逻辑关系
进度管理图示——里程碑图
特点:
是由一系列的里程碑事件组成的
里程碑图显示项目进展中的重大工作完成
里程碑不同于活动:活动需要消耗资源、里程碑仅仅表示事件的标记
进度管理图示——资源图
资源图用来显示项目进展过程中资源的分配情况,资源包括人力资源、设备资源等。

进度管理图示——燃尽图/燃起图
燃尽图:是在项目完成之前,对需要完成的工作的一种可视化表示;表示剩余的工作量随时间的变化,可用于表示开发速度。
燃起图:显示已完成的工作;表示完成的工作量随时间的变化。

任务资源估计
任务历时估算
任务历时估算
任务历时估算是估计任务的持续时间:
- 项目中每个任务的历时估计:分别估算项目各个活动所需要的时间
- 项目总历时估计:根据项目活动的排序来确定整个项目所需要的时间
过长或过短的估计都是不利的
- 过短,则会使项目团队处于被动紧张的状态
- 过长,则会延迟项目的完成,可能使项目失去大好的获利机会
定额估算法
T:活动历时
Q:任务规模(工作量)
R:人力数量
S:工作效率(贡献率)
天=人天/(人*效率)
经验导出模型
经验导出模型是根据大量已有项目的数据通过分析而得出的模型
IBM和COCOMO模型均是经验导出模型
D:进度(以月单位)
E:工作量(以人月单位)
a:2-4之间
b:1/3左右
a、b是依赖于项目的自然属性
PERT(工程评估评审技术)(计算题重要)
基于对某项任务的乐观、悲观、最可能的概率时间估计。
PERT历时是对三种估计加权平均。
O:最小估算值:乐观
P:最大估算值:悲观
m:最可能估算值。
注意是对每项任务都可以计算出来一个PERT历时。 然后将所有历时估算加和求出项目总历时。
对于每个任务也可以求方差和标准差。


专家判断法
专家判断是指基于某应用领域、知识领域、学科和行业等的专业知识而做出的关于当前活动的合理判断,这些专业知识可来自具有专业学历、知识、技能、经验或培训经历的任何小组或个人。
专家判断法是通过专家依靠过去资料信息进行判断,以估算进度的方法。
如果找不到合适专家,则估计结果往往不可靠且具有较大风险。
类比估计法
类比估计也称为类推估计,使用相似活动或项目的历史数据来估算当前活动或项目的持续时间的技术。
是一种粗略的估算方法,项目详细信息不足时,就经常使用类比估计方法。通常成本较低、耗时较少,但准确性也较低。对于软件项目,利用企业的历史数据进行历时估计是常见的方法。
以下情况的类比估计是可靠的:
① 先前活动和当前活动在本质上类似而不仅仅是表面相似;
② 专家有所需专长。
基于承诺的进度估计法
基于开发人员做出的进度承诺进行,不进行中间的工作量估计。
优点:
有利于开发者对于进度的关注
有利于开发者在接受承诺后的士气高昂
缺点:易于产生大的估算误差
Jones的一阶估算准则
基于估算项目功能点,从幂次表中选择合适的幂次将功能点升幂。

预留分析
预留分析也称为储备分析,用于确定项目所需的应急储备(预留)量和管理储备(预留)量。
应急储备是包含在进度基准中的一段持续时间,用来应对已经接受的已识别风险。
预留的应急储备应该是将每一项任务的预留时间累加在一起放在关键路径末端,而不要增加每一项任务时间,即把应急储备从各个活动中剥离出来并汇总。
敏捷历时估算
敏捷历时估算可以分为:开发速度稳定前和开发速度稳定后两种
- 开发速度稳定前的估算方法:开发速度稳定前,可以采用决策技术,如举手表决。
- 开发速度稳定后的估算方法:团队通过观察历史表现来更准确地规划下阶段的能力;根据自己在一个迭代中完成工作的能力(多少故事或故事点)来建立下一个迭代的能力衡量指标。
进度计划编排
项目进度计划编制
项目进度计划编制是决定项目开始和结束日期的活动。
主要目的是控制和节约项目的时间,保证项目在规定的时间内能够完成
最终目标是建立一个现实的项目进度计划,为监控项目的进度进展情况提供一个基础。
项目进度计划过程反复多次,最后才能确定项目进度目标。
进度编制的基本方法——关键路径法
关键路径法是根据指定的网络图逻辑关系进行的单一的历时估算。
计算每一个活动的单一的、确定的最早和最迟开始和完成日期;计
算网络图中最长的路径。以便确定项目完成时间估计。
- 关键路径是网络图中最长的路径
- 关键路径可以确定项目完成时间
进度编制相关术语:
- 最早开始时间(Early Start, ES) :表示一项任务(活动)的最早可以开始执行的时间
- 最晚开始时间(Late Start, LS):表示一项任务(活动)的最晚可以开始执行的时间
- 最早完成时间(Early Finish, EF) :表示一项任务(活动)的最早可以完成的时间
- 最晚完成时间(Late Finish, LF):表示一项任务(活动)的最晚可以完成的时间
- 超前(Lead) :表示两个任务的逻辑关系所允许的提前后置任务的时间
- 滞后(Lag) :表示两个任务的逻辑关系所允许的推迟后置任务的时间
- 浮动(Float) :表示一个任务的机动性,是其在不影响项目完成的情况下可以推迟的时间量
- 自由浮动(Free Float, FF) :在不影响后置任务最早开始时间,本任务可以延迟的时间 自由浮动时间 = 后面活动的最早开始时间 - 此活动的最早结束时间
- 总浮动(Total Float, TF) :表示在不影响项目最早完成时间,本任务可以延迟的时间 总浮动时间 = 自己的最晚开始时间 - 自己的最早开始时间
- 关键路径 (Critical Path)
时间浮动为0(Float=0)的路径
关键路径是网络图中最长的路径,决定项目完成的最短时间;关键路径上的任何活动延迟,都会导致整个项目完成时间的延迟;关键路径可能不止一条


正推:从左到右计算每个任务的ES (最早开始时间)和EF(最早结束时间),当一个任务有多个前置任务时,选择前置任务中最大的EF加上Lag作为其ES
逆推:从右到左计算各个任务(活动)的LS最晚开始时间和LF最晚完成时间,当一个任务有多个后置任务时,选择其后置任务中最小LS减Lag作为其LF
进度编制的基本方法——时间压缩法
时间压缩法是在不改变项目范围的前提下缩短项目工期的方法,是一种数学分析方法。 分为:
应急法——赶工(Crash):时间成本平衡方法、进度压缩因子方法
时间成本平衡方法(进度压缩单位成本方法)是一种线性关系方法,进度压缩与成本的增长是成比例的。
时间成本平衡基于以下假设提出:
- 每个任务存在一个正常进度和可压缩进度、一个正常成本和可压缩成本。
- 通过增加资源,每个任务的历时可以从正常进度压缩到可压缩进度。
- 每个任务无法在低于可压缩进度内完成。
- 有足够需要的资源可以利用。
- 在“正常”与“可压缩”之间,进度压缩与成本的增长是成正比的。


压缩进度因子方法

例:初始进度估算是12月,初始工作量估算是78人月,如果进度压缩到10月,进度压缩因子= 10/12=0.83,则进度压缩后的工作量是:78/ 0.83=94人月。
总结:进度缩短17%,增加21%的工作量
平行作业法——快速跟进(Fast Tracking)
又称为快速跟进法,是平行地做活动
应急法不改变活动间的逻辑关系。应急(赶工)法是一种通过增加资源,以最小的成本代价来压缩进度工期的技术。赶工只适用于那些通过增加资源就能缩短持续时间的且位于关键路径上的活动。但赶工并非总是切实可行的,因它可能导致风险或成本的增加。
平行作业法则可改变活动间的逻辑关系,并行开展某些活动。平行作业法(快速跟进)将正常情况下按顺序进行的活动或阶段改为至少是部分并行开展的。平行作业法常导致返工和增加风险。使用提前量通常会增加相关活动之间的协调工作,并增加质量风险,快速跟进还有可能增加项目成本。
进度编制的基本方法——资源优化
资源优化用于调整活动的开始日期和完成日期,以调整计划使用的资源,使其等于或少于可用的资源。
根据资源供需情况来调整进度模型。
资源平衡和资源平滑都属于资源优化方法。
资源平衡方法是为了在资源需求与资源供给之间取得平衡,通过调整任务的时间来协调资源的冲突,根据资源制约因素对开始日期和完成日期进行调整的一种技术。
主要的目的是形成平稳连续的资源需求,最有效地利用资源,使资源闲置的时间最小化,同时尽量避免超出资源能力。
如果共享资源或关键资源只在特定时间可用,数量有限,或被过度分配,如一个资源在同一时段内被分配至两个或多个活动,就需要进行资源平衡。

资源平衡往往导致关键路径改变。关键路径法通常可以产生一个初始进度计划,而实施这个计划需要的资源可能比实际拥有的多。
在项目编排中进行资源的优化配置,可保证资源最优化、最有效。
利用资源平衡法可在资源有约束的条件下制定一个进度计划。
资源平滑方法是对进度模型中的活动进行调整,从而使项目资源需求不超过预定的资源限制的一种技术。
相对于资源平衡而言,资源平滑不会改变项目关键路径,完工日期也不会延迟。
活动只在其自由和总浮动时间内延迟,但资源平滑技术可能无法实现所有资源的优化。

2、围基线由( D )组成。
A: WBS
B:项目章程、批准的详细的项目围说明书和WBS
C:项目章程、项目工作说明书和WBS
D:批准的详细的项目围说明书、WBS和WBS字典
1.我们常常从哪些方面着手处理需求不明确的问题?
1)让用户参与开发 2)开发用户界面原型 3)需求讨论会议 4)强化需求分析和评审
2.当项目过于复杂是,可以对项目进行任务分解,这样做的好处是什么?
答:将一个项目分解为更多的工作细目或者子项目,使项目变得更小、更易管理、更易操作,这样可以提高估算成本、时间和资源的准确性,使工作变得更易操作,责任分工更加明确。
2.再在项目初期,一般采用的成本估算方法是(类比估算法)。
3.功能点方法中5类功能组件的计数项是(外部输入)、(外部输出)、(外部查询)、(内部逻辑文件)、(外部接口文件)。
当估算某活动时间,存在很大不确定性时应采用CPM估计。(×)
- Author:Rainnn
- URL:https://blog.rainnn.top//article/218eefba-b209-80da-8e95-eea848ec458f
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!