软考之软件工程基础理论知识

软件工程基础

软件开发方法

  • 结构化方法
    • 将整个系统的开发过程分为若干阶段,然后依次进行,前一阶段是后一阶段的工作依据按顺序完成。
    • 应用最广泛。
    • 特点是注重开发过程的整体性和全局性。
    • 缺点是开发周期长文档设计说明繁琐,工作效率低
    • 开发前要求全面获取需求和所有变更,但这不现实。
  • 原型法
    • 基于对用户需求的初步理解,先快速开发一个原型系统,然后通过反复修改来实现用户的最终系统需求。
  • 面向对象方法
    • 用对象表示客观事物,对象是一个严格模块化的实体,在系统开发中可被共享和重复引用以达到复用的目的。
    • 其特点是在整个开发过程中使用的是同一套工具。
    • 面向对象方法主要涉及分析、设计、实现三个阶段。
  • 敏捷方法
    • 以人为核心、选代、循序新进的开发方法
    • 适用于一开并没有或不能完整地确定出需求和范围的项目
    • 或者需要应对迅速变化的环境,或者需求和范围难以事先确定,或者能够以有利于干系人的方式定义较小的增量改进。

软件开发模型

瀑布模型

在这里插入图片描述

该模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行与维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水逐级下落。

优点

瀑布模型的优点容易理解,管理成本低:强调开发的阶段性早期计划及需求调查和产 品测试。

不足之处
  • 客户必须能够完整、正确和清晰地表达他们的需要
  • 在开始的两个或 3 个阶段中,很难评估真正的进度状态
  • 当接近项目结束时,出现了大量的集成和测试工作;
  • 直到项目结束之前,都不能演示系统的能力。

在瀑布模型中,需求或设计中的错误往往只有到了 项目后期才能够被发现,对于项目风险的控制能力较弱,从而导致项目常常延期完成,开发费 用超出预算。

增量模型

在这里插入图片描述

该模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一 系列增量产品,每一个增量可以分别开发。该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第一个增量往往是核心的产品。客户对每个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。

不足之处

增量模型有以下不足之处

  • 如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定
  • 如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布
  • 管理发生的成本、进度和配置的复杂性可能会超出组织的能力。
演化模型

演化模型是迭代的过程模型,使得软件开发人员能够逐步开发出更完整的软件版本。演化模型特别适用于对软件需求缺乏准确认识的情况。典型的演化模型有原型模型和螺旋模型等。

原型方法
  • 原型方法比较适合于用户需求不清、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好。原一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。当然能够采用原型方法是因为开发工具的快速发展,使得能够迅速地开发出一个让用户看得见、摸得着的系统框架。
    在这里插入图片描述
螺旋模型
  • 螺旋模型对于复杂的大型软件,开发一个原型往往达不到要求。
    • 螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。

螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,每个螺旋周期分为如下 4 个工作步骤。

  • 制订计划
    • 确定软件的目标,选定实施方案,明确项目开发的限制条件。
  • 风险分析
    • 分析所选的方案,识别风险,消除风险。
  • 实施工程
    • 实施软件开发,验证阶段性产品。
  • 用户评估
    • 评价开发工作,提出修正建议,建立下一个周期的开发计划。

在这里插入图片描述

螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,从而做 出应有的反应。因此,该模型特别适用于庞大、复杂并且具有高风险的系统。

喷泉模型

在这里插入图片描述

这是是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。喷泉模型的各个阶段没有明显的界线,开发人员可以同步进行。

其优点是可以提高软件项目的开发效率,节省开发时间。由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理。此外,这种模型要求严格管理文档,使得审核的难度加大。

(5)统一过程(UP)模型

