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

软件工程基础

软件开发方法

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

软件开发模型

瀑布模型

在这里插入图片描述

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

优点

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

不足之处
  • 客户必须能够完整、正确和清晰地表达他们的需要
  • 在开始的两个或 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.mzph.cn/news/128029.shtml

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

相关文章

Golang Gin 接口返回 Excel 文件

文章目录 1.Web 页面导出数据到文件由后台实现还是前端实现?2.Golang Excel 库选型3.后台实现示例4.xlsx 库的问题5.小结参考文献 1.Web 页面导出数据到文件由后台实现还是前端实现? Web 页面导出表数据到 Excel(或其他格式)可以…

One-to-N N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models

One-to-N & N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models----《一对N和N对一:针对深度学习模型的两种高级后门攻击》 1对N: 通过控制同一后门的不同强度触发多个后门 N对1: 只有当所有N个后门都满足时才会触发…

测试为什么分白盒、黑盒、单元、集成测试?

对于想进入测试行业的小萌新,本文的诉求主要分为三块: 1、想知道分为这么多种测试的原因 2、解决各种概念问题 3、提供各种软件测试工具 安排! 一、为什么测试的概念这么多 一个软件项目就好比一部复杂的汽车,有很多零件&#x…

Java作业二

一、使用方法编写求圆面积和周长的程序,运行时提示输入圆半径,然后输出计算结果。运行效果如下图所示: import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner input new Scanner(System.in);Syste…

pycharm更改远程服务器地址

一、问题描述 在运行一些项目时,我们常需要在pycharm中连接远程服务器,但万一远程服务器的ip发生了变化,该如何修改呢?我们在file-settings-python interpreter中找到远程服务器,但是发现ip是灰色的,没有办…

最新Ai智能创作系统源码V3.0,AI绘画系统/支持GPT联网提问/支持Prompt应用+搭建部署教程

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

docker--基本操作

第 1 章 Docker基础 1.1 docker简介 在这一部分我们主要讲两个方面: docker是什么、docker特点 1.1.1 docker是什么 docker是什么? docker的中文解释是码头工人。 官方解释: Docker是一个开源的容器引擎,它基于LCX容器技术&…

设计模式之两阶段终止模式

文章目录 1. 简介 2. 常见思路3. 代码实战 1. 简介 两阶段终止模式(Two-Phase Termination Pattern)是一种软件设计模式,用于管理线程或进程的生命周期。它包括两个阶段:第一阶段是准备阶段,该阶段用于准备线程或进程…

C++:string类!

Cstring 是C中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。 不像传统的c-strings,只是在数组中的一个字符序列,我们称之为字符数组,而C字符串对象属于一个类,这个类有很多内置的特点,在操作…

某国产中间件企业:提升研发安全能力,助力数字化建设安全发展

​某国产中间件企业是我国中间件领导者,国内领先的大安全及行业信息化解决方案提供商,为各个行业领域近万家企业客户提供先进的中间件、信息安全及行业数字化产品、解决方案及服务支撑,致力于构建安全科学的数字世界,帮助客户实现…

进程空间管理:用户态和内核态

用户态虚拟空间里面有几类数据,例如代码、全局变量、堆、栈、内存映射区等。在 struct mm_struct 里面,有下面这些变量定义了这些区域的统计信息和位置。 unsigned long mmap_base; /* base of mmap area */ unsigned long total_vm; /* Total page…

人工智能-多层感知机

隐藏层 该模型通过单个仿射变换将我们的输入直接映射到输出,然后进行softmax操作。 如果我们的标签通过仿射变换后确实与我们的输入数据相关,那么这种方法确实足够了。 但是,仿射变换中的线性是一个很强的假设。 线性模型可能会出错 例如&…

【Spring】配置文件-properties和xml

文章目录 1. 前言2. properties配置文件3. xml配置文件4. 总结 1. 前言 在Spring中,配置文件有两种,properties配置文件和xml配置文件 properties配置文件,在Java编程中是一种常见的配置文件形式,文件后缀为“.properties”,属于文本文件。它…

十分钟设置免费海外远程桌面 | 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面

目录 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 1. 启动Amazon Lightsail实例 2. 配置远程桌面 3. 启动远程桌面 4. 使用远程桌面 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 前言 ①本教程将向您介绍如何使用Amazon Lightsail服务的免费套餐轻松搭…

知心早安问候语,愿你享受美好的时光,幸福快乐每一天

人生万里路,走好每一步,身体是本钱,平安是财富,开心就是护身符,健康才是摇钱树。新的一天,事事顺意! 晨起福门开,快乐安康在,愉悦心态好,生活充满爱&#xf…

DeepXDE学习笔记【1】——简单ODE方程求解

DeepXDE学习笔记【1】——简单ODE方程求解 1、背景 物理信息神经网络(PINN)自从2017年被提出,其应用范围在近两年也被挖掘的越来越广泛,除了可以解决物理方面的问题,信号处理、工程评估等等方向也开始有所涉及,所谓“物理数据双…

【软考】14.3 设计模式

《设计模式》 有下划线:类模式 / 对象模式无下划线:对象模式 创建型 设计模式 创建对象 构建器(Builder):类和构造分离抽象工厂(Abstract Factory):抽象接口工厂(Factor…

MongoDB系例全教程

一、系列文章目录 一、MongoDB安装教程—官方原版 二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控 三、MongoDB 基于角色的访问控制 四、MongoDB用户管理 五、MongoDB基础知识详解 六、MongoDB—Indexs 七、MongoDB事务详解 八、MongoDB分片教程 九、Mo…

如何在MacOS使用homebrew安装Nginx

文章目录 Homebrew安装nginxbrew启动Nginxbrew关闭Nginx 参考文章地址 Homebrew安装nginx 在确保MacOS 安装Homebrew成功以后,执行如下命令 brew install nginx注意:Nginx安装成功后会提示目录位置;每个人的系统可能因为Homebrew的安装位置…

【Linux学习笔记】进程概念(下)

进程地址空间1. 虚拟地址2. 什么是进程地址空间3. 进程地址空间的映射。4. 地址空间存在的意义5. 写时拷贝 进程地址空间 1. 虚拟地址 来看这样一段代码。 #include <stdio.h> #include <unistd.h>int global_value 100;int main() {pid_t id fork();if(id &l…