前言 本文记录软件工程与UML考试复习资料.

总纲

题型与分值

  • 选择题 15*1 分 = 15 分
  • 判断题 10*1 分 = 10 分
  • 填空题 15*1 分 = 15 分
  • 简答题 6*5 分 = 30 分
  • 设计题 1*12 分 = 12 分
  • 综合题 1*18 分 = 18 分

选择题

大家根据课件里面的内容以及课件上的习题来复习。如果时间有够的话,课件完整过一遍,如果时间不够的话,那就把课件上面的练习题看一下。课件上面的练习题如果会做了,那么考试的选择题和判断题是没有问题的,尽管没有原题。

课件原题如下

SE1.1 程序及质量保证方法

1.【2022计算机统考408】 将高级语言源程序转换为可执行目标文件的主要过程是( )。

  • A 预处理 → 编译 → 汇编 → 链接
  • B 预处理 → 汇编 → 编译 → 链接
  • C 预处理 → 编译 → 链接 → 汇编
  • D 预处理 → 汇编 → 链接 → 编译
正确答案:A

解析
预处理:处理源代码中的预处理指令,如#include(文件包含)、#define(宏定义)等。
编译:将预处理后的源代码翻译成汇编语言代码,输出是汇编语言文件。
汇编:将汇编语言代码翻译成机器指令,生成可重定位目标文件。
链接:将一个或多个目标文件以及所需的库文件合并在一起,解析外部引用,生成一个可执行目标文件 (如Windows下的.exe文件)。
  1. 关于模块化设计中的“高内聚、低耦合”原则,下列说法正确的是( )。
  • A 高内聚是指模块间接口尽可能简单
  • B 低耦合是指模块内部元素联系紧密
  • C 高内聚有利于模块的复用和维护
  • D 低耦合会导致系统性能下降
答案:C
解析: 高内聚指模块内部元素关联紧密,功能单一,有利于复用和维护;低耦合指模块间依赖关系弱,接口简单,有利于系统扩展和修改。A、B选项混淆了概念,D选项错误,低耦合通常有利于系统维护和扩展,不一定导致性能下降。

SE1.2 软件及其特点

  1. 软件生命周期中,主要任务是“确定软件必须做什么”的阶段是( )。
  • A 软件设计
  • B 编码实现
  • C 需求分析
  • D 运行维护
答案:C
解析: 本题考查软件生命周期各阶段的核心任务。课件中的生命周期图清晰地标明了“What:软件需求是什么”的阶段,即需求分析。该阶段的核心任务是准确理解用户的需要,定义系统的功能、性能和约束,解决“做什么”的问题。
  1. 下列软件中,属于系统软件的是()。 I. MySQL数据库管理系统 II. 微信 III. 华为OpenHarmony操作系统 IV. Eclipse IDE
  • A I、II
  • B I、III
  • C II、IV
  • D III、IV
答案:B 

解析: 
I. MySQL:是数据库管理系统(DBMS),是典型的系统软件。
II. 微信:是面向特定领域(社交)的应用软件。
III. OpenHarmony:是操作系统,是系统软件的核心。
IV. Eclipse:是辅助软件开发的工具,属于支撑软件。

SE2 软件工程概述

  1. 以下关于软件工程三要素的描述中,错误的是()。
  • A “过程”要素定义了工作的步骤和次序,从管理的视角指导“做什么”和“何时做”
  • B “方法”要素提供了技术手段,从技术的视角解决“如何做”的问题
  • C “工具”要素为过程和方法提供自动化的支持,旨在替代开发人员的手工劳动
  • D 过程、方法和工具三者相互独立,又相互联系,共同构成软件工程的学科框架
答案:C
解析: 本题考查对三要素内涵及其关系的深入理解。
A和B选项准确描述了“过程”和“方法”要素的核心思想。
C选项是错误的。工具的目的是“辅助”或“支持”开发过程,提高效率和质量,而不是“替代”开发人员的智慧和创造性劳动。课件中强调工具是“辅助软件开发”、“提高效率”、“简化任务”。
D选项正确描述了三者之间辩证统一的关系。
  1. “在绘制软件架构图时,我们只关心组件之间的交互关系,而不关心每个组件内部是用什么编程语言实现的。” 这句话描述的是( )原则的应用。
  • A 分而治之
  • B 抽象
  • C 模块化
  • D 信息隐藏
答案:B

解析:
抽象的核心思想是忽略与当前目标无关的细节,只关注与当前目标相关的方面。在架构设计层面,关心的是组件和交互,而忽略语言实现细节,这正是“抽象”原则的典型体现。

其他原则:
A. 分而治之:强调分解复杂问题,与“忽略细节”的侧重点不同。
C. 模块化:是抽象的结果之一,但题干强调的是“思考过程”(忽略什么,关心什么),这是抽象的本质。
D. 信息隐藏:是一种具体的设计技术,是实现抽象的一种手段,但题干描述更偏向于概念层面的“抽象”。
  1. 某个需求变更导致需要修改数据库表结构时,开发人员需要评估这一修改会影响哪些业务逻辑模块、哪些界面显示单元,以及是否需要同步修改相关的API文档。这一做法最直接地体现了( )原则。
  • A 软件重用
  • B 双向追踪
  • C 工具辅助
  • D 抽象和建模
答案:B
解析:
双向追踪原则强调追踪软件制品之间的关联关系。当某一制品(如数据模型)发生变化时,需要进行正向追踪(会影响哪些其他制品),以评估变更影响范围,确保一致性。题干描述的场景正是这一原则的典型应用。

A. 软件重用:强调使用已有组件,与题意无关。
C. 工具辅助:虽然可以使用工具来辅助实现追踪,但题干强调的是“做法”背后的“原则”,而非工具本身。
D. 抽象和建模:是创建这些制品的基础,但题干焦点不在“创建”而在“变更与追踪”。

SE3.1 软件过程模型

  1. 瀑布模型最突出的缺点之一是( )。
  • A 开发活动之间缺乏明确的顺序关系
  • B 难以应对软件开发过程中需求的变化
  • C 无法生成高质量的软件文档
  • D 需要开发人员具备很高的编程技能
答案:B
解析: 本题考查对瀑布模型本质缺点的理解。

瀑布模型要求每一阶段的活动必须在前一阶段活动完成后才能开始,阶段间具有严格的顺序性和依赖性。这种线性顺序模型假设需求在早期就能被完全、精确地定义,且不会发生变化。然而,现实中的软件需求往往具有易变、多变的特点,一旦后期需求发生变化,在瀑布模型下进行修改将非常困难且代价高昂,这正是其最受诟病的缺点。

A、C、D选项的描述均不是瀑布模型的主要缺点。
  1. 与瀑布模型相比,增量模型和迭代模型共同的优点是( )。
  • A 完全避免了编写详细设计文档的需要
  • B 在开发早期就能得到部分可运行的软件功能
  • C 彻底消除了软件开发中的所有风险
  • D 保证第一次增量或迭代就能交付最终产品
答案:B
解析: 本题考查对增量/迭代模型核心价值的理解。无论是增量模型的“分块实现”还是迭代模型的“循环求精”,它们都打破了瀑布模型的线性顺序,通过将系统功能分批次地分析、设计、实现和测试,使得在项目早期就能让用户看到或用到部分成果。这有助于尽早获得反馈,降低项目风险。

A选项错误,它们仍需要设计,只是文档的侧重点和形式可能不同;C选项过于绝对,风险只能被降低而非消除;D选项错误,增量/迭代模型正是通过多次交付来逐步完成整个产品。
  1. 与增量模型相比,迭代模型更强调( )。
  • A 每个增量都必须是一个功能完整、可交付的产品子集。
  • B 每次迭代都可能对之前迭代所完成的功能进行重构和深化。
  • C 必须首先完成所有需求的概要设计。
  • D 增量的划分必须严格按照功能模块进行。
答案:B
解析: 本题考察增量与迭代的微妙区别。这是软件工程中的经典辨析点。
增量开发:侧重于分块构建,每个增量增加一块新的、完整的功能,通常假设需求架构稳定。
迭代开发:侧重于循环求精,每次迭代都走过一个完整的开发周期,不仅可能增加新功能,更重要的可能在于对已有功能的重新理解、修改甚至重构,从而使系统整体认知和质量逐步深化。

