软件工程----开发大致流程_软件工程基本流程-程序员宅基地

技术标签: 软件开发流程  linux  


不同的软件项目,有不同的需求侧重点,开发流程也是不一样的。比如开发一个大型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编写

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45228198/article/details/120071171

智能推荐

GitHub黑科技,淘宝自动刷喵币!靠这一个脚本就够了-程序员宅基地

文章浏览阅读1.8k次。点击上方“Github爱好者社区”,选择星标回复“资料”,获取小编整理的一份资料开源最前线(ID:OpenSourceTop)猿妹综合整理一年一度的双十一大促又来了,原以为今年总算不需..._github淘宝脚本

C# UI常用操作 - Mars的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/shuyizhi/article/details/6830405-程序员宅基地

文章浏览阅读354次。using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI

openwrt 串口 开发 注意事项_stty speed 9600 cs8 -cstopb -echo raw-程序员宅基地

文章浏览阅读1.3k次。1. 可以安装 sttyopkg update opkg install coreutils-stty2. 设定串口波特率stty -F /dev/ttyS1 raw speed 9600注意,如果在使用串口时,一定要注意 ttyS0 ttyS1 这个S是大写的,再说一下,是大写的在不清楚是,要常用TAB进行补全,这样就不会出错。_stty speed 9600 cs8 -cstopb -echo raw

卷积神经网络如何提取特征的?-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏20次。用文氏图来理解卷积神经网络如何决定提取哪些特征:https://blog.csdn.net/kane7csdn/article/details/84890592为什么卷积能够提取图像的特征?看完此文应该能够给你一个答案:https://blog.csdn.net/charleswangzi/article/details/82733016浅析卷积神经网络为何能够进行特征提取:https://blog.csdn.net/weixin_42078618/article/details/838_卷积神经网络如何提取特征

【NLP】新闻文本分类----基于机器学习的文本分类_新闻文本分类 模型-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏22次。【NLP】新闻文本分类----基于机器学习的文本分类机器学习模型文本表示方法one-hotBag of WordsN-gramTF-IDF基于机器学习的文本分类词袋法 + 岭回归分类器`TF-IDF + 岭回归分类器不同参数下的TF-IDF算法TF-IDF参数解读改变不同参数的F1结果改变ngram_range的参数TF-IDF算法与其他分类器模型机器学习模型机器学习是对能通过经验自动改进的计算机算法的研究。机器学习通过历史数据训练出模型对应于人类对经验进行归纳的过程,机器学习利用模型对新数据进行预测对_新闻文本分类 模型

Web API 版本控制的几种方式_web 、app 共用一个后端,版本号如何控制-程序员宅基地

文章浏览阅读3.9w次,点赞10次,收藏28次。http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html这篇文章写得很好,介绍了三种实现web api版本化的三种方式。我从评论里又收集到两种方式,所以一共是5种:方式一:利用URL HTTP GET:https://haveibeenpwned.com/api/v2/breacheda..._web 、app 共用一个后端,版本号如何控制

随便推点

twisted.internet.error.TimeoutError错误的解决方法_twisted.internet.error.tcptimedouterror-程序员宅基地

文章浏览阅读1.6k次。使用scapy 爬取的时候,少数请求链接会出现请求超时,当出现请求超时时,爬虫会自动重试三次。若超过180s且三次后仍没有得到数据,就会放弃请求出现twisted.internet.error.TimeoutError 错误。此时就出现了爬取失败的情况。错误原因:当网络无法满足在180s内下载完所有的请求数量,就会出现此类错误。解决办法:这里做个示例,具体情况具体分析1、降低同时请求的数量CONCURRENT_REQUESTS = 22、 设置合适的超时时间,DOWNLOAD_TIMEOU_twisted.internet.error.tcptimedouterror

[linux]单网卡绑定多个IP_单网卡绑定两个ip-程序员宅基地

文章浏览阅读215次。[linux]单网卡绑定多个IP配置默认网关:默认网关的文件:/etc/sysconfig/network 内容如下:其中test为主机名称NETWORKING=yesHOSTNAME=testGATEWAY=192.168.168.250或:NOZEROCONF=yesGATEWAY=10.230.17.1eth0对应的配置文件/etc/sysconfig/network-scripts/ifcfg-eth0内容如下:DEVICE=eth0BOO.._单网卡绑定两个ip

SwiftUI 5教程之Metal shader 系列资源(WWDC23)_swiftui_metal-程序员宅基地

文章浏览阅读174次。WWDC23为 SwiftUI 引入了许多新功能,特别是这些修改器对金属着色器的支持。_swiftui_metal

Ubuntu18.04 Server配置固定IP 以及Ubuntu19.10 Server配置固定IP_没有 50-cloud-init.yaml文件-程序员宅基地

文章浏览阅读3.1k次。一、Ubuntu18.04 Server1、查看/etc/netplan50-cloud-init.yaml文件及内容,没有文件时创建2、修改文件 ,添加 IP 地址、子网掩码、网关、DNS 服务器等配置。用192.168.1.231作为网卡enp2s0的 IP 地址,192.168.1.1作为网关地址。然后用192.168.1.1作为DNS 服务器 IP。子网掩码不清..._没有 50-cloud-init.yaml文件

linux记录所有用户的操作命令_linux 记录操作命令-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏5次。1.在/etc/profile加入如下脚本PS1="`whoami`@`hostname`:"'[$PWD]'historyUSER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`if [ "$USER_IP" = "" ]thenUSER_IP=`hostname`fiif [ ! -d ..._linux 记录操作命令

Unit8 数组_uint8数组-程序员宅基地

文章浏览阅读5.2k次。Unit8 数组1. 理解数组2. 一位数组3. 二维数组4. 多维数组 1、认识数组软件的基本功能是处理数据,而在处理数据时,必须先进行数据持有,将数据持有之后,再对数据进行处理。我们将程序中可以临时存储数据的部分叫做容器。在java中,存储数据的容器效率最快的就是数组,也是java最基本的容器。数组,顾名思义就_uint8数组

推荐文章

热门文章

相关标签