软件工程之项目规划

 从公众号转载,关注微信公众号掌握更多技术动态

---------------------------------------------------------------

一、可行性研究

    可行性研究讲的是如何科学地论证项目的可行性,以及项目是不是值得做。如何科学论证是方式方法,是否值得做则是对投入回报比进行评估。

  • 经济可行性:从成本和收益角度分析,看投入产出比。不仅分析短期利益,还要分析长期利益。

  • 技术可行性:技术上是否可以实现,不能解决的问题能否规避。

  • 社会可行性:法律、道德、社会影响等因素的考量。

1.经济可行性

从投入产出比的计算,来分别统计成本和收益。考虑收益的时候要对短期和长期都进行 分析。

软件工程之项目规划_第1张图片

2.技术可行性

技术是否可行,关键还是在人。技术本身需要考虑两个方面:成熟度和覆盖面,对于不能解决的问题能够规避。

软件工程之项目规划_第2张图片

3.社会可行性

从三个方面考虑:

  • 是否存在不良道德行为

  • 是否存在负面社会影响

  • 是否违反相关法律法规

软件工程之项目规划_第3张图片

二、项目计划

1.如何制定计划

(1)任务分解

WBS(Work Breakdown Structure):把要做的事情,按照一个树形结构去组织,逐级分解,分割成小而具体的可交付结果,直到不能再拆分为止。

在制定计划的时候,除了要拆解任务,还要反复思考各种存在的问题。对技术细节不清楚的地方,要寻求技术人员的帮助。

(2)估算时间

主要是靠经验,要想估算准确,需要从两个方面入手:

  • 任务拆解越细致,想的越清楚,就能估算的越准确。

  • 要让负责这个任务的人员参与估算

PERT预估

O乐观预估:如果一切顺利,可以在这个时间内完成,为了保证乐观预估有意义,应当控制概率在10%以下

N标称预估:概率最大的数字,按照正常速度进行的预估

P悲观预估:考虑到可能发生的各种意外

实际时间= O+4N+P/P-O

(3)排路径

根据任务之间的关系,资源占用情况,排出合适的顺序。

2.设置里程碑

里程碑是承诺,不能轻易改变。

Deadline是第一生产力。

里程碑完成后,获得正面激励。

3.计划的跟踪调整

两种方式跟踪进度:

  • 项目经理定期收集跟踪

  • 项目成员主动汇报

好的实践:

  • 每日站立会议

  • 看板

4.制定流程和规范

好的项目管理,不需要直接管人管事,,而是管理好计划和流程规范;项目成员不需要按照项目经理的指令做事,而是遵循计划和流程规范。

(1)为什么要有流程规范:

  • 提升团队效率:

  • 将好的实践标准化流程化,让大家可以共享经验

  • 借助流程规范,让项目管理从人治到“法治”

(2)如何制定好流程规范

可以通过四个步骤来开展:

  • 明确要解决的问题

  • 提出解决方案:可以参考软件工程中,大家公认的好的实践。

  • 达成共识、推广执行:要得到大家的人可,还需要配合奖惩措施来保障执行。

  • 持续优化,不断改进

三、风险管理

风险包含两个方面的内容:

  • 发生后,会造成什么损失

  • 发生的概率有多大

1.风险识别

识别风险,经验很重要,因为大部分风险其实都是类似的。一个识别风险的方法叫检查表法,类似这样的:

软件工程之项目规划_第4张图片

软件项目的风险主要分成以下几类:

  • 项目风险:项目预算、进度、用户和需求等方面

  • 人员风险:人员离职、人手不足等问题

  • 技术风险:采用的技术可能带来的风险

  • 商业风险:与市场、产品策略等有关的商业风险。

建议:定期针对风险问题开一些头脑风暴会议,一起发现可能的风险。让项目成员有合适的渠道来反馈可能发生风险的问题。

2.风险量化

风险识别出来之后,需要从两个方面去评估:

  • 发生的概率

  • 后果的严重程度

划分优先级来制定策略。

3.应对计划

软件工程之项目规划_第5张图片

回避风险:对可能发生的风险,放弃或修改导致风险的方案,从源头消除。

转移风险:将损失转嫁出去,比如对自己不在行的服务,购买专业的服务产品。

缓解风险:在风险发生前采取措施,降低风险发生的概率。比如涨工资来留住核心成员

接受风险:在一些风险本身很难避免,或者应对风险的成本超过风险发生后造成的损失,那就勇敢一点吧!

4.风险监控

要做好监控,需要做好三个方面:

  • 能对监控的内容量化

  • 设置阈值

  • 要有后续的报警和处理机制

四、项目管理工具

1.项目计划工具

MS Project在分解任务和排计划方面十分方便直观。

软件工程之项目规划_第6张图片

2.基于Ticket的任务跟踪系统

Ticket跟踪最早源于客服的工单系统,每次客服接到一个问题,就创建一个工单,后续和客户的每一次交流和处理,都要更新工单内容和状态,直到结束。

一个Ticket应该包含的信息如下:

  • 标题:摘要性地描述Ticket内容

  • 类型:属于什么类型的Ticket:Bug、需求、任务

  • 内容:Ticket的详细内容。如,bug的话,包含bug内容和重现步骤

  • 创建人

  • 优先级

  • 状态:未开始、处理中、已解决、重新打开、关闭等

  • 指派给谁

  • 历史记录

利用燃尽图可以直观的预测工作将在何时全部完成。

缺点:整体Ticket状态不是很直观,不能清楚看到哪些任务在进行中

3.基于看板的可视化任务管理

通过看板可以很直观地看到当前任务进展情况。

软件工程之项目规划_第7张图片

普通项目成员使用看板的流程:

软件工程之项目规划_第8张图片

4.工具的选择

项目计划工具:MS Project(windows)、OmniPlan和Merlin Project(Mac)

基于Ticket的任务跟踪系统:Jira、Azure DevOps、Github的issue

国内同类产品:

软件工程之项目规划_第9张图片

5.维护一个项目概念列表

    每个项目都有自己的词汇表:对团队有特殊意义的术语。“Order”对于开发在线商店的团队来说是一回事,而对于记录宗教团体的世系的应用程序来说,意味着完全不同的另一件事。重要的是,团队中的每个人都知道这些词的意思,并始终如一地使用它们。一种方法是鼓励大量的交流。如果每个人都参与结对编程,并且频繁地交换结对,那么术语就会渗透性地传播开来。另一种方法是使用项目术语表,列出对团队有特殊意义的术语。这是一个非正式的文档,可以在 wiki 上创建并维护,也可以将索引卡片挂在墙上。过一段时间,项目术语将会有自己的生命。随着每个人都熟悉了这些词汇,就能够把这些术语用作简称,准确而简洁地表达许多意思。(这正是模式语言所指。)

维护一个概念列表,可以保证团队交流的准确性,避免你说的是A,我理解成B的情况。一个项目中有不同的角色,业务方、产品、前端、后端、算法、数据,对于一起开会时经常提起的概念,大家的理解并不一定一致。举个简单的例子,比如业务方有个二分类的需求,要从一些商户中找到其中不合规的商户,模型预测结果如下图所示,但是一个人以为的准确率是(a + d) / (a + b + c + d),另一个人以为的是d / (b + d)。如果没有在项目之初明确下来大家关注指标的具体含义,那可能出现各说各的的情形。技术按照一个计算逻辑承诺并达成了准确率指标,业务方按照另一个逻辑计算后发现准确率远远没达到,这会给团队合作带来障碍。

你可能感兴趣的:(java,python,软件工程,系统架构)