是时候了解下软件开发的生命周期了!

2020-06-06 16:02:38来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

是时候了解下软件开发的生命周期了!

软件开发的生命周期

既然我们以后从事的工作时软件开发,那么我们就要对软件开发的流程先做了解,毕竟要从娃娃抓起。早点了解软件开发流程,也就有了软件开发的思想与动力。


软件开发的生命周期
软件开发的生命周期

问题定义

问题定义 是软件定义时期的第一个阶段。作为软件的开发者,在这个阶段必须弄清用户“需要计算机解决什么问题”。如果在问题尚未明确的情况下就试图解决这个问题,那么就会白白浪费时间和精力,结果也毫无意义。所以总结起来问题的定义也是起到了十分重要的位置!

可行性分析

软件可行性分析 是通过对项目的市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等方面的研究,从技术、经济、工程等角度对项目进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行科学预测,为项目决策提供公正、可靠、科学的软件咨询意见。

  1. 技术角度: 通俗易懂点根据公司的技术来判定项目是否可行,比如:给定时间是否可以完成项目、软件的质量、软件的生产率。
  2. 经济角度: 根据公司资金周转来判断项目是否可以完成,这里不只是资金问题,还需要考虑成本、收益、长期盈利与短期盈利。短期利益容易把握,风险较低;长远利益难以把握,风险较大。
  3. 社会因素: 根据项目的社会因素来评判项目是否可以做,比如:社会因素的可行性、法律可行性、社会推广可行性、使用可行性。想必大家都明白,现在的有些软件开发会出现抄袭、侵权的现象吧,所以在可行性分析中应当具有相关法律声明。例如:该系统的开发将不会侵犯任何个人、集体、国家的利益,也不会违反国家的政策与法律。
  4. 文档: 《可行性分析文档》

需求分析

需求分析 也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。

  1. 功能需求: 功能性需求即软件必须完成哪些事,必须实现哪些功能,以及为了向其用户提供有用的功能所需执行的动作。开发者需要与用户沟通交流,并核实用户需求,从帮助用户完成事务的角度上充分描述外部行为,形成说明书。
  2. 非功能用户需求: 非功能性需求主要包含软件使用时对性能方面的要求、所依赖的运行环境。软件设计必须遵循的相关标准、规范、用户界面设计的具体细节、未来可能的扩充方案等。
  3. 设计约束: 设计限制条件,通常是对一些设计或实现方案的约束说明。
  4. 文档: 《软件需求规格说明书》

需求分析阶段的工作,可以分为四个方面:问题识别、分析与综合、制订规格说明、评审。

  1. 问题识别: 就是从系统角度来理解软件,确定对所开发系统的综合要求,并提出这些需求的实现条件,以及需求应该达到的标准。这些需求包括:功能需求(做什么)、性能需求(要达到什么指标)、环境需求(如机型、操作系统等)、可靠性需求(不发生故障的概率)、安全保密需求、用户界面需求、资源使用需求(软件运行是所需的内存、CPU等)、软件成本消耗与开发进度需求、预先估计以后系统可能达到的目标。
  2. 分析与综合: 逐步细化所有的软件功能,找出系统各元素间的联系,接口特性和设计上的限制,分析他们是否满足需求,剔除不合理部分,增加需要部分。最后综合成系统的解决方案,给出要开发的系统的详细逻辑模型(做什么的模型)。
  3. 制订规格说明书: 即编制文档,描述需求的文档称为软件需求规格说明书。请注意,需求分析阶段的成果是需求规格说明书,向下一阶段提交。
  4. 评审: 对功能的正确性,完整性和清晰性,以及其它需求给予评价。评审通过才可进行下一阶段的工作,否则重新进行需求分析。

概要设计

概要设计 的主要任务是把需求分析得到的系统扩展用例图转换为软件结构和数据结构。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的设计。

  1. 技术选型: 通过需求分析结果来判断使用什么技术来完成项目,构建技术架构,例如:使用SSM+JSP技术等
  2. 平台搭建: 选择项目搭建所需平台技术,例如:JDK1.8、tomact8.5、MySQL5.X等
  3. 数据库设计: 实体、数据项、三范式、E-R图等
  4. 功能流程设计: 以模块为单位进行流程图的设计
  5. UI设计: UI设计,简称界面设计。是指对软件的人机交互、操作逻辑、界面美观的整体设计。 UI设计师完成
  6. 文档: 《数据库设计说明书》《概要设计说明书》

