『软件工程2』详解软件工程和软件过程模型

文章目录

    • 一、软件工程的定义
      • 1、Fritz Bauer在NATO上给出的定义
      • 2、Barry Boehm
      • 3、IEEE在软件工程术语汇编中的定义
    • 二、软件工程的层次
      • 1、软件工程三个要素
      • 2、软件工程的层次——图解
      • 3、软件工程的层次——逐一分析
    • 三、软件过程的三个阶段
      • 1、定义阶段——“做什么”
      • 2、开发阶段——“如何做”
      • 3、支持阶段——“变化”
    • 四、软件过程框架
      • 1、引例——煮蛋的启示
      • 2、软件工程的过程定义
      • 3、软件过程框架
    • 五、CMM
      • 1、基础知识
      • 2、CMM的级别
    • 六、软件过程模型
      • 1、软件过程模型概述
      • 2、软件过程模型分类
      • 3、传统的软件过程模型
        • (1)线性顺序模型(瀑布模型)
        • (2)V模型
        • (3)原型实现模型
        • (4)RAD模型
        • (5)增量模型
        • (6)螺旋模型
        • (7)形式化方法模型
      • 4、敏捷视角下的过程模型
        • (1)什么是敏捷
        • (2)敏捷团队必须具备的特点
        • (3)几种重要的敏捷过程模型
          • ①极限编程(XP)
          • ②自适应软件开发(ASD)
          • ③动态系统开发方法(DSDM)
          • ④Scrum(橄榄球模型)
          • ⑤Crystal
          • ⑥特征驱动开发(FDD)
          • ⑦敏捷建模(AM)
    • 写在最后

一、软件工程的定义

1968年在NATO会议上,首次提出“软件工程”这个术语。但软件工程一直以来都缺乏一个统一的定义,有很多学者、组织机构都分别给出了自己认可的定义。以下给出三种常用的定义

1、Fritz Bauer在NATO上给出的定义

The establishment and use of sound engineering principles in order to obtain economically software that is reliable and works on real machines.

建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。

2、Barry Boehm

Software engineering is that form of engineering that applies the principles of computer science and mathematics to achieving cost-effective solutions to software problems.

软件工程就是应用计算机科学和数学的原理,来为软件问题提供经济高效的解决方案。

通俗点来说:①运用现代科学技术知识来设计并构造计算机程序;开发、运行和维护这些程序所必需的相关文件资料。

3、IEEE在软件工程术语汇编中的定义

The application of a systematic,disciplined,quantifiable approach to the development,operation,and maintenance of software.

将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。

二、软件工程的层次

软件工程是一种层次化的技术,支持软件工程的根基就在于对质量的关注

1、软件工程三个要素

过程、方法、工具

2、软件工程的层次——图解

3、软件工程的层次——逐一分析

(1)质量焦点(a quality focus)

软件工程的根基,任何工程方法都必须以有组织的质量承诺为基础

(2)过程(process)

是软件工程的基础,定义了一组关键过程区域框架,包括*工程产品的产生*,里程碑的建立等等

(3)方法(methods)

提供了建造软件在技术上需要“如何做”,包括需求分析(analysis)、设计(design)、编码(coding)、测试(testing)和支持(backing)

(4)工具(tools)

对过程和方法提供了自动或半自动的支持

E.g. CASE工具(计算机辅助软件工程):集成硬件、软件和数据库而创建的软件工程环境,类似于硬件的CAD(计算机辅助设计)/CAE(计算机辅助工程)

三、软件过程的三个阶段

1、定义阶段——“做什么”

1定义:系统和软件的关键需求被标识

2应用场景系统和信息工程;软件项目计划;需求分析

2、开发阶段——“如何做”

1定义:定义数据结构、体系结构、过程细节、界面表示、算法和测试如何执行

2应用场景软件设计;代码生成;软件测试

3、支持阶段——“变化”

1定义纠正错误;随着软件环境的演化而要求的适应性修改;用户需求的变化而带来的增强型修改

2应用场景纠错性维护(校正式);适应性维护;完善性维护;预防性维护

下面用一张图了解软件过程的三个阶段
在这里插入图片描述

四、软件过程框架

