软件生产行业在几十年的研发活动中,积累了大量的经验,总结出软件的生命周期流程,指导软件生产企业遵循规范的生产流程设计开发软件系统。一般而言,软件从设计、研发到销售使用,主要经历图2—1所示的几个周期。

程序员
 图2—1软件生命周期示意图

一、市场需求调研

目前软件研发需求来源主要有两种渠道:

一是软件公司主动挖掘市场需求,从而开发出解决大众需求的软件系统,此需求来源所研发的软件一般称为产品,从用户角度而言,需求由软件公司提出,用户被动接收,属于被动模式。

另一种则是由用户主动提出需求,由软件公司负责设计开发,一般称为项目,从用户角度而言,需求由用户主动提出来,属于主动模式。
程序员
 

软件产品开发往往没有明确的需求提出者或者最终客户。需求由软件公司市场人员根据社会用户的需求来确定软件需求。例如,某公司市场人员觉得目前做手机游戏利润比较高,则可能发起某项市场调查,看看潜在客户是否有采购意向。这种模式风险较高,用户群不确定,需求通常不够明确,产品开发过程中可能面临着需求频繁变更风险及后期销售不力的情况。产品研发往往是长期的,如腾讯公司的QQ产品,已持续生产研发了近20年,仍在不断优化改进。

 

与产品相比,软件项目的研发风险相对小很多。当特定客户因自身需求需要研发某种软件系统时,由软件公司进行设计开发。在这种情况下,对软件公司而言,客户想开发什么,就开发什么,需求往往是明确的,并且项目资金也比较充足,项目失败的风险较小。业务系统基本都以项目运作方式,如银行的柜台交易系统、网上银行系统等。

 

无论是产品还是项目,经过初步需求沟通后,正常情况下都会有初步需求分析报告。

针对产品,市场人员经过市场调研、分析后输出《×××市场分析报告》,阐述产品功能及市场前景等信息。

针对项目,软件公司与需求提出者初步沟通后,输出《×××系统初步需求预研报告》,便于进行可行性研究。

 

二、可行性研究

产品项目可行性研究是以企业研发能力为前提,以投资收益为目的,从技术、成本、管理、风险控制等方面对产品或项目进行全面分析研究的方法,预测其投产后的经济效益,在既定范围内进行方案论证与选择,以便最合理地利用资源,达到预定的社会效益和经济效益。

 

从软件生产角度来看,可行性研究的重点是解决前期市场调研的产品或项目是否可行,能否在一定的成本压力下,持续地为公司或企业带来适当的利益,无论是社会效益还是经济效益。通常情况,软件产品成败受4个方面的约束:Time(时间)、Scope(范围)、Cost(成本)、Risk(风险)。在可行性研究阶段,如何找出这4个方面的平衡点,是需要优先解决的问题。

 

三、产品项目立项

经过市场需求调研、可行性研究评审确认可行后,需求调研人员(市场人员、需求分析人员或客户经理)牵头,进行产品或项目立项活动,构建产品或项目研发小组,制定产品运作计划,如需求开发、系统设计开发、系统测试、软件发布、运行维护等一系列工作的步骤及时间点。产品立项阶段软件研发团队成员包括项目经理、开发经理、研发工程师、测试经理,测试工程师一般后期加入,如到需求评审或系统测试设计时。

 

四、需求调研开发

产品或项目立项后,需进行详细的需求调研。需求调研同样有两种模式:主动模式和被动模式。

 

在主动模式下,软件公司派出需求调研小组与用户直接沟通,获得正确可靠的需求。小组成员一般是客户代表、需求开发者或开发人员;被动模式由软件公司市场调研人员根据市场产品需求信息分析判断,无明确的需求提出者,得到较为粗泛的需求。

 

需求调研是整个软件生产活动中最为重要的环节,此环节输出的一切成果都是后续工作的基准。很多公司在需求调研开发阶段会投入较长的时间,花费大量人力、物力,保证需求调研的充分性及正确性。从软件测试角度来说,测试工程师亦需在这个阶段参与进来,测试工程师如能在需求调研开发阶段接触初始需求,对保证整个项目的测试质量具有积极意义。

 

在需求调研开发阶段,每一个需求都需与客户、市场需求反复验证确认,最终得到规范的需求规格说明书。需求规格说明书(Software Requirements Specification,SRS)作为用户与软件公司双方约定的一个合同制文档,通常情况下从软件系统功能、性能、外部接口等方面阐述用户提出的显性或隐性需求,并以此作为后续软件生产活动的基准输入。故在需求调研、需求开发、需求评审、需求管理环节需花费大量的时间及精力。