第三章 数据输入边界检查:数据来源、格式约束、取值范围、空值处理、异常输入
3.1 适用场景
本检查项适用于所有需要接收外部数据输入的AI产品模块,包括但不限于:
- 用户直接录入的文本、数值、文件上传接口
- 第三方API或数据管道推送的结构化/半结构化数据
- 传感器、IoT设备产生的实时数据流
- 模型推理阶段的特征输入(推理前处理环节)
当产品涉及非受控数据源(如公开互联网爬取、用户生成内容)时,本检查为必选且优先级最高。
3.2 前置条件
- 已完成需求规格说明中数据接口定义(至少包含字段名、数据类型、长度、枚举值列表)。
- 已获取至少一份真实样例数据或模拟测试数据(覆盖正常、边界、异常三种情况)。
- 已搭建可独立执行的测试环境(或离线数据验证脚本)。
- 边界检查工具/库已就位(如JSON Schema校验器、正则表达式引擎、数值范围断言库)。
3.3 操作步骤
- 数据来源验证:确认数据是否来自可信白名单源(域名/IP/认证令牌),拒绝未知来源。记录来源标识元数据。
- 格式约束检查:对每个字段验证数据类型、编码、格式模板(如email格式、日期格式YYYY-MM-DD、UUID v4)。
- 取值范围审查:数值型字段检查最小/最大值(含边界闭合开),枚举型字段匹配白名单集合,字符串长度限制。
- 空值处理策略:识别允许为空的字段,对不允许为空的字段拒绝或填充默认值;记录空值位置及处理动作。
- 异常输入注入测试:使用超出范围、畸形格式、注入攻击字符串、超大负载等构造测试用例,观察系统报错、降级或拒绝行为。
技巧:推荐使用“边界值分析+等价类划分”组合方法生成测试用例,至少覆盖:最小值-1、最小值、最大值、最大值+1、有效等价类中值、有效等价类边界值。
3.4 输入输出物
| 物项 | 说明 | 责任人 |
|---|---|---|
| 输入:数据接口定义文档(v1.0+) | 包含字段清单、约束规则、默认值、空值策略 | 产品经理 |
| 输入:测试数据集(正常/边界/异常) | 至少各5条,异常用例≥10条 | 测试工程师 |
| 输出:数据边界检查结果报告 | 逐字段通过/失败/警告,附截图或日志 | 评审人 |
| 输出:异常输入处理日志(系统日志截图) | 含时间戳、输入内容、处理结果 | 开发人员 |
3.5 责任边界
- 产品经理:提供明确的边界规则(如“年龄字段取值范围1~150,不允许空值”),确认空值默认值业务含义。
- 开发人员:实现并自测边界检查逻辑,输出自测通过截图。
- 测试/质量评审人员:独立执行边界测试,填写检查清单报告。
- 安全架构师:审核异常输入处理逻辑是否可能引发注入或拒绝服务漏洞。
3.6 记录材料
- 《数据边界检查清单.xlsx》——字段级别逐项记录。
- 《异常输入测试用例及结果.md》——每个用例包含输入、预期结果、实际结果、是否修复。
- 系统日志片段(边界检查触发时的日志行)。
- 修复后的回测截图(如有失败项)。
3.7 异常处理
常见异常场景及处理预案:
| 异常场景 | 处理方式 | 记录要求 |
|---|---|---|
| 数据来源不在白名单 | 拒绝请求,返回403;记录来源IP和请求体到安全日志 | 必须记录 |
| 格式错误(如json解析失败) | 返回400 + 明确错误描述,不返回栈信息 | 必须记录 |
| 数值超出范围 | 根据业务策略:截断到边界值并告警 或 拒绝请求 | 必须记录 |
| 空值出现在不允许空字段 | 若配置了默认值则使用默认值+记录警告;否则拒绝 | 必须记录 |
| 异常输入包含SQL/JS注入字符 | 拒绝请求,净化后不执行;记录到安全审计日志 | 必须记录 |
| 输入体积过大(如超过10MB) | 直接拒绝,返回413 | 必须记录 |
降级方案:若边界检查模块自身发生故障,应进入“安全失败”模式——对外部输入一律拒绝,并向运维发出告警。
3.8 验收标准
- 所有字段均完成边界值检验,且通过率≥98%(允许少量需修复但已记录case)。
- 异常输入测试用例覆盖度≥100%(即白名单异常场景用例数量不低于设计用例总数)。
- 系统对边界违规输入返回HTTP状态码为400/403/413,响应体中包含机器可读的错误码(如
INVALID_INPUT_RANGE_ERR)。 - 日志中完整记录了每一次边界触发事件(字段名、输入值、处理动作、时间戳)。
- 未发生因边界检查导致的服务崩溃或死锁。
评审快速判据:若数据输入边界检查清单中已覆盖“来源校验+格式+范围+空值+异常注入”五个子项且均通过,则该模块可进入下一阶段。否则退回补充测试。