软件生命周期和过程模型_在软件工程方法学中软件生命周期-程序员宅基地

技术标签: 软件工程  


一、软件生命周期

软件生命周期(Software Life Cycle,SLC)是软件的产生直到报废或停止使用的生命周期。软件生命周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级等阶段。

1、问题的定义和规划

这一阶段是软件开发方和需求方共同讨论,目的是确定软件开发的目的和可行性,制定项目总体开发计划。其实就是完成一个初步需求。

2、需求分析

在确定软件开发可行的前提下,对软件需要实现的各个功能进行详细分析,完成PRD文档(产品需求文档),并提交产品部,开发部,测试部评审。这里,我们需要注意到一点就是,同样的需求在软件开发过程中会不断变化和深入,此时我们便需要制定需求变更计划来应对这种变化,以保证整个项目的正常进行。需求文档通过评审之后,技术部制定技术文档,并进行技术评审,评审通过进行软件开发。

3、软件设计开发

这个阶段主要是根据需求分析的结果,对整个软件系统进行设计,包括系统结构的设计,数据库的设计等等。软件设计又被分为详细设计和概要设计,这两个概念又如何理解呢?

  • 概要设计:主要是对整个软件架构的实现,搭建架构,表述各个模块的功能,设计模块接口连接以及数据传递的实现等事务。
  • 详细设计:对概要设计中表述的各模块进行详细分析,包括了对数据库的设计。

4、软件编码

这一阶段是将软件设计开发的结构转化为计算机可以运行的代码。在编码中要制定统一,符合标准的编写规范,以保证代码的可读性,易维护性,提高代码的效率。完成模块的编码后提交测试。

5、软件测试

软件设计完成之后,软件需要经过严密的测试,以发现整个软件设计过程中存在的问题并加以改正。测试的方法主要有白盒测试和黑盒测试。这里我们要注意,测试之前需要制定详细的测试计划文档,并且严格按照测试计划文档进行测试,以减少测试的随意性。测试的过程主要有单元测试,集成测试和系统测试以及验收测试。那么每一个测试阶段又该如何理解呢?下面我们一一介绍。

  • 单元测试:这一测试主要进行程序代码的测试,确保各单元模块被正确编译,比如有具体到模块的测试,也有具体到类,函数,方法的测试等。其实就可以理解为测试软件的每个零件,这一部分通常是开发人员来完成,一般通过白盒测试的方法进行,也就是看代码的方式啦。
  • 集成测试:完成单元测试之后,将各个单元连接起来,形成完整的体系,然后测试软件单位之间的接口是否正确,数据是否正常传递。这一阶段也可以叫做接口测试,由测试人员完成,一般使用灰盒测试的方法。
  • 系统测试: 把软件系统搭建起来,按照软件规格说明中的要求,测试软件的性能,功能是否和用户需求相符合,测试软件在系统运行中是否存在漏洞等。其实在这个阶段,就是测试整个软件系统,测试软件的功能,界面,性能,安全性,易用性,兼容性等等。需要测试这个产品的详细功能,冒烟测试一般也在这个阶段完成。
  • 验收测试:这一测试是在用户拿到软件之后,在其使用现场,根据前边提出的需求,以及产品规格说明书来做相应的测试,这一测试是确定软件是否符合原定效果的测试。

6、运行维护

软件维护时软件生命周期中持续时间最长的阶段,在软件开发完成并投入使用之后,由于多方面的原因,软件不能继续使用用户的需求,这是如果要延续软件的寿命,就必须对软件进行维护,软件的维护包括纠错行维护和改进型维护。

二、过程模型

过程模型(Process Models) 意图解决软件过程中的混乱,将软件开发过程中的沟通、计划、建模、构建和部署等活动(activities)有效地组织了起来。

他们之间的线性(linear)、迭代(iterative)、演进(evolutionary)和平行(parallel)关系会产生不同的模型。常见的过程模型包括:瀑布模型、原型模型、增量模型、螺旋模型等。