因此,B选项是迭代模型更强调的特点。A选项是增量模型的特点。C和D选项不是两者的本质区别。
  1. 关于瀑布模型与原型模型的主要区别,以下描述最准确的是( )。
  • A 瀑布模型不编写代码,而原型模型需要编写代码。
  • B 瀑布模型适用于大型项目,而原型模型只适用于小型项目。
  • C 瀑布模型假设需求在早期即可固定,而原型模型承认需求的模糊性和易变性,并通过快速反馈来澄清需求。
  • D 瀑布模型的管理成本更低,而原型模型的管理成本更高。
答案:C
解析: 本题考察对两种模型根本区别的理解。瀑布模型是文档驱动和计划驱动的,其基石是“需求早期确定”;而原型模型是反馈驱动的,其出发点正是承认“需求难导出、不易确定”,需要通过原型作为沟通媒介来逐步明确需求。这是两者最本质的差异。
A选项错误,两者都涉及编码(原型也要实现);B选项错误,模型选择主要基于项目特征(如需求明确性)而非单纯的项目规模;D选项不是本质区别,且不一定成立。
  1. 螺旋模型区别于其他过程模型的一个最显著特征是( )。
  • A 包含了编码和测试活动
  • B 活动是按阶段顺序进行的
  • C 明确地将风险分析作为每个循环的核心环节
  • D 支持用户界面的快速原型开发
答案:C
解析: 本题考查对螺旋模型独特性的把握。螺旋模型结合了迭代开发和原型方法的优点,但其最根本的特征是风险驱动。它在每个迭代循环中都明确设置了“风险分析”这一关键任务,通过识别、分析和应对项目风险(如技术风险、需求风险)来决定项目是否继续、如何继续。这是它与其他模型(如单纯的迭代模型或原型模型)最本质的区别。

A、B选项是许多模型共有的,D选项是原型模型的典型特征。
  1. 某团队承接一个银行核心交易系统的升级项目。该系统需求明确、稳定,对可靠性、安全性要求极高,且受到严格的行业法规约束。在这种情况下,最适合采用的软件过程模型是( )。
  • A 原型模型
  • B 迭代模型
  • C 瀑布模型
  • D 敏捷开发模型
答案:C
解析: 本题考查根据项目特征选择模型的能力。题干中的关键词“需求明确、稳定”、“可靠性、安全性要求极高”、“严格法规约束”都指向了需求变更成本极高、需要严格流程和控制的项目类型。瀑布模型因其文档齐全、阶段清晰、过程可控的特点,非常适合这类对质量保证和过程追溯有严苛要求的项目。

原型和迭代模型更适用于需求不明确的探索性项目,敏捷模型则强调响应变化,可能与严格的法规约束存在冲突。

7.一个项目旨在为一家初创公司开发一款新的移动应用,该应用的核心功能概念新颖,但详细需求在项目开始时非常模糊,且预计在市场测试后会有较大变动。为该项目选择以下哪种过程模型最为合适?( )

  • A 瀑布模型
  • B 增量模型
  • C 原型模型或迭代模型
  • D 任何模型都可以,没有区别
答案:C
解析: 本题考查根据项目特点选择合适过程模型的能力。题干描述的项目具有需求不明确、易变动的典型特征。
A. 瀑布模型:要求需求明确且稳定,完全不适用。
B. 增量模型:前提是总体需求清晰,只是分块实现,但本题是总体需求都不清。
C. 原型模型或迭代模型:原型模型非常适合通过快速构建原型来澄清和细化需求;迭代模型允许通过一系列迭代循环来逐步明确和实现需求,都能很好地应对需求不确定性。因此C是最佳选择。
D. 显然错误。

SE3.2 敏捷开发方法

  1. 以下哪一项( )最准确地体现了敏捷开发方法的核心价值观,并以此区别于传统的“以文档为中心”的重型方法?
  • A 强调在项目初期制定详尽且不可更改的计划。
  • B 将可运行的软件视为衡量进展的主要指标。
  • C 要求所有沟通都必须有正式的书面记录以备追溯。
  • D 认为严格的流程和工具是项目成功的保证。
答案:B
解析: 本题考查对敏捷核心价值观的把握。敏捷宣言的首要原则就是“个体和互动高于流程和工具”、“可工作的软件高于详尽的文档”。选项B直接对应“可工作的软件”这一核心价值观,是敏捷方法区别于传统重型方法(强调文档、计划、流程)的最显著标志。

A、C、D选项描述的都是传统重型方法的典型特征,与敏捷思想背道而驰。
  1. 在极限编程的实践中,“结对编程”这一技术最主要的目标是( )。
  • A 将开发团队的人员数量减少一半以节省成本。
  • B 通过实时的代码审查和知识共享,持续提升代码质量并促进团队学习。
  • C 让一名资深程序员完全主导编码,另一名初级程序员仅负责观察和学习。
  • D 为了在单位时间内编写出两倍数量的代码。
答案:B
解析: 本题考查对特定敏捷实践目的的理解。结对编程的核心价值不在于提高瞬时编码速度或节省成本,而在于通过持续的、实时的协作来改善代码设计、减少缺陷(相当于实时代码评审)、并在团队成员间无缝传递知识和技术,从而在长期内提高整体代码质量和团队能力。

A和D是对结对编程经济效益的常见误解。C描述了一种不平等的、非协作的状态,不符合结对编程倡导的平等、协作精神。
  1. 测试驱动开发的核心工作流程是( )。
  • A 编写大量代码 -> 然后设计测试用例来验证这些代码 -> 运行测试。
  • B 先编写程序代码实现功能 -> 再编写测试代码以确保功能正确 -> 最后重构。
  • C 先为一个小功能编写一个失败的测试 -> 编写最简单的代码使测试通过 -> 重构代码以优化设计。
  • D 由专门的测试团队在开发完成后独立设计并执行所有测试。
答案:C
解析: 本题考查对TDD经典“红-绿-重构”循环的准确记忆。TDD的本质是通过测试来驱动设计和开发。其标准流程严格遵循:1. 红:编写一个必定会失败的测试(定义需求);2. 绿:用最简单的方式编写代码,只求让测试通过(满足需求);3. 重构:在测试保护下,优化代码结构,消除重复,提升设计质量。A和B选项颠倒了编码与测试的顺序,是传统开发方式。D选项描述的是独立的测试活动,与TDD无关。
  1. Scrum方法中的“Sprint”活动(冲刺)最直接地体现了以下哪项敏捷原则?( )
  • A 可持续的开发节奏。
  • B 欢迎需求变化,即使是在开发后期。
  • C 定期反思如何能提高效能,并据以调整自身行为。
  • D 以简短的时间周期(如几周)持续地交付可工作的软件。
答案:D
解析: 本题考查将具体实践与敏捷原则关联的能力。Scrum的核心实践“Sprint”是一个固定时长(通常1-4周)的迭代,其目标就是在每个Sprint结束时产生一个潜在可发布的、增量式的产品功能。这直接、具体地体现了敏捷宣言中“经常地交付可工作的软件,交付的间隔可以从几星期到几个月,倾向于采取更短的时间周期”这一原则。

A(可持续节奏)和C(定期反思)也是Scrum的原则,但“Sprint”活动本身最直接体现的是“短期交付”。B原则更多由产品待办列表的更新机制来体现。
  1. 与传统瀑布模型相比,敏捷开发方法更适用于以下哪种类型的项目?( )
  • A 需求在项目初期就被完整、清晰地定义,且在整个开发周期内预期不会发生变化。
  • B 项目受到严格的外部法规约束,需要产生大量审计追踪文档。
  • C 项目目标探索性强,需求模糊且可能在开发过程中频繁变化,需要快速响应用户反馈。
  • D 开发团队规模庞大且地理位置分散,主要依靠文档进行异步沟通。
