软考高级之系统架构师系列之软件开发模型

news2024/10/7 18:30:36

概述

如标题所述。本文面向于软考高级,具体来说是系统架构师。

本来几乎是纯粹的理论知识汇总,用于应付软考,在理解基础上注意抠字眼。

软件开发方法

分类描述
结构化法强调用户至上,严格区分工作阶段,每阶段都有任务和成果,强调开发过程的整体性和全局性,开发过程工程化,文档资料标准化,自顶向下逐步求精
原型法适用需求不明确的开发,分为抛弃型原型和进化型原型
面向对象方法更好的复用性,关键在于建立一个全面、合理、统一的模型
面向服务方法SOA方法有三个主要的抽象级别:操作、服务、业务流程。

SOA分为三个层级:底层服务构件、服务接口与协议、服务流程编排。

服务建模:分为服务发现、服务规约和服务实现三个部分

软件开发模型

大体来说,有3类:

  • 软件需求完全确定为前提,可以采用瀑布模型;
  • 软件开发初期阶段只能提供基本需求,可以采用迭代式或渐进式模型,如喷泉模型,螺旋模型、统一开发过程和敏捷方法、极限编程。开发人员对算法的效率,操作系统的兼容性和人机交互的形式不明确等情况下,快速原型开发。
  • 形式化为基础的变换模型

瀑布模型

特点:
阶段间具有顺序性和依赖性,前一阶段结束后才能开始后一阶段的工作,前一阶段的输出是厚意阶段的输入;推迟实现观点,尽可能推迟程序的物理实现;强调质量保证观点,每个阶段必须完成规定的文档,每个阶段结束前完成文档以便及早改正错误。

瀑布模型可以说是最早使用的软件生存周期模型之一。由于这个模型描述了软件生存的一些基本过程活动,所以它被称为软件生存周期模型。这些活动从一个阶段到另一个阶段逐次下降,形式上很像瀑布。瀑布模型的特点是因果关系紧密相连,前一个阶段工作的结果是后一个阶段工作的输入。

优点:

  • 原理简单,容易掌握
  • 各阶段间都有验证和确认环节,以便进行质量管理
  • 主要用于支持结构化方法
    缺点:
  • 缺乏灵活性,不能适应用户的需求变化
  • 缺乏演化性,返回上一级的开发需要付出十分高昂的代价
  • 是线性的软件开发模型,回溯性差

适用场合:

  • 适合于软件需求比较明确或很少变化,且开发人员可以一次性获取到全部需求的场合
  • 适合开发技术比较成熟,工程管理比较严格的场合
  • 一般用于低风险的项目,适合开发人员具有丰富的经验
    在这里插入图片描述

原型模型

又称快速原型模型,是快速建立起来的可以在计算上运行的程序,是软件的一个早期可运行的版本,它的功能是最终产品的子集。用途主要是获取用户的真正的需求。

原型模型主要有两个阶段:

  • 原型开发阶段。软件开发人员根据用户提出的软件系统的定义,快速地开发一个原型。该原型应该包含目标系统的关键问题和反映目标系统的大致面貌,展示目标系统的全部或部分功能、性能等
  • 目标软件开发阶段。在征求用户对原型的意见后对原型进行修改完善,确认软件系统的需求并达到一致的理解,进一步开发实际系统。

优点:

  • 增强开发者于用户间的交流,有助于满足用户的真实需求
  • 用户可及早得到有用的产品,可及早发现问题,随时纠正错误
  • 减小技术、应用风险,可降低开发费用,缩短开发时间

缺点:

  • 缺乏丰富而强有力的软件工具和开发环境
  • 对设计人员及开发环境要求较高
  • 难于做到彻底测试,更新文档较为困难

适用场合:

  • 预先不能确切定义需求的软件系统,或需求多变的系统
  • 开发人员对设计方案没信心或对将要采用的技术手段不熟悉或把握性不大
  • 原型模型可作为单独的过程模型使用,也常被作为一种方法或实现技术应用于其他的过程模型中。
    在这里插入图片描述

渐增模型

也叫增量模型,其实质上是分段的线性模型,是一种非整体开发模型,渐增模型把软件产品作为一系列增量构件来设计、编码、集成和测试,在项目开发过程中以一系列的增量方式来逐步开发系统。