1、瀑布模型

瀑布模型将软件生命周期划分为 制定计划、需求分析、软件设计、程序编写、软件测试和运行维护 等六个基本活动,并且规定了它们 自上而下、相互衔接的固定次序 ,如同瀑布流水,逐级下落。其 严格强调文档,前一个阶段的输出就是下一个阶段的输入,文档是个阶段衔接的唯一信息。所以很多开发人员好象是在开发文档,而不是开发软件,因为要到开发的后期,才可以看到软件的“模样”。

优点:

  • 让软件开发过程有序可控,为项目提供了按阶段划分的检查点。瀑布模型的每个阶段都有明确的任务,每个阶段都有明确的交付产物,都有相应的里程碑。这些让整个过程更可控,而且能及早发现问题
  • 当前一阶段完成后,您只需要去关注后续阶段
  • 它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
  • 让分工协作变成可能。瀑布模型的六个阶段,也让软件开发产生相应的基础分工:项目经理、产品经理、架构师、软件工程师、测试工程师、运维工程师。
  • 质量有保障。瀑布模型每个阶段都需要交付相应的文档,而文档的撰写和评审,可以帮助在动手之前把问题沟通清楚,想清楚。瀑布模型在编码结束后,会有严密的测试,只有测试验收通过后,才能上线发布,这些措施都让软件的质量更有保障。

缺点:

  • 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
  • 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
  • 没有迭代与反馈。瀑布模型对反馈没有涉及,所以对变化的客户需求非常不容易适应,瀑布就意味着没有回头路。
  • 通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
  • 瀑布模型的突出缺点是不适应用户需求的变化。
  • 瀑布模型是一种软件文档的开发,把开发者变成流水线上的机器,大量重复性的工作让编程人员提不起兴趣,工作很枯燥,没有激情,编程成了一种没有创意的机械劳动,这让一向以高科技为标志的高级程序人员大为恼火。

虽然现在瀑布模型已经不是最主流的开发模式。但是不管什么软件项目,不管采用什么开发模式,有四种活动是必不可少的,那就是需求、设计、编码和测试。而这四项活动,都是起源自瀑布模型,也是瀑布模型中核心的部分。 管理人员喜欢瀑布模型的原因是把文档理解为开发的速度,可以方便地界定不同阶段的里程碑。

2、原型模型

快速原型模型(Rapid Prototype Model)又称原型模型,它是增量模型的另一种形式;它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。

由于种种原因,在需求分析阶段得到完全、一致、准确、合理的需求说明是很困难的。快速原型是利用原型辅助软件开发的一种新思想。 经过简单快速分析,快速实现一个原型,用户与开发者在试用原型过程中加强通信与反馈,通过反复评价和改进原型,减少误解,弥补漏洞,适应变化,最终提高软件质量。

优点

  • 原型系统已经通过与用户交互而得到验证,克服瀑布模型的缺点,据此产生的规格说明可以正确地描述用户的需求。因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。

  • 开发人员通过建立原型系统已经学到了许多东西(至少知道了“系统不应该做什么,以及怎么不去做不该做的事情”),因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。

  • 缺点

  • 快速建立起来的系统结构加上连续的修改可能会导致产品质量低下,因此不适合大型系统的开发(适合开发小型的、灵活性高的系统)。

  • 使用这个模型的前提是要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新

  • 所选用的原型(开发技术和工具)不一定符合主流的发展

  • 快速原型模型是不带反馈环的,软件产品的开发基本上是按线性顺序进行的。

3、螺旋模型

螺旋模型采用一种周期性的方法来进行系统开发。这会导致开发出众多的中间版本。使用它,项目经理在早期就能够为客户实证某些概念。该模型是快速原型法,以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审 4 个阶段,由这 4 个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。采用螺旋模型的软件过程如下图所示:
请添加图片描述

