当前位置: 首页 > news >正文

软件流程和管理(六):Project Scheduling

目录

1. Understand the role of a project schedule

2. Understand how to develop a project schedule

2.1 Developing Project Schedule - Steps

2.1.1 Work Breakdown Structure – Step 1

2.1.2 确定分解的任务之间的相互依赖关系,并开发一个任务网络

2.1.3 估计每项任务的工作量和时间分配

2.1.4 为任务分配资源并验证努力程度

2.1.5 了解如何使用项目进度表来监测和跟踪项目进度

2.1.6 理解敏捷计划原则


1. Understand the role of a project schedule

项目时间表:

  • 在项目规划阶段产生的重要人工制品之一
  • 在整个项目中使用和维护,以监测和跟踪项目进展——是一个活的文件

项目时间表包含什么?

  • 每项任务的持续时间和依赖性
  • 每项任务所需的人员和物质资源
  • 里程碑和可交付成果
  • 项目时间表

本专题介绍的项目计划和时间安排适用于正式的SDLC流程——计划驱动

Waterfall是由Scope决定项目的Cost和Time。

Agile是由Cost和Time决定项目的Scope。

2. Understand how to develop a project schedule

2.1 Developing Project Schedule - Steps

  • 将任务分解成你能处理的小块——工作分解结构(WBS)。
  • 确定分解的任务之间的相互依赖关系,并开发一个任务网络。
  • 估计每项任务的工作量和时间分配。
  • 为任务分配资源并验证努力程度。
  • 制定项目时间表。

2.1.1 Work Breakdown Structure – Step 1

规划和执行大型任务是一项挑战:

  • 估算时间和资源
  • 确定中期目标和可交付成果
  • 进展监测

解决方案是将任务分解为可管理的单元:

  • 每个任务都应该有一个具体的结果或可交付的成果
  • 形成一个工作分解结构(WBS)

Non-software project

Software Project

2.1.2 确定分解的任务之间的相互依赖关系,并开发一个任务网络

识别任务的依赖性:

  • 不受限制:任务可以在任何时候开始(购买油漆,拆除可拆卸的装饰物)
  • 受限:取决于另一个任务(在拆除装饰物之前不能拆除墙纸)
    • 如果任务B依赖于任务A(A->B)
    • B是一个后继任务(S)
    • A是一个前置任务(P)
    • 移除可拆卸的装饰物(P)->移除墙纸(S)

依赖性是由以下原因造成的:

  • 一项任务需要另一项任务的工作成果
  • 一项任务需要另一项任务使用的资源

任务依赖类型

最常见的依赖关系类型是完成——开始的依赖关系。

Task Network

任务网络——软件项目

2.1.3 估计每项任务的工作量和时间分配

Effort-time Estimation

估算软件工作量的一个常见措施是man-months(更普遍的是person-months)。

  • 第7周将介绍工作估算。

Person-months

  • 一个人全职工作完成任务所需的时间,以月为单位。

The Mythical Man-Months

  • man-months是估算软件的一个误导性措施
  • 在一个进度落后的项目上增加人手,可能会造成更大的损失,而不是帮助它。

Effort vs Time

Time Estimation

Terminology

  • optimistic time - O
  • pessimistic time - P
  • most likely time - M
  • expected time - T_{E}

T_{E} = (O + 4M + P)/6

2.1.4 为任务分配资源并验证努力程度

资源分配

如果工作(person-months)和时间是已知的,人员的数量可以计算为:

为任务分配人员

  • 尽管计算每项任务所需的人员数量看似简单,但资源分配是一项复杂的任务
  • 项目经理必须仔细考虑人员的专业知识,以及他们是否能完成任务,这可能需要验证和调整时间表。

Develop a project schedule

项目时间表将回答两个迄今为止尚未回答的重要问题

  • 该系统需要多长时间来开发?
  • 它将花费多少钱?

两种广泛使用的表示项目进度的图形符号

  • 甘特图
    • 一种条形图,对照日历显示时间表
  • PERT(计划评估和审查技术)图
    • 显示任务之间的依赖关系和关键路径的活动网络

Milestones vs Deliverables

Milestones 里程碑

  • 标记项目时间表上的特定点
  • 这些点可能是锚的信号,例如:
  • 项目的开始和结束日期
  • 需要进行外部审查
  • 一个阶段的开始和结束
  • 某项可交付成果的完成

Deliverable 可交付成果

  • 有意义的具体人工制品
  • 可交付成果的例子包括:
    • Project documents such as the Project Management Plan, Requirements Specification, Design Document, Test Plan etc.
    • Prototypes
    • Final application

甘特图

  • 是由亨利-甘特在1910年提出的
  • 甘特图是一个水平条形图,显示任务与时间线的关系——项目进度
  • 可用于查看计划活动与进展情况,因此是监测项目进展的一个有用工具

链接甘特图:

  • 包含表明任务之间依赖关系的线条

进度甘特图:

  • 任务的阴影与完成的程度成正比
  • 用于进度跟踪——提供进度的可视化表示

PERT Chart

PERT(计划评估和审查技术)图:

  • 一个任务网络,它显示了与时间有关的信息和关键路径的依赖关系。

