2. 合规规则基础

在合规规则测试与自动回归的实战中,第一步不是写用例,而是把“规则”本身看清楚。合规规则并不是一段孤立的校验代码,它通常来自外部监管要求、内部制度或合同条款,经过业务翻译、技术表达、上线运行、变更退役等阶段,最终才成为系统里可执行、可测试的逻辑。测试人员如果只盯着接口返回和页面提示,很容易漏掉规则来源、版本差异和生命周期变化带来的回归风险。因此,本节先建立合规规则的完整认知框架。

一、合规规则的类型与来源

合规规则可以从两个维度理解:一是“管什么”,二是“谁提出”。按管控对象,常见类型包括准入类、额度类、频率类、地域类、身份类、时效类、披露类和反洗钱类等。按来源,则可分为外部监管规则、行业规范、内部制度、合同约定和风控策略。不同类型和来源,决定了规则的稳定性、解释空间和测试优先级。

规则类型 典型来源 示例 测试关注点
准入类 监管办法、内部制度 未完成风险测评不得购买高风险产品 边界值、状态前置条件
额度类 监管限额、合同约定 单日累计转账不超过5万元 累计口径、时间窗口
频率类 风控策略、行业规范 同一手机号1小时内最多发送5次验证码 并发、时钟漂移
地域类 监管要求、业务策略 特定地区用户限制开立某类账户 地区编码、数据同步
披露类 消费者保护规定 产品页面必须展示风险提示 文案完整性、展示时机

从测试视角看,外部监管规则通常刚性最强,变更少但解释严;内部制度和风控策略则更灵活,变更频繁,容易成为自动回归的重点。合同约定往往带有客户差异,需要关注参数化和多租户场景。

二、合规规则的表达形式

规则从“自然语言”到“可执行逻辑”,中间存在多种表达形式。常见的有:制度条款、决策表、规则引擎DSL、SQL校验、代码硬编码、配置项和接口契约。不同表达形式对测试的影响差异很大。

  • 自然语言条款:可读性强,但存在歧义,需要测试人员主动澄清“累计”“同一用户”“自然日”等口径。
  • 决策表:条件与动作清晰,适合组合覆盖,但条件爆炸时用例数量会迅速上升。
  • 规则引擎DSL:可配置、可热更新,测试需要关注规则版本、优先级和冲突。
  • SQL/代码:执行确定,但变更成本高,容易隐藏边界条件。
  • 配置项:灵活但易被误改,自动回归必须覆盖配置读取和默认值。

示例:一条“单日累计转账限额”规则,在制度中写作“个人客户单日累计转账不得超过5万元”,在规则引擎中可能表达为:

rule "daily_transfer_limit"
when
  $t: TransferRequest(amount > 0)
  $sum: Number() from accumulate(
    TransferRequest(customerId == $t.customerId, status == "SUCCESS"),
    sum($t.amount)
  )
then
  if ($sum + $t.amount > 50000) {
    reject("DAILY_LIMIT_EXCEEDED");
  }
end

测试时必须确认:累计是否包含失败交易、是否按自然日、是否区分渠道、金额单位是元还是分。

三、规则生命周期与自动回归切入点

合规规则不是静态的,它经历“提出—评审—设计—上线—运行—变更—退役”的生命周期。每个阶段都有测试介入点,而自动回归的价值在变更和运行阶段最突出。

合规规则生命周期与测试介入点 提出 评审 设计 上线 运行 退役 需求澄清 口径与边界确认 用例设计 决策表/组合覆盖 规则映射 条款到DSL追踪 回归基线 版本快照与断言 变更回归 差异影响分析

在“设计”阶段,测试应建立规则与用例的双向追踪:每条规则至少对应一个正向用例、一个边界用例和一个拒绝用例。在“上线”阶段,自动回归基线应固化规则版本、参数快照和期望结果。在“运行”阶段,一旦规则变更,先做差异影响分析,再触发相关回归集,而不是全量重跑。

四、测试挑战与常见误区

合规规则测试的难点,往往不在技术,而在语义和变更。常见挑战包括:规则口径模糊、规则冲突、优先级不明确、参数分散、版本不一致、数据累计口径复杂、以及外部规则更新滞后。自动回归若只覆盖主流程,很容易在边界和组合场景失效。

误区一:把规则测试等同于接口测试。接口返回正确,不代表规则口径正确,例如“累计”是否跨渠道、是否含退款。

误区二:规则变更后只测变更点。实际上,规则优先级、参数默认值和上下游数据都可能受影响。

误区三:自动回归用例长期不维护。规则退役后用例仍执行,造成误报,最终团队失去信任。

复盘建议:为每条合规规则建立“规则卡片”,记录来源、类型、表达形式、生效时间、参数、关联用例和回归标签。规则变更时,先更新卡片,再触发对应回归集。这样既能保证可追溯,也能让自动回归真正服务于合规风险控制。

理解规则的类型、来源、表达形式和生命周期,是设计高质量测试用例和自动回归策略的前提。只有把规则当作有版本、有来源、有语义的生命体来管理,后续的用例建模和回归实战才不会沦为“碰运气”的点击验证。