优点

  • 通过原型的创建,使软件开发在每个迭代的最初明确方向;
  • 通过风险分析,最大程度地降低软件彻底失败造成损失的可能性;
  • 在每个迭代阶段植入软件测试,使每个阶段的质量得到保证;
  • 整体过程具备很高的灵活性,在开发过程的任何阶段自由应对变化;
  • 每个迭代阶段累计开发成本,使支出状况容易掌握;
  • 通过对用户反馈的采集,与用户沟通,以保证用户需求的最大实现;
    缺点
  • 过分依赖风险分析经验与技术,一旦在风险分析过程中出现偏差将造成重大损失;
  • 过于灵活的开发过程不利于已经签署合同的客户与开发者之间的协调;
  • 由于只适用大型软件,过大的风险管理支出会影响客户的最终收益; 螺旋模型很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。在需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。

4、增量模型

增量模型(Incremental Model)融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。产品被分解为多个组件,每个组件都是单独设计和构建的。各个构件完成后逐渐并入已有的软件体系结构中。

当使用增量模型时,第 1 个增量往往是核心的产品,即第 1 个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。

增量模型的特征:

  • 系统被分解成许多小型开发项目。
  • 部分系统是为了生成最终系统而构建的。
  • 首先满足最高优先级要求。
  • 一旦开发递增部分,部分的需求将被冻结。
    优点
  • 采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。因此,增量能够有计划地管理技术风险。
  • 每次迭代后,应执行回归测试。在此测试期间,可以快速识别软件的故障元素,因为在任何单个迭代中很少进行更改。
  • 测试和调试比其他类型的软件开发方法更容易,因为每次迭代时所做的更改相对较小。这允许对整个产品中的每个元素进行更有针对性的、更严格的测试。
  • 客户可以响应功能并查看产品,以了解任何需要或有用的更改。
  • 增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型

缺点

  • 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构
  • 在开发过程中,需求的变化是不可避免的。很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
  • 如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析
  • 随着产品增加了其他功能,可能会出现与系统体系结构相关的问题,而早期原型中并不明显
  • 由增量产生的成本可能会超过组织的成本。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_54351538/article/details/126965222

智能推荐

(四十五)多线程同步的实现方法有哪些_init是线程同步的方法吗-程序员宅基地

文章浏览阅读1.1k次。一、synchronized关键字https://blog.csdn.net/jiangshangchunjiezi/article/details/88118063此关键字修饰方法,当方法体规模很大时,会影响程序的执行效率,为了提高效率,出现了synchronized块二、wait()方法与notify()方法wait、notify使用:https://blog.csdn.net..._init是线程同步的方法吗

《精通ArcGIS Server 应用与开发》——2.4 ArcGIS Server的安装与配置-程序员宅基地

文章浏览阅读118次。本节书摘来自异步社区《精通ArcGIS Server 应用与开发》一书中的第2章,第2.4节,作者: 何正国 , 杜娟 , 毛海亚 更多章节内容可以访问云栖社区“异步社区”公众号查看。2.4 ArcGIS Server的安装与配置精通ArcGIS Server 应用与开发2.4.1 安装环境1.ArcGIS Server 10支持的平台Windows..._精通arcgis server 应用与开发

matlab 图像变换函数,Matlab中的常用图像变换函数-程序员宅基地

文章浏览阅读793次。1. 离散傅立叶变换的 Matlab实现Matlab 函数 fft、fft2 和 fftn 分别可以实现一维、二维和 N 维 DFT 算法;而函数 ifft、ifft2 和 ifftn 则用来计算反 DFT 。这些函数的调用格式如下:A=fft(X,N,DIM)其中,X 表示输入图像;N 表示采样间隔点,如果 X 小于该数值,那么 Matlab 将会对 X 进行零填充,否则将进行截取,使之长度为 ..._matlab中dctmtx用法

Linux SSH命令大全-程序员宅基地

