据统计,70%的线上故障源于代码细节疏忽,而这些问题完全可以通过开发自检提前规避。本文提供一份覆盖 业务、代码、数据、协作 四大维度的自检清单,帮你从“救火队员”蜕变为“代码工匠”!
以下是自检清单
01 业务理解与代码编写
描述
编码前需全面理解业务需求,避免因理解偏差导致功能与需求不符。
示例
- 错误:需求是“用户下单后自动发放优惠券”,但代码实现为“用户注册时发放优惠券”。
- 正确:明确业务规则(如优惠券类型、有效期、触发条件)后,在订单支付成功回调中实现逻辑。
02 业务逻辑与实现步骤
描述
拆分业务逻辑为清晰步骤,避免遗漏分支。
示例
- 需求:用户提现需验证余额、风控、记录流水。
- 实现步骤:
- 查询用户当前余额。
- 调用风控系统校验。
- 扣减余额并生成流水。
- 调用第三方支付接口打款。
03 代码规范与命名规范
描述
遵循团队规范,命名需清晰表达用途,避免模糊缩写。
示例
- 错误:
- 变量名 svc(无法明确含义)。
- 方法名 getData()(未说明数据来源)。
- 正确:
- 类名 UserService。
- 方法名 findOrderById()。
- 变量名 couponCode。
04 代码复查与字符检查
描述
检查代码冗余、字符错误,尤其是字符串拼接或复杂逻辑;拷贝别人的代码时考虑是否正确。
示例
- 错误:
Java
String url = domain + "//miapp"; // 多写了一个 `/`
SQL
SELECT * FROM old_table; -- 未修改表名(应为 new_table)
- 正确:
- 检查字符串拼接格式。
- 确保拷贝代码后修改所有关联逻辑。
05 关联表查询与外键约束
描述
通过外键保证数据一致性,查询时关联表并回显关键字段。
示例
- 错误:直接删除用户表记录,导致订单表中外键 user_id 指向无效数据。
- 正确:
SQL
SELECT o.order_id, u.user_id,u.user_name
FROM tbl_order o
LEFT JOIN tbl_user u ON o.user_id = u.id;
06 新增/编辑/删除与关联业务自测
描述
覆盖所有关联场景,避免因数据操作引发连锁问题。
示例
- 场景:删除商品分类时,需测试是否同步处理关联商品(如置为默认分类或禁止删除)。
- 自测用例:尝试删除有商品的分类,验证是否触发拦截提示。
07 OOM 风险代码检测
描述
检测内存泄漏或大数据处理时的 OOM 风险,此项可借助 AI 检测。
示例
- 错误:
JAVA
List<Data> list = new ArrayList<>();
while (true) {
list.add(new Data()); // 内存持续增长
}
- 正确:
- 分页查询 + 流式处理。
- 使用弱引用缓存。
08 与前端接口联调测试
描述
亲自测试接口功能,最好能在开发环境自测几遍。
09 非必填项更新处理
描述
非必填项,后端使用 Mybatis 更新语句时不能用动态字段更新。
示例
- 错误:email 为非必填项
<update id="updateWithTrim">
UPDATE user
<trim prefix="SET" suffixOverrides=",">
<if test="email != null">email = #{email}</if>
</trim>
WHERE id = #{id}
</update>
- 正确:email 为非必填项
<update id="updateWithTrim">
UPDATE user set email = #{email}
WHERE id = #{id}
</update>
10 清空数据库测试
描述
清空数据后验证功能,排除历史数据干扰。
示例
- 场景:测试用户注册功能前,清空 tbl_user 表,确保不会因已有数据导致手机号重复校验失效。
11 大规模数据测试与压测
描述
验证系统在高负载下的稳定性。
示例
- 场景:使用 JMeter 模拟 1 万并发用户访问订单列表接口,观察响应时间与错误率。
- 问题暴露:未分页查询导致数据库 CPU 飙升至 100%。
12 历史数据处理
描述
确保新系统兼容或迁移旧数据。
示例
- 场景:旧系统用户密码为明文,新系统需加密存储。
- 处理方案:编写迁移脚本,读取旧数据加密后写入新表。
13 确保转测文档 SQL 正确性
描述
提供与功能匹配的 SQL 语句,避免测试环境数据错误。
示例
- 错误:
SQL
UPDATE tbl_order SET status=1; -- 遗漏 WHERE 条件
- 正确:
SQL
UPDATE tbl_order SET status=1 WHERE id=1001;
14 团队协作与冲突检测
描述
检测上下游接口或业务冲突,避免隐性故障。
示例
- 冲突场景:A 模块修改了用户状态枚举值,但 B 模块仍依赖旧值,导致逻辑错误。
- 解决:通过接口文档同步变更,并通知关联方联调。
15 服务器日志监控与报错分析
描述
服务器上异常信息并未展示在页面上,如异步任务、空指针异常。
示例
- 错误日志:
JAVA
NullPointerException at com.example.UserService.getProfile()
- 分析:检查 UserService 中 getProfile() 方法,发现未对 user 对象判空。