详细设计

详细设计 ,是软件工程中软件开发的一个步骤,就是对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。在详细设计阶段,主要是通过需求分析的结果,设计出满足用户需求的软件系统产品。传统软件开发方法的详细设计主要是用结构化程序设计法。

  1. 创建数据库、表、表关系等
  2. 设计每个功能的实现步骤:例如:功能编号、功能名称、功能描述、输入项(用户输入数据的说明)、数据处理(程序对用户输入的数据的处理流程)、输出项(展示给用户的视图界面及数据)等
  3. 文档: 《详细设计说明书》

编写编码

编码通俗易懂来说,就是需要写代码了!对产品根据功能和技术架构来实现功能开发、单元测试、功能测试等

产品测试

软件测试 ,描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

  1. 静态测试: 对软件代码的静态分析测验,过程应用数据较少,可以通过人工或机器辅助测试

  2. 动态测试: 检测软件运行中出现的问题,较静态测试方式相比,其被称为动态的原因即为其测试方式主要依赖程序的运用,主要为检测软件中动态行为是否缺失、软件运行效果是否良好。

  3. 功能测试(黑盒测试): 通过数据输入观察数据输出,检查软件内部功能是否正常,数据是否一致等等。

  4. 性能测试(白盒测试): 原理为根据软件内部应用、源代码等对产品内部工作过程进行调试。测试过程中常将其与软件内部结构协同展开分析,最大优点即为其能够有效解决软件内部应用程序出现的问题,测试过程中常将其与黑盒测试方式结合

  5. 系统集成测试: 在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。一些局部反映不出来的问题,在全局上很可能暴露出来。

  6. 压力测试: 软件压力测试是一种基本的质量保证行为。压力测试是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预期数量的交易请求、测试系统在不同压力情况下的效率状况,以及系统可以承受的压力情况。然后做针对性的测试与分析,找到影响系统性能的瓶颈,评估系统在实际使用环境下的效率情况,评价系统性能以及判断是否需要对应用系统进行优化处理或结构调整。并对系统资源进行优化。

压力测试可以分为负载测试、并发性能测试、疲劳强度测试

负载测试: 通过增加系统负载来测试系统性能的变化趋势。并最终确定系统的最大负载不能超过某个值,以确保为用户提供最大的服务还保证了系统性能。

并发性能测试: 通过逐渐增加用户量和用户的并发访问量,直到系统遇到瓶颈或者不能正常运转,综合分析交易执行指标与资源监控指标。

疲劳强度测试: 构建系统稳定运行情况下能够支持的最大并发度与日常运转。

软件的性能可以通过响应时间、并发用户数、吞吐量、资源利用率等性能指标来衡量。

响应时间: 是指用户从客户端发出请求到接收完服务器返回结果的整个过程所需花费的时间,包含网络传输时间以及服务器处理时间。从用户角度来看,响应时间应该从客户端计算机处理用户操作并发出请求到客户端程序收到服务器端返回结果并显示出来的时间。

并发用户数: 是指在一定时间内,某一时刻同时与服务器进行会话操作的用户数,并发用户数的类型包括:系统用户数、同时在线用户数,业务并发用户数。

吞吐量: 是指单位时间内,系统处理用户的请求数或页面数量,可以直接反映出软件的承载能力。一般来说,利用每秒钟的请求数或页面数量衡量吞吐量;从业务的角度来看,也可以用每天的访问人数或每小时处理的业务数来衡量。

资源利用率: 是指系统资源(CPU、内存)的利用率,通常用资源的实际使用量与总的资源可用量比值来衡量,包括网络、操作系统、数据库等方面。

产品交付

项目部署、用户培训、交付协议款、后期保证协议内期限的产品维护等

总结

软件开发流程可以分为这几大步骤:

  • 问题定义
  • 可行性分析
  • 需求分析
  • 概要设计
  • 详细设计
  • 编写代码
  • 产品测试
  • 产品交付

原文链接:https://www.cnblogs.com/ziph/p/13056286.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:学习笔记之方法引用

下一篇:错误: 在类中找不到 main 方法, 请将 main 方法定义为:   &