第二篇:系统功能测试实战:图书借阅模块 BUG 排查与修复代码

一、模块介绍
我在项目中负责全系统功能测试,重点测试核心借阅业务模块,覆盖借书、还书、续借、逾期计算、重复借阅校验等功能。本文记录测试用例设计、测试过程中发现的 BUG,以及对应的修复代码与排查思路。
二、借阅模块测试用例设计
正常流程:读者登录→查询可借图书→提交借书→生成借阅记录;
边界用例 1:同一本书未归还,再次借阅;
边界用例 2:图书库存为 0 时发起借阅;
边界用例 3:归还图书,自动计算逾期天数与罚款;
异常用例:手动修改前端借阅 ID,非法请求后端接口。
三、测试过程发现的核心 BUG 及修复
BUG1:同一本图书可以无限重复借阅,无校验逻辑
现象:读者未归还图书,仍能再次提交借阅申请,数据库生成多条借阅记录。
问题根源:后端借阅接口未查询当前图书未归还记录。
修复代码(后端借阅业务层):
java
运行
// 查询该图书是否存在未归还记录
LambdaQueryWrapper<Borrow> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Borrow::getBookId, borrowDTO.getBookId())
.eq(Borrow::getReturnStatus, 0);
Long count = borrowMapper.selectCount(wrapper);
if(count > 0){
throw new RuntimeException("该书尚未归还,无法再次借阅");
}
BUG2:逾期天数计算逻辑错误,同一天归还仍产生罚款
现象:借书当天归还,系统判定逾期 1 天并生成罚款。
问题根源:日期差值未做判断,直接相减。
修复思路:使用 LocalDate 计算日期差,只有归还日期 > 借阅日期才计算逾期。
java
运行
LocalDate borrowDate = borrow.getBorrowDate();
LocalDate now = LocalDate.now();
long day = ChronoUnit.DAYS.between(borrowDate, now);
if(day > 30){ // 借阅期限30天
int overDay = (int) (day - 30);
borrow.setOverFine(overDay * 0.5); // 每日0.5元罚款
}
BUG3:归还图书后,图书库存数量未自动加 1
现象:图书归还成功,图书表库存不变,库存数量持续减少。
修复:归还成功后更新图书库存 + 1,添加事务保证数据一致性。
BUG4:前端借阅记录列表分页数据错乱,重复展示数据
问题:前端查询接口未携带分页参数,每次请求全量数据覆盖页面。
修复:调用借阅列表接口时,固定传入 pageNum、pageSize,后端分页返回。
四、测试流程收获
完整测试分为功能测试、边界测试、异常测试三层,测试不能只测正常流程,边界场景才是系统最容易出问题的地方。测试时先定位前端问题还是后端问题:控制台无报错但数据异常 = 后端逻辑问题;控制台报 404/500 / 参数缺失 = 前后端对接问题。
截图建议:借阅模块测试用例表格截图、重复借阅报错弹窗截图、逾期罚款计算界面、BUG 修复后正常借阅页面