软件项目管理
目录
一、项目
1.1 项目与日常运作的区别
1.2 项目的特征
1.3 项目的定义
二、项目管理
2.1 项目管理的定义
2.2 项目管理四阶段
(1)准备和启动阶段
(2)规划阶段
(3)执行和监控阶段
(4)收尾阶段
2.3 项目管理框架
(1)五大标准化过程组
(2)十大知识领域
(3)四十七个过程
2.4 初始化项目分析
(1)项目可行性分析
(2)项目范围分析
(3)项目干系人分析
三、生命周期模式
(1)瀑布-预测型
(2)敏捷开发
适应型生命周期--Scrum基本框架
(2)原型模型
(3)增量模型
(4)软件的生命周期
四、范围管理
WBS任务分解
五、进度计划
关键路径与里程碑
六、成本计划
七、企业项目执行中的典型问题与挑战
01 项目经理如何确保项目按时交付?
02 如何协调干系人之间的需求与冲突 ?
03 如何让干系人对项目目标达成一致和共识?
04 如何获得项目干系人对项目目标的承诺?
05 如何应对上级任意设定的项目工期 ?
06 如何应对人手不够与项目资源匮乏的问题?
07 如何推动问题的整改(寻找创新的、建设性的解决方案)?
08 如何鼓励项目干系人参与项目的计划与决策 ?
09 如何提升项目团队的沟通、协作与配合 ?
10 如何建立互信、尊重、有责任感的项目团队文化 ?
一、项目
1.1 项目与日常运作的区别
- 项目是一次性的,日常运作是重复进行的,项目是以目标为导向的,日常运作是通过效率和有效性体现的,
- 项目是通过项目经理及其团队工作完成的,而日常运作是职能式的线性管理,
- 项目存在大量的变更管理,而日常运作则基本保持连贯性的。
1.2 项目的特征
- 有明确的目标性
- 明确的时限性
- 资源成本的约束性
- 项目的不确定性
- 唯一性 (一次性)
1.3 项目的定义
- 日常运作:连续不断、周而复始的活动
- 项目:是为了创造一个唯一的产品项或提供一个唯一的服务而进行的临时性的活动。
二、项目管理
2.1 项目管理的定义
使项目能够按照预定的成本、进度、质量顺利完成并让所有干系以得到满意,而对成本、人员、进度、质量、风险等进行分析和管理的活动。
2.2 项目管理四阶段
(1)准备和启动阶段
(2)规划阶段
(3)执行和监控阶段
(4)收尾阶段
2.3 项目管理框架
(1)五大标准化过程组
- 启动阶段
- 项目的可行性分析、立项、招投标、合同签署。
- 计划阶段
- 范围定义、进度安排、资源计划、成本估计、质量保证计划、风险计划、实施计划等。
- 实施及控制阶段
- 项目实施、进度控制、费用控制、质量控制、变更控制等。
- 结束阶段
- 范围确认、质量验收、费用结算与审计、项目资料验收、项目交接与清算、项目审计与评估、项目总结等。
(2)十大知识领域
- 项目整合管理
- 项目范围管理
- 项目进度管理
- 项目成本管理
- 项目质量管理
- 项目资源管理
- 项目沟通管理
- 项目风险管理
- 项目采购管理
- 项目相关方管理
(3)四十七个过程
2.4 初始化项目分析
(1)项目可行性分析
根据市场、技术、人员等各资源分析项目的可行性,对分析结果进行认证讨论。
(2)项目范围分析
确定项目的功能模块、边界范围等。
(3)项目干系人分析
分析确定项目相关人员,包括:项目发起人、项目开发人员、测试人员、维护人员、客户等。
三、生命周期模式
(1)瀑布-预测型
- 项目的需求很明确
- 解决方案也很明确
- 适合短期项目
- 适合 车企等比较扎实的项目
PMP :项目管理(预测法)
瀑布模型(Waterfall Model) 是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好“返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。
(2)敏捷开发
ACP:敏捷项目管理专业人士认证(Agile Certified Practitioner,简称ACP)
适应型生命周期--Scrum基本框架
5~9人 7人最为合适
迭代+增量
三大原则:透明、检查、适应
(2)原型模型
- 在项目开始前,项目的需求不明确
- 需要减少项目需求的不确定性
- 类似的项目如:第一次开发的产品,验证可行性
原型模型即样品模型,先借用已有系统作为原型模型,通过“样品”不断改进,使得最后的产品就是用户所需要的。
原型模型采用逐步求精的方法完善原型,使得原型能够“快速”开发,避免了像瀑布模型一样在冗长的开发过程中难以对用户的反馈作出快速的响应。
(3)增量模型
- 项目开始,明确了需求的一部分,但是需求可能会发生变化
- 对于市场和用户把握不是很准,需要逐步了解
- 对于有庞大和复杂功能的系统进行功能改进,就需要一步一步实施的。
增量模型融合了瀑布模型的基本成分(重复应用和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。
(4)软件的生命周期
- 1. 需求分析(Requirement Analysis)
- 目标:明确用户需求,确定软件的功能和性能要求。
- 主要任务:
- 需求收集:通过与用户、业务分析师、市场调研等方式,收集用户的需求和期望。
- 需求分析:对收集到的需求进行分析,识别需求的可行性、完整性和一致性。
- 需求规格说明书:编写详细的需求规格说明书(SRS),包括功能需求、非功能需求(如性能、安全性、可用性等)、用户界面需求等。
- 输出:需求规格说明书(SRS)。
- 重要性:需求分析是整个软件开发过程的基础,需求规格说明书是后续设计、开发和测试的依据。需求不明确或不完整可能导致项目失败。
- 2. 设计(Design)
- 目标:根据需求规格说明书,设计软件的架构和详细设计。
- 主要任务:
- 系统架构设计:确定软件的整体架构,包括模块划分、技术选型、数据流向等。
- 详细设计:对每个模块进行详细设计,包括算法设计、数据结构设计、接口设计等。
- 设计文档:编写设计文档,包括系统架构图、模块设计说明书、接口设计说明书等。
- 输出:设计文档。
- 重要性:设计阶段决定了软件的结构和实现方式,好的设计能够提高软件的可维护性、可扩展性和性能。
- 3. 编码(Coding)
- 目标:根据设计文档,将设计转化为可运行的代码。
- 主要任务:
- 代码编写:开发人员根据设计文档编写代码,遵循编码规范和最佳实践。
- 代码审查:通过代码审查(Code Review)确保代码质量,发现潜在问题。
- 单元测试:开发人员编写单元测试代码,对每个模块进行单元测试,确保模块功能正确。
- 输出:源代码、单元测试报告。
- 重要性:编码阶段是软件开发的核心环节,代码质量直接决定了软件的质量和性能。
- 4. 测试(Testing)
- 目标:验证软件是否满足需求规格说明书的要求,发现并修复缺陷。
- 主要任务:
- 测试计划:制定详细的测试计划,包括测试策略、测试环境、测试用例等。
- 测试用例设计:根据需求规格说明书和设计文档,设计测试用例,覆盖各种功能场景和边界情况。
- 测试执行:执行测试用例,记录测试结果,发现缺陷并提交缺陷报告。
- 缺陷管理:跟踪和管理缺陷,确保缺陷得到及时修复。
- 回归测试:修复缺陷后,进行回归测试,确保修复没有引入新的问题。
- 输出:测试报告、缺陷报告。
- 重要性:测试阶段是确保软件质量的关键环节,通过严格的测试可以发现并修复缺陷,提高软件的可靠性和稳定性。
- 5. 部署(Deployment)
- 目标:将软件部署到生产环境中,使其可以被用户使用。
- 主要任务:
- 部署计划:制定详细的部署计划,包括部署时间、部署步骤、回滚计划等。
- 环境准备:准备生产环境,包括服务器、数据库、网络等。
- 部署实施:按照部署计划,将软件部署到生产环境中。
- 用户培训:对用户进行培训,帮助他们熟悉软件的使用方法。
- 上线监控:监控软件的运行情况,及时发现并解决上线后的问题。
- 输出:部署报告、用户手册。
- 重要性:部署阶段是软件从开发到实际使用的关键环节,确保软件能够顺利上线并稳定运行。
- 6. 维护(Maintenance)
- 目标:对已上线的软件进行维护和优化,确保其长期稳定运行。
- 主要任务:
- 缺陷修复:根据用户反馈,修复软件中发现的缺陷。
- 功能增强:根据用户需求,对软件进行功能增强和优化。
- 性能优化:优化软件性能,提高运行效率。
- 技术支持:为用户提供技术支持,解决使用过程中遇到的问题。
- 输出:维护报告、更新日志。
- 重要性:维护阶段是软件生命周期中持续时间最长的阶段,良好的维护能够延长软件的使用寿命,提高用户满意度。
- 7. 退役(Retirement)
- 目标:在软件不再满足业务需求或被新的软件替代时,安全地退役软件。
- 主要任务:
- 退役计划:制定详细的退役计划,包括数据迁移、用户通知等。
- 数据迁移:将现有数据迁移到新的系统或备份存储中。
- 用户通知:通知用户软件即将退役,提供替代方案。
- 系统下线:按照退役计划,安全地关闭软件系统。
- 输出:退役报告。
- 重要性:退役阶段是软件生命周期的最后阶段,确保软件的退役过程平稳、安全,避免对业务造成影响。
四、范围管理
WBS任务分解
工作分解结构(WorkBreakdomnStructure,简称WBS)就是把一个项目按一定的原则分解,项目分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的日常活动中,直到分解不下去为止。
即:项目一任务一工作一日常活动
工作分解结构以可交付成果为导向对项目要素进行的分组,它归纳和定义了项目的整个工作范围,每下降一层代表对项目工作的更详细定义。
WBS总是处于计划过程的中心,也是制定进度计划、资源需求、成本预算、凤险管理计划和采购计划等的重要基础。
五、进度计划
进度是对执行的活动和里程碑制定的工作计划日期表。
进度管理是为了确保项目按期完成所需要的过程按时完成项目是项目经理最大的挑战之一时间是项目规划中灵活性最小的因素进度问题是项目冲突的主要原因,尤其在项目的后期。
- 活动定义
- 确定为完成项目的各个交付成果所必须进行的诸项具体活动
- 活动排序
- 确定任务依赖、前置任务、里程碑(里程碑显示项目进展中的重大工作完成)
- 活动历时估计
- 每个任务的历时估计、项目总历时估计,可采用定额算法、经验算法。
- 任务资源估计
- 每个任务需要的资源类型和数量有一定的考虑,这些资源包括,人力资源,设备资源,以及其它资料资源
关键路径与里程碑
(1)关键路径
关键路径是项目计划中最长的路线。它决定了项目的总实耗时间。项目经理必须把注意力集中于那些优先等级最高的任务,确保它们准时完成,关键路径上的任何活动的推迟将使整个项目推迟。向关键路径要时间,向非关键路径要资源。所以在进行项目操作的时候确定关键路径并进行有效的管理是至关重要的。
(2)里程碑
在进度时间表上设立一些重要的时间检查点,这样一来,就可以在项目执行过程中利用这些重要的时间检查点来对项目的进度进行检查和控制。这些重要的时间检查点被称作项目的里程碑
六、成本计划
- 资源计划编制:确定项目需要的资源种类和数量,参考计划书
- 成本估算:编制一个为完成项目各活动所需要的资源成本的近似估算
- 软件项目规模:
- 软件项目规模即工作量,是从软件项目范围中抽出的软件功能,然后确定每个软件功能所必须执行的一系列软件工程任务。
- 包括:软件规划,软件管理,需求,设计,编码,测试,以及后期的维护等任务。
- 规模的单位
-
1. L0C(Lines of Code,源代码行数)
-
含义:L0C 是通过统计软件源代码的物理行数来衡量软件规模的方法。它是一种简单直观的度量方式,通常用来估算软件的大小。
-
单位:通常用“千行代码”(KLOC)作为单位,例如 10KLOC 表示 10,000 行代码。
-
优点:容易理解和统计,适合在早期开发阶段对软件规模进行初步估算。
-
缺点:不能反映代码的质量和复杂性,不同编程语言的代码行数差异较大,且容易受到代码风格(如空行、注释等)的影响。
-
-
2. FP(Function Point,功能点)
-
含义:功能点分析是一种基于软件功能需求来衡量软件规模的方法。它通过分析软件的功能模块、用户输入/输出、文件操作等要素来计算功能点数。
-
单位:功能点数(FP),它是一个无量纲的单位,用于表示软件的功能复杂度。
-
优点:与编程语言无关,能够更准确地反映软件的功能复杂性,适合用于估算软件开发工作量和成本。
-
缺点:计算过程相对复杂,需要专业的培训和经验,且对需求变更较为敏感。
-
-
3. 人月
-
含义:人月是衡量软件开发工作量的单位,表示一个人在一个月内完成的工作量。它用于估算开发团队的人员配置和项目进度。
-
单位:人月(PM),例如一个项目需要 10 人月,意味着需要 10 个人工作一个月,或者 5 个人工作两个月。
-
优点:直观地反映了开发工作量和时间的关系,便于项目管理和资源规划。
-
缺点:忽略了人员效率的差异,不同人员在相同时间内完成的工作量可能不同,且容易受到项目复杂度、技术难度等因素的影响。
-
-
4. 人天
-
含义:人天是另一种衡量软件开发工作量的单位,表示一个人在一天内完成的工作量。
-
单位:人天(PD),例如一个项目需要 200 人天,意味着需要 200 个人工作一天,或者 10 个人工作 20 天。
-
优点:比人月更精细,能够更准确地反映项目进度和资源分配情况。
-
缺点:同样忽略了人员效率的差异,且容易受到工作时间安排(如加班、休假等)的影响。
-
-
5. 人年
-
含义:人年是衡量长期软件开发工作量的单位,表示一个人在一年内完成的工作量。
-
单位:人年(PY),例如一个大型软件项目需要 50 人年,意味着需要 50 个人工作一年,或者 100 个人工作半年。
-
优点:适用于大型、长期的软件项目,便于从宏观角度规划项目资源和进度。
-
缺点:时间跨度较长,容易受到外部环境变化(如技术更新、人员流动等)的影响,导致估算误差较大。
-
-