2025 年软件体系结构考试试卷
考试学期:2025 考试形式:闭卷 考试时间:120 分钟
年级:______ 专业:软件工程 班级:______
一、单选题(每小题 1.5 分,共 24 分)
关于策略模式,下述说法不正确的是:〔 〕
A. 定义一系列算法,将每个算法封装起来,使它们可以互换
B. 客户端必须知道所有策略类的存在
C. 上下文类负责维护策略对象的引用
D. 适用于需要动态切换算法的场景
以〔 〕为代表的面向服务的体系结构(SOA),强调服务的封装和复用。
A. Web Services B. JavaBean C. EJB D. CORBA
软件工程的基本目标是:〔 〕
A. 提高软件性能 B. 降低开发成本 C. 实现软件可维护性 D. 以上都是
软件配置项不包括:〔 〕
A. 源代码 B. 测试用例 C. 开发环境 D. 需求文档
软件危机的表现不包括:〔 〕
A. 软件质量难以保证 B. 软件开发成本失控 C. 软件维护困难 D. 软件需求明确
不属于 “视图 - 控制器 - 模型”(MVC)模式的是:〔 〕
A. 视图 B. 控制器 C. 模型 D. 适配器
关于观察者模式,下述说法不恰当的是:〔 〕
A. 当主题状态变化时,所有观察者会被通知
B. 观察者和主题之间是松耦合的
C. 一个主题可以有多个观察者
D. 观察者必须继承自同一个抽象类
下列哪个不是管道 - 过滤器结构风格的特点?〔 〕
A. 数据通过管道传输 B. 过滤器可复用 C. 处理顺序固定 D. 支持并行处理
在设计模式中,以下哪种模式属于结构型模式?〔 〕
A. Singleton B. Adapter C. Observer D. Strategy
关于软件体系结构描述语言(ADL),下列说法错误的是:〔 〕
A. 用于描述软件体系结构的结构和行为
B. 不支持体系结构的分析和验证
C. 可定义构件和连接件的接口
D. 是理解和交流体系结构的工具
里氏替换原则的含义是:〔 〕
A. 子类可以替换父类出现在任何地方,且不影响程序正确性
B. 父类可以替换子类出现在任何地方
C. 子类必须实现父类的所有方法
D. 以上都不对
关于接口隔离原则,下述叙述错误的是:〔 〕
A. 客户端不应该依赖它不需要的接口
B. 一个类对另一个类的依赖应该建立在最小的接口上
C. 接口应该尽量细化,避免大而全的接口
D. 接口隔离原则与单一职责原则无关
行为模型不包括以下哪种图?〔 〕
A. 用例图 B. 活动图 C. 状态图 D. 类图
构件交互的基本方式不包括:〔 〕
A. 过程调用 B. 消息传递 C. 共享内存 D. 数据拷贝
在体系结构中,用于提高系统可靠性的结构风格是:〔 〕
A. 分层结构风格 B. 容错结构风格 C. 事件驱动结构风格 D. 客户端 - 服务器结构风格
以下哪个不是软件体系结构评估的常用方法?〔 〕
A. 场景 - based 评估 B. 度量 - based 评估 C. 仿真 - based 评估 D. 代码审查
二、多项选择题(每小题 2 分,共 16 分)
类图中包含的元素有:〔 〕
A. 类 B. 接口 C. 关联关系 D. 依赖关系
下面属于软件体系结构风格的是:〔 〕
A. 分层结构 B. 管道 - 过滤器 C. 黑板系统 D. 单例模式
提高软件可维护性的措施包括:〔 〕
A. 良好的代码注释 B. 模块化设计 C. 严格的测试 D. 复杂的算法实现
客户端 - 服务器(C/S)体系结构的优点有:〔 〕
A. 客户端响应速度快 B. 服务器负载均衡 C. 数据安全性高 D. 易于扩展
软件体系结构的质量属性包括:〔 〕
A. 性能 B. 可靠性 C. 可维护性 D. 安全性
设计模式的分类包括:〔 〕
A. 创建型模式 B. 结构型模式 C. 行为型模式 D. 功能型模式
对软件体系结构的动态性描述可采用的方法有:〔 〕
A. 状态转移图 B. 时序图 C. 活动图 D. 用例图
体系结构设计的原则包括:〔 〕
A. 关注点分离 B. 接口标准化 C. 松耦合 D. 高内聚
三、填空题(每小题 2 分,共 10 分)
软件体系结构的核心元素包括构件 连接器、和 配件。
五层参考模型包括物理层、数据链路层、 网络、应用层和用户层。
“模块化__” 和 “信息隐藏” 是模块化设计的基本原则。
数据流图的四种基本元素是加工、数据源____、数据终点______和数据存储。
设计模式中的 Singleton 模式属于___创建_____型模式,其目的是__确保类只有一个实例并提供全局访问点____。
四、判断题(正确写 T,错误写 F,每小题 1 分,共 10 分)
软件体系结构设计是对系统的高层抽象,不涉及具体实现细节。〔T 〕
管道 - 过滤器结构风格中,过滤器之间需要知道彼此的存在。〔 F〕
软件重用只能重用代码,不能重用设计和架构。〔F 〕
体系结构评估可以在系统开发的任何阶段进行。〔T 〕
适配器模式用于解决接口不兼容的问题,使不兼容的接口可以协同工作。〔T 〕
面向对象设计中,继承是实现代码重用的唯一方式。〔F 〕
软件体系结构风格一旦确定,不能在开发过程中修改。〔F 〕
状态图用于描述对象在其生命周期中的状态变化及响应的事件。〔 T〕
敏捷开发方法不关注软件体系结构的设计,只注重代码实现。〔F 〕
领域特定语言(DSL)可用于更高效地描述特定领域的软件体系结构。〔 T〕
五、简答题(每小题 3 分,共 15 分)
简述管道 - 过滤器结构风格的优缺点。
答:过滤器可复用,便于独立开发和测试;
支持并行处理,数据可同时流经多个过滤器;
系统扩展性好,可通过添加 / 删除过滤器修改功能。
缺点:
处理顺序固定,难以动态调整数据流路径;
数据转换开销大,需在过滤器间进行格式转换;
无法处理交互式或实时性要求高的场景。
2.什么是依赖注入原则?其作用是什么?
定义:依赖注入(DI)是一种设计原则,指将组件的依赖关系通过外部注入(而非内部创建)的方式实现。
作用:
降低组件间耦合度,提高代码可维护性和可测试性;
便于动态替换依赖对象,支持系统灵活扩展;
符合 “控制反转(IoC)” 思想,使组件专注于核心逻辑。
3.说明软件体系结构与软件设计的区别与联系。
答:区别:
抽象层次:体系结构是系统的高层抽象,关注构件、连接件及整体结构;软件设计侧重具体模块和算法实现。
关注点:体系结构关注系统质量属性(如性能、可靠性);软件设计关注功能实现细节。
联系:
体系结构是软件设计的基础,为设计提供框架和约束;
软件设计是体系结构的细化,实现体系结构定义的构件和交互。
4.简述工厂方法模式的核心思想及适用场景。
答: 核心思想:定义一个创建对象的接口(工厂),但由子类决定实例化哪个具体类,将对象创建与使用分离。
适用场景:
当系统需要动态创建对象,且创建逻辑可能变化时;
当子类可能扩展或修改对象创建方式时;
避免客户端与具体类直接耦合,提高系统灵活性。
5.软件体系结构评估的主要目标是什么?
答:验证质量属性:评估体系结构是否满足性能、可靠性、可维护性等需求;
发现设计缺陷:识别潜在问题(如耦合度过高、扩展性不足),避免后期返工;
支持决策制定:为体系结构优化、技术选型等提供依据;
确保一致性:验证体系结构与需求、设计文档的一致性。
六、计算题(每小题 5 分,共 25 分)
设计一个在线购物系统,要求实现商品展示、购物车管理和订单处理功能。试用 MVC 模式设计该系统的体系结构,给出类图和各部分的职责。
类图核心元素:
模型(Model):
Product(商品):属性(ID、名称、价格等),方法(获取信息);
Cart(购物车):属性(商品列表、总价),方法(添加 / 删除商品);
Order(订单):属性(订单号、用户、商品列表等),方法(创建订单、支付)。
视图(View):
ProductView(商品展示界面):显示商品列表、详情;
CartView(购物车界面):显示购物车内容、结算按钮;
OrderView(订单界面):显示订单信息、支付结果。
控制器(Controller):
ProductController:处理商品查询、筛选请求;
CartController:处理购物车操作(添加、删除);
OrderController:处理订单创建、支付流程。
职责划分:
模型:管理数据和业务逻辑,不依赖视图和控制器;
视图:渲染数据,接收用户输入并传递给控制器;
控制器:接收用户请求,调用模型处理数据,更新视图。
某图书馆管理系统中,图书状态包括 “可借”“已借”“预约”“损坏”。读者可以借阅、归还图书,管理员可以处理预约和损坏图书。绘制图书状态的状态图。
某大学选课系统包含学生类(Student)、课程类(Course)和选课类(Selection)。学生有学号、姓名、专业等信息,课程有课程号、名称、学分等信息,选课记录包括学生、课程和成绩。绘制该系统的类图,包括类的属性、方法和关联关系。
某医院挂号系统的工作流程是:患者先到挂号处登记个人信息,选择科室和医生,支付挂号费,获取挂号单。然后到相应科室候诊,医生诊断后开具处方,患者到收费处缴费,取药离开。画出该系统的数据流程图。
某智能家居系统中,灯光控制器有 “开”“关”“亮度调节” 三种状态。用户可以通过手机 APP、语音命令或物理开关控制灯光。绘制灯光控制器的状态图,包括状态、事件和转换条件。
例题、航空公司会员对象状态图:
乘客只要办理该航空公司的会员卡,即可成为普卡会员,普卡会员可以升级到银卡会员或金卡会员。非会员不能积累里程数。每年年末,系统根据会员在本年度累积的里程数对下一年会员等级进行调整。普卡会员在一年内累积的里程数若满25000英里但不足50000英里,则自动升级为银卡会员;若累积的里程数在50000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50000英里以上,则自动升级为金卡会员。若一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年内累积的里程数若不足25000英里,则自动降级为普卡会员;若累积的里程数达到25000英里,但是不足50000英里,则自动降级为银卡会员。银卡会员一年内累积的里程数若不足25000英里,则自动降级为普卡会员。
在这里插入图片描述