《软件工程之美》总结二:项目规划

可行性研究

可行性研究通常讲的是如何科学地论证项目的可行性,以及这个项目是不是值得做

对于软件项目的可行性研究,主要从三个方面入手: 经济可行性、技术可行性、社会可行性。

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

技术可行性:
软件项目最终是需要人通过技术来实现的,所以要分析技术上是不是可行

社会可行性:
社会可行性涉及法律、道德、社会影响等社会因素

项目管理

需要逐步转变思维,从技术思维到工程思维,不要仅仅局限于自己负责的一个小模块,而是要多从项目的整体去思考

项目管理核心就是管理好人和事

1 管理好客户的预期

在项目的质量、范围、时间、成本上达到要求,重要的是达到一个平衡,可参考https://blog.csdn.net/qq_41594698/article/details/107558230的平衡质量、时间、成本

2 管理好项目成员

使用流程和规范让项目成员紧密协作,好的项目管理,不需要直接去管人,而是管理好流程规范,项目成员也不需要按照项目经理的指令干活,而是遵循流程规范来干活(参考”流程和规范“部分,工具可参考”项目管理工具“部分)

为了完成项目目标,在整个开发过程 中所产生的一系列任务

对项目中事情的管理,本质上就是对软件开发过程的管理

1 选择适合项目的开发模式

瀑布?敏捷?同样可参考https://blog.csdn.net/qq_41594698/article/details/107558230

2 制定好项目计划

3 对计划进行跟踪和控制,同时做好风险管理

可参考”风险管理“部分

总结

在这里插入图片描述

宝玉大佬的经验教训:

1 控制写代码的冲动

2 团队的成功才是项目管理者的成功

3 形成自己的管理风格

项目计划

如果没有计划,项目可能会陷入一种无序和混乱中

如何制定

四个基本步骤:任务分解、估算时间、排任务路径、确定里程牌

1 任务分解:工作分解结构(Work Breakdown Structure, WBS)

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

2 估算时间

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

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

3 排任务路径

根据任务之间的关系,资源的占用情况,排出合适的执行顺序。看任务之间是否可以并行开发

4 确定里程牌

对于项目成员来说有两个重要的影响:
1 成员会有很明显的来自 DeadLine 的进度压力;
2 里程碑完成后,大家会获得一 种正面激励

计划初步完成后需要进行跟踪和调整

跟踪进度的方式主要有两种:
1项目经理定期收集跟踪
2 项目成员主动汇报

可以借鉴敏捷开发的站立会议和看板,可以更好地了解计划执行的情况

流程和规范

存在的原因

1 提升团队效率

从个体来看,因为流程规范的存在,可能存在效率降低的情况,但从团队的角度来看,好流程规范是提升效率的,也让团队不再到处依赖于人的指挥,而是依赖于流程规范

需求变更时,如果有个大家都认可的变更流程,也会变得简单得多

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

如何制定

1 明确要解决的问题

2 提出解决方案

先想出解决问题的方法,再变成具体的步骤/标准

3 达成共识,推广执行

4 持续优化,不断改进

流程规范工具化

应该尽可能借助技术手段来推动甚至替代流程规范

比如代码规范的执行,以前主要靠反复的教育宣传和代码审查中一个个去检查,现在则可以借助 VSCode等IDE,以及 ESLint 这种代码检查工具,方便地检测出不符合规范的代码,甚至于可以直接格式化成满足代码规范的格式

比如保证代码质量,以前是依赖测试人员大量手工的测试,现在则借助 CI(Continuous Integration,持续集成)、自动化测试和 Git,可以保证代码必须在通过测试以后,才会合并到主分支,从而很好的保证了代码的质量

项目管理工具

一切管理问题,都应思考能否通过工具或技术解决,如果当前工具或技术无法解决,则暂时由流程规范代替,同时不停地寻找工具和技术

项目计划工具

相关软件:MS Project

一开始软件项目的开发以瀑布模型为主,瀑布模型的这种按阶段划分的开发模式,和 WBS (工作分解结构)这种将任务层层分解的理念不谋而合,MS Project 可以非常好地将所有任务分解、制订计划,按照计划跟踪执行

MS Projec 虽然解决了计划制订的问题,但还是有些不足之处,例如不方便跟踪任务进度, 进度不直观等

基于Ticket的任务跟踪系统

用来跟踪 Bug、需求、开发任务等

一个 Ticket应该包含:

标题:摘要性的描述 Ticket 内容;

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

内容:Ticket 的详细内容;
如果是 Bug 的话,除了要写清楚 Bug 内容,还需要重现步骤;
如果是需求的话,要有需求的描述,可能还需要额外的文档链接辅助说明

创建人:谁创建的这条 Ticket

优先级:这个 Ticket 的优先级高还是低

状态:Ticket 的状态;
例如:未开始、处理中、已解决、重新打开、关闭等

指派给谁:这个 Ticket 被指派给谁了,谁来负责

历史记录:整个 Ticket 改变的历史信息,用以跟踪

有了 Ticket 之后,无论大到一个功能需求,还是小到一个 Bug,从它创建,一直到完成,整个过程都可以方便的 被跟踪起来,不用担心像任务被忘记等情况

相关软件:jira

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

通过看板可以很直观的看到当前任务进展情况
在这里插入图片描述

在看板视图上的所有 Ticket可以很直观的看出哪些还没开始,哪些进行中,哪些已经完成

风险管理

风险是指不确定的事件,一旦发生,将会造成消极的影响

风险包含两个方面的内容: 发生后,会造成什么样的损失? 发生的概率有多大?(风险 = 损失 x 发生概率)

项目中的任务都思考一下它最坏的结果是 什么,如果最坏的结果不能接受,就说明要有个 B 计划,考虑风险管理了

应对策略:

被动应对:风险已经发生,造成了问题才被动应对

有备无患:事先制定好风险发生后的补救方案,但没有任何防范措施

防患未然:对可能的风险做出防范,并把风险防范作为项目任务的一部分

如何进行风险管理

1 风险识别:识别可能的风险

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

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

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

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

使用检查表法,将风险分类列成清单进行对照

2 风险量化:对风险进行评估量化

3 应对计划:对风险制定应对策略

回避风险——更改导致风险的方案

转移风险——将损失转嫁出去

缓解风险——降低风险发生概率或减少可能造成的损失

接受风险——撞翻南山,获新天地

4 风险监控:对风险进行监控预警

猜你喜欢

转载自blog.csdn.net/qq_41594698/article/details/107566380