[长文手敲] 擦桥的产品——AI文旅(其一)

白芸汐 2026-08-03 00:26 1

情景再现


领导:小白啊,最近有x州有一个文旅项目,你去和客户对接一下,顺便维持一下客户的关系。这个客户是一个新客户,而且要做AI的产品,你去收集一下需求,然后给个内部评估的成本价,最后最好是驻场开发一下。


我:



x总你看要不先把上次差旅报销和补贴发了。


领导:小白,你要懂得奉献,你还年轻,要知道做事业是要牺牲一下小我来成就大我······


我:



那么经过嘚啵嘚,脚打屁股头颠倒的长途二等座之后,也是到了x州。


客户A:诶呀,欢迎欢迎,我们x州钟灵毓秀,山川大好,以后得多来多看。


我:x主任您客气了,我这次主要就是收集一下咱们AI文旅的一些需求。


客户A:



(你小汁)


来,小白,你看我们这里其实需求挺多的,总得需要慢慢来,你来吃饭没有,咱先去吃个饭。


我:走!


我一心热爱工作,x主任您找个人来和我对接就行了。


客户A:彳亍,那你在这里等会儿。


···


快速的等待ing——


此时一阵不明意义的鼓点响起,可惜这里没有大排档椅子



欧呦,原来是关中王来了B工来了。


客户B:你就是小白吧,你好你好。


我:B工你好^-^,咱们今天下午从哪里开始呢?



客户B:今天下午要开个会,你也来一起参加,听一下领导对这个事情说明。


我:好好好。


···


拿起小本本参加会议。


不知名的领导A:在x州地方大力推行文旅兴业的政策下,我们要深入贯彻落实有关决策部署,紧紧围绕文旅产业高质量发展这一主线,立足本地资源禀赋和产业基础,进一步整合区域文化资源、旅游资源和特色产业资源,持续完善基础设施建设,优化公共服务供给,丰富文旅产品业态,提升品牌传播效能,切实把资源优势转化为产业优势、发展优势和竞争优势。


要坚持规划引领、项目带动、业态融合和市场运作相结合,深入挖掘地方历史文化、民俗文化、生态文化和特色文化内涵,积极推动文化、旅游、商业、农业、体育等产业协同发展,着力打造一批具有地方辨识度、市场吸引力和持续运营能力的文旅项目。


同时,我们要强化部门协同,健全工作机制,优化营商环境,加大招商引资和项目服务力度,推动重点任务落地落实,不断提升文旅产业对经济增长、就业带动和乡村振兴的支撑作用,为X州经济社会高质量发展注入新的动力。


没错我就是恶意水字数


···


来,小B(客户B),给大家讲讲你对我们这个项目的看法。


客户B:在我看来,AI文旅这件事,核心仍然是资源、内容、服务和运营,人工智能真正能够发挥作用的地方,是把过去散落在各部门、各景区、各平台的数据连接起来,让管理更精细,让服务更主动,让文旅资源更容易被游客看见、理解和消费。


当前不少地方的文旅信息化已经具备一定基础。景区有票务系统,交通部门有客流数据,公安和应急部门有安全监测数据,市场监管部门有商户信息,各类网络平台上还有游客评价、搜索热度和消费反馈。但这些数据往往各在各的系统里,像是几个部门分别守着几口井,井里都有水,却没有形成一张能够统一调度的水网。AI文旅要做的第一步,就是把这些基础数据治理好、标准统一好、权限划分好。


···


我:(叽里咕噜的在讲什么东西)


客户B:所以我们需要做一个既能统筹协调各个地方的数据,又能管理本地的文旅资源,并且以AI驱动的文旅系统。


我:(听君一席话,浪费两小时)


···


会议结束,我拉住B工。



我:B工,我觉得咱们还有些小细节需要再讨论讨论。


客户B:你有哪些不太懂的地方?


我:咱们的数据是从公安和市监那边拿吗,还是怎么搞?


客户B:从Excel导入,到时候会同步给你。


我:那我先设计一版效果图,然后再商量具体的内容。


客户B:那辛苦你了小白。


抽象的开头


开始动手了,既然我们的GPT这么强大,那我肯定不要自己动手。


图来!




哇咔咔,效果看起来还是不错的嘛。


那么我们接下来就是来确定一下技术栈,想快速一点的开发肯定得是上Python了,要用什么框架吗?


NONONO



直接用下面这一套












































































































类别 技术选型 用途
运行环境 Node.js 24 LTS 前端开发、构建和依赖管理
包管理器 pnpm 10.x Monorepo和依赖管理
前端框架 React 19.2 页面和组件开发
开发构建 Vite 8.x 开发服务器和生产构建
开发语言 TypeScript 5.x 类型约束和接口类型生成
后台组件库 Ant Design 6.x 表格、表单、弹窗、菜单和后台组件
路由 React Router 路由、嵌套路由和权限守卫
服务端状态 TanStack Query 5 请求缓存、分页、刷新和失效管理
客户端状态 Zustand 用户界面和临时全局状态
表单 React Hook Form 复杂表单状态管理
数据校验 Zod 表单与接口数据校验
图表 Apache ECharts 6 大屏和后台统计图表
地图 MapLibre GL JS 景区地图、路线、热力和区域图层
空间计算 Turf.js 缓冲区、距离、范围等前端空间运算
日期处理 dayjs 时间格式化和日期计算
HTTP请求 Axios或统一Fetch封装 REST接口请求
实时通信 WebSocket、SSE 实时指标和AI流式回答
测试 Vitest、Testing Library、Playwright 单元、组件和端到端测试
代码质量 ESLint、Prettier、Stylelint 代码检查和格式统一

别问为什么,问就是之前写文档的时候用过的技术栈,能复制的东西就不要自己写 ^-^


接下来我们看看架构,首先可以肯定的是一定要接入AI,至于到时候是做成客服还是做成Agent效果另说,那么就是传统的架构拼上AI、GIS相关的东西就行,什么网关、rabbit就往里面造就完事了。



非常好的架构图,使我的滨州发光旋转


好了,这个做项目呢就有点像是命题作文,不同的命题其实都有相似的套路和解法。


基本工作准备完毕,来,我们继续去battle,拿一个不同业务流程的完整技术方案出来。


你过来呀!


客户B:哎呦,小白你怎么还在工作,我都要下班了


我:哦哦哦,没什么事情,我来问一点事情,你看这是我给你设计的原型图,B工你看怎么样


客户B:设计的不错,但是我还想增加一点东西···


我:今天不聊腿的事这些细节问题,咱们先确定核心的几块业务,然后我回去给你出几套技术方案


客户B:那我简单给你说一下,主要就是几个点,首先是平台中所有景区、景点、酒店、民宿、餐饮、非遗、文物、旅游线路、活动和公共服务设施啥的,都需要在这一业务线中形成统一档案和唯一编码,并且还得和现在的管理编码兼容。这个到时候通过数据包导入,得兼容一下。


然后是将静态资源档案转化为可持续管理的对象,比如嘞,我们上传的一些附件、图片等等都要做管理滴~并且我们的运营状态也能实时同步显示,主要面向文旅主管部门、县区管理人员和景区运营单位看的,这一部分呢先做一版,后面我们再给你修改。


我们这次还加了一个平台应将客流、交通和停车作为一条协同业务线的需求,这就是会上提到的统一协作(有有吗?可能是听睡着了),数据暂时从Excel导入来测试,这个后面都发给你。


还需要增加一条风险预警,差不多就是客流、交通这些全部都做进去。


还得要一个统一的服务平台给游客使用,这个就用微信小程序吧(嘶——)


还有····