统一过程模型是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由 UML 方法和工具支持。
迭代的意思是将整个软件开发项目划分为许多个小的“袖珍项目”,每统一过程定义了 4个技术阶段及其制品。

  • 起始阶段 (InceptionPhase)
    • 起始阶段专注于项目的初创活动
    • 产生的主要工作产品有
      • 构想文档(Vision Document)
      • 初始用例模型
      • 初始项目术语表
      • 初始业务用例
      • 初始风险评估
      • 项目计划(阶段及迭代)
      • 业条模型以及一个或多个原型(需要时)
  • 精化阶段(ElaborationPhase)
    • 该阶段在理解了最初的领域范围之后进行需求分析和架构演进
    • 产生的主要工作产品有
      • 用例模型
      • 补充需求(包括非功能需求)
      • 分析模型
      • 软件体系结构描述
      • 可执行的软件体系结构原型
      • 初步的设计模型
      • 修订的风险列表
      • 项目计划(包括迭代计划、调整的工作流、里程碑和技术工作产品)以及初始用户手册
  • 构建阶段(ConstructionPhase)
    • 构建阶段关注系统的构建产生实现模型
    • 产生的主要工作产品有
      • 设计模型
      • 软件构件
      • 集成的软件增量、测试计划及步骤
      • 测试用例以及支持文档(用户手册、安装手册和对于并发增量的描述)
  • 移交阶段 (Transition Phase)
    • 移交阶段关注于软件提交方面的工作,产生软件增量
    • 产生的主要工作产品有
      • 提交的软件增量,贝塔测试报告和综合用户反馈

题目

题目 1

某公司拟开发一个地面清洁机器人。机器人的控制者首先定义清洁任务和任务之间的关系,机器人接受任务后,需要响应外界环境中触发的一些突发事件,根据自身状态进行动态调整,最终自动完成任务。针对上述需求,该机器人应该采用( )架构风格最为合适。

A. 面向对象

B. 主程序—子程序

C. 规则系统

D. 管道—过滤器

题目 2

某公司拟开发一个语音识别系统,其语音识别的主要过程包括分割原始语音信号、识别音素、产生候选词、判定语法片断、提供语义解释等,每个过程都需要进行基于先验知识的条件判断并进行相应的识别动作。针对该系统的特点,采用( )架构风格最为合适。

A. 解释器

B. 面向对象

C. 黑板

D. 隐式调用

题目 3

某公司拟开发一个轿车巡航定速系统,系统需要持续测量车辆当前的实时速度,并根据设定的期望速度自动控制轿车的油门和刹车。针对上述需求,采用( )架构风格最为合适。

A. 解释器

B. 过程控制

C. 分层

D. 管道—过滤器

题目 4

某公司拟开发一套在线游戏系统,该系统的设计目标之一是支持用户自行定义游戏对象的属性、行为和对象之间的交互关系。为了实现上述目标,公司应该采用( )架构风格最为合适。

A. 管道—过滤器

B. 隐式调用

C. 主程序—子程序

D. 解释器

题目 5

某公司为其研发的硬件产品设计实现了一种特定的编程语言,为了方便开发者进行软件开发,公司拟开发一套针对该编程语言的集成开发环境,包括代码编辑、语法高亮、代码编译、运行调试等功能。针对上述描述,该集成开发环境应采用( )架构风格最为合适。

A. 管道—过滤器

B. 数据仓储

C. 主程序—子程序

D. 解释器

题目 6

软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和(请作答此空),并通过多种( )_全面描述特定系统的架构。

A. 实现方式

B. 交互作用

C. 设计方案

D. 测试方式

题目 7

A. 对象

B. 代码

C. 文档

D. 视图

题目 8

某公司拟开发一个 VIP 管理系统,系统需要根据不同商场活动,不定期更新 VIP 会员的审核标准和 VIP 折扣标准。针对上述需求,采用( )架构风格最为合适。

A. 规则系统

B. 过程控制

C. 分层

D. 管道-过滤器

题目 9

以下关于软件架构设计重要性的描述,()是错误的。

A. 软件架构设计能够满足系统的性能、安全性、可维护性等品质

B. 软件架构设计能够帮助项目干系人(Stakeholder)更好地理解软件结构

C. 软件架构设计能够帮助架构师更好地捕获和细化系统需求

D. 软件架构设计能够有效地管理系统的复杂性,并降低系统维护费用

题目 10

某公司拟开发一个新闻系统,该系统可根据用户的注册兴趣,向用户推送其感兴趣的新闻内容,该系统应该采用( ) 架构风格最为合适。

A. 事件驱动系统

B. 主程序-子程序

C. 黑板

D. 管道-过滤器

带解析版

题目 4