1、引例——煮蛋的启示

很久以前,中国人煮蛋方式与德国人煮蛋方式的不同。

中国人:先找一个锅,倒进水,再把蛋放进去,整个过程需要10~20min。

德国人:先找一个锅,倒进水,再把蛋放进去,在容器的下方焊接一个托盘,再将锅放到托盘上去烧开,如此,仅用1min就把水烧开,之后再用火继续煮了3min,关火;再用余热继续煮了3min;煮熟后丢到冷水里面3min;最后他用10min时间把蛋煮熟。

从以上分析来看,德国人煮蛋更讲究过程,不同的过程会导致不一样的结果。研究表明,德国人煮蛋的方式有以下几点好处:①更省水;②更省热能;③煮蛋所花时间更少;④利用余热煮3min,这个时候蛋的营养价值更高;⑤用凉水泡了3min,蛋壳更容易拨开。
在这里插入图片描述

2、软件工程的过程定义

(1)过程(process):一组有序的任务,每个任务由一些步骤组成,每个步骤涉及到活动、约束及产品

(2)广义上,软件开发的每一个阶段都可看成是一个过程。

(3)简言之,过程就是一个步骤、一个路线图,帮助创建高质量的软件。

3、软件过程框架

先用一张图简单了解软件过程框架:

在这里插入图片描述
(1)通用过程框架活动

  • 沟通
  • 策划
  • 建模
  • 构建
  • 部署

(2)普适性活动

  • 软件项目跟踪和控制
  • 正式的技术评审
  • 软件质量保证
  • 软件配置管理
  • 文档的准备和产生
  • 可复用管理
  • 测度
  • 风险管理

五、CMM

1、基础知识

1)20世纪90年代(CMU/SEI)提出能力成熟度模型(Capability Maturity Model,CMM)

2)CMM定义了当一个组织达到不同的过程成熟度时应该具有的软件工程能力

3)CMM是一种衡量软件开发能力成熟度的标准

4)CMM模型提供了衡量一个公司软件工程实践的整体有效性的方法,且建立了五级的过程成熟度级别

2、CMM的级别

(1)第一级:初始级(initial)

①定义:软件过程是定义的偶然的,有时甚至是混乱的。几乎没有过程定义,成功完全取决于个人能力

②特点:不可预测并且缺乏控制。

(2)第二级:可重复级(repeatable)

①定义:建立了基本的项目管理过程,能够跟踪费用、进度和功能。有适当的必要的过程规范,可以重复以前类似项目的成功。

②特点:可重复以前的主要经验。

③关键过程区域:需求管理;软件项目计划;软件项目跟踪和监督;软件子合同管理;软件质量保证;软件配置管理。

(3)第三级:定义级(defined)

①定义:企业的软件过程已经文档化、标准化并与整个组织的软件过程相集成。所有项目都使用统一的、文档化的、组织过程认可的版本来开发和维护软件。包含第二级的所有特征。

②特点:过程被描述,并得到良好理解。

③关键过程区域:组织过程定义;组织过程焦点;培训大纲;集成软件管理;软件质量保证;软件配置管理。

(4)第四级:管理级(managed)

①定义:软件过程和产品质量的详细数据被收集,通过这些度量数据,软件过程和产品能够被定量地理解和控制。包含第三级的所有特征。

②特点:过程被测量并受控。

③关键过程区域:定量的过程管理;软件质量管理。

(5)第五级:优化级(optimizing)

①定义:通过定量反馈进行不断的过程改进,这些反馈来自于过程或通过试验新的想法技术而得到。包含第四级所有特征。

②特点:关注过程改进。

③关键过程区域:缺陷预防;技术变更管理;过程变更管理。

六、软件过程模型

1、软件过程模型概述

软件过程模型是软件开发全部过程、活动和任务的结构框架。软件过程模型不是一种具体模型,是一种开发策略,包含过程、方法和工具三个层次以及一般性阶段,常称为:软件开发模型;软件生存期模型;软件工程范型。

2、软件过程模型分类

(1)传统的软件过程模型(7种)

详细内容见以下第3点

(2)敏捷视角下的过程模型(7种)

详细内容见以下第4点