文章浏览阅读37次。rm -rf mydir /* 删除mydir目录 */ cd mydir /* 进入mydir目录 */ cd – /* 回上一级目录 */ cd ~ /* 回根目录 */ mv tools tool /* 把tools目录改名为tool */ ln -s tool bac/* 给tool目录创建名为bac的符号链接,最熟悉的应该就是FTP中www链接到public_html目录了...

30个思科设备巡检命令,值得每位网络工程师收藏!_思科ac巡检命令-程序员宅基地

文章浏览阅读1.2k次。以上是30个常用的思科设备巡检命令,用于获取设备的各种配置和状态信息。在网络设备的日常运维和故障排查中,这些命令可以帮助管理员快速了解设备的状态、配置和性能情况,以便及时发现和解决潜在的问题。今天给大家带来的是30个思科设备巡检的命令,每个命令都有解释,希望对每位网络工程师有所帮助!你好,这里是网络技术联盟站。_思科ac巡检命令

mac电脑触控板快速选择(三指拖移、三指选择)_mac trackpad 两指移动-程序员宅基地

文章浏览阅读2w次。mac电脑触控板快速选择前提:在截图或者选择的时候,点击触控板在拖动会很麻烦,mac提供一个三指拖移的功能,能够用三指快速拖移,这样就变成四指切换。步骤左上角,点击苹果logo,选择系统偏好设置点击辅助功能,选择“鼠标与触控板”点击“触控板选项”,勾选启动拖移,选择“三指拖移”,选择“好”就设置完毕啦。这样,就可以一指滑动,轻触点击;二指滑动三指拖移四指切换面板棒呆..._mac trackpad 两指移动

随便推点

Lidar AI Solution环境配置_lidar scn-程序员宅基地

文章浏览阅读4.2k次,点赞15次,收藏49次。Lidar_AI_Solution环境配置_lidar scn

一站直达!!!了解Linux信息收集操作_)使用两种方式在用户信息文件中查看此用户信息(只看此用户),把结果分别存放于-程序员宅基地

文章浏览阅读966次,点赞28次,收藏16次。Linux系统信息收集操作大全,收藏随时查看!!!!_)使用两种方式在用户信息文件中查看此用户信息(只看此用户),把结果分别存放于

Git,Github和Gitlab简介和基本使用_公司项目为何不直接在gitlab上建立-程序员宅基地

文章浏览阅读318次。什么是GitGit是一个版本控制系统(Version Control System,VCS)。版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。多年前,我在法国做第一个实习时(2011年),那时候自己编程还在入门阶段,根本没听过版本控制系统。那时候真是蠢(现在也没好到哪里去),每次修改多一点的代码,就要复制、黏贴整个项目目录。因此,公司的电脑里有着几十个项目的副本(简直了)。前不久,我看到公司的一个实习生也在做和我多年前同样的事。而且我们问他,他说没听说过版本控制系统._公司项目为何不直接在gitlab上建立

nvm use 报错 nvm use 18.12.1 exit status 5: �ܾ����ʡ�_nvm use 18.19.1-程序员宅基地

文章浏览阅读342次。右键以管理员身份运行。_nvm use 18.19.1

蓝桥杯星期几/wps设置填充方式:按年/月/日填充_wps excel根据年份月份星期填日期-程序员宅基地

文章浏览阅读1.2k次。wps设置填充方式:按年/月/日填充1.首先在新建的WPS表格中输入某一天的日期,将开始一栏中的“常规”改为长日期2.点击表格的右下角黑色加号,下拉,下拉完成后会出现一个自动填充选项在如图位置 没截上3.点击填充选项,选择填充方式即可如图,以年填充4.右击选中的表格,选择设置单元格格式,类型选择为星期,即可查看某日是星期几如图..._wps excel根据年份月份星期填日期

mysql中 out syssys_refcursor_oracle存储过程中的select与参数详细说明-程序员宅基地

文章浏览阅读444次。create or replace procedure pro_testisbeginselect * from t_test;end pro_test;这个正确吗?昨天因为这个,耽误了好久(在一个存储过程中用了select语句,但既没有用游标也没有用into).在存储过程(oracle)中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的..._addrecords out sys_refcursor