六、软考-系统架构设计师笔记-软件工程基础知识

1、软件工程

软件工程是将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件并对上述方法的研究。
软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个过程称为软件的生命周期。
为了使软件生命周期中的各项任务能够有序地按照规程进行,需要一定的工作模型对各项任务给予规程约束,这样的工作模型称之为软件生命周期模型。

主要的开发模型有:

  • 瀑布模型
  • 原型化模型
  • 螺旋模型
  • 喷泉模型
  • 智能模型
  • 增量模型
  • 迭代模型
  • 构件组装模型
  • V模型
  • 快速应用开发模型
  • 敏捷方法
  • 统一过程(UP)

一、瀑布模型
瀑布模型也称为生命周期法,是结构化方法中最常用的开发模型,它把软件开发的过程分为软件计划、需求分析、软件设计、程序编码、软件测试和运行维护6个阶段。

瀑布模型的优点:
(1)为项目提供了按阶段划分的检查点。
(2)当前一阶段完成后,只需要去关注后续阶段。
(3)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

瀑布模型的缺点:

  • (1)各个阶段之间产生大量的文档,极大地增加了工作量。
  • (2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
  • (3)不适应用户需求的变化,并且在需求分析阶段不可能完全获取。
  • (4)在软件开发前期未发现的错误传到后面的开发活动中时,可能会扩散,进而可能会导致整个软件项目开发失败。所以,瀑布模型适用于需求明确或很少变更的项目

二、原型化模型
指在获取一组基本的需求定义后,利用高级软件工具可视化的开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新的版本开发。反复进行这个过程,直到得出系统的“精确解”,即用户满意为止。

1.原型的分类
从原型是否实现功能来分,软件原型可分为:

  • 水平原型
  • 垂直原型

从原型的最终结果来分,软件原型可分为:

  • 抛弃型原型
  • 演化型原型

原型法适合于用户需求不明确的场合。
它是先根据已给的和分析的需求,建立一个原始模型,这是一个可以修改的模型。在软件开发的各个阶段都把有关信息相互反馈,直至模型的修改,使模型渐趋完善。在这个过程中,用户的参与和决策加强了,缩短了开发周期,降低了开发风险,最终的结果是更适合用户的要求。原型法成败的关键及效率的高低,在于模型的建立及建模的速度。

三、螺旋模型
将瀑布模型和演化模型相结合,综合了两者的优点,并增加了风险分析。它以原型为基础,沿着螺线自内向外旋转,每旋转一圈都要经过制订计划、风险分析、实施工程及客户评价等活动,并开发原型的一个新版本。经过若干次螺旋上升的过程,得到最终的系统。

螺旋模型的优点:

  • (1)设计上灵活,可以在项目的各个阶段进行变更;
  • (2)以小的分段来构建大型系统,使成本计算变得简单容易;
  • (3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向;
  • (4) 随着项目推进,客户始终掌握项目的最新信息 , 从而能够和管理层有效地交互。

螺旋模型的缺点:

  • (1) 需要具有相当丰富的风险评估经验和专门知识,如果未能够及时标识风险,势必造成重大损失;
  • (2)过多的迭代次数会增加开发成本,延迟提交时间。

四、喷泉模型
是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程,该模型认为软件开发过程自下而上的,各阶段是相互迭代和无间隙的。无间隙是指在开发活动中,分析、设计和编码之间不存在明显的边界。

五、智能模型
是基于知识的软件开发模型,它把瀑布模型和专家系统结合在一起,利用专家系统来帮助软件开发人员的工作。该模型应用基于规则的系统,采用归约和推理机制,帮助软件人员完成开发工作,并使维护在系统规格说明中一级进行。
该模型在实施过程中要建立知识库,将模型本身、软件工程知识与特定领域的知识分别存入数据库。

六、增量模型
融合了瀑布模型的基本成分和原型实现的迭代特征。当使用增量模型时,第一个增量往往是核心的产品,即第一个增量实现了基本的需求。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。

增量模型与原型实现模型和其他演化方法一样,本质上是迭代的,但与原型实现不一样的是其强调每一个增量均发布一个可操作产品。
增量模型的特点是引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开发。

增量模型优点:
(1) 人员分配灵活,初期不用太大投入。
(2) 每隔一小段时间就提交用户部分功能,用户可以直观感受项目进展,及时试用产品功能。
(3) 有利于风险的把控。
增量模型将功能细化、分别开发的方法适应于需求经常改变的软件开发过程。

增量模型缺点:

  • (1)由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
  • (2)需求的变化是不可避免的。增量模型的灵活性使其适应这种变化,但也很容易退化为边做边改,使软件过程的控制失去整体性。
  • (3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析。

七、迭代模型
迭代模型,摒弃了传统的需求分析,设计,编码,测试的流程,而是将整个生命周期变成若干个冲刺(Sprint)阶段,每一个阶段都是由以上若干或者全部传统的流程组成,在每一个阶段中,都包含下面阶段:初始阶段,细化阶段,构建阶段,交付阶段。

  • 在迭代模型中,每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。
  • 迭代模型适用于项目事先不能完整定义产品所有需求、计划多期开发的软件开发。

八、构件组装模型
基于构件的软件开发(CBSD)模型是利用模块化方法,将整个系统模块化,并在一定构件模型的支持下,复用构件库中的一个或多个软件构件,通过组合手段高效率、高质量地构造应用软件系统的过程。CBSD模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的。

基于构件的软件开发方法由5个阶段组成:

  • 需求分析和定义
  • 体系结构设计
  • 构件库的建立
  • 应用软件构建
  • 测试和发布

基于构件的软件开发的优点:

  • (1)提高了软件开发的效率。
  • (2)CBSD允许多个项目同时开发,降低了费用。
  • (3)提高了可维护性和产品质量。

基于构件的软件开发的缺点:

  • (1)由于采用自定义的组装结构标准,缺乏通用的组装结构标准引入具有较大的风险。
  • (2)可重用性和软件高效性不易协调,需要精干的、有经验的分析人员和开发人员。
  • (3)构件库的质量影响着产品的质量。

九、V模型
单元测试是检测代码的开发是否符合详细设计的要求。单元测试的计划是在软件详细设计阶段完成的。
集成测试是检测测试过的各组成部分是否能完好地结合到一起。
系统测试是检测已集成在一起的产品是否符合系统规格说明书的要求。
验收测试是检测产品是否符合最终用户的需求。
在这里插入图片描述
十、快速应用开发
快速应用开发(RAD)模型是一个增量型的软件开发过程模型,强调极短的开发周期。RAD模型是瀑布模型的一个高速变种,通过大量使用可复用构件,采用基于构件的建造方法赢得快速开发。

快速应用开发模型的流程:

  • 业务建模
  • 数据建模
  • 过程建模
  • 应用生成
  • 测试与交付

十一、敏捷方法
敏捷开发是从20世纪90年代开始逐渐引起广泛关注的一些新型软件开发方法,以应对快速变化的需求。
敏捷开发更强调程序员团队与业务专家之间的紧密协作、面对面沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、能够
很好地适应需求变化的代码编写和团队组织方法,也更注重人的作用。

常见的敏捷开发方法:

  • 极限编程(XP)
  • 自适应软件开发
  • 水晶方法
  • 特性驱动开发

从开发者的角度,主要的关注点:

  • 短平快会议(Stand Up)
  • 小版本发布(Frequent Release)
  • 较少的文档(Minimal Documentation)
  • 合作为重(Collaborative Focus)
  • 客户直接参与(Customer Engagement)
  • 自动化测试(Automated Testing)
  • 适应性计划调整(Adaptiye Planning)
  • 结对编程(Pair Programming)

从管理者的角度,主要的关注点:

  • 测试驱动开发(Test-Driven Development)
  • 持续集成(Continuous Integration)
  • 重构(Refactoring)

敏捷方法适用于中小型软件开发团队,并且客户的需求模糊或需求多变。
这些方法所提出来的一些所谓的“最佳实践”并非对每个项目都是最佳的,需要项目团队根据实际情况来决定。而且,敏捷方法的有些原则在应用中不一定能得到贯彻和执行。

十二、统一过程(UP/RUP)
是一个通用过程框架,可以用于种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。UP是基于构件的,软件系统建模时,UP使用的是UML。与其他软件过程相比,UP具有三个显著的特点:

  • 用例驱动
  • 以体系结构为中心
  • 迭代和增量

UP中的软件过程在时间上被分解为四个顺序的阶段

  • 初始阶段
  • 细化阶段
  • 构建阶段
  • 交付阶段
    每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经达到。

CMM(能力成熟度模型)

  • (1)初始级:软件过程的特点是无秩序的,有时甚至是混乱的。软件过程定义几乎处于无章法和无步骤可循的状态,软件产品所取得的成功往往依赖于极个人的努力和机遇。
  • (2)可重复级:已经建立了基本的项目管理过程,可用于对成本、进度和功能特性进行跟踪。对类似的应用项目,有章可循并能重复以往所取得的成功。
  • (3)已定义级:用于管理和工程的软件过程均已文档化、标准化,并形成整个软件组织的标准软件过程。
  • (4)已管理级:软件过程和产品质量有详细的度量标准。软件过程和产品质量得到了定量的认识和控制。
  • (5)优化级:通过对来自过程、新概念和新技术等方面的各种有用信息的定量分析,能够不断地、持续地进行过程改进。

CMMI(软件能力成熟度模型集成)
与CMM相比,CMMI涉及面更广,专业领域覆盖软件工程、系统工程、集成产品开发和系统采购。
CMMI模型分为5个级别:

  • (1)初始级
  • (2)已管理级
  • (3)严格定义级
  • (4)定量管理级
  • (5)优化级

持续更新中。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是聚簇索引与非聚集索引和区别?

什么是聚簇索引与非聚集索引和区别? 按物理存储分类:InnoDB的存储方式是聚集索引,MVISAM的存储方式是非聚集索引 test innodb.frm 测试 innodb.ibd Frame表结构 数据表索引数据 test myisam.frm ---->Frame表结构test myisam.MYD_---数据表数据test_myisam.MYl-…

HTML实体字符列表,必看

HTML、CSS、JS三大部分都起什么作用? HTML内容层,它的作用是表示一个HTML标签在页面里是个什么角色;CSS样式层,它的作用是表示一块内容以什么样的样式(字体、大小、颜色、宽高等)显示;JS行为层…

【论文笔记】Language Models are Unsupervised Multitask Learners

Language Models are Unsupervised Multitask Learners 回顾一下第一代 GPT-1 : 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式;模型架构是基于 Transformer 的叠加解码器(掩码自注意力机制、残差、Layernorm…

【Unity】ABB CRB 15000 外部引导运动

一、RobotStudio控制器的文件系统和配置参数 HOME:控制器文件系统的根目录或起始点。配置:机器人控制器的配置设置和参数。外件信息:连接到机器人的外部组件的信息。I/O 系统:输入/输出系统,管理机器人和外部设备之间的…

.[[backup@waifu.club]].wis最近多发,数据库被加密了能恢复吗?

Wis勒索病毒是怎样加密文件的? WIS勒索病毒加密文件的过程主要依赖于强大的加密算法,通常是RSA或AES等对称或非对称加密算法。这些算法可以非常快速地将用户的文件加密,使得文件在没有正确密钥的情况下无法被正常读取或打开。技术服务号&…

C#与欧姆龙PLC实现CIP通讯

参考文档: 欧姆龙PLC使用-CSDN博客 CIP通讯介绍(欧姆龙PLC)-CSDN博客 使用NuGet添加引用:CIPCompolet 基础参考我的CIP协议介绍,默认TCP端口为:44818 类NXCompolet 类的功能可以在安装PLC开发软件后帮…

Mol2文件处理-拆分、合并、提取名称、计数与格式转换

欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 文章目录 前言一、Mol2文件合并二、Mol2文件拆分为含有单个分子的文件三、Mol2文件分子名称修改与提取3.1 分子名称修改去除空格3.2 文件名称提取 四、Mol2文件包含分子计数4.1 Mol2文件中分子计数4.2 分子计数传…

Pytorch学习 day03(Tensorboard、Transforms)

Tensorboard Tensorboard能够可视化loss的变化过程,便于我们查看模型的训练状态,也能查看模型当前的输入和输出结果 在Pycharm中,可以通过按住ctrl,并左键点击某个库来进入源文件查看该库的使用方法SummaryWriter是用来向log_dir…

工具函数模板题(蓝桥杯 C++ 代码 注解)

目录 一、Vector容器: 二、Queue队列 三、Map映射 四、题目(快递分拣 vector): 代码: 五、题目(CLZ银行问题 queue): 代码: 六、题目(费里的语言 map&…

通过 JS 获取和修改表单元素属性和样式属性

JS 获取和修改表单元素属性 表单(主要是指 input 标签)的以下属性都可以通过 DOM API来修改 value: input 的值checked: 复选框会使用selected: 下拉框会使用disabled: 禁用type: input 的类型(文本, 密码, 按钮, 文件等) 修改 input 的值 > value 示例1: 点击切换状态的…

【CSP试题回顾】202212-2-训练计划

CSP-202212-2-训练计划 解题思路 输入和初始化: 首先,代码从输入中获取项目的截止日期和项目数量。然后,它初始化一个项目列表,每个项目都有其依赖项、被依赖的项目集合、完成时间、总完成时间(包括依赖链&#xff09…

深度学习模型部署(番外3)神经网络不同层的量化方法

神经网络层量化 批归一化层Batch Normalization(BN层) 关于归一化的原理可以看之前的这篇blog:BatchNorm原理与应用 批归一化在推理过程中会被融合到上一层或者下一层中,这种处理方式被称为批归一化折叠。这样可以减少量化,也可以减少属于的…

EPSON RA8000CE (RTC模块)压电侠

RA8000CE是一个集成了32.768 kHz数字温度补偿晶体振荡器(DTCXO)的RTC模块。它包括各种功能,如具有闰年校正的秒到年时钟/日历,时间警报,唤醒计时器,时间更新中断,时钟输出和时间戳功能,可以在外部或内部事件…

python 蓝桥杯填空题

文章目录 字母数判断列名(进制问题)特殊日期 字母数 由于是填空题,那么寻找的话,就直接让每一个位置都是A,通过计算看看是不是结果大于2022即可 判断列名(进制问题) 这道题目,我们可以往数字进制…

基于“xxx” Androidx平台的驱动及系统开发 之 触摸板篇

目录 一、基于全志 A133 Android10平台,适配1366x768 - ilitek2511触摸1、原理图分析2、驱动移植与适配3、补丁和资源文件 二、基于瑞芯微 RK3566 Android11平台,适配GT9XX触摸1、原理图分析2、补丁及资源文件 三、遇到的问题与解决1、基于amlogic Andro…

Pytorch学习07_torchvision中数据集的使用

torchvision torchvision 是 PyTorch 生态系统中的一个用于计算机视觉任务的包,它提供了一系列用于图像和视频处理的工具和数据集。torchvision 可以帮助你加载、预处理、增强和可视化图像数据,并提供了一些经典的计算机视觉模型和预训练权重&#xff0…

计算机网络——24路由器组成

路由器组成 路由器的结构概况 高层面(非常简化的)通用路由器体系架构 路由:运行路由选择算法/协议 (RIP, OSPF, BGP) - 生成 路由表转发:从输入到输出链路交换数据报 - 根据路由表进行分组的转发 输入端口功能 分布式交换: 根…

SkyWalking链路追踪上下文TraceContext的traceId生成的实现原理剖析

结论先行 【结论】 SkyWalking通过字节码增强技术实现,结合依赖注入和控制反转思想,以SkyWalking方式将追踪身份traceId编织到链路追踪上下文TraceContext中。 是不是很有趣,很有意思!!! 【收获】 skywal…

什么是jwt

jwt是JSON Web Token,由3部分构成: 头部Header:头部包含了两部分,token 类型和采用的加密算法(可为none,后端应限制加密算法,不以这里为准)。 载荷Payload:这部分才是重要…

Linux网络隧道协议IPIP认知(基于Linux network namespace 的 IPIP 隧道通信)

写在前面 博文内容为 Linux 隧道通信 IPIP认知内容涉及:ipip 介绍,一个 ipip 通信 Demo 以及数据帧流转分析理解不足小伙伴帮忙指正 某些人和事,哪怕没有缘分,是路边的风景,可是只要看一眼,依然会让人觉得…