答案:C
解析: 本题考查根据项目特征选择开发方法的能力。敏捷方法诞生的初衷就是为了应对需求不确定、易变化的环境。其迭代、增量、强调客户协作和响应变化的特点,非常适合选项C所描述的场景。而A选项描述的场景正是瀑布模型的理想适用情况。B和D选项描述的环境(强文档要求、大型分布式团队)会给纯敏捷实践带来挑战,通常需要混合方法或重型方法。

SE3.3 群体化软件开发方法

  1. 在典型的开源软件社区中,关于“核心开发人员”与“外围开发人员”的职责,以下说法正确的是( )。
  • A 核心开发人员负责提出大部分新功能需求和Bug报告。
  • B 外围开发人员拥有直接将代码合并到主分支(master)的权限。
  • C 核心开发人员主要负责评审外围开发人员提交的代码,并决定是否将其合并到主仓库。
  • D 外围开发人员的任务是强制指派的,必须完成
答案:C

解析: 本题考查对开源社区角色分工的理解。核心开发人员是项目的守护者,负责评审代码、管理合并;而外围开发人员是广泛的贡献者,自发地提出Issue、提交代码。

A选项描述的任务更多由外围人员完成;B选项错误,直接合并主分支通常是核心人员的权限;D选项错误,群体化开发强调“自愿”而非“强制指派”。

SE3.4 Git介绍及使用

无选择题

SE4 软件需求分析基础

  1. 在“空巢老人看护系统”中,“系统应能检测老人是否摔倒”和“对机器人的控制应在2秒内响应”分别属于( )。
  • A 都是功能性需求
  • B 都是质量需求
  • C 前者是功能性需求,后者是质量需求
  • D 前者是质量需求,后者是功能性需求
答案:C,本题考查对软件需求基本分类的准确理解。

功能性需求 指系统“做什么”,即系统必须执行的功能或行为。“检测老人是否摔倒”描述了系统需要具备的一项具体功能,属于功能性需求。

质量需求(或称非功能性需求)指系统“做到什么程度”,是系统在运行时可被观察到的行为表现。“2秒内响应”是对系统性能的要求,属于质量需求。
因此,C选项正确。
  1. 软件需求具有“多源性”的特点。这一特点最直接可能导致以下哪个问题?( )
  • A 用户对软件的期望和要求会经常性地发生变化。
  • B 不同的利益相关方提出的需求可能存在冲突和不一致。
  • C 需求隐晦地存在于利益相关方的潜意识中,难以表达。
  • D 需求的内涵与软件所在领域的专业知识强相关。

答案:B,解析: 本题考查对需求特性所引发问题的理解。

多源性 指需求来源于多个不同的利益相关方(如用户、客户、开发者等)。由于不同角色的立场、目标和背景知识不同,他们提出的需求自然可能存在冲突和不一致。这正是“多源性”带来的直接挑战。

A选项对应的是“易变性”;C选项对应的是“隐晦性”;D选项对应的是“领域知识的相关性”。
  1. 以下哪一项是评价软件需求质量的核心要求,意味着“需求描述应该是清晰和准确的,不会让人产生不同的理解”?( )
  • A 完整 (Complete)
  • B 一致 (Consistent)
  • C 无二义 (Unambiguous)
  • D 可验证 (Verifiable)
答案:C,本题考查对需求质量属性的识记与区分。

无二义性 直接要求需求的表述必须清晰、准确,避免模糊和歧义,确保所有阅读者都能得到唯一、一致的理解。

A选项“完整”强调没有遗漏;B选项“一致”强调需求间不冲突;D选项“可验证”强调需求能否通过测试等方式被检验。
  1. 在面向对象需求分析中,“多态”(Polymorphism)机制允许( )。
  • A 子类继承父类的所有属性和操作。
  • B 一个对象由多个其他对象作为其组成部分。
  • C 一个子类拥有多个父类。
  • D 相同名称的操作在不同的类中可以有不同的具体实现。
答案:D, 本题考查对面向对象核心概念“多态”的精准把握。

多态 的核心是“同一接口,多种实现”。它允许在继承层次结构中,父类定义的同一个操作(或方法)在子类中有不同的具体实现。当消息发送给对象时,系统能自动选择正确的实现。

A选项描述的是“继承”的基本特性;B选项描述的是“聚合/组合”关系;C选项描述的是“多重继承”。
  1. UML(统一建模语言)在需求工程阶段的主要作用是( )。
  • A 直接生成可执行的程序代码。
  • B 作为项目管理和进度跟踪的工具。
  • C 对软件系统进行可视化建模,以支持不同人员之间的交流和对需求的理解。
  • D 替代自然语言,成为编写软件需求文档的唯一形式。
答案:C,本题考查对UML在需求工程中核心价值的理解。

UML是一种图形化建模语言,其首要目的是为了可视化地描述系统,从而促进开发人员、客户、用户等不同角色之间的沟通和交流,共同理解需求。这是它在需求分析阶段最重要的作用。

A选项是部分CASE工具可能具备的高级功能,并非UML的核心目的;B选项不是UML的主要功能;D选项错误,UML模型通常与自然语言描述相辅相成,而非替代关系。

SE5 获取软件需求

  1. 某团队开发一个“智能校园食堂”系统。在需求收集阶段,收到了以下诉求:
  • ① 学生代表提出,希望能通过手机APP实时查看每个窗口的排队人数。
  • ② 食堂经理要求,系统必须能自动生成每日的菜品销售报表,以优化采购。
  • ③ 学校后勤处规定,系统必须使用学校统一身份认证系统进行登录。
  • ④ 投资方建议,未来可以加入根据学生健康数据推荐菜品的功能。
  • ⑤ 一名开发人员认为,应该采用最新的微服务架构,以便后期维护。

根据课件中关于“软件利益相关方”和“合法软件需求”的论述,上述诉求中最应该被优先考虑并纳入初步需求范围的是?

A ①、②、③ B ①、②、⑤ C ②、③、④ D ③、④、⑤

答案:A
解析:①和②直接来自核心利益相关方(学生和食堂经理),解决了明确的业务问题(减少排队时间、优化运营),符合“有意义、有价值”的需求标准。
③是来自重要利益相关方(学校后勤处)的约束性要求,必须遵守。④(投资方建议)属于未来规划,在初步需求阶段优先级不高。⑤(开发人员技术选型)属于解决方案的设计决策,而非源自业务问题或外部利益相关方的“需求”本身。课件强调“并非软件利益相关方提出的每项期望和要求都是软件需求”,需求工程师需要鉴别真正有价值的需求。
  1. 为一个大型医院开发新的“门诊流程优化系统”,目标是减少患者无效移动和等待时间。需求工程师小张发现,现有的门诊流程涉及分诊台、医生、药房、收费处等多个角色,且流程复杂,有些隐性规则甚至医护人员自己也难以清晰描述。此时,为了最有效地获取原始、准确的一手需求,小张应该首选哪种需求获取方法?
  • A 设计详细的调查问卷,发放给所有医护人员。
  • B 分别访谈医院的院长和各科室主任。
  • C 直接构造一个可运行的系统原型,请医护人员试用。
  • D 花费数天时间在现场观摩各个岗位的实际工作流程。
答案:D
解析:课件中“现场观摩”方法适用于了解“业务过程、步骤和输出”及“业务工作流程及细节”。在该情境中,流程复杂且存在难以言表的隐性知识,现场观摩能够最直接、客观地捕获到实际操作中的细节和问题,这是其他方法无法替代的。

A(调查问卷)难以捕捉复杂的、动态的流程细节。
B(访谈领导)无法获取一线操作人员的真实情况。
C(软件原型)在需求很不明确时盲目构建,效率低下且可能误导方向。
  1. 在“智慧城市交通信号灯协调系统”的需求文档中,列出了以下要求:
  • R1:系统应能根据实时车流量,动态调整信号灯的红绿灯时长。
  • R2:在路口网络通信中断的情况下,单个路口的信号灯控制器应能依靠本地逻辑维持基本运行至少48小时。
  • R3:系统后台管理界面的响应时间应在3秒以内。
  • R4:信号灯控制算法的源代码必须用C语言编写,以便部署到现有的硬件设备上。

根据课件对非功能性需求的分类,上述要求中属于质量要求的是?