某公司拟开发一个地面清洁机器人。机器人的控制者首先定义清洁任务和任务之间的关系,机器人接受任务后,需要响应外界环境中触发的一些突发事件,根据自身状态进行动态调整,最终自动完成任务。针对上述需求,该机器人应该采用( )架构风格最为合适。

A. 面向对象

B. 主程序—子程序

C. 规则系统

D. 管道—过滤器

正确答案:正确答案: C

解析:

机器人需要根据自身状态的外界环境进行自动调整,这是一个典型的根据外部事件进行响应的场景。比较4个候选项,规则系统比较适合根据外部事件,以自身状态为基础自动进行处理和动作的场景。

题目 5

某公司拟开发一个语音识别系统,其语音识别的主要过程包括分割原始语音信号、识别音素、产生候选词、判定语法片断、提供语义解释等,每个过程都需要进行基于先验知识的条件判断并进行相应的识别动作。针对该系统的特点,采用( )架构风格最为合适。

A. 解释器

B. 面向对象

C. 黑板

D. 隐式调用

正确答案:正确答案: C

解析:

根据题目描述,语音识别系统是一个十分典型的专家系统,其特点是求解的正确结果不止一个,求解过程比较复杂,需要通过专家知识和反馈逐步得到正确结果。因此对比4个候选项,黑板结构特别适合求解这类问题。

题目 6

某公司拟开发一个轿车巡航定速系统,系统需要持续测量车辆当前的实时速度,并根据设定的期望速度自动控制轿车的油门和刹车。针对上述需求,采用( )架构风格最为合适。

A. 解释器

B. 过程控制

C. 分层

D. 管道—过滤器

正确答案:正确答案: B

解析:

根据题目描述,轿车巡航定速系统是一个十分典型的控制系统,其特点是不断采集系统当前状态,与系统中的设定状态进行对比,并通过将当前状态与设定状态进行对比从而进行控制

题目 7

某公司拟开发一套在线游戏系统,该系统的设计目标之一是支持用户自行定义游戏对象的属性、行为和对象之间的交互关系。为了实现上述目标,公司应该采用( )架构风格最为合适。

A. 管道—过滤器

B. 隐式调用

C. 主程序—子程序

D. 解释器

正确答案:正确答案: D

解析:

该软件系统特别强调用户定义系统中对象的关系和行为这一特性,这需要在软件架构层面提供一种运行时的系统行为定义与改变的能力,根据常见架构风格的特点和适用环境,可以知道最合适的架构设计风格应该是解释器风格

题目 8

某公司为其研发的硬件产品设计实现了一种特定的编程语言,为了方便开发者进行软件开发,公司拟开发一套针对该编程语言的集成开发环境,包括代码编辑、语法高亮、代码编译、运行调试等功能。针对上述描述,该集成开发环境应采用( )架构风格最为合适。

A. 管道—过滤器

B. 数据仓储

C. 主程序—子程序

D. 解释器

正确答案:正确答案: B

解析:

编程语言的集成开发环境需要提供代码编辑、语法高亮、代码编译、运行调试等功能,这些功能的特点是以软件代码为中心进行对应的编译处理与辅助操作。根据常见架构风格的特点和适用环境,可以知道最合适的架构设计风格应该是数据仓库风格。

题目 9

软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和(请作答此空),并通过多种( )_全面描述特定系统的架构。

A. 实现方式

B. 交互作用

C. 设计方案

D. 测试方式

正确答案:正确答案: B

解析:

软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和交互作用,并通过多种视图全面描述特定系统的架构。

题目 10

A. 对象

B. 代码

C. 文档

D. 视图

正确答案:正确答案: D

解析:

软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程。架构设计主要关注软件组件的结构、属性和交互作用,并通过多种视图全面描述特定系统的架构。

题目 11

某公司拟开发一个 VIP 管理系统,系统需要根据不同商场活动,不定期更新 VIP 会员的审核标准和 VIP 折扣标准。针对上述需求,采用( )架构风格最为合适。

A. 规则系统

B. 过程控制

C. 分层

D. 管道-过滤器

正确答案:正确答案: A

解析:

根据题目中描述,VIP管理系统会根据不同商场活动,不定期更新VIP会员的审核标准和折扣标准,属于典型规则系统应用场景。

