简介:这份CRM客户关系管理需求分析设计文档面向企业信息化负责人、产品经理与开发团队,聚焦企业版客户关系管理系统从立项到落地的需求梳理,帮助读者明确销售流程自动化、客户信息整合与数据分析支持等目标。压缩包仅含1个doc文件,大小约1.66MB,正文按引言、任务概述、功能需求、性能需求等章节组织,依次交代项目背景、用户组织结构、业务对象与术语、运行环境及条件限制,并给出用例描述、数据概念结构图、系统业务流程图和界面原型预览。已有189人学习,适合作为需求分析模板或课程设计参考。读者可从中获得较完整的CRM需求文档骨架、业务场景拆解方式与用例编写思路,也能借助数据流图和原型理解客户管理、销售协同等模块的交互边界,用于快速搭建自己的需求说明或对照检查遗漏项。
1. 一份 2009 年定稿的 CRM 需求文档,为什么现在还有人翻
上周有人丢给我一份 60 页的需求规格说明书,让我判断“这套 crm 客户关系管理需求分析还值不值得作为新项目的底稿”。我翻到第三页就明白了:它的价值不在功能列表,而在用例编号、角色权限矩阵和界面原型清单这三样东西上。crm 需求分析最容易出问题的地方从来不是功能写不全,而是权限边界模糊、状态流转缺失,这份文档恰好在这两处给了能直接抄的骨架。它适合正在做客户关系管理系统立项、需要一份需求分析模板打底的后端和产品,也适合手里有旧系统、想拿旧文档反推改造清单的维护人员。至于它跑在什么环境上、哪些约束今天已经失效,后面几章逐条拆。
2. 运行环境与技术栈:从硬件清单反推部署边界
很多人读需求文档习惯从第三章功能需求开始,直接跳过第二章的运行环境。这是典型的图省事做法,后面一定会遇到问题。环境章节写的是约束,约束决定了你后面所有设计的上限——数据库版本锁死、单点登录不能用现成方案、内存配置撑不起并发,这些问题在功能章节里一个字都看不出来。这份文档的第二章信息密度不低,硬件、软件、其它要求三块拼起来,基本能还原出当年的部署拓扑。
2.1 硬件清单里的三个关键参数
把原文的设备描述压成表格,盯住三列就够了:算力、存储路径、冗余级别。
| 设备类型 | 文档中的关键参数 | 对部署的实际约束 |
|---|---|---|
| 应用/数据库服务器 | 双路四核 2.66GHz、2GB DDR2、双千兆网卡、RAID 卡带 256MB 电池缓存、8 盘位 | 内存是硬瓶颈,应用与数据库同机部署时连接池不能开大 |
| 光纤磁盘柜 | 14 盘位、2Gb/s SFP 接口、支持 RAID 0/1/0+1/5/ADG | 走 SAN 而不是本地盘,说明当初就预留了扩容和第二台应用机的空间 |
| SAN 交换机 | 4Gb 模块、5 米 LC-LC 多模光纤 | 光纤链路是单点,交换机故障会直接切断存储访问 |
三个参数值得单独说。第一是 2GB 内存,2009 年是标准配置,放到今天连一个中型 Java 应用的堆都不够分,如果照这份文档原样复刻,JVM 堆最多给到 1GB,剩下的留给操作系统和数据库,连接池上限要压到 20 以内。第二是 RAID 卡的 256MB 电池缓存,它决定写性能,电池失效后缓存策略会自动切到直写,数据库插入延迟会明显上升,运维巡检要单独看这一项。第三是单电源与冗余电源的差异,文档里服务器标了热插拔电源但没写数量,存储柜明确写了冗余电源和风扇,这个不对称在机房断电演练时会暴露出来。
2.2 软件栈的版本锁链
软件环境这一节只有四行,但四行互相咬合,动一个就要连带评估。
| 层次 | 组件 | 版本 | 约束说明 |
|---|---|---|---|
| 客户端 | 操作系统 | Windows XP SP2 | 浏览器兼容基线,界面原型里的打印、导出都按这个环境验证 |
| 数据库 | SQL Server | 2000 | 页大小、排序规则、varchar 长度上限都和老版本绑定 |
| 运行时 | JDK | 1.5 | 泛型、注解可用,但 try-with-resources 这类语法不存在 |
| 应用服务器 | WebSphere Application Server | 6.1 | 类加载器策略、会话复制方式与后来的版本差异很大 |
这条锁链的关键在于“没有一个是能单独升的”。SQL Server 2000 升到更高版本,排序规则和日期类型行为会变,历史数据迁移要先做字符集核对;JDK 1.5 升到 8,WebSphere 6.1 根本不支持,得连应用服务器一起换。所以拿到这份文档做新项目时,正确做法不是照抄版本号,而是把它当成“已知可运行的最小组合”,在这个组合上评估哪些约束今天必须打破。我一般会把这张表复制到立项文档里,每行后面加一列“是否允许升级”,让架构评审时逐行签字,避免后面有人偷偷换版本导致联调失败。
2.3 环境章节怎么转成验收项
环境描述最容易写成一堆产品型号的罗列,验收时没法逐条打勾。一个可执行的做法是把它拆成部署检查表,每条都能用命令或界面操作验证。
第一步,把“网络及硬件环境”拆成资源核对项:CPU 核数、内存总量、磁盘可用空间、网卡链路状态、RAID 级别与电池状态。每一项写清楚期望值和核对方式,比如内存用系统信息页核对,RAID 电池状态用阵列卡管理工具看。
第二步,把“支持软件环境”拆成版本核对项:操作系统补丁级别、数据库实例版本与排序规则、JDK 版本、应用服务器版本与补丁号。排序规则这一项特别容易被漏掉,它影响中文排序和唯一索引行为,上线后才发现要改,代价是整库重建。
第三步,把“其它要求”里的两条硬约束单独拎出来:客户信息按管理范围隔离、能做成下拉列表的选项一定做下拉。前者是权限验收项,后者是交互验收项,都要在原型评审阶段逐页确认,不能留到测试阶段再补。
提示:环境章节的验收项要在部署前全部核对一遍,尤其是数据库排序规则和 JDK 小版本号,这两项在联调阶段才暴露的话,回滚成本很高。
3. 角色与权限模型:三类角色怎么落到用例编号上
这份文档最值得抄的部分是第三章开头那张角色划分。它把系统切成系统管理员、主管、业务员三类,每类的数据可见范围和可执行操作写得很死,后面的用例基本都是这张表的展开。需求分析阶段最怕的就是权限写成“管理员可以管理所有数据”这种一句话,开发照着做,做完发现业务员能看到别人的客户,返工时整张权限表重来。
3.1 三类角色的权限边界
把原文散落在各用例里的规则收拢,能得到一张相对完整的权限矩阵。
| 角色 | 可见数据范围 | 可执行操作 | 对应模块 |
|---|---|---|---|
| 系统管理员 | 所有机构 | 客户分类增删改、数据库备份还原、用户权限设置、部门与人员增删改 | 系统管理、组织结构 |
| 主管(销售/就业) | 本部门业务员数据 | 审批、指派人员、指派目标、查看下属日程与客户 | 审批管理、指派 |
| 业务员 | 本人数据 | 客户信息增删改查、本人日程与事务、本人申请、邮件与短信 | 客户信息、日程、邮件、审批发起 |
矩阵里有两个容易写漏的边界。第一个是“主管可以直接和客户沟通”,原文在总体功能需求里提了一句,意味着主管对客户信息不只是只读,还要有写权限,具体写到什么程度文档没细说,落地时要补一条“主管可编辑下属名下客户,但编辑动作记入操作日志”。第二个是“系统管理员可以在任何机构下创建用户,机构管理员只能在自己机构下新建用户”,这句话把管理员分成了两级,但文档的角色定义里只写了“系统管理员”,机构管理员是隐含角色,做权限表时要显式补上,否则实现时很容易把两级管理员合并成一个超级管理员。
3.2 用例编号的编码规则与断裂点
文档给每个用例编了号,前缀 CRM 加三位数字,按模块分段:101 到 104 是日程与事务,107 到 118 是邮件、审批、短信,119 到 120 是组织结构,201 到 206 是客户信息与指派,301 到 305 是系统管理与组织管理。这套分段规则本身是好东西,开发和测试对需求时直接报编号,比报“那个改日程的功能”高效得多。
但这套编号在文档内部就断过一次。第三章里“我的审批”这个用例,标题写的是 CRM1.03,表格里的用例编号栏却填了 CRM015;紧接着“我的申请”标题是 CRM1.04,编号栏写 CRM016。同一份文档里出现了两套编号风格,前面用点分三位,后面用连续三位。这种断裂在需求评审时不起眼,等到测试用例要按编号追溯时就会对不上号,测试写 CRM015,开发在代码注释里写 CRM1.03,两边搜不到一起。
血泪经验是:接手任何带编号的需求文档,第一件事是做一张编号对照表,把标题编号、表格编号、目录编号三列并排放,不一致的当场标红找原作者确认。这份文档如果直接拿来当基线,CRM1.03 和 CRM015 必须统一成一个,我一般保留点分风格,因为它能表达“模块.序号”的层级,连续数字丢了模块信息。统一之后再把对照表附在需求文档末尾,后面加需求就按这个规则续号,不再出现两套。
3.3 单点登录与 LDAP 的取舍
文档在“其它要求”和“条件与限制”里各写了一句:需要单点登录功能,但不使用 AD 或其他 LDAP 系统;用户不需要且不要使用 LDAP 服务。两句话说的是同一件事,但位置分散,读快了容易只看到“需要单点登录”就去找现成方案,结果接了一套目录服务,验收时被业务方一句“我们不用那个”打回来。
不用 LDAP 意味着什么,得拆开看。LDAP 提供的是统一身份存储和认证协议,不用它,账号密码就得存在应用自己的库里,单点登录的票据也得自己发。常见做法是自建一个认证中心,登录成功后签发 token,各子系统拿 token 回调认证中心校验,token 里带用户 ID 和角色。这套东西在 2009 年的 WebSphere 环境里,更可能是用应用服务器的会话共享加统一登录页实现的,而不是现在流行的 JWT。落地时要注意两点:一是会话过期时间要统一配置,各子系统不能各设各的;二是注销要广播,一个子系统退出,其他子系统的会话要同步失效,否则用户以为退了,实际还能操作。
注意:文档明确排除 LDAP 和 AD,做技术选型时不要推荐目录服务方案,哪怕它更成熟,这是需求约束不是技术偏好。
4. 功能模块落地:日程、邮件、审批三条主干怎么拆
第三章的功能描述占了全篇一半以上篇幅,但真正需要动手拆的是三条主干:日程安排、邮件系统、审批管理。剩下的客户信息管理和短信管理相对直白,组织结构与系统管理是配套。这一章按主干逐条拆字段、状态和边界,拆完基本能还原出数据库表结构和接口清单。
4.1 日程与事务的字段和视图
日程安排分四种:日常事务、日日程、周日程、月日程。四者共用一套字段,从原文的新增流程能抽出来:主题、起始时间、内容、关联客户。关联客户是重点,原文特意解释“是指日程计划中所涉及的客户信息”,说明它不是可选的备注字段,而是要把日程挂到具体客户上,后面主管查看下属日程时才能按客户维度聚合。
日常事务和另外三种日程的关系要理清。日常事务是独立实体,有新建、修改、删除、查看四个操作,没有日期视图的概念;日、周、月日程是同一份数据的不同展示粒度,新建周日程和新建日日程存的是同一张表,只是界面入口不同。实现上不建议分三张表,否则同一条日程在日视图改了、周视图没同步,会出现数据不一致。我一般会建一张日程表,用 start_time 和 end_time 定范围,日周月视图只是查询条件不同。
字段落地还有两个细节。起始时间只写了开始没有写结束,实际排日程需要时长,至少要补一个结束时间或持续时长字段,否则日历上画不出块。内容字段的长度文档没给,按业务场景估,日程描述给到 500 字够用,关联客户如果支持多个,要单独建关联表而不是在日程表里存逗号分隔的客户 ID。
4.2 邮件模块的状态机
邮件系统是这份文档里状态最多的一块,收件箱、发件箱、废件箱三个箱体,加上查询、账号配置、群发三个辅助功能。状态流转写清楚,实现才不会乱。
收件箱的邮件可以查看、回复、删除、导出 Excel、打印。删除不是真删,是移到废件箱。发件箱的邮件可以查看、删除、导出、打印、再次发送,删除同样是移到废件箱。废件箱的邮件可以查看、恢复、永久删除、清空,恢复是移回原来的箱体,永久删除才是真删。这条链路的关键是“删除”这个动作在不同箱体里语义不同:收件箱和发件箱里的删除是软删,废件箱里的删除是硬删,界面上按钮文案最好区分开,一个叫“删除”,一个叫“永久删除”,原文在废件箱的备选流里确实是这么写的,照着做就不会让用户误操作。
导出 Excel 和打印是两个容易被低估的功能。导出要处理中文编码,SQL Server 2000 时代的默认排序规则下,导出文件用 UTF-8 还是 GBK 会影响 Excel 打开是否乱码,这条放到避坑章节细说。打印依赖浏览器,文档写的是“浏览器中显示邮件的所有内容,点击打印完成”,意味着打印样式要做单独的 CSS,把导航和按钮隐藏掉,只留正文。
邮件账号配置这一项文档只列了用例名,没展开字段。按常规实现,至少要存邮件地址、显示名、SMTP 服务器、端口、是否 SSL、用户名、密码。密码存储不能明文,哪怕是内部系统,也要做可逆加密或单独的密钥管理,这一条在需求评审时补进去,别等安全扫描报出来再改。
4.3 审批流的两个方向
审批管理拆成两个用例:我的审批和我的申请。前者是主管视角,后者是业务员视角,两者共享同一份审批单数据,只是查询条件和可执行操作不同。
我的申请由业务员发起,字段至少要有主题、申请内容、审批人。原文写了两条硬规则:主题和内容不能为空,必须选择一个审批人。这两条要写成表单校验,不能只靠前端提示,后端接口也要拦。申请提交后状态是待审批,主管审批后变成通过或不通过。业务规则里写“审批通过后就不能对结果进行删除、修改,只能查看”,这条是状态机的锁,实现时要在更新接口里判断当前状态,已通过的单子拒绝任何写操作,不能只靠界面隐藏按钮。
我的审批由主管操作,只能看到自己作为审批人的单子,审批结果只有同意和不同意两个选项,没有“退回修改”这种中间态。这一点和很多现代审批流不同,做惯了多级审批的人容易顺手加一个“退回”,加了就和需求不符。要退回修改,业务员只能对“未通过”或“未审核”的申请做修改,这是原文在我的申请备选流里写的,修改的是申请本身,不是审批环节。
指派功能挂在客户信息管理下面,用例编号 CRM205 和 CRM206,只有主管能指派人员和指派目标。指派目标和审批的区别在于,指派是主管主动分配客户归属,审批是业务员发起、主管决策,两条线不要混在一张表里。
4.4 界面原型清单当验收条目用
文档第五章列了 25 项界面清单,从添加发送短信、查看已接收短信列表,到写邮件、收件箱、发件箱、废件箱、查询邮件、邮件账号配置,再到日常事务和日常安排的增删改。这份清单看起来是目录,实际是现成的验收条目表。
用法很简单:把 25 项抄进测试用例模板的第一列,第二列写进入路径,第三列写关键字段,第四列写预期结果。比如“添加发送短信”这一项,进入路径是短信管理下的发送入口,关键字段是接收人、短信内容,预期结果是发送成功且能在已发列表里查到。25 项逐个填完,功能测试的覆盖面基本就齐了,剩下的边界条件再按用例的备选流补。
这份清单还有个隐性价值:它能反推页面数量。25 项界面意味着至少有 25 个页面或弹窗,排期时按页面估工作量比按功能点估更准,因为页面里的字段校验、权限判断、异常提示都是实打实的工作量。
5. 常见问题与排查:需求文档里最容易出问题的五处
需求文档写得再细,落地时该出的问题一样会出。下面五条是这类 CRM 需求分析文档在实现阶段最高频的翻车点,每条按现象、原因、解决三段写,照着排查能省不少返工。
5.1 关联客户留空,日程变成孤立记录
现象:日程功能上线后,主管想看某个客户名下的所有跟进安排,发现查不出来,日程列表里全是散落的主题,点进去才知道对应哪个客户。
原因:新增日程的表单里,关联客户字段做成了非必填,业务员图快直接跳过,数据入库后 customer_id 为空。原文虽然解释了关联客户的含义,但没在业务规则里写“必填”,实现时就按可选处理了。
解决:把关联客户改成必填,前端加校验,后端接口也拦一道。存量数据做一次清洗,空关联的日程导出来让业务员补录,补不完的挂到一个“未分类”虚拟客户下,至少保证按客户聚合时能查全。
5.2 权限只在前端藏按钮,接口没校验
现象:安全测试时用业务员账号直接调主管的审批接口,返回 200,审批单被改掉了。
原因:权限控制做在页面层,主管登录才渲染审批按钮,接口层默认信任前端传上来的角色。原文的业务规则写了“销售主管只能对自己审批的内容进行审批”,但这条规则没有落到接口鉴权上。
解决:所有写接口统一加一层角色校验,从会话里取角色,不信任请求参数里的角色字段。审批接口还要加数据级校验,校验当前用户是不是这张单子的指定审批人,不是就拒绝。这两层校验缺一不可,角色校验防越权,数据校验防横向越权。
5.3 邮件导出 Excel 中文乱码
现象:收件箱勾选几封邮件点导出,下载的 Excel 打开是乱码,英文正常,中文全变成问号或方块。
原因:导出时用默认编码写文件,SQL Server 2000 的排序规则和 JVM 默认字符集不一致,中文在写出过程中被转了一次。文档只写了“导出 Excel”这个动作,没写编码要求,实现时就用了平台默认值。
解决:导出流明确指定 UTF-8,并在文件头写 BOM,让 Excel 能识别编码。如果目标用户还在用旧版 Office,改成导出 CSV 加 GBK 编码更稳。这条要在接口文档里写死,不能留给开发自己选。
5.4 用例编号断裂,测试追溯对不上
现象:测试写用例时引用 CRM015,开发在代码注释里写 CRM1.03,两边搜不到一起,评审会上互相说对方编号错了。
原因:文档内部存在两套编号风格,前面点分三位,后面连续三位,同一份文档里“我的审批”标题和表格编号就不一致。需求阶段没人做统一,到测试阶段才暴露。
解决:接手文档第一件事做编号对照表,三列并排:标题编号、表格编号、目录编号,不一致的标红统一。统一后把对照表附在文档末尾,新增需求按统一规则续号。已经写进代码的旧编号不用改,在对照表里留一列“历史编号”做映射即可。
5.5 审批通过后仍能修改,状态机没锁死
现象:主管点了同意,业务员回头还能编辑这张申请的内容,改完再提交,审批记录和申请内容对不上。
原因:更新接口只判断了“是不是本人的申请”,没判断当前状态。文档写了“审批通过后就不能对结果进行删除、修改,只能查看”,但这条规则停留在业务描述层,没有转成接口里的状态判断。
解决:在更新和删除接口入口加状态机校验,状态不是“未通过”或“未审核”就直接拒绝。状态字段用枚举而不是数字,代码里可读性更好。这条规则要写进接口文档的“前置条件”一栏,和后端约定死。
提示:这五条里第 2 条和第 5 条属于同一类问题——业务规则写在需求里,但没落到接口约束上。需求评审时把每条业务规则追问一句“这条在哪个接口里拦”,能提前暴露大半。
6. 进阶用法:拿需求文档反推测试矩阵和验收清单
需求文档写完不是终点,它最大的剩余价值是能直接反推测试矩阵。我的习惯是把每个用例的基本事件流和备选流拆成两列,基本流正常跑一遍算主路径,备选流每条单独设计一个异常用例,这样测试覆盖率不依赖测试人员个人经验。
以日程安排为例,基本流是新增日程,备选流有查询、修改、删除三条,加上业务规则里的“只能操作本人日程”,四条异常用例就出来了:查别人的日程应无权限、改别人的日程应拒绝、删别人的日程应拒绝、新增时不填关联客户应拦截。这四条不需要额外想,从文档里逐句抠就行。
| 功能点 | 主路径 | 异常路径 | 验收依据 |
|---|---|---|---|
| 日程新增 | 填主题、时间、内容、关联客户后保存成功 | 关联客户为空拦截、时间格式非法拦截 | 用例 CRM1.01 基本流与业务规则 |
| 我的申请 | 填主题、内容、选审批人后提交 | 主题为空拦截、未选审批人拦截 | 用例 CRM1.04 后置条件 |
| 我的审批 | 主管查看待审批单并提交同意或不同意 | 非指定审批人调用接口拒绝 | 用例 CRM1.03 业务规则 |
| 邮件删除 | 收件箱删除后进入废件箱 | 废件箱永久删除后不可恢复 | 用例 CRM1.06 与 CRM1.08 备选流 |
| 权限隔离 | 业务员只能看到本人数据 | 越权访问他人数据返回拒绝 | 角色权限矩阵 |
这张表填满之后,验收清单也就有了。验收时不用再翻 60 页文档,拿着矩阵逐行过,每行对应一个可演示的操作,通过就打勾,不通过就记缺陷号。我在一个模拟项目上试过这套方法,需求评审到测试用例设计的时间压缩了将近一半,因为大部分用例是从文档里长出来的,不是凭空想的。
还有一个技巧是拿界面原型清单反查遗漏。25 项界面里如果有某一项在功能用例里找不到对应的基本流,说明要么界面多余,要么用例漏写,两种情况都要在评审时提出来。这种交叉核对比通读文档更容易发现问题,因为它是机械比对,不依赖人对业务的理解深度。
从那以后我每次接手这类需求规格说明书,都强制走一遍“编号对照表 + 测试矩阵 + 界面清单交叉核对”三步,哪怕文档看起来再完整。这份 2009 年的 CRM 需求分析文档能留到今天还有参考价值,靠的就是用例编号、权限矩阵、界面清单这三样结构化信息,而不是那些写得漂亮的功能描述。希望帮到你。
本文还有配套的精品资源,点击获取