【总结】 软件工程过程及模型概括

简介: 【总结】 软件工程过程及模型概括

【总结】 软件工程过程及模型概括

一、定义

软件工程 (Software Engineering) 是一门研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。

实际上就是技术人员在开发软件过程中,需要遵循的一个流程规范标准,但这个标准又不是定死的,根据技术的革新规范也可以适当的改进。

二、软件工程的过程

- 软件生命周期

软件的生命周期就好比人的一生,从被开发出来,到使用维护,再到消亡。

软件生命周期阶段包括:

1.可行性研究及项目定义

也可叫做问题定义及可行性研究,具体的做法是:

确定要开发软件系统的总目标和规模。


从技术、经济和社会因素等方面的要求来论证完成该软件任务的可行性。

估计可利用的资源(计算机硬件,软件,人力等)、成本、效益、开发进度。

制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查。

2.需求分析


理解用户需求,并将用户需求用书面形式表达出来。

编写软件需求规格说明书或系统功能说明书及初步的系统用户手册。需求说明书是以后阶段工作的基础。


将需求规格说明书提交管理机构评审。

3.设计


总体设计 — “如何解决问题”:在需求说明书的基础上建立软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应可以列出多种解决方案进行比较

详细设计 — 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础


编写设计说明书(模块说明书、数据库或文件结构说明书等),提交评审。

4.编程实现

把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”。


写出的程序应当是结构良好、清晰易读的(如匈牙利法则) ,且与设计相一致的。


5.测试



单元测试:查找各模块在功能和结构上存在的问题并加以纠正。


将已测试过的、并且相关的模块按一定顺序组装起来进行集成测试。


按规定的各项需求,逐项进行系统测试,决定已开发的软件是否合格,能否交付用户使用。

验收测试:由用户进行的交付之前的最终测试。

6.使用与维护


改正性维护:运行中发现了软件中的错误需要修正。

适应性维护:为了适应变化了的软件工作环境,需做适当变更。



完善性维护:为了增强软件的功能需做变更。

预防性维护:修改软件为将来的维护活动预先做准备


放一张图,让这个过程更加清晰:

1ecd1b2606ed46e9956a89f231c9802c.png

三、软件工程的模型

1.瀑布模型

1ecd1b2606ed46e9956a89f231c9802c.png

所有过程模型的鼻祖。

瀑布模型把软件开发过程划分成若干阶段,每个阶段的任务相对独立,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度。在软件生存期的每个阶段都采用科学的管理技术和良好的方法与技术,而且每个阶段结束之前,都从技术和管理两个角度进行严格的审查,经确认之后才开始下一阶段的工作。---- 项目是按照一定的顺序执行。

瀑布模型是文档驱动的,各个阶段不连续也不交叉。

阶段间具有顺序性和依赖性。 (两重含义)

推迟程序的物理实现。(重要指导思想)

质量保证:每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。(两个重要做法)

易于组织,易于管理:因为你可以预先完成所有计划。

是一种严格线性的、按阶段顺序的、逐步细化的过程模型(开发模式)。

缺点:

在项目开始的时候,用户常常难以清楚地给出所有需求;用户与开发人员对需求理解存在差异。

缺乏灵活性:因为瀑布模型确定了需求分析的绝对重要性,但是在实践中要想获得完善的需求说明是非常困难的,导致“阻塞状态”。反馈信息慢,开发周期长。

实际的项目很少按照顺序模型进行。

2.(快速)原型模型

1ecd1b2606ed46e9956a89f231c9802c.png

从实践中学习

用户参与

使部分已知需求逐渐清晰化

提高系统的实用性、可维护性

节省开发的投入、缩短整个软件的开发周期

缺点:

用户有时误解了原型的角色,例如他们可能误解原型应该和真实系统一样可靠。

缺少项目标准,进化原型方法有点像编码修正。

缺少控制,由于用户可能不断提出新要求,因而原型迭代的周期很难控制。

