重构安全网与验证

共 18 题
#

1. 重构的"安全网"(safety net)中测试覆盖是重构的基石

A 重构不需要测试,只要代码正确即可
B 安全网与行为不变无关
C 覆盖率只影响开发速度
D 测试覆盖能在重构改变行为时报警,是重构安全、敢动的基石 ✓ 正确答案
#

2. 重构的"机会主义重构"(opportunistic refactoring)与"专项重构"(dedicated refactoring)

A 两者完全相同
B 机会主义重构会破坏功能
C 专项重构不需要测试
D 机会主义重构随功能顺带小步改善,专项重构独立立项系统处理,按改动规模与风险选择 ✓ 正确答案
#

3. 重构的"测试覆盖门槛"中建议 80%+ 单测覆盖,但 legacy 不可强求

A 所有代码必须立即达到 80% 覆盖
B 覆盖率与重构安全无关
C 覆盖率越低越好
D 建议 80%+ 覆盖作为安全网,但 legacy 应渐进补齐而非一开始强求 ✓ 正确答案
#

4. 重构的"童子军军规"(Boy Scout Rule)中每次 commit 之前更干净

A 每次改动时顺手把经过的代码改得比之前更干净,让改善成为常态 ✓ 正确答案
B 每次改代码都要把整段代码重写
C 童子军军规要求禁止修改任何代码
D 它只适用于新项目
#

5. 重构行为等价的进阶验证中除单元测试外,差分测试(differential testing)、黄金 master 快照、生产流量回放如何验证重构前后行为一致?

A 单元测试覆盖所有行为差异
B 流量回放无需真实数据
C 三种方法完全相同
D 差分测试、黄金快照、生产流量回放分别用随机/代表/真实输入验证重构前后行为一致,覆盖单测难以覆盖的场景 ✓ 正确答案
#

6. 类型系统与静态分析作为重构安全网中强类型、编译器与 lint 如何降低重构风险,动态语言如何弥补?

A 编译器无法帮助重构
B lint 只有在动态语言中才有用
C 强类型与编译器能捕捉签名/类型不匹配,动态语言需以类型标注、测试、lint 弥补 ✓ 正确答案
D 静态语言不需要测试
#

7. 重构的"识别信号"(identify signal)中 smell、hotspot、metric 综合判断

A 只需看 smell 即可
B hotspot 与 metric 无关
C smell 指结构问题、hotspot 指变更热点、metric 指量化指标,综合判断聚焦高价值区域 ✓ 正确答案
D 识别信号无法指导优先级
#

8. 重构的"测试验收"(test acceptance)中所有测试通过 + 行为不变

A 重构后只要有测试通过即可,无需关心行为
B 测试验收只用于新功能
C 行为不变是无需验证的
D 验收标准是"所有测试通过且行为不变",证明重构只改结构不改功能 ✓ 正确答案
#

9. 重构的提交粒度中一次重构应包含多少个「编译-测试-提交」循环,如何用「每个提交可独立回滚」作为拆分标准?

A 一次重构应只提交一次
B 拆成多个"编译-测试-提交"小循环,以"每个提交可独立回滚"为拆分标准 ✓ 正确答案
C 提交粒度与回滚无关
D 提交越频繁越差
#

10. 重构的"行为验证矩阵"中单元测试、快照测试、契约测试与差分测试在重构验证中的分工与选择?

A 单元测试打底,快照覆盖输出、契约保障接口、差分验证等价,按目标组合使用 ✓ 正确答案
B 只用单元测试即可验证所有行为
C 四种测试互不相关
D 契约测试不能用于重构
#

11. 重构类 PR 的评审策略中如何验证行为不变而非逐行读 diff,评审者重点应看什么?

A 必须逐行读取整个 diff
B 重构 diff 无需评审测试
C 重点看配套测试、重构步骤意图、是否夹带行为变更及结构是否改善,而非逐行读 diff ✓ 正确答案
D 行为变更可以混在重构中
#

12. 重构的"验证指标"(validation metric)中可度量、可观测

A 验证指标可以完全主观
B 验证指标应可度量、可观测,才能客观对比基线、验证重构改善 ✓ 正确答案
C 指标只需可度量,无需可观测
D 指标无法指导重构决策
#

13. 重构的分步策略中小步与频繁提交?

A 应一次性完成整个重构再提交
B 拆成小步、每步改完即编译测试提交,使风险可控、可回滚 ✓ 正确答案
C 分步策略与测试无关
D 频繁提交会降低代码质量
#

14. 重构失败的回滚中如何保护?

A 重构失败只能重写整个系统
B 通过小步独立提交、分支隔离、测试安全网和 CI,失败时可精确回滚到安全提交 ✓ 正确答案
C 回滚与提交粒度无关
D 重构失败无法退出
#

15. 重构的度量中复杂度与可维护性?

A 圈复杂度只统计代码的行数
B 圈复杂度反映独立路径数,可维护性指数综合体积、复杂度等指标,适合做重构前后的趋势对比 ✓ 正确答案
C 可维护性指数越高说明代码越难维护
D 度量指标可以完全替代代码评审
#

16. 重构的自动化中 IDE 重构与工具?

A 自动重构只能重命名符号,不能提取方法
B 自动重构会随机改变代码行为
C 自动重构不需要测试配合
D IDE 自动重构基于解析树同步更新所有引用点,比手工修改更安全高效,但语义级重构仍需人工决策 ✓ 正确答案
#

17. 重构后的性能验证中回归基准?

A 重构只改变结构,不可能影响性能
B 用重构前的回归基线对比同口径的延迟(重点 P99)、吞吐与资源指标,控制变量验证性能无退化 ✓ 正确答案
C 性能验证只需看平均延迟
D 基准测试无需预热即可直接对比
#

18. 重构后的文档同步中内部接口变化时注释、ADR 与架构图如何同步更新?

A 文档可以等重构全部完成后再统一补写
B 注释与接口文档随重构同步更新,重构推翻旧设计决策时应新增 ADR 记录而非改写历史 ✓ 正确答案
C ADR 记录后永远不能新增
D 架构图不需要随重构更新