从零做软件开发项目系列之五——系统开发过程
前言
在软件项目的设计开发过程中,除了前期的用户需求调研确认,系统设计、数据库设计等工作之外,还有一些重要的工作需要考虑,比如软件开发模式,如何制定开发计划,如何协调开发人员开展开发工作等。本文将这几项内容与大家进行分享交流。
1 软件开发模式(模型)
我们在项目中,根据具体情况,会采用多种开发模式,以下是项目中会用到的一些开发模型。
1)瀑布模型(Waterfall Model)
瀑布模型是一种比较老旧的软件开发模型,它将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
瀑布模型优点是严格遵循预先计划的步骤顺序进行,一切按部就班比较严谨。
2)迭代模型(iterative model)
迭代模型,也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。对迭代和版本的区别,可理解如下: 迭代一般指某版本的生产过程,包括从需求分析到测试完成; 版本一般指某阶段软件开发的结果,一个可交付使用的产品。
3)快速原型模型(Rapid Prototype Model)
快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。快速原型模型有点整合“边做边改”与“瀑布模型”优点的意味。
4)敏捷软件开发 (Agile development)
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作; 按短迭代周期工作; 每次迭代交付一些成果,关注业务优先级,检查与调整。
敏捷软件开发要注意项目规模,规模增长,团队交流成本就上去了,因此敏捷软件开发暂时适合不是特别大的团队开发,比较适合一个组的团队使用。
5) 开发模型的融合
每个模式都有一定的特点,适应特定的时期和特定的环境,如果能够取其长,补其短,我们可以在不同的阶段采用不同的模型方式进行开发。
首先,整体我们采用瀑布模型的开发架构,保持瀑布模型的规则性,有严格的规范,保持敏捷的灵活,有文档但并不冗余复杂。
在项目初始阶段,采用快速原型设计方法,通过原型设计,增强需求调研的针对性和有效性。
在项目开发阶段,对系统的模块独立的开发,独立测试,而整体采用的是敏捷开发模型和迭代开发方式,针对客户的需求调研结果,快速分析,敏捷开发,在开发过程中,保持与客户的持续沟通,快速获取客户的进一步需求和反馈信息,对系统进行迭代开发,经过多轮迭代和完善,保证项目的质量,以及项目的顺利推进。
2 制定开发计划
和客户签订合同后,项目有规定的完成期限,根据合同内容和时间规定,来制定合理的系统开发计划,并予以有效的执行。
首先是根据合同要求,确定几个重要的时间节点,在软件工程中也成为里程碑。比如完成时间,也就是项目验收时间,这是最终的时间节点,意味着项目的完成,为了保证这个最终的目标,还需要补充一些时间节点,比如中期目标,一般项目都会有一个中期检查验收,另外,客户可能会根据其实际工作,提出其他的一些进度要求,这些也需要在制定计划的时候加以考虑。
其次是进一步细化计划,根据软件开发大的周期和里程碑,将目标进行分解,把系统模块细分为功能,不断细化,直到可实现的叶子节点功能。然后将功能实现的时间进行合理分配,时间单位可以分到周或者天,细化后的任务和时间要求就会比较清晰。
第三就是将对应的工作分配给具体的人,这里可以画出一个甘特图,让每个人对照甘特图,清楚的知道自己的开发任务,然后根据计划进行工作。
开发计划不是一成不变的,在达成共识的基础上制定出来,也可以根据实际情况进行调整,遵从PDCA循环管理原则,根据执行效果,以及条件的变化调整修正计划,实现既定的开发目标。
3 开发的团队组织和分工
在实际开发中,一般是由产品经理和客户沟通后,画出原型图,UI设计及美工依据原型图,经过布局和色彩设计画出页面,前端工程师根据页面写出前端代码,页面中使用的数据为静态数据。后端根据前端的数据要求,撰写后端逻辑代码,同时进行数据库的设计,然后,前后端工程师进行对接,前端页面灌入后端提供的接口和数据,联调联试,完成系统开发工作。
理想情况下,公司会有比较完备的团队组织,包括产品经理、UI设计、美工、前端工程师、架构师、后端工程师、测试工程师、运维工程师等等,在一些大的公司,可能会分的更细,比如数据分析师,算法工程师等岗位,可能也会安排,而在一些小的公司,人员配备没有那么多,一个开发团队可能就只有3-4个人,一个人可能会身兼数职,设计及前后端的工作有可能都会做,职责划分的粒度就会比较粗。
在规模较小的公司,开发过程中,也有可能按照系统的功能模块分配工作,这就需要工程师们具备全面的能力,设计、前端、后端、数据库设计、测试都要比较熟悉,这样做的好处是,减少了前后端的沟通成本,缺点是工程师不会精通所有的技术,产品出来之后可能就会有不如意的地方,需要技术管理者进行把关,特别是需要不断地测试修正,保证系统的开发质量。
4 结语
系统开发过程中,除了开发模式,开发计划、开发团队组织和分工之外,还有一些因素也会影响开发工作,比如资金问题,客户需求的沟通,公司制度,人员管理等等,在实际开发工作中,也应该有相应的管理方法,从多个方面保证开发工作的顺利进行。