软件工程----开发大致流程

article/2025/6/27 12:29:45

软件开发的流程

  • 需求分析
  • 概要设计
  • 项目计划
  • 详细设计
  • 编码测试
  • 项目测试
  • 项目部署
  • 后期运维
  • 软件开发注意事项

不同的软件项目,有不同的需求侧重点,开发流程也是不一样的。比如开发一个大型Web电商项目,这个往往需要采用前后端分离的方式,并行开发,以提高开发效率。
后端即服务器端,主要负责处理前端发来的数据请求,保证服务器的高并发性、高可用性等。
前端即客户端,负责用户界面设计,优化用户的交互体验等;
如果是做一个数据采集、数据分析的项目,那么开发的侧重点就应该在后台处理程序,对前端的要求就没有那么高。
那这里我们只讲解一下大致的软件开发流程,并适当地做一些案例分析。让大家对以后的工作流程有点了解。对一些不同的项目,只需重点关注那些差异化的部分即可。

需求分析

需求分析要做的:

  1. 确定用户的真实需求,项目具体功能需求、界面需求等。
    1.1 非互联网公司
    比如一个连锁餐饮公司需要开发一款线上点餐的APP,他们没有自己的软件开发团队,就需要找一些外包公司进行开发。那这个系统就需要有对应点餐用户和餐厅服务员的前端服务;还要有处理用户订单数据的服务端。
    在这个例子中,
    用户:餐饮连锁公司
    真实需求:
    前端服务,用餐的客户可以通过软件浏览实体分店提供的套餐,然后进行下订单,付款等一系列的操作;店里的服务员可以看到客户下的订单,然后进行烹制、出餐等操作。
    后端服务,存储、处理用户的订单数据等。
     
    1.2 互联网公司
    有的公司本身就是互联网公司,他们会做一些产品,作为自己公司的主流项目。比如阿里巴巴,他们开发有自己的支付宝、蚂蚁金融等产品。
    那这样的互联网公司往往都有一个岗位,产品经理
    产品经理职责:及时、准确地捕捉市场需求,去开拓优秀的并被大多用户所需求的产品,以便能够给公司带来新的盈利点,提高公司的市场竞争力。
    公司最终开发出来的产品能否在市场中占有一席之地,取决于用户会不会去使用它,也就是能够满足用户的真实需求。所以产品经理捕捉并确定市场用户的真实需求是相当重要的。

  2. 确定项目的整体难度,可行性分析、技术分析
    如果是一个较为简单的项目,就需要在较短的时间内完成,这样可以效益最大化;如果是一个大型项目,那就需要适当地规划时间久一点,否则可能产品不能按时交付,或者产品性能不是太好。所以根据项目的难以程度,合理的规划工期及资源配置是相当重要的。
     
    可行性分析,并不是所有的需求在技术上都可以实现,有句话叫做“理想很丰满,现实很骨感”。有些需求是当前技术实现不了的,比如要开发一款像人一样智能的语音交互系统,可以像人一样思考问题,可以理解人类的每一句话,那这个就是目前的技术达不到的。(智能语音助手例子)
    所以对用户的需求,需要做可行性分析,哪些是目前的技术可以实现的,哪些是暂时实现不了的。对于实现不了的需求考虑有没有折中的办法,或者可以引入一些其他的资源等。比如我们在做爬虫项目抓取数据的时候,需要爬取一个网站的数据,但是这个网站的反爬机制很严格,根本爬不进去,服务端就不返回数据。怎么办?我们可以使用selenium借助浏览器拿数据。那这个就是一个折中的办法,但是这种方法是以降低效率为代价的。
     
    技术分析,就是在技术可以实现的情况下,选择哪种技术可以更好的应用到开发中,提高开发效率和软件性能。比如有个项目需要短期完成,但后期系统的运行效率可以不严格要求,那么就可以选择使用python来开发,提高开发的效率。

  3. 需求分析文档,用户确认
    把最终的需求分析结果形成文档,让用户确认是否满足用户的真实需求。只有满足了用户的真实需求,才可以继续下一步的开发工作。

