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