软件开发的流程

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

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

软件工程----开发大致流程相关推荐

  1. JavaWeb开发大致流程

    JavaWeb开发大致流程 1.Spring MVC的客户端与服务端的交互起始于DispatcherServlet,它为前端控制器,负责分发视图层的请求,配置在web.xml文件中.Dispatche ...

  2. 【项目管理】敏捷开发项目管理流程

    转:https://blog.csdn.net/wlly1/article/details/77716455 感谢原文博主! 前段时间给大家整理了敏捷开发的流程,最近在整理敏捷开发项目的流程和管理制度 ...

  3. 网站开发流程-WEB开发的流程

    网站开发流程-WEB开发的流程 web开发流程概括 1.)项目的角色划分 如果不包括前期和后期的市场推广及销售人员,开发团队一般可以划分为项目负责人.程序员.美工三个角色. 项目负责人习惯称为项目经理 ...

  4. 软件开发有哪些规范和标准_深圳APP软件开发的流程是什么?

    深圳APP软件开发的流程是什么?APP软件开发是根据用户需求构建软件系统或设备的软件部分的过程,是一项系统工程,包括需求捕获,需求分析,系统设计,系统实现和系统测试.APP软件通常以某种编程语言实现, ...

  5. 我的软件测试之旅:(10)贡献——开发项流程

    开发项流程(Development Item Process) 当时的这个Scrum试点项目身负重任,其中之一就是要探索出在新型的敏捷模式下该使用何种的开 发流程,负责人就是当时的Linux部门经理, ...

  6. 前端开发的流程与规范

    先仍2篇网上找的: 在团队不断成长的过程中,需要处理的需求也在逐渐增长,团队中成员如何分工配合决定了开发的效率.产品的质量,在这个时候我们就需要一个流程来规范.指导我们,下面就将咱们前端组的一些经验跟 ...

  7. 面试总结-----工程化软件项目开发的流程、步骤

    工程化软件项目开发的流程.步骤 需求分析 (1)相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在 ...

  8. php 环信easyui_php集成环信IM即时通讯系统(大致流程方法)

    很多场景需要用到即时通讯,独立开发成本太高,选择第三方比较合适,就使用过的环信做一个大致流程介绍,不评价好坏 1,注册环信即时通讯云账号:官网.然后登录后台创建应用 注:开放注册是指不需要管理员授权同 ...

  9. 敏捷开发项目管理流程

    前段时间给大家整理了敏捷开发的流程,最近在整理敏捷开发项目的流程和管理制度,其整理的项目管理规程如下,这份规程也不完全算是敏捷专属的项目管理规程,主要是在结合我们公司实际的情况下编写出来的,大家在实际 ...

  10. App项目设计开发完整流程

    App项目设计开发完整流程 1. idea形成--APP项目雏形 一个APP项目的最初首先要确定项目整体方案,整个项目的规划,大体框架,做成文档展现出来,以便大家提意见和更好的改进.也就是说首先要确立 ...

最新文章

  1. SpringBoot开发案例之整合Dubbo提供者(二)
  2. 从源码角度看Android系统Zygote进程启动过程
  3. nginx在Centos下的安装,转:http://www.linuxidc.com/Linux/2016-09/134907.htm
  4. delphi VCL研究之消息分发机制(转)
  5. java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决方法
  6. 190. 颠倒二进制位
  7. python获取系统内存占用信息的实例方法
  8. php 屏蔽微信分享,详解React Js中微信禁止复制链接分享禁止隐藏右上角菜单功能的案例分析...
  9. 新旧身份证合法性验证及相互转换算法(一):关于中国居民身份证的常识
  10. 浏览器是先执行js还是先加载HTML,在HTML中使用JavaScript(浏览器对js的加载机制分析)...
  11. python数据分析与展示--图像的手绘效果
  12. 链接器、链接过程及相关概念解析
  13. Discuz二次元风格The_C_Style模板源码下载
  14. java 注解处理_在java代码中,看到注解,如何查看注解处理器
  15. 黄万里诗九首[引用]
  16. DEDEcms终极SEO优化教程
  17. mysql批量插入没有返回主键id
  18. 直线斜率、交角、转向角
  19. U盘文件夹全变为.exe格式或U盘文件全部消失(U盘AutoRun病毒解决方法)
  20. ubuntu 16.04 环境下 vscode的 c++配置文件

热门文章

  1. 面向视频领域的边缘计算白皮书
  2. PIC16F887 单片机 proteus 红外遥控灯光控制系统
  3. 如何调用showapiRequest解决图片验证码识别?
  4. 最全经典 | 机器视觉基础知识汇总
  5. 多项logistic回归系数解释_Logistic回归结果的回归系数和OR值解读
  6. marlab中主成分得分怎么求_羡慕神仙权重?主成分与因子分析带你揭开权重的秘密...
  7. php cms 新闻采集,自动新闻采集软件快速入门图文详细教程
  8. 新浪微博与腾讯微博的开放平台比较 -- 从程序员的角度
  9. win10没有android驱动安装不了,WIN10 MTP USB驱动无法安装解决方法
  10. 走进计算机病毒-基础知识