优点:

  • 可分批次提交软件产品,方便用户及时了解软件开发进展情况,及早发现问题
  • 以组件为单位进行开发,降低软件开发风险
  • 开发顺序灵活,优先级最高的服务首先交付。

缺点:

  • 由于对整个软件系统的需求没有一个完整的定义,会给总体设计带来麻烦。
  • 在把每个新的增量构件集成到现有软件结构中时,必须不破坏原来已开发出的产品。
  • 软件的体系结构必须是开放的,即向产品中加入新构件的过程必须简单、方便。每次增量开发的产品都应当是可测试的,可扩充的。

适用场合:

  • 软件产品可以分批次地进行交互
  • 待开发的软件系统能够被模块化
  • 软件开发人员对应用领域不熟悉、难以一次性地进行软件开发时
  • 项目管理人员把握全局的水平较高时
  • 对软件需求把握不准确、设计方案有一定风险的项目
    在这里插入图片描述

喷泉模型

喷泉一词体现迭代和无间隙特性,迭代是指开发软件系统时,某些部分经常要重复多次,相关功能在每次迭代中随之加入演进的系统。

特点:

  • 各阶段相互重叠,反映软件过程的并行性
  • 以分析为基础,资源消耗呈塔形,在分析阶段消耗的资源最多
  • 反映软件过程迭代的自然特性,从高层返回低层无资源消耗
  • 强调增量开发,依据分析一点设计一点为原则,不要求一个阶段完成,整个过程是一个迭代的逐步提炼过程
    在这里插入图片描述

螺旋模型

螺旋模型是在结合瀑布模型与快速原型模型基础上演变而成的 ,加入风险分析。

单选题,有瀑布和原型两个选项,选择原型。螺旋模型是在(快速)原型的基础上扩展而成的。

其基本思想,使用原型及其它方法来尽量降低风险。沿着螺线进行若干次迭代。
两个显著特点:

  • 采用循环的方式逐步加深系统定义和实现的深度,降低风险。
  • 确定一系列里程碑,确保项目开发过程中的相关利益者都支持可行的和令人满意的系统解决方案。

在螺旋模型中,将软件过程表示为一个螺旋线,在螺旋线上的每一个循环表示过程的一个阶段。整个过程的实现按以下四个步骤完成:

  • 指定计划:即目标设定,为该项目进行需求分析,定义和确定这一个阶段的专门目标,指定对过程和产品的约束,并且制定详细的管理计划
  • 风险分析:对可选方案进行风险识别和详细分析,制定解决办法,采取有效的措施避免这些风险
  • 工程实施:即开发和有效性验证,风险评估后,可以为系统选择开发模型,并且进行原型开发,即开发软件产品
  • 客户评估:即评审,对项目进行评审,以确定是否需要进入螺旋线的下一次回路,如果决定继续,就要制定下一阶段计划。

适用场合:

  • 适用于面向规格说明、面向过程和面向对象的软件开发方法
  • 也适用于几种开发方法的组合和产生的组合模型

缺点:
要求开发人员必须具有丰富的风险评估经验和专门知识

在这里插入图片描述

RUP

RUP软件开发生命周期是一个二维的软件开发模型,其中有9个核心工作流:业务建模、需求、分析与设计、实现、测试部署、配置与变更管理、项目管理以及环境。

RUP把软件开发生存周期划分为多个循环,每个循环生成产品的一个新版本,每个循环依次由4个连续的阶段组成,每个阶段完成确定的任务:

  • 初始阶段:定义最终产品视图和业务模型,并确定系统范围
  • 细化阶段:设计及确定系统的体系结构,制定工作计划及资源要求
  • 构造阶段:构造产品并继续演进需求、体系结构、计划直至产品提交
  • 移交阶段:把产品提交给用户使用

每个阶段都有一个或多个连续的迭代组成。迭代并不是重复地做相同的事,而是针对不同用例的细化和实现。每一个迭代都是一个完整的开发过程,它需要项目经理根据当前迭代所处的阶段以及上次迭代的结果,适当地对工作流中的行为进行裁剪。在每个阶段结束前有一个里程碑评估该阶段的工作。如果未能通过该里程碑的评估,则决策者应该做出决定,是取消该项目还是继续该阶段的工作。