A.R1,R2 B.R2,R3 C.R3,R4 D.R1,R4

答案:B
解析:
质量要求:关注软件运行的品质。
R2(通信中断后维持运行)体现了可靠性。
R3(响应时间)体现了性能。

其他分类:
R1(动态调整时长)是系统的核心功能性需求,描述了系统“做什么”。
R4(必须用C语言)是约束性要求,是对开发过程的技术限制。
  1. 在“在线考试系统”的用例建模中,需求工程师识别出以下行为:“参加考试”用例必须包括“用户身份验证”这一步骤;同时,“参加考试”过程中,如果考生遇到系统崩溃等异常情况,可以触发“申请异常重考”的流程。根据UML用例图关系,以下建模方案最合理的是?
  • A “参加考试”用例包含“用户身份验证”用例,“申请异常重考”用例扩展“参加考试”用例。
  • B “参加考试”用例包含“用户身份验证”和“申请异常重考”两个用例。
  • C “申请异常重考”用例包含“参加考试”用例,“参加考试”用例包含“用户身份验证”用例。
  • D “参加考试”用例扩展“用户身份验证”用例,并包含“申请异常重考”用例。
答案:A
解析:包含关系:用于表示一个用例(参加考试)必须执行另一个用例(用户身份验证)的功能。身份验证是参加考试不可或缺的子功能。
扩展关系:用于表示一个用例(申请异常重考)在特定条件(系统崩溃)下,可以选择性地扩展另一个用例(参加考试)的行为。异常重考不是每次参加考试都会发生的,是对主流程的扩展。

课件中明确指出了包含和扩展的区别:包含是子功能,必须执行;扩展是附加动作,在特定点插入。
  1. 在某项目的初步需求文档中,对“商品搜索”功能有如下描述:“用户应能方便地搜索到他们想要的商品。”在需求评审会上,大家指出了该描述的诸多问题。根据课件内容,以下哪一项不属于该描述存在的典型缺陷?
  • A 不具体:没有说明“方便地”具体指什么,比如是支持关键词、分类过滤还是模糊搜索。
  • B 不准确:没有界定“商品”的范围,是否包括下架商品或待审核商品。
  • C 技术不可行:以目前的技术,无法实现商品搜索功能。
  • D 有二义性:不同人员对“想要的商品”可能有不同理解,比如是基于历史记录推荐还是用户主动搜索。
答案:C
解析:课件在“自然语言描述的不足”中明确指出了“不具体”、“不准确”、“有二义”是该描述方式的典型问题。选项A、B、D准确地对应了这些缺陷。

选项C“技术不可行”属于“可行性分析”范畴。单从这句描述本身,无法得出技术不可行的结论。该描述的核心问题在于其质量(模糊、不明确),而非可行性。

6.一个创业团队计划开发一款“AR实景翻译眼镜”,用户戴上后能看到真实世界中外语标识的实时翻译。在立项前的可行性分析中,团队评估了以下因素:

  • ① 现有的AR显示和图像识别技术能否支持长时间、高精度的实时翻译。
  • ② 产品的目标售价能否被主流消费者接受,预计市场份额有多少。
  • ③ 开发这样一款硬件集成度高的产品,团队现有的资金能否支撑到量产。
  • ④ 该产品是否会涉及侵犯个人隐私(如持续摄像)等法律风险。

以上评估因素,分别主要对应了可行性分析中的哪几个方面?

  • A ①技术可行性 ②商业可行性 ③成本可行性 ④社会可行性
  • B ①技术可行性 ②成本可行性 ③进度可行性 ④商业可行性
  • C ①设备可行性 ②商业可行性 ③成本可行性 ④技术可行性
  • D ①社会可行性 ②商业可行性 ③进度可行性 ④成本可行性
答案:A
解析:
① 询问“技术是否支持”,属于技术可行性。
② 询问“市场接受度和份额”,属于商业可行性。
③ 询问“资金是否足够”,属于成本可行性。
④ 询问“法律和隐私风险”,属于社会可行性(课件中提及需评估是否“违背社会道德、文化伦理、法律法规”)。
  1. 软件需求工程是一个系统的过程。关于该过程,以下描述正确的是?
  • A 一旦通过“软件原型”获取并确认了需求,后续就完全不能更改,以保证开发进度。
  • B “用例图”作为一种可视化建模工具,既能描述系统的功能性需求,也能详细规定性能指标等非功能性需求。
  • C “确认和验证初步软件需求”活动包括评审需求的完整性、一致性、可行性等,以确保需求基础的质量。
  • D 软件需求全部都应来自于最终用户,开发团队不应加入任何自己的想法,以免偏离用户真实意图。
答案:C
解析:
C正确:课件第5部分详细说明了评审初步软件需求的多个方面,包括中肯性、完整性、一致性、必要性、溯源性、准确性、正确性等,其核心目的就是确保需求基础的质量,这是需求工程中的关键环节。
A错误:需求在整个生命周期中都可能发生变化,原型本身就是为了应对需求不确定性而采用的方法。需求需要管理,而非冻结。
B错误:用例图主要用于描述系统的功能边界和功能性需求。对于非功能性需求(如性能指标),通常需要用自然语言、补充规约或在用例中附加说明来描述。
D错误:课件在1.1节明确指出,“许多软件系统的需求来自软件工程师”,特别是在找不到实际用户或进行技术创新时。开发团队可以充当利益相关方,提出有价值的创意。

SE6 分析软件需求

  1. 某项目团队拿到了一份由客户提供的初步需求列表,内容较为模糊,存在诸如“系统应该用户友好”等描述。团队接下来需要开展软件需求分析工作。以下关于该阶段任务的描述中,不正确的是?
  • A 需要将“用户友好”这类模糊需求具体化为可验证的指标,如“新手用户能在10分钟内完成首次登录和基本设置”。
  • B 需要分析不同需求之间的依赖关系,例如“生成报表”功能依赖于“数据查询”功能。
  • C 需要根据用户价值和业务目标,确定哪些需求应在首次迭代中优先实现。
  • D 需要完成所有核心模块的详细算法设计,以确保后续开发工作有据可依。
答案:D

解析:软件需求分析的核心是“做什么”(What),而不是“怎么做”(How)。选项A是需求精化的典型活动;选项B是分析需求间关系;选项C是确定优先级。而选项D中的“详细算法设计”属于系统设计阶段的任务,超出了需求分析的范围。
  1. 在为一个“智能家居控制系统”进行需求建模时,开发团队需要从不同视角描述系统。现在需要描述“用户通过手机App下达指令后,系统内部各个组件(如网关、设备控制器、具体设备)之间是如何协作来完成‘打开卧室灯光’这个功能的”。在这种情况下,最应该使用以下哪种UML图?
  • A 用例图 (Use Case Diagram)
  • B 类图 (Class Diagram)
  • C 顺序图 (Sequence Diagram)
  • D 状态图 (State Diagram)

答案:C

解析:题目描述的核心是“对象间的交互序列”和“时间顺序”,这正是顺序图的典型应用场景。用例图用于描述系统与外部执行者的功能交互(是什么功能);类图用于描述系统的静态结构(有哪些类);状态图用于描述单个对象的状态变迁(对象如何变化)。
  1. 在绘制一个“在线书店系统”的分析类图时,以下关于类间关系的描述,正确的是?
  • A Order(订单)类和OrderLineItem(订单项)类之间应是聚合关系,因为订单项可以脱离订单独立存在。
  • B Customer(顾客)类和Address(地址)类之间应是组合关系,因为一个顾客可以有多个地址(如家庭地址、办公地址),并且当顾客账户注销时,这些地址信息通常需要保留以供物流分析。
  • C PaymentProcessor(支付处理器)类和CreditCardPayment(信用卡支付)类之间应是继承关系,因为信用卡支付是支付的一种具体方式。
  • D ShoppingCart(购物车)类需要使用Product(产品)类的信息来添加商品,因此它们之间最好用依赖关系表示。
答案:D