概要设计

需求分析是对外的,概要设计是对内的。在互联网公司还有一个岗位叫架构师,负责整个系统的设计,确定实现方向等。那这些人往往是部门的领导或者骨干人员。(薪资不菲)
在系统设计的时候需要布局整体组织结构,确定使用的什么样的框架等,比如需要开发一个web应用,使用Java SSM(Spring+SpringMVC+Mybatis)框架,还是使用python的Django框架,一般都需要架构师来决定。

概要设计用来指导开发人员后续的开发工作。

  1. 确定功能模块
    一个完整的系统都要进行功能模块的划分,这样才能够在团队中明确分工,提高开发效率。

  2. 各模块的可行性分析,搭建整体架构图
    这里的可行性分析与需求分析中的可行性分析不同,需求分析中的是某个需求能不能使用当前的技术实现;而这里的可行性分析是针对拆分的功能模块,使用指定的技术能否很好的实现。搭建出整体的架构图是必需的,一个好的架构可以满足后续的业务扩展,产品的更新迭代,延长一个产品的生命周期。对于一个不好的架构,那产品可能就存活1-2年就无法继续更新,那就要重新设计、重新开发,这样对于公司来说,投入的成本就太高了。

  3. 确定技术思路和使用的框架
    对于web应用,使用Java开发的话,一般使用SSM框架;
    使用Python开发就使用Django、Flask框架等。

  4. 形成概要文档,指导开发流程

项目计划

  1. 确定开发工作的先后顺序
    有些项目很大,需要一个团队或者几个团队配合完成,整个系统划分功能模块后,哪些可以先完成,哪些可以后完成,要有一个鲜明的计划。按照计划开发才能有条不紊。

  2. 确定时间节点。
    计划好每一个时间节点的完成度,规定到达一个时间节点必须完成指定的工作,必须保质保量完成规定的功能模块。在每个时间节点,检查团队的开发进度,保证项目的开发工作稳步推进。

3.人员分工
在每个团队内部确定好人员分工,细化工作要求。

  1. 形成甘特图等辅助内容
    在这里插入图片描述

详细设计

  1. 详细设计文档:项目的思路、逻辑
    人员流动,便于新人了解项目(单纯的看代码效率不高);
    便于项目的后期维护,逻辑流程一目了然。
    对于一些外包公司,他们特别重视详细设计,可以重用之前项目的相关的架构和代码,实现快速开发,减少时间和人力成本。如果每次都重新设计系统架构,重新编写代码,那就会投入很大的人力成本,相应的收益就会减少。

  2. 功能说明,技术点说明,数据结构说明
    在详细设计中,要对系统实现的功能、使用的技术、设计的数据结构等信息进行详细的说明,越详细越好,这样才能更好地帮助别人快速了解项目。

  3. 重点代码说明
    重点代码需要详细说明,便于后续的理解。一些逻辑功能比较复杂的代码,即使是开发者自己,经过一段时间后再来阅读,理解起来也是不太容易。为了后续便于维护和更新,对重点代码作详细说明相当必要。

编码测试

  1. 按照分工,编写代码,实现模块功能。
    其实编写代码也不是最耗费时间的地方,系统设计与项目计划,编码实现,系统测试这三部分时间基本是一样的。
  2. 技术攻关
    在编写代码过程中,处理一些难以实现的技术点是比较费时间的,也是可以提高自己开发水平的地方。比如不同模块之间的对接,不同开发语言的数据交互等。
  3. 代码的基本测试
    代码编写完成后,自己对自己负责的代码部分进行简单的多场景下的测试,检测代码的健壮性和执行效率。在简单测试之后没有太大问题的情况下,再提交。坚决不能将隐藏一堆Bug的代码提交给测试工程师,这样会影响自己的权威性,降低自己的可信度。

