软件开发是一个从概念的具体的过程,在这个过程中总是出现诸多不可控的因素,造成资源浪费、成本增加等,为了解决这些问题,从以往的经验教训中总结出一套用于管理软件开发的流程体系。
软件开发的出发点和落脚点都起源于需求,为实现该需求,我们该如何做才能在可控成本下将其实现呢?首先得从项目管理入手。
项目管理是个宏观概念,主要由四个方面组成:人员、产品、过程和项目,虽然它们之间无顺序之分,但我更愿意用层次化的模型刻画它们之间的关系,如下图。
人员构成是项目开发的基础,一旦团队组成便可以分工对产品进行开发,在开发过程中总是很难避免偏差的出现,但是如果偏差能够通过管理手段及时纠正,就能很好完成项目。
虽然项目管理工作重心放在过程管理上,但是对其他三个方面的管理也需要把控好,避免因小失大。
(一)人员管理
在人员管理方面,首先需明确有哪些利益相关者?牵头人、参与者及用户等,不仅仅需要了解牵头人的目标和确定用户群体,更重要的是衡量参与者(项目管理者和开发团队)是否有能力完成该项目。在人员管理中,最重要同样也是最难的问题就是如何协调与沟通。每个团队都需要在开发过程中不断优化沟通方式,以达到高效开发目的。
(二)产品管理
软件产品与硬件产品不同,只有在软件产品开发出来,经验市场及用户的考验,才能客观评价其是否是一个好的产品。进行产品管理,从宏观角度需要从两方面入手:软件范围和问题分解。
需求总是无限的,但是人力、时间和资源是有限的,受这三方面的限制,必须明确软件范围,分析软件产品将用于哪些环境下,有哪些约束。这个产品将为用户提供哪些数据和功能。画好大饼的范围便可以对问题进行分解,这也就是分而治之的策略,将大模块分解为小模块,更有利于进行成本估算、控制,遇到偏差时,能够快速响应解决。在问题分解这一过程,也是软件需求分析的核心活动。
(三)过程管理
过程管理由选定过程模型开始,通过分析目标用户和开发人员特点、产品的特性和软件产品所处环境从而选择过程模型。
过程模型通常用通用框架活动构成———沟通、策划、建模、构建和部署。确定好过程框架活动后,再依次在每个过程下拆分任务集,这就是过程分解。过程模型的选择灵活多变,需要具体事情具体分析。
(四)项目管理
开发一个项目,不能抱着破釜沉舟的态度进行,反而需要进行周密的预判、制定可靠的planB面对紧急情况。
预判什么?planB的内容是什么?
预判还得先划分范围,确定如何对产品进行度量开始,接着对项目进行估算,确保可行性,最后制定进度安排,设置里程碑,确保在有限条件下能够完成项目。
planB也就是对软件开发过程中可能出现的风险进行识别,并对每个存在作出预测及其可能产生的影响,从而计划应对的方案。
在初创公司中,要实现整套项目管理流程是不太可能的,因为在前期需要花费大量时间和经历对产品进行评估、评审,从管理层角度来看,是得不偿失的。因此,初创公司的开发团队往往选择基于敏捷开发模型进行需求分析。由于前期缺乏一系列的评估过程,后期总需要大量时间、精力对产品进行维护。
成熟的公司的开发团队有一套完整的项目管理体系,因为其产品体量大,若开发前没有精密的计划和评审,最后损失的不仅仅是时间和金钱,更多的是公司形象。