解析:选项A错误,订单项不能脱离订单存在,应是更强的组合关系。选项B错误,顾客和地址是“拥有”关系,但地址的生命周期不依赖于顾客,应是聚合关系。选项C错误,支付处理器是一个控制类,它“使用”具体的支付方式,更可能是依赖或关联关系,而非继承。继承是“is-a”关系。选项D正确,一个类临时使用另一个类的服务,用依赖关系表示是合适的。
  1. 你正在负责一个“在线文档协作编辑系统”的第一个版本开发。团队收集了众多需求,现在需要确定优先级。根据MoSCoW优先级排序法,以下哪一项需求最有可能被归类为“MUST have”(必须有)?
  • A 支持文档实时预览(用户在编辑Markdown时能同步看到渲染后的效果)。
  • B 支持超过100人同时在线编辑同一篇文档。
  • C 允许用户创建文档并输入文本内容。
  • D 集成AI助手,能够根据用户指令自动生成和修改文档内容。

答案:C

解析:MoSCoW方法中,M代表“必须有”,是项目的底线需求,如果缺少则产品不可用。选项C“创建文档并输入文本”是一个文档协作系统最核心、最基本的功能。选项A和B是重要的体验和性能需求,但在第一个版本中可能属于“SHOULD have”。选项D是增强功能,属于“COULD have”或“WISH”。
  1. 在分析“用户登录”用例时,有以下分析类:LoginScreen(登录界面,负责接收用户输入)、LoginController(登录控制器,负责协调登录流程)、User(用户,代表系统用户信息)、AuthenticationService(认证服务,负责验证密码)。在绘制的顺序图中,LoginScreen对象向LoginController对象发送了一条消息login(username, password)。根据分析类建模的原则,以下哪项是最合理的后续步骤?
  • A 在AuthenticationService类中定义一个login操作,其职责是“协调登录流程”。
  • B 在User类中定义一个login操作,其职责是“用户执行登录行为”。
  • C 在LoginScreen类中定义一个login操作,其职责是“显示登录界面”。
  • D 在LoginController类中定义一个login操作,其职责是“验证用户凭证并返回登录结果”。


答案:D 
解析:对象接收的消息与其承担的职责一一对应。LoginController接收了login消息,意味着它应承担处理登录请求的职责。它的职责是协调,即可能委托AuthenticationService去执行具体的密码验证,但自身负责控制这个流程。选项B和C将职责放错了对象;选项D的职责描述“协调登录流程”本应是LoginController的,而AuthenticationService的职责应是“执行密码验证”。
  1. 作为需求工程师,你正在撰写《软件需求规格说明书》。以下哪一项内容,不属于该文档中“功能性需求描述”部分的典型内容?
  • A 系统所有的用例图及其简要说明。
  • B 针对关键用例绘制的顺序图,描述系统内的对象交互。
  • C 系统的分析类图,展示核心的实体类、控制类和边界类及其关系。
  • D 数据库表结构的详细设计,包括每个字段的数据类型和索引设计。

答案:D

解析:《软件需求规格说明书》主要描述“系统需要做什么”,即需求。选项A、B、C都是通过不同视角(用例、交互、结构)来描述功能性需求的常用模型。而选项D“数据库表结构设计”属于“系统怎么做”的范畴,是系统架构设计和数据库设计阶段的输出物,不应出现在需求规格说明书中。
  1. 在软件需求评审会上,评审专家正在对照检查清单对需求制品进行审查。以下哪位专家提出的问题,属于在检查需求的“一致性”?
  • A 王工指出:“在‘权限管理’模块的需求中,只提到了管理员可以删除用户,但没有说明普通用户是否可以删除自己的账户。”
  • B 李工发现:“在用例‘UC-101提交订单’中,描述的业务规则是‘订单金额必须大于0’,但在数据约束中却写成了‘订单金额必须大于等于0’。”
  • C 张工提问:“需求‘FR-205系统应在200ms内响应用户查询’的提出依据是什么?是来自用户的明确要求,还是我们的性能基准测试?”
  • D 赵工质疑:“这个‘消息推送’功能,在之前与市场部沟通时并未被提及,它是否确实是用户期望的功能?”
答案:B

解析:需求一致性是指需求之间、或需求自身不同部分的描述不应存在矛盾。选项B中,同一需求在不同地方出现了逻辑矛盾(大于0 vs 大于等于0),是典型的不一致问题。选项A属于完整性问题(有遗漏)。选项C属于可追踪性问题(需求来源不明)。选项D属于多余性或正确性问题(需求是否真实存在)。

SE7 软件设计基础

  1. 软件设计阶段的主要任务是( )?
  • A 编写出可以运行的程序代码
  • B 与用户沟通,明确软件要做什么
  • C 探究如何实现软件需求的解决方案
  • D 制定项目计划和分配团队成员任务

答案:C

解析:根据课件,软件设计是“针对软件需求,综合考虑各种制约因素,探究软件实现的解决方案”。它回答的是“如何做”的问题,是连接“做什么”(需求)和“做出来”(实现)的桥梁。
  1. 以下哪一项( )是高质量软件设计应具备的特性?
  • A 模块内部逻辑错综复杂,以体现技术深度
  • B 设计模型中的模块功能简明,关系直观
  • C 为了追求性能,可以将所有数据设置为全局可访问
  • D 只需满足当前需求,无需考虑未来的任何变更
答案:B

解析:课件中明确指出,高质量设计的“简单性”要求“模型中的模块的功能或职责尽可能简明易懂,模块间的关系简单直观”。选项A、C、D的描述都与高质量设计的原则(如简单性、信息隐藏、可修改性)相悖。
  1. 正确的软件设计过程通常应该是( )?
  • A 先进行详细的算法设计,然后再考虑系统的整体结构
  • B 直接从需求编写代码,在设计过程中逐步重构出结构
  • C 先进行体系结构设计,再进行用户界面和详细设计
  • D 体系结构设计、用户界面设计和详细设计可以同时无序进行
答案:C

解析:课件中阐述了软件设计是一个循序渐进的过程,应从最高抽象层次的体系结构设计开始,然后进行用户界面设计,最后是细化和精化的详细设计。这个顺序确保了从宏观到微观的合理规划。
  1. 如果一个模块只负责完成“计算员工当月工资”这一项单一任务,那么这个模块的内聚类型属于?
  • A 偶然性内聚
  • B 逻辑性内聚
  • C 过程性内聚
  • D 功能性内聚
答案:D

解析:课件中对“功能性内聚”的定义是“模块内各成分是一整体,完成单个功能”。题目中的模块只做“计算工资”这一件事,所有成分都为了这个单一功能服务,因此属于最高内聚度的功能性内聚。
  1. 在面向对象编程中,将类的属性定义为private(私有),然后通过公有的get和set方法来访问和修改它们,这主要体现了哪一项设计原则?
  • A 模块化原则
  • B 信息隐藏原则
  • C 抽象原则
  • D 软件重用原则
答案:B

解析:信息隐藏原则要求模块应该设计得使其所含的信息(如数据、实现细节)对那些不需要这些信息的模块不可访问。将属性设为private,就隐藏了其内部表示细节,只通过公共接口与外界交互,是信息隐藏最直接的体现。
  1. 面向对象设计方法学的一个核心优势是,它使用相同的一组概念(如类、对象)来进行需求分析和软件设计,这带来了什么好处?
  • A 使得编程代码的运行速度更快
  • B 实现了从分析到设计的自然过渡,降低了理解的复杂性
  • C 完全消除了软件项目中的需求变更
  • D 确保设计出来的软件没有任何缺陷

答案:B

解析:课件在“面向对象软件设计的优势”中明确指出,其优势之一是“高层抽象和自然过渡”,即“采用相同的一组抽象和概念来进行描述和分析,基于模型的精化手段来实现软件设计,极大简化了软件设计工作”。这减少了不同阶段模型转换的鸿沟,使过程更流畅自然。

SE8 软件体系结构设计

  1. 关于软件体系结构中的“构件”(Component),以下哪项描述是不正确的?
  • A 构件是可独立部署的物理模块,如.dll或.jar文件。
  • B 构件的实现与接口分离,使得具有相同接口的构件可以相互替换。
  • C 构件通过“端口”来绑定一组供给接口或需求接口,以与外部交互。
  • D 构件通常是细粒度的,以实现最大程度的代码复用。
