架构测试与依赖治理

共 19 题
#

1. ArchUnit(Java)的架构规则表达中依赖方向、包结构、注解使用、继承层级

A ArchUnit 只能检测循环依赖
B ArchUnit 用 DSL 表达依赖方向、包结构、注解与继承层级,违反即测试失败 ✓ 正确答案
C ArchUnit 需要运行应用才能检查
D ArchUnit 规则无法在 CI 运行
#

2. BOM(Bill of Materials)与 platform dependency 的版本协调

A BOM 包含依赖本身
B 每个模块应各自指定版本
C BOM 与版本管理无关
D BOM 统一管理一组依赖的版本,下游声明依赖可不写版本 ✓ 正确答案
#

3. Dependency-Cruiser(JavaScript)的依赖图规则中禁止循环依赖、限制层级

A 它只能生成依赖图
B 它不能检测循环依赖
C 规则不能在 CI 运行
D 用配置文件定义 no-circular、from/to 等规则,禁止循环依赖并限制层级 ✓ 正确答案
#

4. 架构测试的「误报治理」中 ArchUnit/Dependency-Cruiser 规则如何分层(基建豁免、显式例外清单、按模块裁剪),避免规则爆炸后无人维护被整体禁用?

A 误报多就整体禁用规则
B 规则越宽松越好
C 例外无需记录
D 用基建豁免、显式例外清单与按模块裁剪控制误报,保持规则可维护 ✓ 正确答案
#

5. 架构测试作为适应度函数中如何将架构约束转化为可自动验证的适应度函数,在演进式架构中持续守护边界?

A 架构测试不能随架构演进
B 架构约束只需写在文档里
C 适应度函数只能手工评估
D 架构测试把约束变为可自动验证的适应度函数,在 CI 中持续守护边界 ✓ 正确答案
#

6. Maven enforcer + dependencyConvergence 的版本对齐强制

A dependencyConvergence 允许任意多版本共存
B dependencyConvergence 检测同一依赖多版本并强制构建失败,配合 dependencyManagement 锁定版本 ✓ 正确答案
C Enforcer 与版本无关
D 版本冲突不影响构建
#

7. 依赖收敛(dependency convergence)的版本冲突解决策略

A 用 dependencyManagement 统一版本、排除冗余传递依赖,收敛到兼容版本 ✓ 正确答案
B 版本冲突无法解决
C 放任多版本共存
D 依赖越多越好
#

8. ArchUnit 的 cycle detection(循环依赖检测)的边界

A 只能检测类间循环
B 检测粒度和切片无关
C 循环依赖无害
D 用 slices 定义切片粒度,检测切片间循环依赖并强制无环 ✓ 正确答案
#

9. ArchUnit 的 frozen rules(冻结规则)的演进控制

A 冻结规则加剧违规
B 冻结规则忽略所有违规
C 冻结规则无法演进
D 冻结规则记录现有违规并阻止新增违规,支持渐进式治理 ✓ 正确答案
#

10. ArchUnit 的 layered architecture(分层架构)的强制规则

A 分层规则只检查命名
B layeredArchitecture 定义各层并强制依赖方向,禁止反向与跨层依赖 ✓ 正确答案
C 分层规则不能检查依赖方向
D 分层规则无法在 CI 运行
#

11. 依赖治理与模块边界的编译期强制中 Java module / npm workspaces / Bazel 等模块化手段如何在编译期锁定领域依赖方向,与架构测试形成互补?

A Java module/Bazel 等在编译期锁定依赖方向,架构测试补充语义规则,二者互补 ✓ 正确答案
B 编译期强制无法锁定依赖
C 架构测试在编译期拦截
D 两者互斥
#

12. 依赖升级的架构回归中升级框架或库后如何用架构测试、契约测试与编译检查发现破坏性变更?

A 升级后无需验证
B 契约测试与升级无关
C 只有编译能发现破坏
D 用编译检查、架构测试、契约测试与功能测试多层发现破坏性变更 ✓ 正确答案
#

13. 架构测试的运行分层与 CI 策略中哪些规则每次提交执行、哪些合并前执行,如何控制执行成本?

A 所有规则都每次提交跑
B 快速规则每次提交跑,慢速/全量规则合并前跑,控制成本 ✓ 正确答案
C 架构测试不纳入 CI
D 慢规则每次提交跑最合理
#

14. 依赖方向(domain 不应依赖 infrastructure)的强制

A 用架构测试强制领域层只依赖领域层与 JDK,基础设施通过接口反向依赖 ✓ 正确答案
B 领域层可以依赖 JPA 实现
C 依赖方向无关紧要
D 领域层应依赖 Mapper
#

15. 依赖矩阵与组件边界中如何用架构测试工具维护组件间的依赖规则,禁止反向依赖与循环依赖的自动化手段有哪些?

A 用 ArchUnit/Dependency-Cruiser 声明依赖方向并自动检测循环,禁止反向与循环依赖 ✓ 正确答案
B 无法禁止循环依赖
C 依赖矩阵只能手工维护
D 反向依赖符合规范
#

16. 架构决策的自动化验证?

A 把架构决策写成可执行架构测试并纳入 CI,配合 ADR 实现决策验证闭环 ✓ 正确答案
B 架构测试与决策无关
C 决策无法验证
D 架构决策只能靠文档
#

17. 依赖治理工具中依赖图与循环检测?

A 依赖治理与工具无关
B 依赖图无法生成
C 循环检测不能自动化
D ArchUnit、Dependency-Cruiser、Madge 等生成依赖图并检测循环,配合 CI 治理 ✓ 正确答案
#

18. 架构测试的 CI 集成?

A 架构测试作为 CI 阶段与合并门禁,失败即阻塞并给出违规信息 ✓ 正确答案
B 架构测试在本地手工跑即可
C 架构测试不能进 CI
D 架构测试失败不影响合并
#

19. 架构测试的定制化扩展中内置 DSL 不足以表达规则时,如何用 AST 或静态分析编写一次性检查并纳入门禁?

A 用 AST/静态分析编写自定义检查,输出违规并接入 CI 门禁 ✓ 正确答案
B 内置 DSL 覆盖所有规则
C 无法自定义规则
D 自定义检查不能进 CI