从零做软件开发项目系列之五——系统开发过程

news2024/9/28 9:19:20

前言

在软件项目的设计开发过程中,除了前期的用户需求调研确认,系统设计、数据库设计等工作之外,还有一些重要的工作需要考虑,比如软件开发模式,如何制定开发计划,如何协调开发人员开展开发工作等。本文将这几项内容与大家进行分享交流。

1 软件开发模式(模型)

我们在项目中,根据具体情况,会采用多种开发模式,以下是项目中会用到的一些开发模型。
1)瀑布模型(Waterfall Model)
瀑布模型是一种比较老旧的软件开发模型,它将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
瀑布模型优点是严格遵循预先计划的步骤顺序进行,一切按部就班比较严谨。
在这里插入图片描述

2)迭代模型(iterative model)
迭代模型,也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。对迭代和版本的区别,可理解如下: 迭代一般指某版本的生产过程,包括从需求分析到测试完成; 版本一般指某阶段软件开发的结果,一个可交付使用的产品。  
3)快速原型模型(Rapid Prototype Model)
  快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
  显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。快速原型模型有点整合“边做边改”与“瀑布模型”优点的意味。
4)敏捷软件开发 (Agile development)
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作; 按短迭代周期工作; 每次迭代交付一些成果,关注业务优先级,检查与调整。
敏捷软件开发要注意项目规模,规模增长,团队交流成本就上去了,因此敏捷软件开发暂时适合不是特别大的团队开发,比较适合一个组的团队使用。
在这里插入图片描述

5) 开发模型的融合
每个模式都有一定的特点,适应特定的时期和特定的环境,如果能够取其长,补其短,我们可以在不同的阶段采用不同的模型方式进行开发。
首先,整体我们采用瀑布模型的开发架构,保持瀑布模型的规则性,有严格的规范,保持敏捷的灵活,有文档但并不冗余复杂。
在项目初始阶段,采用快速原型设计方法,通过原型设计,增强需求调研的针对性和有效性。
在项目开发阶段,对系统的模块独立的开发,独立测试,而整体采用的是敏捷开发模型和迭代开发方式,针对客户的需求调研结果,快速分析,敏捷开发,在开发过程中,保持与客户的持续沟通,快速获取客户的进一步需求和反馈信息,对系统进行迭代开发,经过多轮迭代和完善,保证项目的质量,以及项目的顺利推进。

2 制定开发计划

和客户签订合同后,项目有规定的完成期限,根据合同内容和时间规定,来制定合理的系统开发计划,并予以有效的执行。
首先是根据合同要求,确定几个重要的时间节点,在软件工程中也成为里程碑。比如完成时间,也就是项目验收时间,这是最终的时间节点,意味着项目的完成,为了保证这个最终的目标,还需要补充一些时间节点,比如中期目标,一般项目都会有一个中期检查验收,另外,客户可能会根据其实际工作,提出其他的一些进度要求,这些也需要在制定计划的时候加以考虑。
其次是进一步细化计划,根据软件开发大的周期和里程碑,将目标进行分解,把系统模块细分为功能,不断细化,直到可实现的叶子节点功能。然后将功能实现的时间进行合理分配,时间单位可以分到周或者天,细化后的任务和时间要求就会比较清晰。
第三就是将对应的工作分配给具体的人,这里可以画出一个甘特图,让每个人对照甘特图,清楚的知道自己的开发任务,然后根据计划进行工作。
开发计划不是一成不变的,在达成共识的基础上制定出来,也可以根据实际情况进行调整,遵从PDCA循环管理原则,根据执行效果,以及条件的变化调整修正计划,实现既定的开发目标。
在这里插入图片描述

3 开发的团队组织和分工

在实际开发中,一般是由产品经理和客户沟通后,画出原型图,UI设计及美工依据原型图,经过布局和色彩设计画出页面,前端工程师根据页面写出前端代码,页面中使用的数据为静态数据。后端根据前端的数据要求,撰写后端逻辑代码,同时进行数据库的设计,然后,前后端工程师进行对接,前端页面灌入后端提供的接口和数据,联调联试,完成系统开发工作。
在这里插入图片描述