答案: D
解析: 课件中明确提到“构件应该是粗粒度的,而非细粒度的”。粗粒度意味着构件封装了相对完整的功能,作为一个独立的单元被部署和复用,这是构件与简单类或函数库的关键区别。其他选项均是课件中强调的构件的核心特征。
  1. 在分层体系结构风格中,一个核心的设计约束是什么?
  • A 任何一层都可以直接与其它任意层进行通信,以提高效率。
  • B 每一层只能为其紧邻上层提供服务,并且只能使用其紧邻下层提供的服务。
  • C 所有层次都必须部署在同一个物理节点上。
  • D 用户界面层必须包含核心的业务逻辑处理功能。

答案: B
解析: 课件在“分层体系结构模式的约束”中明确指出“每层为其紧邻上层提供服务,使用紧邻下层所提供的服务”。这种约束是保证层次间松耦合和可替换性的关键。选项A和D都违反了分层的基本原则。
  1. 在MVC体系结构风格中,当用户在前端界面执行了一个操作(如点击按钮),正确的交互流程是?
  • A 视图 -> 模型 -> 控制器
  • B 控制器 -> 模型 -> 视图
  • C 模型 -> 视图 -> 控制器
  • D 视图 -> 控制器 -> 模型

答案: D
解析: 根据课件对MVC约束的描述:视图接受界面动作,传递给控制器;控制器调用模型的业务逻辑功能;模型处理后将结果回送控制器,并可能通知视图更新;控制器再选择或创建视图。因此,正确的发起流程是视图将动作传给控制器,再由控制器去驱动模型。
  1. 下列哪种软件体系结构风格最适用于处理以数据流为主要特征的应用,并且允许通过独立更新处理步骤来实现系统进化?
  • A 分层风格
  • B 管道与过滤器风格
  • C 黑板风格
  • D 面向服务架构风格

答案: B
解析: 课件在管道与过滤器风格的特点中明确指出,它“自然地解决具有数据流特征的软件需求”并且“可独立地更新、升级过滤器来实现软件系统的扩展和进化”。SOA风格关注的是服务的松耦合与集成,而非线性的数据流处理。
  1. 软件体系结构设计与详细设计的主要区别在于,体系结构设计更关注什么?
  • A 类的方法的具体实现算法。
  • B 软件系统的全局性、基础性技术问题与宏观结构。
  • C 用户界面的像素级布局和交互细节。
  • D 数据库表中每个字段的具体数据类型。

答案: B
解析: 课件2.1节指出,软件体系结构设计的特点是“针对软件系统全局性、基础性技术问题给出技术解决方案”,具有“宏观、全局、层次、战略、多视点、关键性”等特点。而详细设计则是在体系结构框架下,对局部设计要素(如类、方法)的细化。选项A、C、D均属于详细设计的范畴。
  1. 在精化软件体系结构、确定子系统时,评估和改进子系统的一个重要原则是“正交性”,这里的“正交性”主要指什么?
  • A 所有子系统都必须采用相同的编程语言实现。
  • B 不同子系统间的职责应尽可能独立,不应重叠或重复。
  • C 子系统的接口数量须尽可能多,以提供全面的功能。
  • D 子系统必须部署在正交分布的计算机网络节点上。
答案: B
解析: 课件在“评估和改进所确立的子系统”部分明确指出:“不同子系统间的职责是正交的,不应具有相同或相似职责”。正交性在此处是借用了数学上的概念,意味着职责的独立和无重叠,这是实现高内聚、低耦合设计的关键。

SE9 用户界面设计

  1. 在设计一个电商网站的“商品详情”界面时,以下哪个选项通常被认为是动态元素?
  • A 显示商品分类的导航菜单(静态结构)
  • B 用于输入购买数量的文本框
  • C 实时显示该商品库存数量的文本标签
  • D “加入购物车”按钮
解析:根据课件,动态元素与软件运行状态和业务逻辑相关,其内容会发生变化。商品库存数量会根据实际销售和入库情况动态变化,因此显示它的文本标签是动态元素。A是静态元素,B是用户输入元素,D是用户命令元素。

SE10 软件详细设计

无选择题

SE11 软件实现基础

无选择题

SE12 编写代码

  1. 将UML设计类图中的类间组合关系(Composition)转换为程序代码时,程序员需要特别关注的是( )。
  • A 仅需使用接口声明,无需实现关联
  • B 需要确保整体类对部分类具有生命周期的管理责任,整体消亡时部分也应被销毁
  • C 使用全局变量来维护对象间的引用
  • D 将组合关系转换为继承关系
答案:B
解析: 本题考查对组合关系编码实现的理解。组合关系(Composition)是整体-部分关系中最强的一种,其核心语义是部分的生命周期由整体管理——整体对象创建时部分对象随之创建,整体对象销毁时部分对象也应被销毁。因此编码时需要体现这种生命周期依赖。A选项(仅接口)过于简单;C选项(全局变量)破坏了封装性;D选项(转换为继承)错误,组合与继承是两种不同的关系。
  1. 在开发中,程序员从Stack Overflow上获取一段用于连接MySQL数据库的代码片段并整合到自己的项目中。这种做法主要体现了以下哪项软件工程原则?( )
  • A 信息隐藏
  • B 分而治之
  • C 软件重用
  • D 模块化
答案:C
解析: 本题考查对代码片段重用本质的认识。从技术问答社区获取已有的代码片段并直接使用,正是软件重用原则的具体实践。重用经过验证的代码片段可以提高开发效率、降低出错风险。A(信息隐藏)强调隐藏内部实现;B(分而治之)强调分解复杂问题;D(模块化)强调模块划分。它们虽与重用相关,但题目描述的核心行为是“重用已有代码”。
  1. 某程序在运行时会偶尔出现“除零错误”导致程序崩溃,用户无法获得计算结果。根据课件中的定义,这个“除零错误”属于( )。
  • A 软件缺陷
  • B 程序错误
  • C 软件失效
  • D 设计缺陷
答案:B
解析: 本题考查对三个核心概念的精准区分。课件明确定义:
软件缺陷:存在于源代码或文档中的不正确的描述(根本原因)。
程序错误:缺陷代码在运行时所产生的不正确或不期望的运行状态(内在表现)。
软件失效:错误导致程序无法提供所需功能或行为(外在表现)。

题干中的“除零异常”是运行过程中发生的错误状态,因此属于程序错误。A(缺陷)是导致该错误的根本原因(如代码中未检查除数是否为0);C(失效)是错误导致的结果(用户无法获得结果);D(设计缺陷)是缺陷的一种类型。
  1. 在缺陷管理系统中,一个缺陷被开发人员认领并开始着手修复时,其状态应变为( )。
  • A New
  • B Assigned
  • C Fixed
  • D Closed
答案:B
解析: 本题考查对缺陷生命周期状态的掌握。课件中给出了缺陷状态的完整定义:
New:确认存在但尚未分配处理人员
Assigned:已安排人员负责修复(对应题干“被开发人员认领并开始着手修复”)
Fixed:缺陷已经修复完成
Closed:缺陷处理完毕并关闭
  1. 当程序员定位到程序中的某个缺陷后,接下来正确的调试步骤应该是( )。
  • A 立即修改代码并重新编译,跳过中间步骤
  • B 分析缺陷产生的原因,确定修复方案,然后修改代码并验证修复效果
  • C 直接向缺陷管理系统提交关闭请求
  • D 忽略该缺陷,先完成其他功能编码
答案:B
解析: 本题考查对标准调试流程的理解。调试的本质是找到原因、定位位置、修复缺陷。定位到缺陷后,应先分析原因(为什么会出错),然后确定修复方案(如何修改),接着实施修改并验证(测试确认修复有效)。A选项跳过分析步骤可能导致引入新错误;C选项关闭缺陷应在缺陷确认修复并测试通过后进行;D选项忽略缺陷不符合质量要求。