题目 12

以下关于软件架构设计重要性的描述,()是错误的。

A. 软件架构设计能够满足系统的性能、安全性、可维护性等品质

B. 软件架构设计能够帮助项目干系人(Stakeholder)更好地理解软件结构

C. 软件架构设计能够帮助架构师更好地捕获和细化系统需求

D. 软件架构设计能够有效地管理系统的复杂性,并降低系统维护费用

正确答案:正确答案: C

解析:

软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。软件架构设计能够满足系统的性能、安全性、可维护性等品质;软件架构设计能够帮助项目干系人(Stakeholder)更好地理解软件结构;软件架构设计能够有效地管理系统的复杂性,并降低系统维护费用;软件架构设计对系统开发具有指导性;软件架构设计为系统复用奠定的基础;软件架构设计能够支持冲突分析。需要注意的是,软件架构设计与系统需求是直交的,两者并无必然联系。

题目 13

某公司拟开发一个新闻系统,该系统可根据用户的注册兴趣,向用户推送其感兴趣的新闻内容,该系统应该采用( ) 架构风格最为合适。

A. 事件驱动系统

B. 主程序-子程序

C. 黑板

D. 管道-过滤器

正确答案:正确答案: A

解析:

根据题目的意思,用户会注册自己的兴趣,然后系统也会把新闻按兴趣分类,如果某个新闻事件发生,可以通过事件来触发推送动作,将新闻推送给对其感兴趣的用户。这是典型的事件驱动系统应用场景。

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

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

相关文章

数据库存储引擎和锁

存储引擎: mysal当中数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制,索引技巧,锁定水平以及最终提供的不同功能和能力,这些就是我们说的存储引擎。 功能: 1、mysql将数据存储在文件系…

【LeetCode刷题-链表】--1290.二进制链表转整数

1290.二进制链表转整数 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }*…

低代码开发,一场深度的IT效率革命

目录 一、前言 二、低代码迅速流行的理由 三、稳定性和生产率的最佳实践 四、程序员用低代码开发应用有哪些益处? 1、提升开发价值 2、利于团队升级 五、总结 一、前言 尽管IT技术支撑了全球的信息化浪潮,然而困扰行业已久的软件开发效率并未像摩尔定律那…

k8s、调度约束

Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。 APIS…

【sql注入】sql关卡1~4

前言: 靶场自取 level-1 测试注入点 POC: 1,1,1,1"",1/1,1/0 》存在注入点 爆破 POC: id-1andextractvalue(1,concat(0x7e,user(),0x7e))-- level-2 尝试注入点 POC1:admin POC2:admin POC3:adminandsleep(3)-- POC4: adminandif(1,1,0)0-- POC…

按键精灵开发环境搭建

按键精灵是一个可用于编写自动化执行程序的软件,不仅可以用于PC端,也可以用于手机端,平台稳定,生态良好,开发快捷,是自动化软件开发必不可少的利器。 1. 下载软件 官网:按键精灵_按键精灵论坛…

OpenCV实战——OpenCV.js介绍

OpenCV实战——OpenCV.js介绍 0. 前言1. OpenCV.js 简介2. 网页编写3. 调用 OpenCV.js 库4. 完整代码相关链接 0. 前言 本节介绍如何使用 JavaScript 通过 OpenCV 开发计算机视觉算法。在 OpenCV.js 之前,如果想要在 Web 上执行一些计算机视觉任务,必须…

这个超实用的门禁技巧,让办公楼安全更简单高效!

门禁监控是现代社会中不可或缺的一部分,用于确保安全和管理进出某个区域的人员。随着科技的不断发展,门禁监控已经远离了传统的机械锁和钥匙,变得更加智能化和高效。 客户案例 企业办公大楼 无锡某大型企业在其办公大楼内部部署了泛地缘科技…

12.JavaScript(WebAPI) - JS api文献精解

文章目录 1.WebAPI 背景知识1.1什么是 WebAPI1.2什么是 API1.3API 参考文档 2.DOM 基本概念2.1什么是 DOM2.2DOM 树 3.获取元素3.1querySelector3.2querySelectorAll 4.事件初识4.1基本概念4.2事件三要素4.3简单示例 5.操作元素5.1获取/修改元素内容5.1.1innerText5.1.2innerHT…

