软件开发三步曲【摘要】:大部分软件项目从开始到结束都会经历相似的历程,即项目的生命周期。
一个项目首先被创立起来(开始阶段),并安排相应的经理人员,配备项目团队成员和启动所需的资源,制定工作计划。
然后项目就进入正轨,开始迅速攀升。
这期间不断取得进度,这种势头一直持续,直至面临其终结时刻。
这个过程,这就是项目的三阶段——启动、实施和关闭。
第一步:项目启动项目启动阶段的工作,是项目成功的起点,如果这个阶段工作不规范,那整个软件项目就会“上梁不正下梁歪”了。
一、项目立项当市场部门获取到来自市场的需求信息,并在充分的市场调查与分析之后,认为有必要启动软件项目时,应该向相关的管理者正式的提出立项申请。
将立项申请正式化,能够有效地规范市场部门与技术开发部门之间的信息沟通渠道及工作流程,也能够有效地界定两个部门之间的职责划分,避免许多不必要的麻烦。
1.立项申请实践中,采用标准化的《软件开发立项申请表》来完成这一流程。
该表格由市场部门填写,报相关领导审批后提交给技术开发部门。
该表格中应该包括了以下信息:(1)问题 / 机会:这一部门主要是提供该软件项目的背景介绍,说明其想要解决的问题,或是什么样的市场机会,这个部分将成为管理者决策的主要依据。
(2)项目目标与成功标准:项目目标是指用精练的商业语言描述项目想要表达的目标,并且设立可量化的成功标准对其进行解释。
(3)目标描述:这一部分是对项目目标的详细说明,将目标分解成一个个点,使得项目目标更有可实施性。
(4)假设、风险及障碍:如果立项申请人对该项目做出了一些假设,或预计到的一些风险及障碍,须在立项申请表中说明。
(5)客户名单:为了能够方便技术开发部门下一步的工作,在立项申请表中还需要提供相关的客户联系办法,包括该项目的提出人、决策人、使用人的信息。
《软件开发立项申请表》样例2.立项审批立项申请提出后,就需要对该立项进行评审。
评审工作应主要集中在经济可行性、社会可行性、技术可行性三方面(1)经济可行性:主要是对该项目的投资回报率进行估算,评估该项目是否值得投入,预计的投入与产出大概是多少等,评估的主体是市场部门;(2)社会可行性:主要对该项目是否符合社会相关的法律法规,是否违背相关的规定等,评估的主体也是市场部门;(3)技术可行性:主要是对该项目所涉及到的技术条件是否满足,公司在这块是否有能力完成,评估的主体是技术开发部。
请表》上签字确认。
转到技术开发部门。
不过请注意,这一决定并不意味着该项目一定要做,而是决定投入更多的人力、物力进行细化。
二、初步需求调研1)确定项目范围2)细化主要功能需求三、初步项目计划1)项目估算2)资源计划3)进度计划4)形成初步的项目计划5)项目计划评审第二步:项目实施一、计划和执行项目计划的优劣,直接影响到是否能够准确地进行进度的监控、人员的安排等各方面事二、项目启动阶段到了项目实施阶段,我们已经获得了一个初步的项目计划和初步的软件需求说明书。
在初步的项目计划中,已经制订出需求分析、系统分析与设计、编码/单元测试、集成测试、验收测试等每个主要阶段的时间进度。
并且还根据每个阶段的人员需求、软硬件需求,制定了资源计划。
要注意的是,这个初步的项目计划是建立在初步的软件需求、历史项目数据、估算经验之上的。
所以应该在开发部、市场部、管理层、客户中达成一个共识:这是一个初步的项目计划,更加精确的项目计划将在过程中逐步得到。
三、项目实施步步为营1.项目实施:需求分析子阶段在项目启动阶段,我们已经进行过一次初步的需求分析,确定了项目的范围和主要的功能需求,而在项目实施阶段的需求分析子阶段中将进行详细的需求调研与分析。
这个阶段主要的活动如下图所示:在需求分析子阶段,将生成:(1)细化了需求分析子阶段的项目组计划;(2)需求模型细化需求分析子阶段的计划,就是对需求分析的工作进行计划、安排,具体来说,就是修改进度图(建议采用甘特图)而需求模型则主要包括软件需求说明书(SRS)。
a制定详细的用户访谈计划,采用面谈、收集用户的各种现有文档、报表等方式了解用户需求,形成软件需求报告。
b收集用户的专业术语与行业知识,对项目组队成员进行必要的领域知识培训。
c使用UML技术进行需求分析,建立软件的Use-case模型。
在这一阶段中,尽量争取客户加入工作,共同进行需求的分析与探讨;d确保在需求分析阶段,确信所有参与人员都知道该阶段的目的是“确定我们要做什么”,而且一直使用“问题域”的思想思考问题;e需求分析阶段,要进行用户的分类,注意管理层与操作层的两类用户有时间可能对系统的需求是冲突的,一定要注意;f在需求分析结束后,一定要编写出完整的软件需求说明书,并召开正式的软件需求评审会,让客户完整地了解项目组队所认识的系统需求,并与其达成共识,在此基础上签字确认。
2.项目实施:系统分析设计子阶段在需求分析阶段,我们将得到一个问题领域视角的软件系统模型,这一模型在与用户交流、确认方面起到了良好的作用,但却不能够有效地指导开发,因此需要将其转换成为解决领域视角的软件系统模型,这项转换工作就是:系统分析与设计。
这一阶段的工作,也有一个大家已经熟悉的名称:概要设计,但我认为称之为高层设计更为准确一些。
我认为在这一阶段,应该生成软件系统的体系结构,也就是整个软件系统的蓝图。
软件体系结构有四种不同的视图:(1)概念视图:与应用领域密切相关,在该视图中,系统的功能映射为概念构件,并配套一些连接器(用于协调和数据交换);(2)模块视图:将概念视图的概念构件与连接器映射为子系统和模块.(3)运行视图:定义系统运行的实体及属性,如存储器的使用率和硬件分配;(4)代码视图:将运行视图中的运行实体转换成为部署的构件(可执行代码)、将模块视图中的模块转换成源程序构件,并将源程序构件生成部署构件。
从上面的定义中,我们可以知道,概念视图主要是站在问题领域进行分析,概念视图与上一篇中介绍的上下文范围图十分接近,只是更加细致一些而已。
然后使用模块视图将问题领域转换成为解决方案领域,在模块视图中,还只是比较宏观的。
下图就是一个模块视图的示例。
紧接着,通过模块视图分析出运行视图,在运行视图中,就直接表示出了硬件系统与软件系统的物理位置,为今后的部署提供依据。
┌─────┐│用户界面│└─────┘┌─────┐│用户管理│└─────┘┌─────┐┌────┐│关系数据库││Socket通││ 接口││ 信接口│└─────┘└────┘而具体的细化工作,就是完成代码视图,将整个系统分解成为一些源代码构件,并定义出每个构件的功能,与其它构件的接口,这些源代码构件就是工作分解的依据。
代码视图的构建大家可以参考系统分析相关的书籍。
在体系结构的分析与设计时,参与人员主要是系统构架设计师,人数视项目的大小不同,以1-6名为宜,并且应该细化系统分析与设计阶段的工作进度,形成新的项目组计划,修改甘特图。
3.项目实施:编码/单元测试子阶段项目实施:编码/单元测试子阶段在前面几个子阶段中,制订项目计划时都是由项目经理协同系统分析员、构架设计师自顶向下地进行分解、估算。
到了编码/单元测试子阶段,项目经理需要根据计划,往项目组队中增加开发人员,并根据开发人员专业知识、技能水平的不同,将构件分配到开发人员,由开发人员自底而上的进行项目进度的估算。
具体来说,就是向开发人员提供软件系统的蓝图,以及要求每个开发人员,在4个小时内完成所承担的构件的详细设计(我建议使用纸面设计,再根据需求有选择性地建档,建档时间不作具体要求),并对构件进行项目进度估计,绘制个人进度甘特图,提交与项目经理。
项目经理与开发人员进行协商,然后统一进度,下发开发任务卡,并根据这些资料,细通过这样的一个过程,可以保证每一个开发人员不是被动地接受任务,而是主动地参与项目计划,使得进度计划成为了每一个人的承诺。
该方法大大地调动了积极性,收效良好。
4.项目实施:集成测试、验收测试子阶段集成测试是根据高层设计的结果组织的测试,是内部的测试。
验收测试是根据软件需求说明书组织的测试,是对客户交付之前的mll试。
在这两个阶段、应该制订相应的测试计划来进行。
5.进度监控与计划修正在项目的实施阶段,需要不断地进行进度的监控,并且根据监控的结巢修正项目计划,并将项目进度的实际情况,知会市场部门相关人员,井且让客户了解实际的进展。
对于项目经理来说,不同阶段的进度监控有一些不同。
在需求分析、系统分析与计划两个子阶段,可以通过生成的文档等制品通过评审作为里程碑,通过跟踪完成的情况,再分析是否按进度进行。
而在编码/单元侧试阶段贝U可以基于每个开发小组(也可以是l个人)的微进度计划来做挣值分析。
以此来判断项目是否落后于进度、是否超出预算、是否拖迟了进度等等。
6.EvA(挣值分析法)范例实际中,我就将EVA分析法应用到自己项目中。
例如,某个构件的开发人员小组,制定根据这样的微进度计划,我们可以得到这个构件组的计划工作量(BCWS):第 1 周:BCWS=5;第2周:模块开发是跨2一3周的工作,预计在本周将获取15人日的价值,累计后BCWS=15+5=20;第 3 周:模块开发的延续,获取6个人日的价值,加上单元测试、模块集成,共有6+3+4=13个人日,累计BCWS=33。
当项目进行一周后,周五下午,项目经理和构件开发组成员共同进行挣值数据采集,统而ACWP则是实际付出的人日。
第l周投人1个人工作5天,计5人日;第2周投人了3个人,工作5天,不过其中有l个人被抽调出l天,因此合计为5 X 3一l=14人日,合计已投入19人日,即ACWP=19。
通过上面的分析,得到:BCWS=20 BCWP=17.6 ACWP=19于是:SV(速度偏差)=BCWP一BCWS=17.6一20= 一2.4(你落后干进度)SPI(进度效能指标)=BCWI〕/BCWS=17.6/20二0.88(你以进度计划的88%效能在工作) CV(成本偏差)=BCWP一ACWP=17.6一19二一1.4(已超预算1.4人日)CPI(成本状况指标)二BCWP/ACWP=17.6/19二0.926(你以超出预算约7.4%的状态在工作)预测:EAC(预计最终成本)二BAC/CPI=33/0.926=35.6人日VAC(预计成本偏差)=BA C-EA C=33-35.6=-2.6人日(将超预算2.6人日)SAC(预计项目的最终进度)=3/0.88=3.4周(原计划3周,估计将花费3.4周)修正项目计划当你遇到这样的情况时,就需要问自己:为何比计划多花费了工作量?项目计划合理吗?理解任务吗?是否有分』自的事?有什么未发现的障碍?然后对项目计划进行适当的调整,并与开发人员一同寻找解决方案,然后修正项目计划。