3、传统的软件过程模型

(1)线性顺序模型(瀑布模型)

①图解

②存在问题

  • 实际项目很少按照该模型给出的顺序执行
  • 客户常常难以清楚地给出需求
  • 客户必须有耐心,运行版要到开发晚期才能得到
  • 导致“阻塞状态”,常发生在开始和结束时

(2)V模型

①图解

在这里插入图片描述
②特点——强调反馈,不将问题留到下一步

Verification验证:每个活动保证能正确运行。

Validation确认:针对需求而言,符合需求规格的定义。

(3)原型实现模型

①定义

原型是一个可迭代的/可重复的(循环)过程,在这个过程中,一个问题的模型被细化/改进,直到它被接受为止。
②流程图

③原型开发分类

根据原型与最终产品之间的关系,原型开发分类分为以下三种:

抛弃式 (throw away):验证和澄清系统的需求描述,重新构造系统。

演化式 (evolutionary):逐步改进和细化原型,将原型进化为最终系统。

增量式 (incremental):在建立软件总体设计基础上,采用增量开发方法,使原型成为最终系统。

此处篇幅较长,点击进入原型实现模型的详解

④适用情况

当客户有一个合理的需求,但是对细节没有概念的时候最适合使用原型实现模型

⑤特点

快速性、迭代性

⑥优缺点

优点:

  • 用户能够感受到实际系统
  • 开发者能很快建造出一些东西

缺点:

  • 原型是粗糙的,没考虑软件总体质量和长期的可维护性
  • 开发者常常要对实现内容折中以使得原型能尽快工作

⑦不适合的领域

  • 嵌入式系统
  • 实时控制系统
  • 科学数值系统

(4)RAD模型

①定义

RAD(Rapid Application Development,快速应用开发)通过使用基于构件的建造方法赢得了快速开发。

②分类

  • 业务建模
  • 数据建模
  • 过程建模
  • 应用生成(编程阶段 - 基于构件)
  • 测试及反复

③流程图

④特点

  • 强调极短的开发时间,每一个主要功能在不到三个月的时间内完成;
  • 强调复用

⑤存在的问题

  • 对于大型的的项目,RAD需要足够的人力资源以建立足够的RAD组;
  • RAD要求开发者和客户承担在一个很短的时间框架下完成一个系统所必要的快速活动;
  • 并非所有应用都适合RAD;
  • 不适合技术风险很高的情况

(5)增量模型

①定义:增量模型融合了瀑布模型的基本成分原型的迭代特性

②举个例子

例如,使用增量模型开发一款字处理软件,那么,这款软件需要做什么呢?

  • 基本的文件管理、编辑和文档生成功能;
  • 更完善的编辑和文档生成能力;
  • 实现拼写和语法检查功能;
  • 完成高级的页面布局功能。

③流程图

④特点

  • 增量1往往是“核心产品”;
  • 本质是迭代的,但强调每一增量均发布一个可操作产品。

⑤优点

  • 面对不能改变的困难时限时,是可考虑的选择;
  • 早期可投入较少人员;
  • 可有计划地管理技术风险。

⑥思考问题

Q:假设一个学校在四个月后要参加教学评估,要求现在开发一个学校综合管理信息系统,如果你是开发者,你会选择哪一种过程模型来开发这个系统,RAD还是增量式的过程模型?为什么?

A:答案是选择RAD过程模型。为什么呢?
原因在于,RAD模型适用于模块化比较强的项目,且必须在60-90天内完成,不迭代,没有一个动作在重复进行。
增量模型则是可迭代的,且增量1是核心产品,每一增量均可操作。比较适用于市场竞争激烈的项目,有利于抢占市场。

(6)螺旋模型

①软件开发可能遇到的风险(引例):

  • 产品交付给用户之后用户可能不满意;
  • 到了预定的交付日期软件可能还未开发出来;
  • 实际的开发成本可能超过预算;
  • 产品完成前一些关键的开发人员可能“跳槽“了;
  • 产品投入市场之前竞争对手发布了一个功能相近、价格更低的软件等;
  • ……

②螺旋模型的基本思想:使用原型及其他方法来尽量降低风险。