PERT分析有助于:

  • 了解项目的特点,让项目经理进行时间安排的权衡
  • 进行关键路径分析
  • 监测项目进展和重新规划

涉及到计算以下估算:

  • 最早开始时间(ES)
  • 最晚开始时间(LS)
  • 最早结束时间(EF)
  • 最晚结束时间(LF)
  • 松弛时间

关键路径方法

关键路径

  • 持续时间最长的路径。
  • 关键路径上的活动的总自由松弛度为0。
  • 关键路径上的任何活动的延迟都会导致项目的延迟。

使项目进度崩溃

  • 通过缩短关键路径来缩短项目的总工期。
  • 通过消除关键路径中的活动之间的依赖关系;或。
  • 缩短关键路径中活动的工期。

工具

2.1.5 了解如何使用项目进度表来监测和跟踪项目进度

项目跟踪和控制

项目日程安排很重要,但跟踪和控制更重要!

如何跟踪和控制项目进度?

  • 定期会议,团队成员报告进度
  • 评估作为软件工程过程一部分进行的评审和审计的结果
  • 跟踪正式项目里程碑
  • 比较实际开始日期和计划开始日期
  • 与工程师会面并进行非正式讨论
  • 使用挣值分析等正式方法

挣值分析(EVA)

EVA可以用来

  • 报告当前/过去的项目绩效
  • 根据当前/过去的绩效预测未来的项目绩效

结果可以用美元和/或百分比表示

计算挣值分析

计划价值(PV)

  • 在特定时期内,计划用于特定活动的已批准的成本估算部分。

挣值(EV)

  • 实际完成的工作的价值

实际成本(AC)

  • 在特定时期内,为完成该活动的工作而产生的成本总额。

2.1.6 理解敏捷计划原则

敏捷开发中的规划

  • 采取与传统方法明显不同的风味
  • 详细计划被推迟到迭代开始时进行
    • 为处理变化而设计
  • 一个迭代包括所有阶段(需求、设计和测试)
    • 规划是基于轻量级的清单
    • 甘特图和PERT图被认为不太有用
  • 计划短期迭代
  • 交付可用的软件
  • 使用 "及时(JIT)计划"--下一次迭代
  • 使用团队

Scrum中的计划

 

发布计划

正规规划中的假设。

  • 范围固定——需求是稳定的
  • 预算固定——成本估算是准确的
  • 时间表固定——基于范围和预算得出

敏捷规划

  • 认识到所有三个因素:范围、预算和时间在现实中都不能固定--不推荐
  • 我们可以固定范围和日期而使预算灵活吗?
    • 并非如此,因为增加预算,也就是增加资源,并不总是有助于提高速度--不推荐
  • 那么我们有什么选择呢?
    • 固定日期和预算,使范围灵活。固定日期的发布计划
    • 固定范围并使日期和预算具有灵活性--固定范围发布计划

固定日期的发布计划

 

相关文章:

  • 2022-09-01 mysql/stonedb-多线程并行遍历元组遇到的问题分析
  • MATLAB | 面积图、饼状图、水平柱状图的斜线填充(阴影填充)
  • IDEA开发环境初始化配置
  • 企业单位公众号如何上传附件(如Word,Excel,PPT等)
  • Java中二维数组练习题
  • 一步到位,在Ubuntu中开启MySQL Windows Navicat能远程访问
  • 关于 Math.random()生成指定范围内的随机数的公式推导
  • 抛砖系列之git仓库拆分工具git-filter-repo
  • 基于51单片机温度监控Proteus仿真设计_报警值可调
  • 海关 瑞数5.5 找后缀加密入口解析
  • Cadence OrCAD Capture 绘制总线的方法
  • 高薪程序员面试题精讲系列145之前后端如何交互?Swagger你用过吗?
  • MySQL高级十:索引
  • 8月更新| Java on Visual Studio Code
  • 【牛客刷题】每日一练——Java语法的强化
  • JavaScript 奇技淫巧
  • java中具有继承关系的类及其对象初始化顺序
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Markdown 语法简单说明
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • SAP云平台里Global Account和Sub Account的关系
  • Vue.js-Day01
  • 半理解系列--Promise的进化史
  • 聊聊flink的BlobWriter
  • 深度学习在携程攻略社区的应用
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 提醒我喝水chrome插件开发指南
  • 在weex里面使用chart图表
  • Java性能优化之JVM GC(垃圾回收机制)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (蓝桥杯每日一题)love
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • .form文件_SSM框架文件上传篇
  • .net core控制台应用程序初识
  • .NET 常见的偏门问题
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @Documented注解的作用
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [04] Android逐帧动画(一)
  • [20170713] 无法访问SQL Server
  • [Angular] 笔记 7:模块
  • [autojs]逍遥模拟器和vscode对接
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [CSS]CSS 的背景
  • [FZSZOJ 1223] 上海红茶馆
  • [IE技巧] IE8中HTTP连接数目的变化
  • [iOS]-NSTimer与循环引用的理解
  • [ITIL学习笔记]之事件管理(2)
  • [Linux]Ubuntu noVNC使用