项目测试

在大型互联网公司,这部分一般是由测试工程师完成,通过黑盒测试、白盒测试等技术,设计不同的测试场景,从不同的角度分析软件的缺陷。测试工程师对于产品的改进优化,往往起着至关重要的作用。
但是也有些创业公司不太重视测试这部分工作,就让开发人员自己去测试。那这样的产品没有经过全方位的系统测试,潜在的Bug可能会更多。
测试工程师职责:

  1. 根据业务逻辑,尽可能全方位地测试项目,找出软件的缺陷
  2. 完成测试报告,将软件Bug提交给研发修改
  3. 完善项目细节

项目部署

  1. 将项目部署在指定的服务器,交付用户使用
    项目部署使用公网IP,大部分部署在linux操作系统
  2. 编写项目说明文档,辅助用户使用各项功能
    软件的使用说明及相关注意事项,比如可以运行在windows/linux系统,环境温度等。

后期运维

  1. 项目维护
    性能的监控、数据的备份等
  2. 迭代更新
    解决Bug,优化功能,扩展业务等

软件开发注意事项

  1. 按时完成项目与项目时间不足之间的矛盾
    需要根据预先制定的时间节点,按时完成规定内容,如果时间不足,不能按时完成就需要额外加班,赶赶进度。如果最终没有按时完成项目开发,导致产品不能准时交付客户,那么公司需要赔付客户违约金。软件开发加班与否,其实还是取决于工作量的完成度,如果在每个时间点检讨项目进度的时候,都能按时完成任务,那么也是可以不用加班的。相反完不成任务就要留下加班了,有时赶上项目发布的时候,甚至通宵达旦也是经常的事。

  2. 项目实施人员之间的冲突
    技术能力很强的人员之间意见冲突(不知听取谁的意见)
    技术能力强与技术能力弱的之间冲突(一快,一慢)
    这些冲突需要项目经理去协调。

  3. 抓大放小,不过于追求完美
    整体功能实现大部分,不在小的问题上花费过多的时间。在有限时间内,先把任务完成,一些小的问题可以放在技术攻关再解决。

  4. 开发工具的熟练使用
    pycharm/eclipse等
    git版本控制工具
    word文档的编写、ppt编写


http://chatgpt.dhexx.cn/article/0kaByPWK.shtml

相关文章

软件项目开发流程逻辑图

相关链接: 软件项目规划大纲知识点

软件项目的开发流程

一个项目的开发流程 软件开发流程(Software development process) 1.项目启动 1、项目组成立(公司成员、客户成员) 2、制定项目预期目标 3、制定项目计划周期 4、建立好项目组成员沟通机制 2.需求调研 1、创建调研计划、协调调研时间 2、收集客户资料,获取客户需求 …

软件项目开发流程

软件开发流程(Software development process) 首先 看一下基本软件项目开发流程图 其中 1.需求分析:通过对客户业务的了解和与客户对流程的讨论对需求进行基本建模,最终形成需求规格说明书。2.总体设计:通过分析需求信…

一个完整的软件项目开发流程,软件过程,软件生命周期

一、开发流程图 1、需求分析 结构化分析面向对象分析 2、原型设计 结构化设计面向对象设计 3、程序开发 结构化开发面向对象开发 4、程序测试 二、软件生命周期 软件分析 1、问题定义 确定好要解决的问题是什么(what),通过对客户的访问…

软件项目开发的完整流程

APP早已与我们的生活息息相关,一款APP从开发到上线需要哪些步骤,开发一个APP要多长时间,今天和大家分享一下完整的开发流程。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1、需求的整理 和开发传…

软件开发的一般流程

说明: 最初所有的开发工作都是由后端工程师完成的,随着业务越来越繁杂,工作量变大,于是我们将项目中的可视化部分和一部分交互功能的开发工作剥离出来,形成了前端开发。 大约从2005年开始正式的前端工程师角色被行业所…