③流程图

理解这种模型的一个简便方法,就是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型,如下图所示
在这里插入图片描述

④螺旋模型任务区域(4个象限),各象限含义如下:

  • 客户交流——建立开发者和客户之间有效的通信所需的任务;
  • 制定计划——确定软件目标,选定实施方案,弄清项目开发的限制条件;
  • 风险分析——分析评估所选方案,考虑如何识别和消除风险;
  • 实施工程——实施软件开发和验证;
  • 构造及发布——构造、测试、安装和提供用户支持(如文档及培训)所需的任务;
  • 客户评估——评价开发工作,提出修正建议,制定下一步计划。

:四个象限包含制定计划,风险分析,实施工程,客户评估;

​ 此处列出6点是为了更加细分螺旋模型的流程。

⑤优缺点

优点:

  • 随着过程进展演化,开发者和客户能够更好地理解和对待每一个级别上的风险,使用原型实现作为降低风险的机制;
  • 更真实地反映了现实世界;
  • 如应用得当,能在风险变成问题之前降低它。

缺点:

  • 模型的成功依赖于风险评估的专门技术;
  • 是一个较新的模型,功效的确定尚需若干年时间。

⑥适用情况

主要适用于内部开发的大规模软件项目

(7)形式化方法模型

形式化方法使得软件工程师能够通过应用一个严格的、数学的符号体系来规约、开发和验证基于计算机的系统。净室软件工程师是这种方法的一个变种。

通过应用数学分析,二义性、不完整性和不一致性能更容易发现和纠正。

形式化方法目前还很费时且很昂贵

很少有软件开发者具有实用形式化方法所必要的指示,尚需许多方面的培训。

难以与客户进行沟通。

4、敏捷视角下的过程模型

(1)什么是敏捷

  • 普遍存在的变化是敏捷的基本动力

  • 敏捷就是灵活,支持变化的观点

  • 敏捷过程强调过程的可操作性和适应性

(2)敏捷团队必须具备的特点

  • 基本能力
  • 共同目标
  • 精诚合作
  • 决策能力
  • 模糊问题的解决能力
  • 相互信任和尊重
  • 自我组织

(3)几种重要的敏捷过程模型

①极限编程(XP)
  • 包含了策划设计编码测试四个框架活动的规则和实践,具体流程如下:

在这里插入图片描述

②自适应软件开发(ASD)
  • ASD的生命周期包含思考协作学习三个阶段

在这里插入图片描述

③动态系统开发方法(DSDM)

定义三个不同的迭代循环,前面还加了两个生命周期活动,如下:

  • 可行性研究
  • 业务研究
  • 功能模型迭代
  • 设计和构建迭代
  • 实现迭代
④Scrum(橄榄球模型)

强调使用一系列的软件过程模式,每个过程模式定义一系列开发活动:

  • 待定项——能为用户提供业务价值的项目需求或特征的优先级列表;
  • 冲刺——由工作单元组成,是完成待定项中定义的需求所必需的,能在预定时间段内完成的;
  • Scrum例会——15分钟;
  • 演示——交付软件,客户进行评估。
⑤Crystal
  • 提倡“机动性”的软件开发方法;

  • 包含具有共性的核心元素,每一个都含有独特的角色过程模式工作产品实践等。

⑥特征驱动开发(FDD)
  • 特征,即可以在2周甚至更短时间内实现具有客户价值的功能。

  • 定义五种协作框架

⑦敏捷建模(AM)
  • 有目的的建模
  • 使用多个模型
  • 前进灯
  • 内容重于表达形式
  • 理解模型及工具
  • 适应本地需要

写在最后

看完这篇文章,不妨试问下自己以下问题:

  • 你认为介绍的软件过程模型哪一种最有效,为什么?

  • 举出一个采用增量模型开发的软件项目,并指出各个增量的功能。

  • 当沿着螺旋模型的过程路径向外移动时,你认为正在开发或维护的软件发生了什么变化呢?

  • 分别用图示说明瀑布模型、V模型、原型、RAD、增量模型及螺旋模型这六种模型的原理。

欢迎评论区留下答案٩(๑❛ᴗ❛๑)۶

