# 1. 演进式架构的核心思想中用适应度函数守护架构约束 A 架构约束应尽量写在文档中,靠人工评审保证 B 适应度函数只能在架构评审时由架构师手工运行 C 演进式架构意味着完全取消架构约束,让代码自由演化 D 用可自动执行的适应度函数把架构约束固化为可度量的门禁,在演进的同时守住底线 ✓ 正确答案
# 2. 架构适应度函数(Fitness Function)的定义与分类 A 原子型适应度函数度量单体单元,整体型度量系统跨组件的全局属性,二者可组合使用 ✓ 正确答案 B 适应度函数只有静态检查一种,用于分析源码 C 触发式适应度函数是定时运行的,持续式是提交时运行的 D 动态适应度函数只检查源码本身,不涉及运行时数据
# 3. 适应度函数的分类(Neal Ford 原始分类)中原子/整体(atomic/holistic)、触发式/持续式(triggered/continuous)、静态/动态 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. 持续式(temporal)适应度函数(定时巡检)弥补触发式(提交时)无法覆盖的环境漂移 A 它定时/持续采集运行时数据,能捕捉非代码变更引起、触发式无法覆盖的环境漂移 ✓ 正确答案 B 它比触发式函数运行更快,适合每次提交 C 它只能检查源代码,与触发式完全重复 D 它替代了所有触发式检查
# 9. 用依赖分析守护「禁止层间反向依赖」的适应度函数 A 只把依赖方向写进文档,靠开发者自觉遵守 B 只检查代码行数,不关心依赖方向 C 用 ArchUnit 等工具把层映射与访问权限固化为可执行规则,接入 CI 拦截反向依赖 ✓ 正确答案 D 反向依赖出现时无需处理,不影响运行
# 10. 用包体积/循环复杂度阈值守护性能预算的适应度函数 A 包体积是真实性能的唯一指标,无需其他度量 B 复杂度超标不影响性能,无需关注 C 预算只在架构评审时口头讨论,不设代码门禁 D 用静态可度量的代理指标(包体积、复杂度)设阈值做门禁,同时与真实性能监控互补 ✓ 正确答案
# 11. 用架构规则(ArchUnit/依赖卫士)守护模块边界 A 边界规则只能靠人工 code review 保证 B ArchUnit 只能测功能,不能测依赖 C 模块边界一旦破坏无需修复,不影响复用 D 用 ArchUnit 等工具把边界依赖固化为可执行测试,并用 freezing 规则渐进治理存量违规 ✓ 正确答案
# 12. 用契约测试守护服务间兼容的适应度函数 A 消费者驱动契约把接口契约固化为可验证文件,生产者独立验证,在 CI 中拦截兼容性破坏 ✓ 正确答案 B 契约测试与集成测试完全等价,都是部署后联调 C 服务间兼容只能靠运行时监控发现 D 契约测试只能用于前端,不能用于微服务
# 13. 用许可证合规扫描守护「禁止 GPL 依赖」的适应度函数 A 许可证合规只需写在文档里,靠法务事后抽查即可 B 所有开源许可证都可以随意引入,无需区分 C 用白名单/黑名单策略配合扫描工具在依赖引入时拦截违规许可证,治理包含传递依赖 ✓ 正确答案 D 许可证扫描只能人工执行,无法自动化
# 14. 用安全基线扫描守护「禁止高危 CVE」的适应度函数 A 只需在发布后人工关注安全公告即可,无需自动门禁 B 高危 CVE 不影响运行,无需关注 C 用漏洞扫描工具在依赖解析时拦截高危 CVE,并叠加定时扫描捕获新披露漏洞 ✓ 正确答案 D 安全扫描只能覆盖代码,无法覆盖依赖库
# 15. 适应度函数应内建在流水线的什么位置(门禁 vs 报告) A 所有适应度函数都应作为报告,避免阻塞开发 B 强约束低误报的函数设门禁,弱约束高误报的做报告,并采用渐进式收紧策略 ✓ 正确答案 C 所有函数都应作为门禁,越严格越好 D 门禁与报告无区别,放哪里都一样
# 16. 多适应度函数的加权评分与「架构健康分」 A 健康分应作为唯一硬门禁,任何扣分都阻断发布 B 把多个维度归一化后加权聚合成健康分,用于趋势观测,关键硬约束仍单独设门禁 ✓ 正确答案 C 所有适应度函数权重相同,无需归一化 D 健康分只能人工顶在头脑里,无法量化呈现
# 17. 用无用代码/死分支检测守护整洁度的适应度函数 A 无用代码不影响任何维护,无需检测 B 所有死代码检测都应作为硬门禁阻断发布 C 清理死代码必须一次性全量完成,否则无意义 D 用静态分析工具检测死代码并设阈值/报告,渐进清理,因误报较高宜用软门禁或报告 ✓ 正确答案