当前位置: 首页 > news >正文

第二篇:系统功能测试实战:图书借阅模块 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 修复后正常借阅页面

http://www.cnnetsun.cn/news/3099069.html

相关文章:

  • 美图ai模特一键换装,提升电商图片质感的实用工具全测评
  • 国内开发者开通 ChatGPT Plus 屡屡支付失败?记一次 ChatGPT Plus 国内订阅踩坑全过程:支付拦截底层原因拆解 稳定替代方案实操记录
  • AI编码助手真实提效20%-30%:聚焦样板代码、文档摘要与低风险重构
  • 外卖佣金涨到20%之后,我算了一笔账:为什么越来越多商家开始自己搞配送?
  • 计算机毕业设计之基于机器学习的个性化智能推荐系统的设计与实现
  • 方壳电池pack生产线如何选择?
  • SSH密钥实战指南:从原理到配置,实现安全免密登录与自动化运维
  • 小程序同城配送和上门收件发快递新功能发布
  • 空洞骑士模组管理器Scarab:5分钟搞定100+模组安装的终极指南
  • 终极Axure中文界面汉化指南:3分钟解锁流畅原型设计体验
  • IDEA ER图生成失败?7类典型报错代码级溯源+4种兼容性修复模板(含PostgreSQL 15/MySQL 8.4适配清单)
  • 【JetBrains官方未公开文档】:Inspect Code规则引擎底层原理与自定义检查器开发实录
  • 智慧职教刷课脚本:3分钟实现全平台自动学习
  • MWC26上海直击!移远割草机器人解决方案:让庭院作业“智”在必得
  • Adobe Illustrator智能脚本合集:终极设计自动化指南
  • 解放双手:taskt桌面自动化工具完整入门指南
  • SpringBoot+Vue图书管理系统环境搭建全过程 + 核心功能代码实现 + 踩坑复盘
  • 6.25-6.28 伟大可以被计划吗?-说会英语
  • 面对面 Java 面试:从视频直播到微服务的全景探讨
  • Bilibili Toolkit终极指南:如何高效管理你的B站账号与自动化操作
  • 必火GEO工具能解决什么,不能替代什么:企业使用前要看清边界
  • DXVK:跨越图形API鸿沟的翻译艺术
  • GitHub Actions 自托管 Runner 私有化部署:3 种安全构建产物隔离方案
  • 计算机毕业设计之基于机器学习的Bilibli视频弹幕分析
  • 时钟信号从引脚进去,用示波器看波形全是毛刺
  • GitHub Actions 可复用工作流设计:AI编程工具中 4 类模板结构与 3 个调试避坑点
  • 2026年GEO服务商怎么选:先看流程再看案例
  • 计算机毕业设计之基于混合推荐算法的校园租赁系统
  • Synchronous Audio Router:Windows音频路由的终极解决方案与完整配置指南
  • Synchronous Audio Router:Windows音频路由的终极解决方案