我:好的好的好的(不要再有了),耽误你时间了B工。(说的这都是啥这是,这么多东西就给这么一点钱,还是先做再签,抓紧跑路吧



(还得挣窝囊费,还是再忍忍吧)


短暂整理一下


主要的核心业务线大概就是管理景区的一些数据、运营状态、管理交通,后面还会有微信小程序啥的。


不过这个项目还好,现在已经是对接到可以说话的领导了,其他人可能插手的情况比较少


那么先来决定一下我们的一期工程大概都要做点什么,首先是基本的框架要搭起来,然后就是做一个登录系统、权限控制、部门管理等基本的内容,然后就是主要的最重要的还是管理景区的资产和运营状态、驾驶舱的内容以及gis显示啥的,这个肯定是一期要做的事情。


然后就是一些大概率实现不了的东西就是交通管理啥的,暂时只放一个占位符,不进行任何开发。


那么最后做的就是风险预警、工单处理、小程序,小程序可以放在一期,风险预警做一个基础的框架,工单处理也是只做基础的框架,可以完成基本的功能即可,剩下的和AI相关的就放在二期里面。Agent开发通常都是需要基于一个比较成熟完善的系统来说的,现在这个还是处于搭框架的阶段。


中间边迭代边演示。


需求确认和范围管理


简单整理成为表格如下所示





















































































需求模块 客户需求 一期处理方式 优先级 备注
用户与权限 用户、角色、部门和数据权限 完整实现 P0 系统基础能力
文旅资源管理 景区、景点、酒店、非遗等统一档案 完整实现核心资源 P0 支持Excel导入
景区运营 状态、开放时间、附件和图片 完整实现 P0 驾驶舱依赖
GIS地图 景区点位、边界和地图展示 实现基础版本 P0 暂不做复杂编辑
驾驶舱 综合指标和地图态势 实现一期指标 P0 使用模拟和导入数据
交通停车 实时交通、停车协同 页面占位 P2 缺少真实数据源
风险预警 客流和运营状态预警 实现规则框架 P1 首期人工数据触发
工单处理 投诉受理和处理 实现基础流转 P1 不引入复杂流程引擎
微信小程序 游客查询和基础服务 实现基础版本 P1 不做复杂会员体系
AI服务 问答、导游和Agent 二期建设 P2 依赖知识库和业务数据

第一个完整的业务,文旅资源建档与发布


管理员登录
→ 创建或导入文旅资源
→ 系统校验统一编码
→ 补充图片、附件和地图位置
→ 提交审核
→ 审核人员通过
→ 正式发布
→ 驾驶舱和地图同步展示

第二个业务,景区运营状态维护与驾驶舱联动


景区运营人员更新开放状态
→ 填写变更原因和生效时间
→ 提交状态
→ 系统记录操作日志
→ 驾驶舱更新景区状态
→ 地图图层改变状态颜色
→ 游客端读取最新开放信息

第三个业务,基础风险预警与处置


导入景区客流数据
→ 系统计算景区承载率
→ 达到规则阈值
→ 自动生成预警
→ 推送至待办中心
→ 管理人员签收
→ 填写处置结果
→ 关闭预警
→ 驾驶舱更新预警数量

然后我们根据业务的内容,将一期系统拆成七个模块:


1. 系统管理



  • 用户管理

  • 角色管理

  • 部门管理

  • 菜单管理

  • 字典管理

  • 登录日志

  • 操作日志

  • 数据权限


2. 文旅资源中心



  • 景区管理

  • 景点管理

  • 酒店和民宿

  • 非遗和文物

  • 餐饮资源

  • 旅游线路

  • 公共服务设施

  • 图片和附件管理

  • Excel导入


首期重点实现景区、景点和公共服务设施,其他资源暂时先沿用统一模型或提供基础页面。


3. 景区运营中心



  • 景区开放状态

  • 开放时间

  • 承载量

  • 门票和预约信息

  • 设施状态

  • 运营数据填报

  • 状态变更记录


4. GIS地图中心



  • 景区点位

  • 景区边界

  • 公共设施点位

  • 图层控制

  • 地图查询

  • 地图选点

  • 地图资源展示


5. 驾驶舱



  • 文旅资源总览

  • 景区运营状态

  • 客流趋势

  • 热门景区排行

  • 地图态势

  • 预警统计

  • 数据更新时间


6. 风险预警



  • 预警规则

  • 预警记录

  • 预警详情

  • 预警签收

  • 处置记录

  • 预警关闭


7. 工单和游客服务



  • 工单列表

  • 工单创建

  • 工单分派

  • 处理记录

  • 基础游客端

  • 景区查询

  • 地图浏览

  • 开放状态查询


然后简单说明一下模块之间的关系:


系统管理提供权限
文旅资源提供基础档案
景区运营维护动态状态
GIS负责空间展示
预警读取运营和客流数据
驾驶舱汇总全部业务
游客端读取已发布内容

数据来源


一期项目的数据来源


客户提供Excel数据包
后台人工录入
系统内模拟数据
地图边界和点位文件

Excel导入流程


下载模板
→ 填写数据
→ 上传文件
→ 字段校验
→ 数据预览
→ 错误提示
→ 重复数据处理
→ 确认导入
→ 生成导入报告

必须有的能力:



  • 必填字段检查

  • 数据类型检查

  • 枚举值检查

  • 统一编码检查

  • 重复资源检查

  • 行政区匹配

  • 经纬度合法性检查

  • 错误行下载

  • 导入结果统计


客户发过来的数据是不能直接使用的,得挑选出来合适的字段使用,或者是我们进行预处理之后再导入系统,比如下面这个需要存入系统的字段,其他的字段都是不太必要的,后面需要的再加,或者是客户需要了再加。


























































字段 是否必填 示例
管理编码 WL-JQ-00001
管理编码(原) XX-0101-09
资源名称 X州古城景区
资源类型 景区
所属区域 X州X县
经度 116.12345
纬度 39.12345
运营状态 正常开放
最大承载量 30000

数据库与原型


必须要做的原型



  1. 登录页

  2. 后台总览

  3. 文旅资源列表

  4. 资源编辑页

  5. Excel导入弹窗

  6. 景区运营状态页面

  7. 地图资源页面

  8. 预警列表

  9. 预警详情

  10. 工单列表

  11. 驾驶舱


核心的数据实体主要包含


用户
部门
角色
权限

文旅资源
景区
景点
资源附件
资源图片
资源分类

景区运营状态
运营状态记录
客流数据
停车数据

预警规则
预警事件
预警处置记录

工单
工单处理记录

地图图层
地图要素
数据导入任务
操作审计

一些关键的关系设计


一个景区属于一个行政区域
一个景区包含多个景点
一个景区包含多个附件和图片
一个景区拥有多条运营状态记录
一个景区对应多条客流数据
一条预警规则可以生成多个预警事件
一个预警事件包含多条处置记录
一个工单可以经历多次流转

核心接口设计


POST /auth/login
GET /users/me

GET /tourism-resources
POST /tourism-resources
POST /tourism-resources/import
POST /tourism-resources/{id}/submit
POST /tourism-resources/{id}/approve

GET /scenic-areas
PATCH /scenic-areas/{id}/operation-status

GET /dashboard/overview
GET /dashboard/map-status

GET /alerts
POST /alerts/{id}/accept
POST /alerts/{id}/handle
POST /alerts/{id}/close

GET /tickets
POST /tickets
POST /tickets/{id}/process

一期迭代


迭代一,基础工程



  • 前后端工程初始化

  • 登录

  • 用户和权限

  • 部门和角色

  • 基础布局

  • 数据库迁移

  • 日志和异常处理


迭代二,资源管理



  • 景区资源模型

  • 资源增删改查

  • 分类和字典

  • 图片和附件

  • Excel导入

  • 审核发布


迭代三,运营与GIS



  • 景区运营状态

  • 承载量

  • 地图选点

  • 景区边界

  • POI展示

  • 图层控制


迭代四,驾驶舱



  • 综合指标

  • 地图态势

  • 客流趋势

  • 景区排行

  • 运营状态

  • 数据快照


迭代五,预警和工单



  • 预警规则

  • 预警生成

  • 签收和处置

  • 工单基础流转

  • 待办中心


成本估算


内部成本 = 人员人天成本 + 差旅成本 + 服务器与模型成本(一般2g只考虑部署的时间成本) + 第三方服务成本 + 风险预留


按照一人月22天计算,然后可以大致估算出来开发时间和开发成本,我这里的计算数据就不展示出来了,大家可以自己估算一下。


风险预留也是一个大头,重点风险包括不限于:



  • Excel数据质量不可控

  • 小程序是否涉及认证主体和备案

  • 地图服务是否有授权

  • 客户临时增加字段

  • 大屏指标没有真实来源

  • AI二期边界不清晰

  • 客户验收人员中途变化

  • 交通数据长期无法提供


等等


关于需求变更


需求变更分为:


缺陷修复
原需求没有正确实现

需求优化
不改变主要工作量

新增需求
增加页面、流程、数据或接口

范围变更
影响排期、成本或架构

最重要的是范围变更,也是我们开发过程中经常遇见的,比如“小白你先把这个页面功能做了看看”“我觉得这个流程得改一改”等等,其实新增功能还是比较好预测的,主要是原有的业务变更。


交付范围


用户权限



  • 用户能够正常登录和退出

  • 不同角色显示不同菜单

  • 县区用户不能查看其他区域受限数据

  • 所有关键操作保留审计日志


文旅资源



  • 支持景区资源新增、编辑、审核和发布

  • 支持标准Excel模板导入

  • 错误数据能够定位到具体行

  • 资源能够绑定图片、附件和地图位置


景区运营



  • 支持维护景区开放状态和承载量

  • 状态变更能够记录历史

  • 驾驶舱能够读取最新状态


GIS地图



  • 能够展示景区和服务设施点位

  • 能够根据区域和类型筛选

  • 能够查看资源详情

  • 能够定位到指定景区


驾驶舱



  • 能够展示规定的核心指标

  • 指标具有明确数据来源

  • 地图和列表能够联动

  • 页面在目标分辨率下正常显示


风险预警



  • 能够配置基础阈值规则

  • 测试数据满足条件时能够生成预警

  • 预警能够签收、处置和关闭

  • 全流程保留操作记录


工单



  • 能够创建和分派工单

  • 能够填写处理结果

  • 能够查询处理记录

  • 能够完成基本关闭流程


最后还要列出交付物:


源代码
数据库脚本
部署文件
接口文档
操作手册
管理员手册
测试报告
验收报告
培训材料
第三方依赖清单
账号权限清单
备份恢复说明
···

拆解需求到任务


那么一条合格的项目任务,需要同时满足以下条件:



  1. 只有一个主要目标。

  2. 只有一个直接责任人。

  3. 能够独立判断完成或未完成。

  4. 预计工作量原则上不超过两个工作日。

  5. 明确前置依赖。

  6. 明确交付物。

  7. 明确验收标准。

  8. 能够关联原始需求、页面、接口和测试用例。


例如,下面这条任务不合格。


完成景区管理模块

因为它并没有说明是做列表、表单、接口、数据库,还是导入、审核和权限这些内容。


所以拆解后应该变成:


创建景区资源数据库表
实现景区列表查询接口
实现景区分页查询页面
实现景区新增表单
实现景区新增接口
实现景区编辑接口
实现景区详情页面
实现景区删除权限校验
实现景区图片上传
实现景区附件关联
实现景区Excel导入模板
实现导入数据校验
实现导入错误报告下载

任务名称统一采用“动词+业务对象+明确结果”的格式。


推荐使用:


设计景区资源数据模型
实现景区列表查询接口
编写景区导入字段校验规则
配置景区编辑按钮权限
验证景区状态同步结果

不建议使用:


景区功能
处理地图
完善权限
优化接口
弄一下导入
其他相关工作

当然,你写日志可以这么搞


建立需求台账


拆解前,先建立需求台账。每一条客户需求都必须获得唯一编号,后续的原型、任务、接口、测试用例和验收项都与该编号关联。当然如果你使用禅道、jira、飞书、Teambition或者是其他的什么项目管理工具,就只需要专注于任务的拆解即可。


建议字段如下:
































































字段 说明
需求编号 例如 REQ-RES-001
需求名称 景区资源统一建档
需求来源 客户B、会议纪要、补充文件
原始描述 保留客户原话
标准描述 产品人员整理后的正式描述
所属业务线 文旅资源、景区运营、预警等
用户角色 州级管理员、县区管理员、景区人员
优先级 P0、P1、P2
建设阶段 一期、二期、预留
数据来源 Excel、人工录入、第三方接口
验收方式 页面操作、接口验证、数据比对
负责人 产品或项目负责人
当前状态 待分析、已确认、已冻结、已变更

需求状态采用统一流程。


待收集
→ 待分析
→ 待确认
→ 已确认
→ 已拆解
→ 已冻结
→ 开发中
→ 已验收

未经确认的需求不能直接进入开发。开发如果听到说“这个应该很简单吧”,也不能顺手加进迭代里面去。


任务应该怎么写


项目任务建议划分为六类:


讨论
设计
开发
测试
缺陷
交付

其中,讨论和设计属于开发前置工作;开发负责产出功能;测试负责验证功能;缺陷(bug)负责修复已经确认的问题;交付负责部署、文档和验收。


一、讨论任务


讨论任务用于解决尚未明确的问题,目标是形成决定,不直接产出程序功能。


适用场景包括:



  • 需求范围讨论

  • 业务流程讨论

  • 数据口径讨论

  • 权限规则讨论

  • 技术方案讨论

  • 第三方接口讨论

  • 验收标准讨论

  • 需求变更评审


任务名称采用:


讨论 + 业务对象 + 待确定事项

例如:


讨论景区统一编码兼容方案
讨论景区运营状态流转规则
讨论客流预警阈值计算口径
讨论县区管理员数据权限范围
讨论Excel导入重复数据处理方式

讨论任务必须包含:


背景
待解决问题
参与人员
候选方案
需要作出的决定
计划完成时间

完成标准不能写成“已经开会”等,应该写成:


已经形成明确结论
已经记录未决事项
已经明确责任人
已经更新需求或设计文档
参与方已经确认会议结论

讨论任务的交付物通常是:



  • 会议纪要

  • 决策记录

  • 需求确认单

  • 方案评审结论

  • 待办事项清单


没有形成结论的会议不算完成。


二、设计任务


设计任务用于将已经确认的需求转化为可以开发的方案。


设计任务可以继续划分为:


产品设计
交互设计
视觉设计
技术设计
数据设计
接口设计
测试设计
部署设计

任务名称采用:


设计 + 业务对象 + 具体成果

例如:


设计景区资源新增流程
设计景区资源列表页面
设计景区运营状态数据模型
设计Excel导入校验规则
设计客流预警规则接口
设计驾驶舱指标数据口径
设计生产环境部署拓扑

设计任务必须明确最终产物。












































设计类型 主要交付物
产品设计 业务流程、功能说明、状态规则
交互设计 页面原型、操作流程、异常提示
视觉设计 UI效果图、组件规范、设计标注
技术设计 模块结构、时序图、技术方案
数据设计 ER图、表结构、字段字典
接口设计 OpenAPI、请求响应结构、错误码
测试设计 测试范围、测试用例、测试数据
部署设计 网络拓扑、资源配置、部署流程

设计任务的完成标准包括:


设计成果已经输出
边界和异常场景已经说明
关联需求已经标记
相关开发人员已经评审
评审问题已经处理
设计结果已经进入版本管理

设计任务未完成前,不建议直接进入正式开发。


三、开发任务


开发任务用于实现一个可以验证的功能结果。


开发任务应按照前端、后端、数据、GIS、AI、运维等技术方向拆分,不能只写“开发景区管理模块”。


任务名称采用:


实现 + 业务对象 + 具体能力

例如:


实现景区资源分页查询接口
实现景区资源新增表单
实现景区图片上传功能
实现景区状态变更记录
实现Excel导入数据预览
实现驾驶舱地图点位图层
实现预警事件WebSocket推送

一个标准开发任务必须包含:


关联需求
关联设计
输入条件
实现范围
不包含范围
前置依赖
接口或数据结构
异常处理要求
权限要求
测试要求
完成标准

开发任务原则上控制在半天到两个人日以内(测试普遍稍微多一点时间,不过也是最多16h,bug和小任务可以控制在0.5~6h以内)。超过两个人日时,应继续拆分。


例如“实现景区Excel导入”应拆为:


实现Excel文件上传接口
实现模板版本校验
实现表头校验
实现必填字段校验
实现管理编码校验
实现重复数据检测
实现导入数据预览
实现错误报告下载
实现确认导入功能
实现导入批次记录

开发任务完成标准建议采用统一定义:


代码已经实现
代码已经自测
异常情况已经处理
权限校验已经实现
数据库迁移脚本已经提交
接口文档已经更新
单元测试已经通过
代码已经提交评审
评审问题已经修复
代码已经合并到目标分支

仅仅“代码写完了”不能算完成,需要进行测试,不过一般情况下覆盖不了所有的测试,而且团队人数少的情况下也没有人力进行测试。


四、测试任务


测试任务用于验证某一项需求、功能或业务流程是否符合设计和验收要求。


任务名称采用:


验证 + 业务对象 + 具体场景

例如:


验证景区资源新增流程
验证景区资源导入异常数据处理
验证县区管理员数据隔离
验证景区状态与驾驶舱联动
验证客流达到阈值后生成预警
验证WebSocket断线重连

测试任务可以分为:


单元测试
接口测试
功能测试
集成测试
权限测试
兼容性测试
性能测试
安全测试
回归测试
验收测试

每条测试任务必须包含:


测试对象
测试环境
前置条件
测试数据
执行步骤
预期结果
实际结果
关联需求
关联缺陷

测试任务的完成标准包括:


计划用例已经执行
测试结果已经记录
发现的问题已经创建缺陷
阻塞性问题已经处理
回归测试已经通过
测试报告已经更新

测试发现问题后,不直接修改原开发任务,而应创建独立缺陷任务。


五、缺陷任务


缺陷任务用于记录实际结果与已确认需求、设计或验收标准之间的偏差。


任务名称采用:


修复 + 发生位置 + 问题表现

例如:


修复景区列表区域筛选无效问题
修复Excel导入重复编码未提示问题
修复县区用户能够查看全州数据问题
修复驾驶舱断线后数据不更新问题
修复预警关闭后统计数量未刷新问题

缺陷任务必须包含:


问题描述
发现环境
复现步骤
预期结果
实际结果
影响范围
严重等级
优先级
截图或日志
初步原因
关联版本
关联需求

严重等级建议统一为:
































等级 说明
致命 系统不可用、数据丢失、严重安全问题
严重 核心流程无法完成,没有替代方式
一般 部分功能异常,但存在替代方式
轻微 文案、样式、提示或低影响问题
建议 不属于缺陷,属于体验优化

缺陷处理流程:


新建
→ 已确认
→ 修复中
→ 待验证
→ 已关闭

特殊状态包括:


无法复现
重复缺陷
设计如此
延期处理
拒绝修复
重新打开

缺陷关闭标准:


根因已经明确
修复代码已经合并
原问题已经验证通过
关联场景已经回归
没有引入新的问题
缺陷原因和处理结果已经记录

六、交付任务


交付任务用于将开发完成的功能部署到目标环境,并形成客户能够接收和使用的成果。


任务名称采用:


部署、编写、整理、执行 + 交付对象

例如:


部署一期系统至验收环境
执行生产数据库初始化
编写后台管理员操作手册
整理一期接口文档
执行客户系统培训
整理一期验收材料
执行数据库备份恢复演练

交付任务主要包括:


环境部署
配置初始化
数据迁移
发布验证
操作文档
部署文档
测试报告
培训
验收
备份恢复
源代码移交

交付完成标准包括:


目标环境部署成功
系统健康检查通过
数据库迁移执行成功
核心业务冒烟测试通过
配置和账号完成移交
操作文档已经提供
客户培训已经完成
遗留问题已经登记
交付记录已经签字确认

任务之间的标准关系


一个功能从提出到交付,通常按照以下链路推进:


讨论任务
→ 设计任务
→ 开发任务
→ 测试任务
→ 缺陷任务
→ 回归测试
→ 交付任务

例如“景区运营状态管理”可以拆成:


讨论景区运营状态范围
讨论运营状态转换规则

设计景区状态业务流程
设计景区状态数据库结构
设计景区状态变更页面
设计景区状态接口

实现景区状态查询接口
实现景区状态变更接口
实现状态变更记录
实现后台状态变更表单
实现驾驶舱状态同步

验证景区状态正常变更
验证非法状态转换被拦截
验证县区用户数据权限
验证驾驶舱状态实时更新

修复定时状态未按时生效问题
修复状态更新后地图颜色未变化问题

部署景区状态功能至验收环境
整理景区状态操作说明

不要把任务类型和任务状态混在一起


“开发”“测试”“缺陷”是任务类型。


“待处理”“进行中”“已完成”是任务状态。


推荐任务类型:


讨论
设计
开发
测试
缺陷
交付
文档
运维

推荐任务状态:


待澄清
待处理
进行中
待评审
待联调
待测试
待验收
已完成
已阻塞
已取消

例如:


任务类型:设计
任务状态:待评审

任务类型:开发
任务状态:进行中

任务类型:缺陷
任务状态:待验证

这样才能统计:



  • 本周完成了多少开发任务

  • 当前有多少设计任务未评审

  • 测试阶段发现了多少缺陷

  • 缺陷平均修复时间是多少

  • 哪类任务最容易阻塞项目


统一任务模板


每条任务至少包含以下字段:


任务编号
任务类型
任务名称
所属项目
所属迭代
关联需求
任务描述
输入条件
输出结果
不包含范围
前置依赖
负责人
协作人
预计人天
计划开始时间
计划结束时间
完成标准
验收人
当前状态
风险说明
相关文档
相关接口
相关页面
相关测试用例

任务描述模板可以统一为:


背景
为什么需要执行该任务。

目标
完成后要解决什么问题。

范围
本任务需要完成哪些内容。

非范围
本任务明确不处理哪些内容。

输入
执行任务所需的需求、设计、数据或接口。

输出
完成后必须提交哪些代码、页面、文档或结果。

依赖
开始前需要完成哪些任务。

完成标准
满足哪些可验证条件后可以关闭任务。

核心写法示例


一条任务必须回答六个问题:


为什么做
具体做什么
明确不做什么
依赖什么
产出什么
如何证明已经完成

例如:


任务名称
实现景区资源Excel表头校验

为什么做
防止客户上传错误模板后进入后续导入流程。

具体做什么
读取上传文件第一行表头,对照当前模板版本校验必填列、
列名和重复列。

明确不做什么
本任务不校验具体数据行,也不写入正式业务数据。

依赖什么
标准导入模板和字段字典已经确认。

产出什么
表头校验服务、错误码、接口响应和单元测试。

如何证明完成
正确模板校验通过;缺列、错列和重复列能够返回明确错误;
相关自动化测试全部通过。

基础平台与工程底座任务拆解


阶段目标


本阶段目标是建立后续业务开发所依赖的公共底座,使系统达到以下状态:



  1. 前后端工程能够在本地、测试环境独立启动。

  2. 管理后台能够完成登录、退出和身份恢复。

  3. 用户、部门、角色、权限具备基础数据结构。

  4. 前端具备路由守卫、按钮权限和统一请求能力。

  5. 后端具备认证鉴权、异常处理、日志记录和数据库迁移能力。

  6. PostgreSQL、Redis、RabbitMQ和对象存储可以通过容器启动。

  7. OpenAPI可以生成前端接口类型。

  8. 核心流程具备自动化测试。

  9. 项目可以通过CI完成检查、测试和构建。

  10. 测试环境可以重复部署,并具备基本回滚能力。


本阶段完成后,后续业务模块只需要按照既定规范增加领域模块,不需要重复建设登录、权限、异常处理、日志、部署和测试框架等。


阶段范围


本阶段包含


项目仓库和目录结构
前端基础工程
后端基础工程
数据库和缓存连接
登录认证
用户、部门、角色和权限基础模型
路由权限和按钮权限
统一请求和响应
统一异常处理
结构化日志
操作审计基础能力
OpenAPI接口生成
Docker开发环境
CI基础流水线
自动化测试基础框架
部署和开发文档

本阶段明确不包含


景区资源管理
景点、酒店、民宿和非遗管理
Excel业务数据导入
GIS地图业务
驾驶舱真实指标
风险预警业务
工单业务
游客端小程序
AI知识库
智能问答
数字导游
交通停车业务

这些内容进入后续迭代。本阶段可以预留目录和接口空间,但不能把业务开发混入基础底座。


任务分类


本阶段任务分为六类:


讨论任务
设计任务
开发任务
测试任务
缺陷任务
交付任务

讨论任务


讨论任务的目标是形成明确决定。只开会、不形成结论不能关闭任务。


























































































































编号 任务名称 主要输出 验收标准
DISC-001 讨论一期基础阶段范围 阶段范围说明 明确包含项和不包含项
DISC-002 讨论项目决策和确认机制 干系人清单 明确需求提出人、确认人和验收人
DISC-003 讨论前后端仓库组织方式 仓库决策记录 确认Monorepo或多仓库方案
DISC-004 讨论开发分支管理方式 Git分支规范 明确主分支、开发分支和发布分支
DISC-005 讨论身份认证方案 认证决策记录 明确本地认证、OIDC或统一认证边界
DISC-006 讨论Token和会话策略 会话规范 明确有效期、刷新、注销和失效方式
DISC-007 讨论用户和组织来源 用户来源说明 明确本地维护或第三方同步
DISC-008 讨论权限控制层级 权限范围说明 明确菜单、路由、按钮和数据权限
DISC-009 讨论行政区数据权限预留 数据权限草案 明确全州、县区和景区级范围
DISC-010 讨论开发环境依赖 环境依赖清单 确认PostgreSQL、Redis等组件
DISC-011 讨论测试环境部署方式 部署决策记录 明确服务器、域名、端口和网络限制
DISC-012 讨论浏览器和分辨率要求 兼容性范围 明确后台支持浏览器和目标分辨率
DISC-013 讨论接口响应和错误码规范 接口规范结论 统一响应格式和错误码命名
DISC-014 讨论日志和审计范围 日志范围说明 明确登录、操作、错误和接口日志
DISC-015 讨论敏感信息处理规则 脱敏规则 明确密码、Token、手机号等处理方式
DISC-016 讨论代码评审规则 评审规范 明确合并条件和评审责任人
DISC-017 讨论任务和缺陷流转方式 项目工作流 确认任务状态、缺陷等级和关闭条件
DISC-018 讨论阶段退出标准 阶段验收表 形成可执行的阶段完成标准

讨论任务统一完成条件


已经形成书面结论
未决问题已经单独登记
结论已经明确责任人
相关文档已经更新
关键参与方已经确认
···

设计任务



  1. 总体工程设计





















































编号 任务名称 交付物
DES-001 设计项目总体目录结构 项目目录设计
DES-002 设计前端Monorepo结构 前端工作区设计
DES-003 设计后端模块化目录结构 后端分层设计
DES-004 设计公共包划分 公共模块清单
DES-005 设计环境配置体系 环境变量规范
DES-006 设计本地、测试和生产环境差异 环境矩阵
DES-007 设计版本管理规则 版本发布规范
DES-008 设计依赖锁定规则 依赖管理规范


  1. 前端基础设计









































































编号 任务名称 交付物
DES-FE-001 设计后台整体布局 布局原型
DES-FE-002 设计登录页面 登录页原型
DES-FE-003 设计前端路由结构 路由树
DES-FE-004 设计前端权限守卫 权限流程图
DES-FE-005 设计按钮权限组件接口 权限组件设计
DES-FE-006 设计统一请求客户端 请求层设计
DES-FE-007 设计接口错误处理方式 错误处理流程
DES-FE-008 设计服务端状态管理边界 Query使用规范
DES-FE-009 设计客户端状态管理边界 Zustand使用规范
DES-FE-010 设计前端主题变量 设计Token清单
DES-FE-011 设计403、404和500页面 异常页原型
DES-FE-012 设计前端代码分层规范 模块目录规范


  1. 后端基础设计









































































编号 任务名称 交付物
DES-BE-001 设计FastAPI应用启动结构 应用初始化设计
DES-BE-002 设计接口版本规则 API版本规范
DES-BE-003 设计统一响应结构 响应Schema
DES-BE-004 设计业务错误码体系 错误码规范
DES-BE-005 设计异常处理流程 异常映射表
DES-BE-006 设计请求追踪机制 request_id和trace_id规范
DES-BE-007 设计数据库会话管理 Session生命周期说明
DES-BE-008 设计数据库迁移规范 Alembic迁移规范
DES-BE-009 设计Redis Key规范 Redis Key命名规则
DES-BE-010 设计健康检查接口 健康检查规范
DES-BE-011 设计操作审计结构 审计字段清单
DES-BE-012 设计服务启动配置检查 启动校验规则


  1. 身份与权限设计



















































































编号 任务名称 交付物
DES-IAM-001 设计用户数据模型 用户表设计
DES-IAM-002 设计部门数据模型 部门表设计
DES-IAM-003 设计角色数据模型 角色表设计
DES-IAM-004 设计权限数据模型 权限表设计
DES-IAM-005 设计用户角色关联关系 关联表设计
DES-IAM-006 设计角色权限关联关系 关联表设计
DES-IAM-007 设计登录流程 登录时序图
DES-IAM-008 设计Token刷新流程 刷新时序图
DES-IAM-009 设计退出和Token失效流程 注销时序图
DES-IAM-010 设计密码存储方式 密码安全规范
DES-IAM-011 设计登录失败锁定规则 账号锁定规范
DES-IAM-012 设计数据权限上下文 数据范围对象设计
DES-IAM-013 设计超级管理员初始化方式 初始化方案
DES-IAM-014 设计权限缓存和失效方式 权限缓存方案


  1. 测试与部署设计




































































编号 任务名称 交付物
DES-TST-001 设计前端测试目录 前端测试规范
DES-TST-002 设计后端测试目录 后端测试规范
DES-TST-003 设计测试数据生成方式 Fixture规范
DES-TST-004 设计登录E2E测试流程 E2E测试方案
DES-TST-005 设计权限测试矩阵 权限用例清单
DES-OPS-001 设计Docker Compose拓扑 容器拓扑图
DES-OPS-002 设计Nginx路由结构 代理配置方案
DES-OPS-003 设计CI执行流程 CI流程图
DES-OPS-004 设计发布和回滚流程 发布规范
DES-OPS-005 设计数据库备份方案 备份恢复方案
DES-OPS-006 设计密钥和配置管理方式 配置安全规范

设计任务和退出条件


设计文档已经完成
关键边界已经明确
异常场景已经覆盖
开发和测试人员已经评审
评审问题已经处理
最终版本已经进入版本管理

开发任务



  1. 仓库和工程初始化






















































































编号 原子任务 依赖 完成标准
DEV-BASE-001 创建项目根仓库 DES-001 仓库可以正常克隆
DEV-BASE-002 创建frontend目录 DEV-BASE-001 前端目录已提交
DEV-BASE-003 创建backend目录 DEV-BASE-001 后端目录已提交
DEV-BASE-004 创建infrastructure目录 DEV-BASE-001 基础设施目录已提交
DEV-BASE-005 创建deploy目录 DEV-BASE-001 部署目录已提交
DEV-BASE-006 创建docs目录 DEV-BASE-001 文档目录已提交
DEV-BASE-007 创建根目录README DEV-BASE-001 包含项目启动入口
DEV-BASE-008 创建统一.gitignore DEV-BASE-001 构建产物和密钥不会提交
DEV-BASE-009 创建.editorconfig DEV-BASE-001 IDE格式规则统一
DEV-BASE-010 创建环境变量示例文件 DES-005 不包含真实密钥
DEV-BASE-011 配置提交信息规范 DISC-004 非法提交可被检查
DEV-BASE-012 配置Git Hook DEV-BASE-011 提交前自动执行基础检查


  1. 前端基础工程
































































































































编号 原子任务 依赖 完成标准
DEV-FE-001 初始化pnpm workspace DEV-BASE-002 workspace命令可以执行
DEV-FE-002 创建admin React应用 DEV-FE-001 后台应用可以启动
DEV-FE-003 创建cockpit React应用 DEV-FE-001 驾驶舱空壳可以启动
DEV-FE-004 创建共享ui包 DEV-FE-001 应用可以引用公共组件
DEV-FE-005 创建共享types包 DEV-FE-001 公共类型可以导入
DEV-FE-006 创建api-client包 DEV-FE-001 接口代码有固定目录
DEV-FE-007 创建auth公共包 DEV-FE-001 权限逻辑具备独立目录
DEV-FE-008 创建theme公共包 DEV-FE-001 主题变量可共享
DEV-FE-009 配置TypeScript基础规则 DEV-FE-002 类型检查通过
DEV-FE-010 配置ESLint DEV-FE-002 lint命令可执行
DEV-FE-011 配置Prettier DEV-FE-002 格式化命令可执行
DEV-FE-012 配置Stylelint DEV-FE-002 样式检查可执行
DEV-FE-013 配置Vitest DEV-FE-002 示例测试通过
DEV-FE-014 配置React Testing Library DEV-FE-013 示例组件测试通过
DEV-FE-015 配置Playwright DEV-FE-002 浏览器测试可启动
DEV-FE-016 配置开发环境代理 DEV-FE-002 API请求可代理到后端
DEV-FE-017 配置前端环境变量读取 DEV-FE-002 不同环境配置可切换
DEV-FE-018 配置生产构建命令 DEV-FE-002 admin构建成功
DEV-FE-019 配置驾驶舱构建命令 DEV-FE-003 cockpit构建成功


  1. 前端公共能力












































































































































编号 原子任务 依赖 完成标准
DEV-FE-020 集成Ant Design DEV-FE-002 基础组件正常显示
DEV-FE-021 配置全局主题变量 DEV-FE-020 主题配置统一生效
DEV-FE-022 配置React Router DEV-FE-002 基础路由正常跳转
DEV-FE-023 实现后台基础布局 DEV-FE-020、022 顶栏、侧栏和内容区可用
DEV-FE-024 实现菜单配置模型 DEV-FE-023 菜单可由配置生成
DEV-FE-025 实现面包屑组件 DEV-FE-023 路由变化时正确展示
DEV-FE-026 实现页面加载状态组件 DEV-FE-020 页面加载状态统一
DEV-FE-027 实现空数据状态组件 DEV-FE-020 无数据时统一展示
DEV-FE-028 实现全局错误边界 DEV-FE-002 页面错误不会导致整站白屏
DEV-FE-029 实现403页面 DES-FE-011 无权限时可展示
DEV-FE-030 实现404页面 DES-FE-011 未知路由可展示
DEV-FE-031 实现500页面 DES-FE-011 系统错误可展示
DEV-FE-032 配置TanStack Query DEV-FE-002 Query Provider可用
DEV-FE-033 配置Zustand基础Store DEV-FE-002 全局UI状态可保存
DEV-FE-034 实现统一HTTP客户端 DES-FE-006 统一处理基础地址和超时
DEV-FE-035 实现请求认证信息注入 DEV-FE-034 登录后请求携带凭证
DEV-FE-036 实现统一接口错误转换 DEV-FE-034 错误能转换为统一结构
DEV-FE-037 实现全局错误提示 DEV-FE-036 常见接口错误有用户提示
DEV-FE-038 实现请求取消机制 DEV-FE-034 页面卸载后可取消请求
DEV-FE-039 配置OpenAPI代码生成 DEV-FE-006 可生成接口类型
DEV-FE-040 增加接口生成脚本 DEV-FE-039 pnpm命令可重新生成接口


  1. 后端基础工程
















































































































































































编号 原子任务 依赖 完成标准
DEV-BE-001 使用uv初始化Python项目 DEV-BASE-003 uv同步依赖成功
DEV-BE-002 创建FastAPI应用入口 DEV-BE-001 服务可以启动
DEV-BE-003 创建应用工厂 DEV-BE-002 测试可创建独立应用
DEV-BE-004 配置Pydantic Settings DEV-BE-001 环境变量可以加载
DEV-BE-005 实现启动配置校验 DEV-BE-004 缺少必要配置时启动失败
DEV-BE-006 配置异步SQLAlchemy DEV-BE-004 可以连接PostgreSQL
DEV-BE-007 配置数据库连接池 DEV-BE-006 连接池参数可配置
DEV-BE-008 配置Alembic DEV-BE-006 可以执行迁移
DEV-BE-009 创建初始数据库迁移 DEV-BE-008 空库可升级到最新版本
DEV-BE-010 配置Redis客户端 DEV-BE-004 可以读写测试Key
DEV-BE-011 配置RabbitMQ连接参数 DEV-BE-004 配置可以被Worker读取
DEV-BE-012 配置对象存储客户端骨架 DEV-BE-004 可以完成连接检查
DEV-BE-013 实现请求ID中间件 DES-BE-006 每次请求具有request_id
DEV-BE-014 实现统一响应模型 DES-BE-003 接口使用统一结构
DEV-BE-015 实现统一异常处理器 DES-BE-005 异常转换为标准错误
DEV-BE-016 实现业务异常基类 DEV-BE-015 模块可以定义业务错误
DEV-BE-017 建立错误码注册机制 DEV-BE-016 错误码不会重复
DEV-BE-018 配置结构化日志 DEV-BE-013 日志包含请求和服务信息
DEV-BE-019 实现访问日志中间件 DEV-BE-018 记录接口、状态和耗时
DEV-BE-020 实现敏感字段过滤器 DEV-BE-018 密码和Token不进入日志
DEV-BE-021 实现存活检查接口 DES-BE-010 /health/live可访问
DEV-BE-022 实现就绪检查接口 DES-BE-010 检查数据库和Redis
DEV-BE-023 配置OpenAPI标题和版本 DEV-BE-002 文档信息正确
DEV-BE-024 配置API版本前缀 DES-BE-002 接口统一使用/api/v1
DEV-BE-025 配置CORS安全策略 DEV-BE-002 仅允许配置域名
DEV-BE-026 配置请求体大小限制 DEV-BE-002 超限请求被拒绝
DEV-BE-027 配置基础接口限流骨架 DEV-BE-010 可为登录接口配置限流


  1. 用户、部门、角色和权限模型


























































































































编号 原子任务 依赖 完成标准
DEV-IAM-001 创建用户SQLAlchemy模型 DES-IAM-001 字段和约束符合设计
DEV-IAM-002 创建部门SQLAlchemy模型 DES-IAM-002 支持部门层级
DEV-IAM-003 创建角色SQLAlchemy模型 DES-IAM-003 角色编码唯一
DEV-IAM-004 创建权限SQLAlchemy模型 DES-IAM-004 权限编码唯一
DEV-IAM-005 创建用户角色关联模型 DES-IAM-005 支持多角色
DEV-IAM-006 创建角色权限关联模型 DES-IAM-006 支持多权限
DEV-IAM-007 创建IAM数据库迁移 DEV-IAM-001至006 新库可正确建表
DEV-IAM-008 创建用户领域Schema DEV-IAM-001 输入输出模型隔离
DEV-IAM-009 创建角色领域Schema DEV-IAM-003 输入输出模型隔离
DEV-IAM-010 创建权限领域Schema DEV-IAM-004 输入输出模型隔离
DEV-IAM-011 实现用户Repository DEV-IAM-001 支持按用户名和ID查询
DEV-IAM-012 实现角色Repository DEV-IAM-003 支持查询角色权限
DEV-IAM-013 实现部门Repository DEV-IAM-002 支持查询部门层级
DEV-IAM-014 实现权限聚合查询 DEV-IAM-012 能获取用户全部权限
DEV-IAM-015 实现超级管理员初始化脚本 DES-IAM-013 首次部署可创建管理员
DEV-IAM-016 实现基础角色初始化脚本 DEV-IAM-015 可初始化标准角色
DEV-IAM-017 实现基础权限初始化脚本 DEV-IAM-016 可初始化权限编码
DEV-IAM-018 实现初始化脚本幂等控制 DEV-IAM-015至017 重复执行不会产生重复数据


  1. 登录认证开发




















































































































编号 原子任务 依赖 完成标准
DEV-AUTH-001 集成密码哈希库 DES-IAM-010 密码不以明文保存
DEV-AUTH-002 实现密码校验服务 DEV-AUTH-001 正确和错误密码可区分
DEV-AUTH-003 实现访问令牌生成 DISC-006 Token包含必要声明
DEV-AUTH-004 实现刷新令牌生成 DEV-AUTH-003 刷新令牌可独立失效
DEV-AUTH-005 实现Token解析和校验 DEV-AUTH-003 过期和伪造Token被拒绝
DEV-AUTH-006 实现登录接口 DEV-AUTH-002至005 正确账号可登录
DEV-AUTH-007 实现登录失败次数记录 DEV-BE-010 Redis记录失败次数
DEV-AUTH-008 实现登录失败锁定 DEV-AUTH-007 达到阈值后临时锁定
DEV-AUTH-009 实现刷新Token接口 DEV-AUTH-004、005 有效刷新令牌可换取新令牌
DEV-AUTH-010 实现退出接口 DEV-BE-010 退出后Token失效
DEV-AUTH-011 实现当前用户接口 DEV-IAM-014 返回用户、角色和权限
DEV-AUTH-012 实现认证依赖 DEV-AUTH-005 接口可要求登录
DEV-AUTH-013 实现权限校验依赖 DEV-IAM-014 接口可要求指定权限
DEV-AUTH-014 实现数据权限上下文骨架 DES-IAM-012 请求上下文包含数据范围
DEV-AUTH-015 实现登录日志记录 DEV-AUTH-006 成功和失败均有日志
DEV-AUTH-016 实现退出日志记录 DEV-AUTH-010 退出行为可追踪
DEV-AUTH-017 实现操作审计装饰器或服务 DES-BE-011 业务接口可记录审计日志


  1. 前端登录与权限








































































































编号 原子任务 依赖 完成标准
DEV-FEAUTH-001 实现登录页面布局 DES-FE-002 页面符合设计
DEV-FEAUTH-002 实现登录表单校验 DEV-FEAUTH-001 空值和格式错误被拦截
DEV-FEAUTH-003 接入登录接口 DEV-AUTH-006 正确账号可进入后台
DEV-FEAUTH-004 实现认证状态Store DEV-FE-033 可保存当前用户状态
DEV-FEAUTH-005 实现应用启动身份恢复 DEV-AUTH-011 刷新页面后身份可恢复
DEV-FEAUTH-006 实现访问令牌刷新 DEV-AUTH-009 令牌到期可自动刷新
DEV-FEAUTH-007 实现退出功能 DEV-AUTH-010 退出后返回登录页
DEV-FEAUTH-008 实现路由认证守卫 DEV-FE-022 未登录用户无法进入后台
DEV-FEAUTH-009 实现路由权限守卫 DEV-AUTH-013 无权限用户进入403页
DEV-FEAUTH-010 实现按钮权限组件 DES-FE-005 无权限按钮不展示或禁用
DEV-FEAUTH-011 实现菜单权限过滤 DEV-FE-024 只展示有权菜单
DEV-FEAUTH-012 实现Token失效处理 DEV-FE-036 失效后清理状态并重新登录
DEV-FEAUTH-013 实现登录错误提示 DEV-FE-037 错误原因有明确提示
DEV-FEAUTH-014 实现账号锁定提示 DEV-AUTH-008 展示锁定状态和恢复提示
DEV-FEAUTH-015 实现当前用户展示组件 DEV-AUTH-011 顶栏显示用户信息


  1. 基础管理页面


本阶段只实现能够验证权限底座的最小页面。




































































编号 原子任务 依赖 完成标准
DEV-ADM-001 实现当前用户个人信息页 DEV-AUTH-011 可以查看当前账号信息
DEV-ADM-002 实现用户基础列表接口 DEV-IAM-011 支持分页和关键词查询
DEV-ADM-003 实现用户基础列表页 DEV-ADM-002 可以查看用户列表
DEV-ADM-004 实现部门树查询接口 DEV-IAM-013 返回正确层级结构
DEV-ADM-005 实现部门树展示页 DEV-ADM-004 可以查看组织层级
DEV-ADM-006 实现角色列表接口 DEV-IAM-012 可以查询角色
DEV-ADM-007 实现角色列表页 DEV-ADM-006 可以查看角色列表
DEV-ADM-008 实现权限列表接口 DEV-IAM-014 可以查询权限编码
DEV-ADM-009 实现权限列表页 DEV-ADM-008 可以查看权限列表


  1. 基础设施和部署开发
































































































































编号 原子任务 依赖 完成标准
DEV-OPS-001 编写PostgreSQL容器配置 DES-OPS-001 数据库可启动
DEV-OPS-002 编写Redis容器配置 DES-OPS-001 Redis可启动
DEV-OPS-003 编写RabbitMQ容器配置 DES-OPS-001 管理端和Broker可启动
DEV-OPS-004 编写对象存储容器配置 DES-OPS-001 Bucket可初始化
DEV-OPS-005 编写后端开发Dockerfile DEV-BE-002 后端镜像可构建
DEV-OPS-006 编写后端生产Dockerfile DEV-BE-002 生产镜像可启动
DEV-OPS-007 编写前端生产Dockerfile DEV-FE-018 前端镜像可构建
DEV-OPS-008 编写Docker Compose开发配置 DEV-OPS-001至007 一条命令启动全部依赖
DEV-OPS-009 配置容器健康检查 DEV-BE-021、022 异常服务可以被识别
DEV-OPS-010 编写Nginx后台静态资源配置 DEV-FE-018 后台可通过Nginx访问
DEV-OPS-011 编写Nginx API代理配置 DEV-BE-024 /api可代理到后端
DEV-OPS-012 编写Nginx安全头配置 DISC-015 基础安全头生效
DEV-OPS-013 编写数据库初始化脚本 DEV-BE-009 空环境可自动初始化
DEV-OPS-014 编写管理员初始化命令 DEV-IAM-015 部署后可创建管理员
DEV-OPS-015 编写数据库备份脚本 DES-OPS-005 能生成可用备份文件
DEV-OPS-016 编写数据库恢复脚本 DEV-OPS-015 能在空库恢复数据
DEV-OPS-017 编写本地一键启动脚本 DEV-OPS-008 新开发人员可以快速启动
DEV-OPS-018 编写本地一键停止脚本 DEV-OPS-008 可清理容器和网络
DEV-OPS-019 编写日志目录和轮转配置 DEV-BE-018 日志不会无限增长


  1. CI基础流水线








































































































编号 原子任务 依赖 完成标准
DEV-CI-001 配置前端依赖安装缓存 DEV-FE-001 CI可复用缓存
DEV-CI-002 配置前端格式检查 DEV-FE-011 格式错误导致失败
DEV-CI-003 配置前端Lint检查 DEV-FE-010 Lint错误导致失败
DEV-CI-004 配置前端类型检查 DEV-FE-009 类型错误导致失败
DEV-CI-005 配置前端单元测试 DEV-FE-013 测试失败阻止合并
DEV-CI-006 配置前端构建 DEV-FE-018 构建失败阻止合并
DEV-CI-007 配置后端依赖安装缓存 DEV-BE-001 CI可复用缓存
DEV-CI-008 配置后端格式检查 DEV-BE-001 格式错误导致失败
DEV-CI-009 配置后端静态检查 DEV-BE-001 静态错误导致失败
DEV-CI-010 配置后端单元测试 DEV-BE-003 测试失败阻止合并
DEV-CI-011 配置Alembic迁移检查 DEV-BE-008 迁移异常导致失败
DEV-CI-012 配置OpenAPI导出 DEV-BE-023 CI可生成接口文档
DEV-CI-013 配置前端接口类型一致性检查 DEV-FE-039 接口变化可被发现
DEV-CI-014 配置Docker镜像构建 DEV-OPS-005至007 镜像可在CI构建
DEV-CI-015 配置合并请求检查规则 DISC-016 未通过流水线不能合并

测试任务



  1. 工程基础测试









































































编号 测试任务 预期结果
TST-BASE-001 验证新环境安装前端依赖 无缺失依赖
TST-BASE-002 验证新环境安装后端依赖 uv同步成功
TST-BASE-003 验证前端开发服务器启动 admin和cockpit均可访问
TST-BASE-004 验证后端服务启动 健康检查正常
TST-BASE-005 验证数据库迁移 空库可以升级
TST-BASE-006 验证迁移重复执行 不产生重复结构
TST-BASE-007 验证Redis连接 读写正常
TST-BASE-008 验证RabbitMQ连接 Broker可访问
TST-BASE-009 验证对象存储连接 Bucket操作正常
TST-BASE-010 验证Docker Compose一键启动 所有服务健康
TST-BASE-011 验证生产构建 前后端构建成功
TST-BASE-012 验证Nginx代理 页面和API均可访问


  1. 登录认证测试





























































































编号 测试任务 预期结果
TST-AUTH-001 验证正确账号登录 返回有效身份信息
TST-AUTH-002 验证错误密码登录 返回明确错误
TST-AUTH-003 验证不存在账号登录 不泄露账号是否存在
TST-AUTH-004 验证连续失败锁定 达到阈值后账号被锁定
TST-AUTH-005 验证锁定到期恢复 到期后可以重新登录
TST-AUTH-006 验证访问令牌有效期 到期Token不可使用
TST-AUTH-007 验证刷新令牌 可以获得新访问令牌
TST-AUTH-008 验证伪造Token 请求被拒绝
TST-AUTH-009 验证退出登录 退出后Token不可继续使用
TST-AUTH-010 验证当前用户接口 返回正确用户和权限
TST-AUTH-011 验证未登录路由访问 跳转登录页面
TST-AUTH-012 验证无权限路由访问 显示403页面
TST-AUTH-013 验证按钮权限 无权限按钮不可操作
TST-AUTH-014 验证菜单权限 无权限菜单不显示
TST-AUTH-015 验证刷新页面身份恢复 用户无需重新登录
TST-AUTH-016 验证登录和退出日志 审计记录完整


  1. 接口和异常测试































































编号 测试任务 预期结果
TST-API-001 验证统一响应结构 所有接口格式一致
TST-API-002 验证参数校验错误 返回统一参数错误
TST-API-003 验证业务异常 返回稳定业务错误码
TST-API-004 验证未知异常 不暴露内部堆栈
TST-API-005 验证请求ID 响应和日志可关联
TST-API-006 验证接口限流 超过阈值后被限制
TST-API-007 验证CORS 非允许来源被拒绝
TST-API-008 验证请求体限制 超限请求被拒绝
TST-API-009 验证日志敏感信息 不记录密码和Token
TST-API-010 验证OpenAPI生成 文档可生成前端类型


  1. 自动化和端到端测试




































































编号 测试任务 预期结果
TST-AUTO-001 编写后端健康检查测试 自动测试通过
TST-AUTO-002 编写登录成功单元测试 自动测试通过
TST-AUTO-003 编写登录失败单元测试 自动测试通过
TST-AUTO-004 编写Token校验测试 自动测试通过
TST-AUTO-005 编写权限依赖测试 自动测试通过
TST-AUTO-006 编写前端登录表单测试 自动测试通过
TST-AUTO-007 编写前端路由守卫测试 自动测试通过
TST-AUTO-008 编写登录E2E测试 浏览器流程通过
TST-AUTO-009 编写退出E2E测试 浏览器流程通过
TST-AUTO-010 编写无权限访问E2E测试 正确进入403页面
TST-AUTO-011 在CI执行全部自动化测试 流水线通过

缺陷任务



  1. 缺陷管理基础任务
















































编号 任务名称 完成标准
BUG-MGT-001 创建缺陷任务模板 包含复现步骤、预期和实际结果
BUG-MGT-002 定义缺陷严重等级 致命、严重、一般、轻微、建议
BUG-MGT-003 定义缺陷优先级 P0至P3规则明确
BUG-MGT-004 定义缺陷状态流转 新建到关闭流程明确
BUG-MGT-005 定义缺陷关闭标准 修复和回归条件明确
BUG-MGT-006 定义缺陷响应时限 不同等级有响应要求
BUG-MGT-007 建立每日缺陷评审机制 阻塞缺陷能够及时处理


  1. 实际缺陷任务命名规则


修复 + 发生位置 + 问题表现

例如:


修复登录页面错误密码无提示问题
修复刷新Token后用户状态丢失问题
修复县区角色可以访问管理员路由问题
修复数据库迁移在空库执行失败问题
修复Docker环境后端健康检查异常问题

3. 缺陷处理任务链


每个缺陷应形成以下子任务或状态:


确认问题
→ 定位根因
→ 实施修复
→ 补充自动化测试
→ 执行原场景验证
→ 执行关联场景回归
→ 记录修复结果
→ 关闭缺陷

交付和文档任务

















































































































编号 原子任务 交付物
DOC-001 编写项目总体README 项目说明
DOC-002 编写本地开发环境搭建文档 开发环境手册
DOC-003 编写前端开发规范 前端规范
DOC-004 编写后端开发规范 后端规范
DOC-005 编写Git分支和提交规范 Git规范
DOC-006 编写环境变量说明 配置字典
DOC-007 编写数据库迁移说明 迁移手册
DOC-008 编写接口响应和错误码规范 API规范
DOC-009 编写用户角色权限说明 权限说明
DOC-010 编写测试执行说明 测试手册
DOC-011 编写Docker启动说明 容器部署手册
DOC-012 编写测试环境部署文档 测试环境部署手册
DOC-013 编写数据库备份恢复文档 备份恢复手册
DOC-014 导出一期基础OpenAPI文档 接口文档
DOC-015 整理第三方依赖清单 依赖清单
DOC-016 整理开源许可证清单 许可证清单
DOC-017 编写阶段测试报告 测试报告
DOC-018 编写阶段遗留问题清单 遗留问题台账
DOC-019 创建阶段发布标签 Git版本标签
DOC-020 形成阶段验收记录 内部验收记录

推荐执行顺序


1.范围和方案固定下来


完成任务:


DISC-001至DISC-018
DES-001至DES-OPS-006

输出:


阶段范围
认证方案
权限方案
工程结构
数据库设计
部署设计
测试方案

退出条件:



  • 关键方案完成评审。

  • 不存在阻塞开发的未决问题。

  • 阶段边界已经确认。


2.工程骨架可运行


完成任务:


DEV-BASE
DEV-FE-001至019
DEV-BE-001至027
DEV-OPS-001至012

输出:



  • 前端可以启动。

  • 后端可以启动。

  • 数据库和Redis可以连接。

  • Docker环境可以启动。

  • 健康检查可用。


3.登录和权限闭环


完成任务:


DEV-IAM
DEV-AUTH
DEV-FEAUTH
DEV-ADM

输出:


管理员可以初始化
用户可以登录和退出
身份可以刷新和恢复
菜单和路由受权限控制
基础组织和权限数据可以查询
登录和关键操作可以审计

4.质量和交付基线


完成任务:


DEV-CI
TST全部任务
BUG-MGT
DOC全部任务

输出:



  • 自动化检查进入CI。

  • 核心认证流程有自动化测试。

  • 测试环境部署成功。

  • 文档和版本完成归档。


关键路径


本阶段关键路径为:


范围确认
→ 工程架构设计
→ 仓库初始化
→ 后端数据库连接
→ IAM数据模型
→ 登录认证接口
→ 前端登录接入
→ 路由和按钮权限
→ 自动化测试
→ Docker部署
→ 阶段验收

以下任务一旦延期,会直接影响整个阶段:


DISC-005 身份认证方案
DES-IAM-001至014 权限设计
DEV-BE-006 数据库连接
DEV-IAM-007 IAM迁移
DEV-AUTH-006 登录接口
DEV-FEAUTH-003 登录接入
DEV-FEAUTH-008 路由守卫
DEV-OPS-008 Docker Compose
DEV-CI-010 后端自动化测试
TST-AUTO-008 登录E2E测试

阶段工作量参考


以下为基础估算。
















































工作类型 参考人天
讨论与需求确认 2~3
产品和技术设计 4~6
前端基础工程 6~9
后端基础工程 8~12
登录与权限 7~10
Docker与CI 4~6
测试与缺陷修复 5~8
文档和内部交付 2~4
合计 38~58

推荐人员配置:


产品或项目负责人 1人
前端开发 1人
后端开发 1人
测试 0.5至1人
运维支持 0.25至0.5人

任务准入标准


一条开发任务进入“待开发”前,必须满足:


关联需求已经确认
相关设计已经评审
输入和输出已经明确
接口或数据结构已经明确
前置依赖已经完成
权限要求已经说明
异常场景已经说明
完成标准可以验证

任务完成标准


开发任务只有同时满足以下条件才能标记为完成:


代码已经实现
本地自测已经完成
异常场景已经处理
权限校验已经实现
数据库迁移已经提交
接口文档已经更新
自动化测试已经补充
代码评审已经通过
评审问题已经修复
代码已经合并
测试环境验证已经通过

不过一般情况下人比较少都是本地测测没啥大问题就直接过了,只有大厂里面才会弄得非常详细。


阶段退出标准


第一期第一步只有满足以下条件才能结束:



  1. 前后端项目可以在新环境独立启动。

  2. Docker Compose可以启动全部基础依赖。

  3. 数据库可以从空库完成迁移。

  4. 超级管理员可以通过脚本初始化。

  5. 管理员可以正常登录、刷新身份和退出。

  6. 无权限用户无法进入受限路由。

  7. 前端按钮权限和菜单权限正常生效。

  8. 后端接口完成独立权限校验。

  9. 登录日志和基础操作审计能够查询。

  10. OpenAPI可以生成前端接口类型。

  11. CI可以完成格式、类型、测试和构建检查。

  12. 登录主流程E2E测试通过。

  13. 测试环境部署成功。

  14. 数据库备份和恢复至少完成一次演练。

  15. 阻塞级和严重级缺陷已经关闭。

  16. 阶段文档已经完成。

  17. 已创建基础版本标签。

  18. 内部评审确认可以进入景区资源业务开发。


写在最后


已经燃尽了佬友们,写一期要掏空脑子中基本所有的梗,下一期随缘更新,要去刷半年小破站、xhh、dy、xhs、贴吧来努力学习烂梗,所有的需求我都尽量按时间完成,不会超时(maybe),后面会更新一个开源库来同步代码。


有的佬友问为什么最近水的少了,文章也不更了,主要是调岗了换了房子,之前是在总公司,平薪调到子公司了,远离了某位,换了房子主要是虽然子公司还在本地但是位置离了老远,正好之前的房子也到期了就顺势搬家了。

最新回复 (2)
  • harriman 08-03 00:35
    1

    你这个太nb了,跟小说似的实战经验

  • 白芸汐 楼主 08-03 07:09
    2

    前半部分还好,后半部分都是很无聊的具体拆分,写的时间是有点长 ^-^

* 帖子来源Linux.do
返回