SE14 软件部署

  1. 根据课件的定义,软件部署是指将目标软件系统进行收集、打包、安装、配置和发布到运行环境的过程。以下选项中,不属于软件部署主要工作内容的是( )。
  • A 安装和配置运行环境
  • B 编写软件源代码
  • C 安装和配置软件系统
  • D 打包软件要素
答案:B

解析: 本题考查对软件部署工作边界的理解。课件明确将软件部署分为两方面:安装和配置运行环境、安装和配置软件系统。具体工作包括收集、打包、安装、配置和发布。
编写软件源代码属于软件开发阶段(编码)的工作,不属于部署阶段,因此B选项正确。
  1. 以下软件中,最适合采用单机部署方式的是( )。
  • A 淘宝电商平台
  • B 谷歌搜索引擎
  • C 扫雷游戏软件
  • D 12306火车票订票系统
答案:C
解析: 本题考查对单机部署与分布式部署适用场景的判断。单机部署将软件各要素集中部署到单个计算设备上,适用于功能单一、无需网络通信、不依赖多台设备协同的软件。课件中列举的典型示例包括小米便签、扫雷游戏等。A(淘宝)、B(谷歌搜索)、D(12306)都是大规模、高并发、需要多台服务器协同的分布式系统,不适合单机部署。
  1. 关于容器部署,以下说法正确的是( )。
  • A 容器镜像只打包应用程序代码,不包括运行依赖
  • B 容器与宿主机共享同一个操作系统内核
  • C 容器部署需要为每个应用单独安装完整的操作系统
  • D 容器镜像无法实现多个实例的创建
答案:B
解析: 本题考查对容器部署核心特征的理解。课件指出,容器是一个视图隔离、资源可限制、具有独立文件系统的进程集合,它与宿主机共享操作系统内核,但拥有独立的文件系统。
A错误,容器镜像打包的不仅是代码,还包括所有依赖文件;
C错误,容器不需要单独安装完整操作系统;
D错误,一个容器镜像可以构建多个容器实例。

SE15 软件维护与演化

  1. 某银行系统原来运行在Windows Server上,现需要迁移到Linux平台,为此对系统中的文件路径处理和系统调用代码进行了修改。这种维护活动属于( )。
  • A 纠正性维护
  • B 适应性维护
  • C 完善性维护
  • D 预防性维护
答案:B
解析: 本题考查对四种维护类型的区分。课件明确定义:适应性维护是指“对软件进行改造以便适应新的运行环境和平台”。题干中软件从Windows迁移到Linux,属于运行环境变化,因此是适应性维护。A(纠正性维护)针对缺陷修复;C(完善性维护)针对增加新功能;D(预防性维护)针对改善可维护性。
  1. Lehman提出的软件演化法则中,“除非系统持续不断地被修改以满足用户的需求,否则系统将变得越来越不实用”描述的是( )。
  • A 持续变化法则
  • B 增加复杂性法则
  • C 质量衰减法则
  • D 功能持续增长法则
答案:A
解析: 本题考察对软件演化法则核心内容的掌握。课件明确指出持续变化法则的含义是:“除非系统持续不断地被修改以满足用户的需求,否则系统将变得越来越不实用”。B(增加复杂性法则)强调复杂性会上升;C(质量衰减法则)强调质量随变更下降;D(功能持续增长法则)强调功能必须持续增加。
  1. 软件在维护和演化过程中出现的“用户满意度降低、质量逐渐下降、变更成本不断上升”的现象被称为( )。
  • A 软件退化
  • B 软件逻辑老化
  • C 软件腐蚀
  • D 软件衰退
答案:B
解析: 本题考查对“软件逻辑老化”概念的准确识记。课件中直接给出定义:软件在维护和演化的过程中出现的“用户满意度降低、质量逐渐下降、变更成本不断上升”的现象称为软件逻辑老化。A、C、D虽然有相似含义,但不是课件使用的标准术语。
  1. 在软件维护过程中,通过分析程序代码,产生与之对应的设计模型和文档,这种技术被称为( )。
  • A 代码重组
  • B 设计重构
  • C 逆向工程
  • D 再工程
答案:C
解析: 本题考察对软件维护技术的区分。课件定义逆向工程为“基于低抽象层次软件制品,通过对其实施理解和分析,产生高抽象层次的软件制品”,即从代码产生设计文档。A(代码重组)是在不改变功能的前提下重新组织代码;B(设计重构)是产生设计文档,但课件中将其归为逆向工程的一种具体形式;D(再工程)包括逆向工程和正向工程,范围更广。最直接匹配题干的是C。

SE16 软件项目管理

无选择题

判断题

大家根据课件里面的内容以及课件上的习题来复习。如果时间有够的话,课件完整过一遍,如果时间不够的话,那就把课件上面的练习题看一下。课件上面的练习题如果会做了,那么考试的选择题和判断题是没有问题的,尽管没有原题。

填空题

涉及多个交叉学科的知识,主要是考研408和工程上一些常见知识,但是考得也不难,有些题目还贴心设计成选填,就是有几个选择,让你选填一个,大家也不要有畏难的心理。重点看一下以下内容:

  • 1.C语言编程基础核心:理解int、char等基本数据类型在内存中的存储大小和取值范围;执行scanf()这个过程发生了什么。
  • 2.计算机组成原理核心:掌握计算机存储层次结构;能够计算CPU性能指标,如MIPS(每秒百万条指令)的计算;理解I/O子系统和主机的交互方式。
  • 3.操作系统核心:理解进程虚拟地址空间(码段、数据段、堆段、栈段);掌握虚拟内存管理机制;理解高级语言与系统调用的关系。
  • 4.计算机网络:理解域名到IP地址解析的过程;能够根据IP地址和子网掩码计算网络地址;理解HTTP协议基本工作原理,掌握常见状态码含义;理解端口号的作用;理解从地址栏输入网址,点击enter到获取网页,这一过程发生的事情。
  • 5.数据库系统核心:理解关系型数据库中表的物理存储方式;掌握事务的ACID特性;懂得为一个系统设计表来存储信息。
  • 6.Java Web开发与系统架构核心:理解MVC架构中各组件职责,即控制器接收请求、模型处理业务、视图展示结果;掌握系统分层设计思想;能够为典型应用系统选择合适的技术栈并明确各部分职责。

简答题

考察课程的核心主干知识以及实践要点,希望大家能够对软件开发过程有个整体的认识。此外,问答题还考察大家的言语理解能力和书面表达能力,也就是会给你一段材料,然后让你根据材料来回答问题。问答题除开放题外,所考察的内容没有超出这份复习要点。

题目一

分层体系结构是软件设计中常用的架构模式,它将系统按抽象级别组织成多个层次。

  • 请举例说明计算机学科中哪些知识体现了这种分层思想?(3分)
计算机网络模型:OSI七层参考模型和TCP/IP四层模型是网络通信领域最经典的分层架构,每一层都建立在下一层的基础上,并为上一层提供特定的网络服务。
(物理层/数据链路层/网络层/传输层/会话层/表示层/应用层)  (网络接口层/网络层/传输层/应用层)
文件系统: 应用程序->文件API->文件系统->块设备->磁盘,开发者不需要关心:扇区位置/inode布局/SSD磨损均衡等.
现代计算机系统通常自底向上划分为硬件物理层、操作系统内核层、系统调用接口层以及最顶部的应用程序层。
企业级软件应用架构:典型的软件系统会被划分为用户界面层(表示层)、业务逻辑层(处理层)以及基础服务层(数据访问与底层服务层)
  • 解释层和层之间是如何交互的?(1分)?
严格的单向依赖:在分层体系结构模式的约束中,每层仅为其紧邻的上层提供服务,并只能使用其紧邻下层所提供的服务.
请求与反馈机制:上层向下层发出明确的服务请求,下层在完成计算或处理后,为上层反馈服务结果.
事件驱动与通知:下层可以向上层提供底层的事件信息,上层在接收到下层的通知后做出相应的业务处理.
  • 分析分层架构的存在的不足?(1分)