额外的花费:研究结果表明构造一个原型可能需要10%额外花费。 为了尽快实现原型,采用了不合适的技术,运行效率可能会受影响。

原型法要求开发者与用户密切接触,有时这是不可能的。例如外包软件。

3.喷泉模型

1ecd1b2606ed46e9956a89f231c9802c.png

是典型的面向对象生命周期模型

“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性

应该把线性过程作为总目标

4.演化模型

演化模型是利用一种迭代的思想方法,它的特征是使软件工程师渐进地开发逐步完善的软件版本。

增量模型 (Incremental Model)

1ecd1b2606ed46e9956a89f231c9802c.png

融合了瀑布模型的基本成分和快速原型的迭代特征;

以功能递增的方式进行软件开发;

能较快地产生可操作的系统;

在每一步递增中,均发布一个新的增量版本,把用户/开发者的经验结合到不断求精的产品中。

缺点:

很难把用户的需求映射到适当规模的增量上。

大多数系统需要一组在系统许多部分都会用到的基本服务。但由于增量实现前,需求不能被详细定义,所以,明确所有增量都会用到的基本服务就比较困难。

系统的整体性较差

螺旋模型 (Spiral Model)

1ecd1b2606ed46e9956a89f231c9802c.png

把软件开发过程组成为一个逐步细化的定义周期(螺旋周期)序列,每经历一个周期,系统就得到进一步的细化和完善;

紧密围绕开发中的风险问题,用风险分析推动软件设计向深一层扩展、求精;

强调持续地判断、确定和修改用户任务目标,并按成本、效益来分析候选的软件产品性质对任务目标的贡献;

可结合采用多种软件开发方法,但究竟结合哪一种方法仍由风险分析来决定。

对于大型软件系统的开发,螺旋模型是一个很现实的方法。

随着迭代的增加(成本的增加),风险程度随之降低。

缺点:

比较复杂,需要相当的风险评估技术,且成功依赖于这种技术。


相关文章
|
11月前
|
监控 架构师 程序员
第八章 思维模型
第八章 思维模型
|
12月前
|
开发框架 程序员
软件工程概念——是什么?软件工程的过程PDCA?生命周期模型有哪些?
在刚结束完的机房,它就是一个软件,我们如何使这个软件能够供更多人去使用,软件如何更加规范化,就需要使用软件工程的思想啦!
|
运维 Cloud Native 算法
Java性能优化学习1:理论基础学习与分析
性能:使用有限的资源在有限的时间内完成工作。 最主要的衡量因素就是时间,所以很多衡量指标,都可以把时间作为横轴。
|
监控 数据可视化 测试技术
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
221 0
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
|
人工智能 算法 安全
8种提升程序猿编程能力的方法+编程思维四个核心:分解、抽象、模式识别和算法
对于程序员来说,提高自己的编程能力,算是给自己定的职业发展目标之一,不过定一个成为编程大神的目标很容易,具体做起来可能就不是一件简单的事了。首先,既然决定“我要变得更好”,得先知道“更好”是什么样子的。另外,不能“想变得更好”,却没有任何具体可行的措施。
762 2
8种提升程序猿编程能力的方法+编程思维四个核心:分解、抽象、模式识别和算法
|
存储 SQL 算法
形式化验证工具TLA+:程序员视角的入门之道
女娲是飞天分布式系统中提供分布式协同的基础服务,支撑着阿里云的计算、网络、存储等几乎所有云产品。在女娲分布式协同服务中,一致性引擎是核心基础模块,支持了Paxos,Raft,EPaxos等多种一致性协议,根据业务需求支撑不同业务状态机。如何保证一致性库的正确性是一个很大挑战,我们引入了TLA+、Jepsen等工具保证一致性库的正确性。本文即从程序员视角介绍形式化验证工具TLA+。
形式化验证工具TLA+:程序员视角的入门之道
|
数据采集 安全 测试技术
软件测试工作流程概括与总结
软件测试工作流程概括与总结
255 0