PS 本文篇幅较长,有错别字欢迎评论区纠正,随时改进~
如果这篇文章对你有帮助,记得留下star哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用vector实现一对一(pair<int,int>)

一&#xff1a;前言 我们知道有一对一的STL容器有map容器&#xff0c;但是map容器中的按键值排序和不允许由重复的元素&#xff0c;现在&#xff0c;我们可以利用 vector<pair<int,int> >来实现一对一&#xff0c;但其没有排序可以允许有重复的元素 二&#xff1…

没有docker,谈什么微服务架构?

新的互联网技术时代已经来临了&#xff0c;容器、Kubernetes、DevOps、微服务、云原生代表着技术前进的方向&#xff0c;.NET Core微服务Docker&#xff0c;亦是当下最优解决方案(低调点&#xff0c;几乎没有之一)&#xff01;有点自夸&#xff1f;作为专注于.NET领域十多年的老…

『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式

三种原型实现模型一、抛弃式原型开发二、演化式原型开发三、增量式原型开发一、抛弃式原型开发 1、定义&#xff1a;验证和澄清系统的需求描述&#xff0c;重新构造系统。 2、流程图 3、典型例子 开发者与客户进行沟通交流&#xff0c;之后获取到客户的需求&#xff0c;于是…

『软件工程4』一文了解软件项目管理中的4P

软件项目管理中的4P一、项目管理的重要性和定义1、重要性&#xff08;两个阶段&#xff09;2、软件项目管理的定义二、管理四要素4P1、管理的四要素(4P)2、软件项目中影响最终结果的要素3、项目管理关心的问题三、项目参与者类型(people)四、项目小组结构(people)1、项目的三种…

8-1 回溯法实验报告 (15 分)(思路+详解)

一&#xff1a;题目 给定k个正整数&#xff0c;用算术运算符&#xff0c;-&#xff0c;&#xff0c;/ 将这k个正整数连接起来&#xff0c;是最终的得数恰为m。 如果有多组满足要求的表达式&#xff0c;只要输出一组&#xff0c;每一步算式用分号隔开。 如果无法得到m&#xff…

TypeScript 4.0 发布

喜欢就关注我们吧&#xff01;整体看来&#xff0c;此版本在兼容性方面没有特别大的变化。因为 TypeScript 团队表示新版本继续使用与过去版本相似的版本控制模型&#xff0c;可将 4.0 视作 3.9 的延续升级版本。而且他们也一直在追求不牺牲主要灵活性的情况下&#xff0c;提供…

『软件工程5』详解软件项目管理之软件的度量

软件项目管理——软件的度量一、度量的目的1、引例2、度量的目的3、度量的作用二、测量、度量和指标区别1、引例2、测量、度量和指标的区别3、思考题三、过程度量和项目度量1、过程2、项目四、度量的方式1、物理世界中的测量2、软件测量五、面向规模的度量1、定义2、有用度量的…

7-2 旅行售货员 (10 分)(TSP问题思路加详解)

一题目 某售货员要到若干城市去推销商品&#xff0c;已知各城市之间的路程(或旅费)。他要选定一条从驻地出发&#xff0c;经过每个城市一遍&#xff0c;最后回到驻地的路线&#xff0c;使总的路程&#xff08;或总旅费&#xff09;最小。 输入格式: 第一行为城市数n 下面n行…

从零开始内建你的安全测试流程

一、 安全测试的意义安全问题&#xff0c;没发生的时候我们可以侥幸&#xff0c;一旦发生生产安全问题&#xff0c;对很多公司来说可能就是黑天鹅事件了。平台的安全&#xff0c;是我们测试中不可舍弃的一环&#xff0c;而且需要长期持续的关注。二、 从哪里入手很多公司没有专…

『软件测试1』你需要了解的软件测试基础知识

软件测试基础一、 软件缺陷的概述1、什么是软件缺陷2、软件缺陷的类型3、软件缺陷的案例4、软件缺陷的产生原因5、软件缺陷的分类6、软件缺陷的处理流程7、多学一招&#xff1a;缺陷报告&#xff08;由测试人员完成&#xff09;8、常见软件缺陷管理工具9、修复软件缺陷的成本二…