RUP特点:用例驱动的、以体系结构为中心的、迭代和增量的软件开发过程。

4+1视图

由Philippe kruchten提出,被 RUP 采纳。现在已经成为架构设计的结构标准。

  1. 逻辑视图:逻辑视图关注功能,不仅包括用户可见的功能,还包括为实现用户功能而必须提供的“辅助功能模块”;它们可能是逻辑层、功能模块等。
  2. 开发视图:实现视图,开发视图关注程序包,不仅包括要编写的源程序,还包括可以直接使用的第三方 SDK 和现成框架、类库,以及开发的系统将运行于其上的系统软件或中间件。开发视图和逻辑视图之间可能存在一定的映射关系:比如逻辑层一般会映射到多个程序包等。
  3. 进程视图:处理视图。处理视图关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。处理视图和开发视图的关系:开发视图一般偏重程序包在编译时期的静态依赖关系,而这些程序运行起来之后会表现为对象、线程、进程,处理视图比较关注的正是这些运行时单元的交互问题。
  4. 物理视图:部署视图。物理视图关注“目标程序及其依赖的运行库和系统软件”最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。物理视图和处理视图的关系:处理视图特别关注目标程序的动态执行情况,而物理视图重视目标程序的静态位置问题;物理视图是综合考虑软件系统和整个 IT 系统相互影响的架构视图。
  5. 场景视图:用例视图。架构的描述,即所做的各种决定,可以围绕着这四个视图来组织,然后由一些用例 (use cases)或场景(scenarios)来说明,从而形成第五个视图。

不同的人员会关心不同的视图:

  • 分析人员和测试人员关心的是系统的行为,侧重于用例视图
  • 最终用户关心的是系统的功能,侧重于逻辑视图
  • 程序员关心的是系统的配置、装配等问题,侧重于实现视图
  • 系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,侧重于进程视图
  • 系统工程师关心的是系统的发布、安装、拓扑结构等问题,侧重于部署视图

其他

形式化方法

形式化方法是一种具有坚实数学基础的方法,从而允许对系统和开发过程做严格处理和论证,适用于那些系统安全级别要求极高的软件的开发。形式化方法的主要优越性在于它能够数学地表述和研究应用问题及软件实现。但是它要求开发人员具备良好的数学基础。用形式化语言书写的大型应用问题的软件规格说明往往过于细节化,并且难以为用户和软件设计人员所理解。由于这些缺陷,形式化方法在目前的软件开发实践中并未得到普遍应用。

结构化分析

结构化分析是结构化方法的重要组成部分,一般要依次进行以下工作:

  • 目标分析:系统目标是指系统在开发完成后所应达到的境地或标准。
  • 环境分析:环境分析可分为对内部环境的分析和对外部环境的分析两方面。环境分析着重于对较宏观的情况的了解,并不过分要求某些细节问题和情况。
  • 业务分析:业务或业务活动是对企业或机构的一切专业工作和活动的总的称呼。一般都是将企业业务或业务活动按性质划分,并由若干机构来进行管理。业务分析应该从业务调查入手,首先了解企业的组织结构、绘制组织结构图,从与企业生产经营直接相关的机构开始,进行业务流程的调查,并绘制成业务流程图,并逐步扩展到系统边界内的其他机构。
  • 数据分析:数据分析的主要内容为数据流程图和数据字典
  • 效益分析:衡量信息系统效益的第一标准应该是系统是否投入使用,因为再好的系统如果放置不用,那就等于没有。而使用了的系统,成功与否取决于其效益。
  • 逻辑模型的建立:逻辑模型即信息系统的功能模型,描述系统的总体构成、子系统划分和子系统的功能模块,并包括各子系统的业务流程和数据流程以及相关的数据定义和结构。
  • 系统分析报告:一个完整的计算机信息系统的分析报告应包括3个部分,一部分是应用分析;其次是系统的运行平台,它是针对应用所应提供的软件和硬件条件以及它们的结构和配置的分析;最后是系统对网络和通信的要求。3个部分是相互联系和密切相关的。

净室软件工程