理想情况下,公司会有比较完备的团队组织,包括产品经理、UI设计、美工、前端工程师、架构师、后端工程师、测试工程师、运维工程师等等,在一些大的公司,可能会分的更细,比如数据分析师,算法工程师等岗位,可能也会安排,而在一些小的公司,人员配备没有那么多,一个开发团队可能就只有3-4个人,一个人可能会身兼数职,设计及前后端的工作有可能都会做,职责划分的粒度就会比较粗。
在规模较小的公司,开发过程中,也有可能按照系统的功能模块分配工作,这就需要工程师们具备全面的能力,设计、前端、后端、数据库设计、测试都要比较熟悉,这样做的好处是,减少了前后端的沟通成本,缺点是工程师不会精通所有的技术,产品出来之后可能就会有不如意的地方,需要技术管理者进行把关,特别是需要不断地测试修正,保证系统的开发质量。

4 结语

系统开发过程中,除了开发模式,开发计划、开发团队组织和分工之外,还有一些因素也会影响开发工作,比如资金问题,客户需求的沟通,公司制度,人员管理等等,在实际开发工作中,也应该有相应的管理方法,从多个方面保证开发工作的顺利进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/929375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式事务篇-2.4 Spring-Boot整合Seata

文章目录 前言一、pom jar导入:二、项目配置:2.1 配置 说明:2.1 .1 seata server 端:2.1 .2 seata client 端: 2.2 开启seata 对于数据源的代理:2.3 seata-client 的注册中心:2.4 seata-client 的配置中心:2.5 去掉手写的数据源代…

-9501 MAL系统没有配置或者服务器不是企业版(dm8达梦数据库)

dm8达梦数据库 -9501 MAL系统没有配置或者服务器不是企业版) 环境介绍1 环境检查2 问题原因 环境介绍 搭建主备集群时,遇到报错-9501 MAL系统没有配置或者服务器不是企业版 1 环境检查 检查dmmal.ini配置文件权限正确 dmdba:dinstall,内容正…

2023年下软考信息安全工程师报名时间及汇总(附备考攻略)

信息安全工程师是近几年新增的中级考试科目,一般在下半年考试,难度还是有的,但是只要你有恒心,愿意付出,认真刷题备考,拿下证书还是没有问题的! 2023年下半年由于考试改革,报名时间…

kubernetes如何使用kruise-rollout进行分批灰度发布

前言 部署在 Kubernetes 集群中的应用,在升级发布时可能会存在的问题: 1,由于 Kuberneter 底层 Pod 容器生命周期与网络组件生命周期是异步管理的,在升级时如果没有处理好应用优雅退出的问题,就很容易导致 http 访问请…

【JAVA】抽象类与接口--下

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 抽象类与接口 1. 实现多个接口2. 接口间…

Linux常用命令_文件处理命令

文章目录 1. 命令格式与目录处理命令ls1.1 命令格式1.2 目录处理命令:ls 2. 目录处理命令2.1 目录处理命令:mkdir2.2 目录处理命令:cd2.3 目录处理命令:pwd2.4 目录处理命令:rmdir2.5 目录处理命令:cp2.6 目…

openGauss学习笔记-50 openGauss 高级特性-DB4AI

文章目录 openGauss学习笔记-50 openGauss 高级特性-DB4AI50.1 关键字解析50.2 使用指导 openGauss学习笔记-50 openGauss 高级特性-DB4AI openGauss当前版本支持了原生DB4AI能力,通过引入原生AI算子,简化操作流程,充分利用数据库优化器、执…

【PHP】字符串数组

文章目录 字符串类型字符串转义字符串相关函数 数组定义方式数组特点二维数组数组遍历foreach遍历语法for循环遍历数组相关函数相关题目 字符串类型 定义语法 引号方式:比较适合定义那些比较短(不超过一行)或者没有结构要求的字符串 1&#…