git创建分支及合并

git创建分支及合并 1、在远端创建自己的分支 2、在本地创建自己的分支,并切换到自己的分支 git branch newbranch git checkout newbranch 3、将远端和本地分支关联起来 git branch --set-upstream-toorigin/newbranch newbranch git pull 4、在本地分支修改代码&#xff…

IDEA中如何进行GIT分支合并

明确一点: 如果项目交给git管理了【如何将项目交给git管理:https://www.cnblogs.com/sxdcgaq8080/p/8058898.html】 1.若文件显示红色,表示文件未add到git进行管理 2.若文件显示绿色,表示文件已经交给git管理,但从未…

Git 分支合并策略

在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; 那在哪干活呢?干活都在dev分支上,也就是说&am…

git 分支代码合并

由于要开发一个新功能,但是后台接口数据都不确定,我打算切一个分支,在分支上进行开发测试,以下是合并分支的步骤:(建议在test分支解决冲突,不要在master分支解决冲突) 下图是在test…

Git分支合并操作教程(超详细配图说明)

测试内容: A、首先建立master,提交文件a、b、c B、新建分支branch1,包含master文件a、b、c,修改a提交branch1 (此时两个分支a文件不同,b、c相同) C、在master中修改b提交 D、在master中修改c,新增d提交…

详解Git分支及分支合并

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

进行git分支合并

欢迎访问我的博客地址 : 博客地址 如何进行分支合并 分支合并分为两种情况,一种是本地分支合并,一种是远程分支合并到本地分支,下面,分别用GIF动画演示 本地合并分支: https://static.oschina.net/uploads/img/201603/11110502_Puw4.gif 远程分支合并 https://static.oschina.…

Git 分支合并情况

本文章主要是记录自己学习git时候,面对分支合并,考虑的一些情形,仅供参考。 1、没有冲突的情况 master分支没做改变,branch1改变,将branch1合并到master分支上。 具体操作如下: 2、有冲突情况 在master分…

git 分支合并冲突解决

已经累到不想说话了,直接上流程吧! 1、比如你想A分支合并到B分支,先把这两分支都pull一下最新代码:git pull 2、切换到要合并的分支:git checkout tougu_pan (tougu_pan 是我的B分支) 3、在 tou…

Git分支合并

常用命令 git branch# 列出本地分支 git branch -r# 列出远程分支 git branch -a# 列出both git branch name# 创建新的本地分支 git branch -d name# 删除指定本地分支# 本地分支重命名 git branch -m oldName newName # 切换到hhx分支[切换HEAD指向] git checkout hhx# Merg…

N、NP、NPC问题分析总结

目录 一、时间复杂度1、定义2、多项式级别的复杂度3、非多项式级别的复杂度4、并非所有的问题都能够找到多项式级别时间复杂度的解法 二、P、NP、NPC问题1、P问题2、NP问题3、一类特殊的NP问题4、约化(Reducibility)5、NPC问题6、NPC问题的定义7、证明一个问题是NPC问题8、NP-H…

[算法笔记]如何证明一个问题是NPC问题

[算法笔记]如何证明一个问题是NPC问题 步骤(Step)例子(Example)做题经验分析(Analysis)总结(Sum up) 步骤(Step) 在进入正题前,我想向大家讲解一…

npc内网穿透

备注:使用npc工具做内网穿透需要一台带公网的服务器作为服务端,在带公网IP的服务器为服务端,安装nps服务。在内网服务器安装npc客户端 安装使用地址:https://ehang-io.github.io/nps/#/ 下载地址:https://github.com/e…

unity3d如何量产npc

文章目录 1.技术概述2.技术详述2.1 修改预制体2.2放置预制体2.3开始量产 3.技术使用中遇到的问题和解决过程。3.1第一个npc脚没落地 4.进行总结。 1.技术概述 在unity3d游戏制作过程中,常常需要用到大量的剧情npc,特别是遇到,军训等大场面&a…