Cleanroom Software Engineering,CSE。
软件开发的一种形式化方法,使用盒结构规约(或形式化方法)进行分析与设计建模,并将正确性验证作为发现和消除错误的主要机制,采用统计测试来获取验证软件可靠性所需要的信息。CSE强调在规约和设计上的严格性,以及使用基于数学的正确性来证明对设计模型的每个元素进行形式化验证。还强调统计质量控制技术,包括基于客户对软件的预期使用测试。

由三大关键技术来刻画:统计过程控制下的增量开发,基于函数的规范、设计和验证,以及统计测试和认证。

V模型

一种典型的测试模型。在V模型中测试过程被加在开发过程的后半部分,包括单元测试、集成测试、系统测试和验收测试。

构件开发模型

基于构件的开发模型利用模块化方法将整个系统模块化,并在一定构件模型的支持下复用构件库中的一个或多个软件构件,通过组合手段髙效率、髙质量地构造应用软件系统的过程。基于构件的开发模型融合了螺旋模型的许多特征,本质上是演化形的,开发过程是迭代的。基于构件的开发模型由软件的需求分析定义、体系结构设计、构件库建立、应用软件构建以及测试和发布5个阶段组成。

敏捷开发

敏捷方法是从20世纪90年代开始逐渐引起广泛关注的一些新型软件开发方法,以应对快速变化的需求。敏捷方法的核心思想主要有以下三点:

  • 敏捷方法是适应性而非预设性的。传统方法试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷方法则欢迎变化,其实它的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化
  • 敏捷方法是以人为本,而不是以过程为本。传统方法以过程为本,强调充分发挥人的特性,不去限制它,并且软件开发在无过程控制和过于严格烦琐的过程控制中取得一种平衡,以保证软件的质量
  • 迭代增量式的开发过程。敏捷方法以原型开发思想为基础,采用迭代增量式开发,发行版本小型化

与RUP相比,敏捷方法的周期可能更短。敏捷方法在几周或几个月的时间内完成相对较小的功能,强调尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强,并且更加强调团队中的高度协作。相对而言,敏捷方法主要适合于以下场合:

  • 项目团队的人数不能太多,适合于规模较小的项目
  • 项目经常发生变更。敏捷方法适用于需求萌动并且快速改变的情况,如果系统有比较高的关键性、可靠性、安全性方面的要求,则可能不完全适合
  • 高风险项目的实施
  • 从组织结构的角度看,组织结构的文化、人员、沟通性决定了敏捷方法是否使用。

XP

极限编程,适用于费用控制严格的公司

水晶方法

强调用最少纪律约束而仍能成功

开放式源码方法

开发人员地域分布广。这使得它和其他敏捷方法不同,因为一般的敏捷方法都强调项目组成员在同一地点工作。

FDD

Feature Driven Development,功用驱动开发方法,将程序员分为首席程序员和”类“程序员(class owner),致力于短时的迭代,阶段和可见可用的功能

ASD

三个非核心的、重叠的开发阶段:猜疑、合作和学习

Scrum

参考

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

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

相关文章

老电脑如何用U盘重装系统?老电脑用U盘重装系统教程

老电脑如何用U盘重装系统?用户利用U盘来给老电脑重装系统,能够帮助解决老电脑运行缓慢、系统出现故障或感染病毒等问题,通过重装系统,可以清除旧的系统文件和应用程序,重新安装一个干净且高效的操作系统,那…

Java8实战-总结1

Java8实战-总结1 基础知识流处理用行为参数化把代码传递给方法并行与共享的可变数据Java需要演变 Java 中的函数 基础知识 流处理 流是一系列数据项,一次只生成一项。程序可以从输入流中一个一个读取数据项,然后以同样的方式将数据项写入输出流。一个程…

TypeScript 学习笔记(二):接口与类型别名、字面量类型

一、接口的定义 在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据&#xff0…

qt 聊天室

服务器端 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器对象server new QTcpServer(this);}Widget::~Widget() {delete ui; }…

ELK插件介绍

ELK插件介绍 一、Grok 正则捕获插件1、概述2、内置正则表达式调用3、自定义表达式调用 二、multiline 多行合并插件1、概念2、安装3、使用 multiline 插件 三、date 时间处理插件1、概念2、操作3、时间戳详解 四、mutate 数据修改插件1、概念2、案例 一、Grok 正则捕获插件 1、…