基于Python的图书馆大数据可视化分析系统设计与实现【源码+论文+演示视频+包运行成功】

博主介绍:✌csdn特邀作者、博客专家、java领域优质创作者、博客之星,擅长Java、微信小程序、Python、Android等技术,专注于Java、Python等技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 …

vscode 与 C++

序 具体流程的话,官方文档里都有的:C programming with Visual Studio Code 浏览器下载一个mingw64,解压,配置环境变量vscode里安装c相关的插件没了 第一步只看文字,可能有点抽象,相关视频: …

云计算企业私有云平台建设方案PPT

导读:原文《云计算企业私有云平台建设方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 喜欢文章,您可以点赞评论转发本文,…

Linux常用命令_权限管理命令

文章目录 1. 权限管理命令: chmod2. 其他权限管理命令2.1 权限管理命令: chown2.2 权限管理命令: chgrp2.3 权限管理命令: umask 1. 权限管理命令: chmod {ugoa}中分别为:u-user、g-group、a-all;谁创建文件,谁是所有者;所属组为所…

HOOPS Exchange SDK 2023 Service Pack 2 Crack

内容摘自互联网,具体功能以官网介绍为准。。。 HOOPS SDK是全球领先开发商TechSoft 3D旗下的原生产品,专注于Web端、桌面端、移动端3D工程应用程序的开发。长期以来,HOOPS通过卓越的3D技术,帮助全球600多家知名客户推动3D软件创新…

Qt ui对某控件进行全局提升报错:no such file or directory

问题 在Qt项目中,设计师界面,对某一控件进行提升,设置完“提升的类名称”、“头文件”、全局包含后,构建时,报“no such file or directory”错误,但文件命名存在呀。 解决 根据问题就应该明白&#xf…

并查集(C++实现)

目录 一、并查集原理 二、并查集应用 2.1 并查集举例 2.2 并查集数组规律 2.3 并查集功能 三、并查集实现 3.1 并查集 3.2 根据名字查找 四、例题 4.1 省份数量 4.2 等式方程的可满足性 一、并查集原理 再一些应用问题中,需要将n个不同的元素划分成一些…

Python读取Excel:实现数据高效处理的利器

目录 一、Python读取Excel的常用库二、Python读取Excel的步骤三、具体案例和使用场景四、Python读取Excel的优势与其他编程语言比较 摘要 本文将介绍Python读取Excel的方法,并通过具体案例和使用场景展示如何实现数据高效处理。我们将介绍常用的Python库&#xff0c…

QT基础使用:组件和代码关联(信号和槽)

自动关联 ui文件在设计环境下,能看到的组件可以使用鼠标右键选择“转到槽”就是开始组件和动作关联。 在自动关联这个过程中软件自动动作的部分 需要对前面头文件进行保存,才能使得声明的函数能够使用。为了方便,自动关联时先对所有文件…

【Hello Algorithm】堆和堆排序

本篇博客简介: 讲解堆和堆排序相关算法 堆和堆排序 堆堆的概念堆的性质堆的表示形式堆的增加删除堆的最大值 堆排序堆排序思路时间复杂度为N的建堆方法已知一个近乎有序的数组 使用最佳排序方法排序 堆 堆的概念 这里注意!!! 这…

日志系统——性能测试

日志系统项目已经编写完成&#xff0c;在本节完成性能测试之后就正式结束了 测试代码如下 #include "../logs/mjwlog.h" #include <vector> #include <thread>//参数&#xff1a;日志器名称&#xff0c;线程数量&#xff0c;输出日志条数&#xff0c;单…

nginx(七十八)nginx配置http2

一 ngx_http_v2模块 1、本文不讲解HTTP2的知识2、只讲解nginx中如何配置HTTP2 ① 前置条件 1、openssl的版本必须在1.0.2e及以上2、开启https加密,目前http2.0只支持开启了https的网站编译选项&#xff1a;--with-http_ssl_module --with-http_v2_module 特点&#xff1a…