You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
houqin-java/.codebuddy/plans/测试要求增强与权限方案优化_06fa523e.md

3.6 KiB

name overview todos
测试要求增强与权限方案优化 1. 增强测试要求代码级100%覆盖(每个类/方法/if-else/case分支、测试前置流程修改后必须先测试通过才能继续2. 权限实时生效方案从"数据库轮询标记"改为"Redis Pub/Sub"利用已有Redis实例零额外中间件
id content status
update-08-redis 更新08-项目技术要求.md中权限实时通知方案为Redis Pub/Sub completed
id content status dependencies
update-08-test 更新08-项目技术要求.md中测试要求100%覆盖+测试前置流程) completed
update-08-redis
id content status dependencies
update-08-misc 更新08-项目技术要求.md中缓存策略表、缓存管理表、配置项等关联内容 completed
update-08-redis
id content status
update-03-redis 更新03-业务流转逻辑.md中权限实时生效描述 completed
id content status
update-01-redis 更新01-模块划分.md中权限实时生效描述 completed

用户需求

需求1权限实时生效方案优化

当前方案"数据库轮询标记 + Spring Event"每5秒轮询一次数据库资源消耗大。需要改为更轻量的方案利用已有Redis实例实现毫秒级权限变更通知零额外中间件、零数据库压力。

需求2测试要求增强

  • 100%代码级覆盖每个类、方法、包括方法里if-else、case分支都必须测试到
  • 测试前置流程:每次代码修改后,必须先进行测试,测试通过后才能进行下一步操作

方案概述

一、权限实时生效Redis Pub/Sub 替代数据库轮询

原理:权限变更时通过 Redis PUBLISH 命令发布消息,各服务节点通过 MessageListener 订阅频道,收到消息后刷新本地权限缓存。

优势对比

对比项 数据库轮询(原方案) Redis Pub/Sub新方案
数据库压力 每5秒N次SQL 0不碰数据库
延迟 最大5秒 毫秒级(内存操作)
资源消耗 定时线程+DB连接 复用已有Redis连接几乎零额外开销
多节点支持 需每节点轮询 天然支持(每节点各自订阅)
降级策略 Redis断连时权限缓存TTL(2小时)到期后自然刷新

实现要点

  • 频道命名:permission:changed
  • 消息内容版本号Long用于判断是否需要刷新
  • 发布时机:角色权限变更、用户角色分配变更
  • 订阅方:各服务实例启动时注册 RedisMessageListenerContainer
  • 降级保障Redis连接断开时不影响业务缓存TTL到期后自动刷新

二、测试要求增强

  • 单元测试覆盖率从70%提升至100%(行覆盖+分支覆盖)
  • 新增JaCoCo分支覆盖指标要求
  • 新增"9.6 测试前置流程"章节,定义代码修改→测试→下一步的强制流程
  • 在7.8代码审查要求中增加测试覆盖率检查项

修改范围

3个文档共约12处修改点

  1. docs/08-项目技术要求.md9处
  • 3.1 权限变更实时通知:方案描述+代码示例
  • 3.3 跨实例通信描述
  • 5.3 缓存策略表
  • 7.8 代码审查要求
  • 8.4 缓存管理策略表
  • 9.1 单元测试:覆盖率和分支要求
  • 9.2 集成测试:权限生效延迟描述
  • 新增9.6 测试前置流程
  • 10.3 配置项删除轮询间隔新增Redis频道配置
  1. docs/03-业务流转逻辑.md1处
  • 2.3 权限实时生效流程中的描述
  1. docs/01-模块划分.md1处
  • 2.4 权限实时生效机制中的描述