上海亚商投顾:沪指震荡反弹 新能源车产业链再度爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 沪指今日震荡反弹,创业板指午后涨近1%。新能源车产业链再度爆发,整车、零部件、智能驾驶等…

python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)

简介 前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,我们也不能放在那里不管了,这样即使你报告在漂亮,领导也看不到。因此如果想向领导汇报工作,不仅需要提供更直观的测试报告。而…

大学生活动社交小程序开发笔记(1)

可研分析 大学生活动社交小程序是一种基于移动互联网的社交平台,旨在为大学生提供一个方便、快捷、安全的社交和活动交流平台 功能规划 活动发布:平台可以发布将要举行的活动,包括时间、地点、费用等信息,并邀请其他用户参加。…

《UNUX环境高级编程》(8)进程控制

1、引言 2、进程标识 每个进程都用一个唯一的非负整数标识,即为进程id:pid。进程ID是可以复用的,当一个进程终止时,其进程ID就可以用来标识其他进程。系统中有一些专用进程: 进程ID为0的是调度进程,也称交…

【软件测试】Git 远程仓库的使用(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 查看远程仓库 想…

Docker笔记 容器的数据卷

1. 数据卷概念 思考: Docker容器删除后,在容器中产生的数据还在吗? 答案是不在了,数据存放在容器中,如果将容器删除,数据也会被一并删除 Docker容器和外部机器可以直接交换文件吗? 答案是不…

为什么需要Promises ?

同步"异步操作", 避免Block多层嵌套造成的"回调地狱" The problem with async code (without Promises) Typically, async operations take a completion handler in a form of a block, which is called to provide either a result or an error. To per…

银河麒麟服务器v10 sp1 部署 redis 及redis gui 客户端工具

上一篇:银河麒麟服务器v10 sp1 redis开机自动启动_csdn_aspnet的博客-CSDN博客 本文介绍另一种redis安装方式及客户端工具安装。 Redis 是一种内存数据模型存储,可用作数据库、缓冲区和消息传递中继。它是开源的(BSD 许可)。字符…

热爱python的第一天:初识python,搭建python环境,运行第一个python小程序

目录 1 初始python python 概述 python的应用领域 应用python的公司 2 搭建python 开发环境 2.1 安装python(以windows 系统为例)(1)下载安装包 (2) 下载保存后打开文件夹点击以管理员身份运行 &…

IntegrityError: FOREIGN KEY constraint failed解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

nginx漏洞修复之检测到目标URL存在http host头攻击漏洞

漏洞说明 为了方便的获得网站域名,开发人员一般依赖于HTTP Host header。例如,在php里用_SERVER[“HTTP_HOST”]。但是这个header是不可信赖的,如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。 解决方法…

安全狗亮相2023第二届上海网络安全博览会

7月5日至7日,“新耀东方-2023第二届上海网络安全博览会暨高峰论坛”在上海顺利举办。此次大会由上海市信息网络安全管理协会、国家计算机网络应急技术处理协调中心上海分中心、(ISC)2上海分会、上海市普陀区科学技术委员会、上海市网络安全产业示范园共同主办。 作…

Keil5开发STM32F4

Gitee keil工程 软件下载和安装: 链接:https://pan.baidu.com/s/1PWDAU0EhVZ6J8h6xH_uw5g 提取码:b343 MDK526.exe Keil.STM32F4xx_DFP.2.17.1.pack keygen_2032.exe JLink_Windows_V640.exe en.stsw-stm32065_v1-7-1_STM32F4 &…

【数据仓库】Windows源码安装DataEase,DataEase二次开发

上文记录了DataEase入门使用指南,本文主要记录Windows下源码安装及二次开发步骤【数据仓库】BI看板DataEase入坑指南_wenchun001的博客-CSDN博客 改动文件 源码 GitHub release 链接: Releases dataease/dataease GitHub SDK 软件环境 后端: JDK …

MongoDB快速入门

虽说现在关系型数据库还是主流,但是面对某些需求的时候,需要非关系型数据库来补充它,学习一个主流的NoSQL数据库还是很有必要的。MongoDB是一个功能丰富的NoSQL数据库,本文整理了它最常用的部分形成了这篇入门教程,希望…