直连路由和静态路由(实验)

一:概念 1:直连路由概念 根据 路由 器学习路由信息、生成并维护 路由表 的方法包括直连路由(Direct)、 静态路由 (Static)和 动态路由 (Dynamic)。直连路由&#xff1a;路由器接口所连接的子网的路由方式称为直连路由&#xff1b; 非直连路由&#xff1a;通过路由协议从别的路…

使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放

使用 GB28181.Solution ZLMediaKit MediaServerUI 进行摄像头推流和播放独立观察员 2020 年 8 月 25 日一、摄像机 GB28181 配置打开 国标 28181 配置页面&#xff0c;勾上 “接入使能”&#xff1a;打钩的是重要的配置信息&#xff0c;主要就是 SIP 服务器的信息和摄像头自己…

将 .NET Framework 项目转换为 .NET Standard 项目

将 .NET Framework 项目转换为 .NET Standard 项目独立观察员 2020 年 8 月 20 日如今 .NET Core 是未来发展的主流&#xff08;至少在 .NET 5 发布之前&#xff09;&#xff0c;而我们如果要改造一个项目为 .NET Core 项目&#xff0c;则它引用的项目应当先改造为 .NET Standa…

7-3 最短路径 (20 分)(分支限界+思路+详解)

一&#xff1a;题目 给定一个有N个顶点和E条边的无向图&#xff0c;顶点从0到N−1编号。请判断给定的两个顶点之间是否有路径存在。如果存在&#xff0c;给出最短路径长度。 这里定义顶点到自身的最短路径长度为0。 进行搜索时&#xff0c;假设我们总是从编号最小的顶点出发&a…

一份【软件工程】的学习指南已到达,请注意查收!!

软件工程——起始篇一、引言二、学习【软件工程】的原因1、软件设计师证书2、相关领域人员必备技能三、【软件工程】的学习方法1、不要盲目为了学习而学习2、规划学习路线四、结束语【软件工程】应该是大学计算机专业必修的一门课&#xff0c;对于开发者来说&#xff0c;可能有…

『软件工程6』详解软件项目管理之软件范围与估算

软件项目管理——软件范围与估算一、软件项目计划1、目标2、步骤二、软件范围1、软件范围定义2、软件范围——引例三、影响估算的因素四、软件项目资源1、软件项目资源构成2、分析图3、人力资源4、硬件资源5、软件工具6、可复用构件五、软件工作量与成本的估算1、基于LOC估算工…

【翻译】.NET 5 Preview8发布

今天&#xff0c;.NET 5预览8发布了&#xff0c;对于.NET5.0的功能开发已经完成了&#xff0c;这必须要排除待处理的bug&#xff0c;预览8是最后一次预览版本。预计11月正式的.NET5.0版本发布之前还将发布两个正式之前的候选版本&#xff0c;这篇文章描述了.NET5.0版本中的一系…

7-1 页面置换算法--FIFO (50 分)(思路详解)

一:题目 先初始化页面大小&#xff0c;和物理块数。连续输入页面的逻辑地址&#xff0c;以“-1”作为结束标志&#xff0c;采用FIFO页面置换算法、固定分配局部置换分配策略。输出该页面的页号和页内位移&#xff0c;若该页不在内存&#xff0c;并且还有剩余的物理块&#xff…

7-2 页面置换算法--LRU (50 分)

一:题目(思路详解运行时错误解决) 先初始化页面大小&#xff0c;和物理块数。连续输入页面的逻辑地址&#xff0c;以“-1”作为结束标志&#xff0c;采用LRU页面置换算法、固定分配局部置换分配策略。输出该页面的页号和页内位移&#xff0c;若该页不在内存&#xff0c;并且还…

『软件测试3』八大典型的黑盒测试方法已来袭,快快接住!

文章目录一、等价类划分法1、定义2、等价类划分法步骤3、设计测试用例步骤4、案例&#xff1a;学生选修课程二、边界值分析法1、边界值分析法概述2、设计测试用例3、边界值设计原则三、错误推测法1、错误推测法概述2、错误推测法基本思想四、因果图设计法1、因果图设计法概述2、…