性能损耗:由于分层架构严格限制了跨层调用,客户的请求和底层的数据必须自上而下或自下而上逐级穿透多个层次。这种逐层传递和数据转换会带来额外的处理开销和网络/进程间通信延迟,可能影响系统的整体运行性能.
过度设计与开发繁琐:对于一些极其简单的业务需求(如仅仅是从数据库读取一个字段并显示),强制的严格分层会导致代码冗余,开发者必须在每一层都编写“透传”代码,增加了初始开发的复杂度和工作量.
级联修改(Cascading Changes):虽然分层实现了层内的高内聚和层间的松耦合,但如果遇到需要增加一个贯穿全局的新特性(例如增加一种全新的业务数据类型),往往需要从用户界面层到数据层逐层修改接口和逻辑.

题目二

在电商网站中,用户在搜索框输入关键词“计算机书籍”,并点击搜索后,系统会返回结果列表。

  • 请详细分析此过程中,网站前端、后端和数据库服务器各自做了什么工作?(5分)
1.网站前端(用户界面层/表示层)
捕获输入与校验:获取用户在搜索框中输入的关键词“计算机书籍”,并进行基本的前端逻辑校验(例如过滤特殊字符、检查是否为空)。
发起网络请求:将用户输入的关键词封装成 HTTP/HTTPS 请求(通常为带有查询参数的 GET 请求,如 ?keyword=计算机书籍&page=1),通过异步请求技术(如 AJAX、Fetch 或 Axios)发送给后端服务器。
状态反馈:在等待后端响应的期间,向用户展示“加载中(Loading)”的视觉反馈,安抚用户等待情绪。
数据解析与界面渲染:接收到后端返回的结构化数据(通常为 JSON 格式)后,前端引擎解析这些数据,并将其动态渲染、拼装到搜索结果列表页面的 DOM 结构中(展示书名、封面、价格、销量等信息)。
2.网站后端(业务逻辑层/控制层)
接收与解析请求:后端的网关或控制器(Controller)接收前端发来的 HTTP 请求,解析提取出查询关键词“计算机书籍”以及其他参数(如页码、排序方式)。
安全与业务处理:进行安全过滤(防止 SQL 注入或 XSS 攻击)和限流控制。在大型电商中,此时还会对关键词进行“分词处理”或“同义词扩展”。
缓存与服务调度:优先查询高速缓存(如 Redis),查看是否有“计算机书籍”的现成缓存结果。若缓存未命中,则向底层的数据访问层下达查询指令。
数据组装与响应:接收底层数据库或搜索引擎(如 Elasticsearch)返回的原始商品数据,进行业务加工(如计算折扣价、过滤已下架商品、分页处理),将最终结果封装成 JSON 格式的 HTTP 响应,发回给前端。
3.数据库服务器(基础服务层/数据层)
接收查询指令:接收后端应用通过数据库连接池发来的查询语句(如 SQL 语句)。
执行检索:数据库存储引擎根据预设的索引(如 B+ 树索引或专门的全文检索倒排索引),在商品信息表(Products)中快速查找匹配“计算机书籍”(或其分词)的记录。
返回结果集:将检索到的符合条件的商品数据记录集合(Result Set)进行打包,通过网络通道原路返回给调用它的后端应用程序。

题目三

AI通过海量数据训练,学习统计规律,能根据输入预测并生成最可能的文本序列,其本质是基于概率的模式匹配,而非真正的理解和思考。随着算力的不断突破和模型的不断优化,AI已在诸多领域展现出强大的信息处理和生成能力,深刻改变着我们的学习与工作方式。

然而,技术的便利也伴随着挑战。若缺乏专业知识,使用者容易被AI生成的、看似正确但可能包含错误或片面的回复所误导。更值得警惕的是,若习惯于不经思考地依赖AI获取答案,长期以往将弱化深入学习与独立思考的意愿和能力。因此,在AI时代,我们更需审慎平衡工具使用与自身知识和能力体系的构建——正如即便拥有强大的计算器,我们也仍需掌握运算的原理,只有如此,方能真正地驾驭工具。

那么,如何正确使用AI?核心在于 “以我为主,AI为辅” 。以教师利用AI辅助出题为例,教师在出题前已对考查内容、难度与题型有了全局、深入的把握。AI在此过程中扮演“军师”或“得力干将”的角色,协助构思、优化表述或帮助检查。而教师作为“主帅”,必须对AI的产出进行严格审视、修改和把关,绝不能将AI给出的答复直接用于试卷。AI不为结果负责,负责的始终是使用者本身。有效的AI使用往往需要使用者与AI进行多轮对话,根据AI反馈不断调整提问,通过多次迭代优化与交叉验证,才能获得准确满意的答复。

此外,AI不仅可以用于学习和工作,作为这个时代先进的生产力工具,AI在图像识别、语音识别、日常问题解答等领域同样表现优秀,生活中有任何的疑惑都可以尝试与AI对话。

1.结合AI使用经验和日常学习,请你谈谈应如何处理好“AI工具使用”与“坚持掌握扎实专业基础知识”两者间的关系?(5分)

  • AI是提高学习效率的重要工具,但不能代替专业基础知识的学习。两者应当相辅相成,而不是相互替代。
  • 首先,扎实的专业基础知识是正确使用AI的前提。只有掌握了相关知识,才能判断AI回答是否准确,避免被错误信息误导。其次,AI可以作为学习助手,帮助查阅资料、解释概念、总结知识和辅助练习,提高学习效率。再次,在学习过程中应坚持独立思考,先尝试自己分析和解决问题,再借助AI进行验证和补充。最后,要把AI作为辅助工具而不是依赖对象,不断巩固专业知识和实践能力,形成自身的知识体系和思维能力。
  • 因此,应坚持“基础知识为本,AI工具为辅”,在掌握专业知识的基础上合理利用AI提升学习效果。

2.结合以上材料和AI使用经验,请你谈谈应该如何正确使用AI?(5分)

  • 正确使用AI应坚持“以我为主,AI为辅”的原则。
  • 首先,要明确AI只是辅助工具,其生成内容并不一定完全正确,使用时应保持批判性思维,对结果进行核实和判断。其次,要学会提出清晰、具体的问题,并根据AI的回答不断调整提问方式,通过多轮交流获得更准确的结果。再次,对于学习、工作等重要场景,不能直接照搬AI的答案,而应结合自身知识进行分析、修改和完善。最后,要充分发挥AI在信息检索、知识学习、内容创作和日常生活中的辅助作用,提高效率,但始终保持独立思考和自主学习能力。
  • 只有合理利用AI并承担最终责任,才能真正发挥AI的价值,成为驾驭工具的人而不是依赖工具的人。

设计题

主要考查用例图和类图

讲解视频

例题

为促进混合式教学,学校计划开发“学在至诚”线上教学系统,各个用户角色的功能需求如下,请根据要求作答。

- 学生角色:注册与登录账户;浏览平台已发布的课程;观看所选课程的教学视频;查看与下载课程相关课件;完成课程配套的在线练习与测试等.
- 教师角色:注册与登录账户(需管理员审核);创建新课程;为课程上传教学视频和课件资料;发布课程练习与在线测试;查看选修其课程学生的学习记录;录入并发布学生的课程成绩等.
- 管理员角色(系统管理后台):管理所有用户(学生、教师)账户;审核教师创建的课程信息与上传的教学资源;维护网站前端页面与公告等.
  • (1) 识别系统中的主要执行者,并绘制系统的用例图。图中需清晰体现执行者、用例以及它们之间的关联关系。
  • (2) 识别系统中的核心类,确定每个类的主要属性与方法,并绘制类图。图中需体现类名、属性、方法以及类之间的关系(如继承、关联、聚合等)。

答案1 答案2

综合题

主要考察团队作业相关知识和技术。

  • 对于要实现的系统,大家要懂得将系统划分成多个不同的用户角色,并确定各个用户角色应该有的功能。
  • 要懂得系统功能是通过不同用户角色之间的交互来完成的。比如说美团外卖,用户通过手机点单,商家接单,骑手派送,最终完成外卖功能。
  • 要懂得对一个特定的系统,数据库表怎么设计,需要设计几张表,哪几张表,各张表包含哪些字段,怎么创建表。
  • 要懂得通过哪些技术将这个系统实现出来,并且各个技术所负责的功能是什么。