tbh常用的绘图快捷键

1、Altb -> 笔刷 2、Alt/ -> 画笔 3、按住Shift 绘出的线条是直线 4、按住shiftalt 绘出来的线条是水平线或垂直线 5、alte ->橡皮擦 6、alts ->选择工具 7、altq -> 轮廓编辑器 以下操作都是在选中轮廓编辑器下操作的: 按住alt…

Linux 将Qt程序打包为AppImage包

前言 在 Linux 环境下,开发完 Qt 程序后,也需要制作为一个安装包或者可执行文件进行分发。这里介绍使用 linuxdeployqt 将 Qt 程序打包为 .AppImage 应用程序(类似于 Windows 的绿色免安装软件) 环境配置 配置 Qt 环境变量 这…

TensorFlow案例学习:简单的音频识别

前言 以下内容均来源于官方教程:简单的音频识别:识别关键字 音频识别 下载数据集 下载地址:http://storage.googleapis.com/download.tensorflow.org/data/mini_speech_commands.zip 可以直接浏览器访问下载。 下载完成后将其解压到项目…

路由器基础(九):防火墙基础

防火墙 (Fire Wall) 是网络关联的重要设备,用于控制网络之间的通信。外部网络用户的访问必须先经过安全策略过滤,而内部网络用户对外部网络的访问则无须过滤。现在的防火墙还具有隔离网络、提供代理服务、流量控制等功能。 一、三种防火墙技术 常见的…

医疗数据可视化大屏:重构医疗决策的未来

医疗行业一直是信息密集型领域之一,它的复杂性不仅在于患者病历和医疗数据的海量积累,还包括了病情诊断、医疗资源分配、病患治疗等多层次的挑战。随着信息技术的不断发展,医疗数据可视化大屏成为了一种创新性的工具,它为医疗管理…

openGauss学习笔记-113 openGauss 数据库管理-设置安全策略-设置帐户安全策略

文章目录 openGauss学习笔记-113 openGauss 数据库管理-设置安全策略-设置帐户安全策略113.1 背景信息113.2 自动锁定和解锁帐户113.2.1 配置failed_login_attempts参数113.2.2 配置password_lock_time参数 113.3 手动锁定和解锁帐户113.4 删除不再使用的帐户 openGauss学习笔记…

UI设计一定不能错过的4款常用工具

虽然设计审美很重要,但软件只是一种工具,但就像走楼梯和坐电梯到达顶层一样,电梯的效率显然更高,易于使用的设计工具也是如此。让我们了解一下UI设计的主流软件,以及如何选择合适的设计软件。 即时设计 软件介绍 即…

怎样去除视频中的杂音,保留人声部分?

怎样去除视频中的杂音,保留人声部分?这个简单嘛!两种办法可以搞定:一是进行音频降噪,把无用的杂音消除掉;二是提取人声,将要保留的人声片段提取出来。 这就将两种实用的办公都分享出来&#xf…

Ubuntu18.04 下PCL的卸载与安装

目录 一、卸载有问题的PCL1.7 二、编译&&安装PCL1.8.1 2.1、安装PCL依赖 2.2、编译VTK 2.3、编译PCL源码 三、 总结 写这篇博客时,本文方法已经在笔记本Ubuntu和VM虚拟机成功安装PCL1.8.1,并且通过测试。 下文方法同样适用于ubuntu18.04。…

java spring boot 注解、接口和问题解决方法(持续更新)

注解 RestController 是SpringMVC框架中的一个注解,它结合了Controller和ResponseBody两个注解的功能,用于标记一个类或者方法,表示该类或方法用于处理HTTP请求,并将响应的结果直接返回给客户端,而不需要进行视图渲染…

OkHttp库爬取百度云视频详细步骤

以下是使用OkHttp库的Kotlin爬虫程序,该爬虫用于爬取百度云的视频。 首先,我们需要导入OkHttp库和Kotlin库。import okhttp3.OkHttpClient和import kotlin.jvm.JVM。 import okhttp3.OkHttpClient import kotlin.jvm.JVM然后,我们需要创建一…