ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

在线教育网需求分析说明书怎么写:从用例到非功能需求的完整指南

在线教育网需求分析说明书怎么写:从用例到非功能需求的完整指南 简介在线教育网系统需求分析说明书是一份面向软件开发人员、项目经理及教育信息化规划者的完整需求文档旨在为创建B/S架构的在线教育平台提供明确依据。文档覆盖学员管理、网上教学管理、校园信息管理、在线考试系统等核心模块并详细给出界面权限管理、班级与科目管理、教学资料管理、自动/人工改卷、成绩查询等功能的用例图与参与者行为描述。同时文档明确了Windows 2000 Server、.NET Framework 2.0、Visual Studio.NET 2005、Oracle 9i及IE6.0以上的技术环境以及使用Rational Rose绘制UML、PowerDesigner 11.0绘制E-R图的设计要求。压缩包共包含1个doc文档大小2.21MB内容结构完整从项目背景、功能清单到用例说明均有细致阐述可作为同类在线教育系统需求调研、设计开发的参考模板。目前已有1583人学习下载适合需要快速梳理在线教育业务需求或撰写需求规格说明书的从业者。1. 在线教育网的需求分析说明书写不好就是给研发埋雷一份“在线教育网系统需求分析说明书”最容易出现两种结局一种是写成几百页的文档研发拿到后照样每天来问“这个字段到底要不要”另一种是写完就归档需求评审会开完三个月后才发现需求分析漏掉了“刷课判定”这个核心规则。我在一线做教育类软件的需求分析时经常遇到这两种情况。需求分析说明书不是写给管理者看的是写给研发、测试、运维看的施工图。它解决的核心问题是把“我们要做个在线教育网”这句话拆成一套没有歧义、可以估算工作量、可以验收的行为描述。这篇文章按我实际做项目的习惯把写这份说明书的流程、表格、参数和坑一次讲清楚。适合产品经理、项目经理和刚转行做需求分析的同学对照着用。2. 先分清干系人和需求来源访谈、问卷与竞品分析怎么安排写需求分析说明书之前最忌讳的是直接打开 Word 从“项目背景”开始编。背景谁都会写真正决定说明书质量的是两件事你知道这份系统要服务哪些人你知道这些人的需求从哪里来、优先级怎么排。在线教育网系统常见的干系人并不复杂但经常被列漏。2.1 干系人清单少了“教务排课岗”和“财务对账岗”后面一定返工我做在线教育类项目时第一张表永远是干系人登记表这张表决定了后续所有需求的边界。除了明面上的学生、教师、家长还有几个角色特别容易漏教务管理负责排课、审核开课申请、处理退课、财务人员负责订单对账、发票、退款、内容运营负责上架课程、配置 Banner、管理课程分类。把干系人列全不是为了让文档显得完整而是因为每个角色都对应一批独有的用例。教务的排课规则会直接影响课程模型的字段设计财务的对账需求会直接影响订单号和支付回调的设计。干系人清单的推荐字段是角色名称、使用场景、核心诉求、参与方式、需求优先级。参与方式是指这个角色是直接操作系统还是通过管理员代操作这一点容易被忽略。很多在线教育网系统早期设计时家长角色被设计成直接登录但实际业务里家长是“看报告、代缴费”如果说明书里把家长写成了全功能操作角色UI 和权限设计都会跑偏。2.2 需求获取访谈提纲要带“假如”问卷只能用来验证定量结论需求获取的常规做法是“访谈 问卷 竞品分析 原型验证”四件套。访谈不要问“你希望系统有什么功能”这是开放式问题得到的答案十有八九是“越方便越好”。我一般会用场景化提问“假如你发现学生提交的作业有抄袭嫌疑你希望系统做什么”这类问题能逼出真实规则是提交时查重还是批改时提示还是允许教师手动标记。每一个“假如”背后都是一条潜在的业务规则也就是说明书里“业务规则”章节的素材。问卷适合用来验证定量结论比如“教师最常在几点登入系统布置作业”“家长对成绩推送的接受频次”但问卷不适合用来挖掘未知需求。竞品分析要落到具体字段和行为上比如对比主流课程平台它们的课程详情页是否包含“有效期说明”、下单前是否强制勾选服务协议这些细节最终会变成你的功能需求条目。原型验证放在需求分析的最后阶段用线框图确认界面层级但注意原型验证的产出不是说明书的内容而是对说明书里“界面需求”的佐证。2.3 从原始记录到需求条目先写“用户故事”再转“功能需求”与干系人访谈之后手上会有一堆对话记录和笔记不能直接把对话记录贴进说明书。常见做法是先整理成用户故事格式是“作为某个角色我希望系统做什么以便达成某个目的”。用户故事的优点是把“谁、做什么、为了什么”绑定在一起逻辑上不会散。整理完用户故事之后再把它转成功能需求条目因为说明书最终要面对研发研发不关心故事只关心“输入什么、系统做什么、输出什么”。这一步骤需要一张“用户故事到功能需求”的映射表做中间过渡。表格至少包含用户故事编号、角色、故事内容、对应的功能需求编号、备注。有了这张表后续评审时如果有人问“这个功能是谁提的”你可以一分钟内追溯回去。这张表应该写到说明书的附录里不要放进正文。正文只放收敛后的功能需求。用户故事编号角色用户故事内容对应功能需求编号备注US-001学生作为学生我希望查看课程剩余有效期以便安排学习计划FR-3.2来自学生访谈US-002教师作为教师我希望批量上传作业题以便节省出题时间FR-2.8教务例会提出US-003财务作为财务人员我希望导出按月份的订单汇总表以便月度对账FR-6.4来自财务部新需求当映射表里某个用户故事找不到功能需求承接时有两种可能要么是伪需求要么是说明书的覆盖范围没写全要回到访谈记录里复核。3. 用例建模与核心业务链路把“在线学习”拆成一张可核对的需求地图需求分析说明书里最容易让研发看得走神的部分就是大段的功能描述文字。一个更高效的做法是让用例图和用例规约替代部分长文本。用例图不是画了好看的而是作为功能地图让研发能快速找到“我的模块涉及哪些用例”用例规约是给测试提供场景来源。在线教育网系统的核心不外乎“选课—学习—作业—考试—成绩”这条闭环但闭环里的分支路径远比想象中多。3.1 用例清单核心用例与非核心用例的边界怎么划用例清单的推荐粒度是“一个用例对应一个可独立验收的业务目标”。以在线教育网系统为例用例编号用例名称主要执行者优先级UC-01学生选课报名学生高UC-02在线观看课程视频并记录学习进度学生高UC-03教师布置并批改作业教师高UC-04学生提交作业并查看批改结果学生高UC-05在线考试与自动判分学生、教师中UC-06审核上架课程教务管理员中UC-07家长绑定子女账号并查看学情报告家长中UC-08退款申请与审批学生、财务人员低优先级不要平均分配。高优先级用例如果被砍掉系统无法上线中优先级影响核心体验但没有也可以在二期补低优先级是完全不做也不影响主流程的。把优先级写清楚的另一个价值是当开发资源紧张时产品经理可以直接按照优先级裁剪范围不需要重新开会讨论。这也是需求分析说明书被称为“项目管理基线”的原因。3.2 用例规约模板主流程带分支测试才能写出完整用例用例图画完之后说明书里更关心的是用例规约。用例规约我不会只写“用户点击选课系统提示选课成功”这个粒度太粗。推荐的最小字段是用例名称、执行者、前置条件、后置条件、主流程、扩展流程、业务规则。针对“学生选课报名”这个用例我一般会写成下面这样前置条件学生已登录且完成实名认证课程状态为“报名中”当前时间在报名起止日期内主流程学生进入课程详情页 → 点击“我要报名” → 系统校验课程名额 → 生成待支付订单 → 学生完成支付 → 系统锁定学位并发送报名成功通知扩展流程 1名额不足时提示“已满员”并提供“加入候补”入口扩展流程 2支付超时未完成时系统自动释放学位并关闭订单业务规则同一学生同一时段内最多报名 3 门课程退款后再次报名同一课程需重新排队测试人员拿到这张规约直接就能生成场景用例。研发看到业务规则也知道要在接口层做哪几类校验。很多需求说明书被诟病“看不下去”问题往往出现在这里写了主流程漏了扩展流程和业务规则研发就只能靠猜测试也只能凭经验凑场景。3.3 课程和学习进度的状态机这是在线教育网系统最容易被画错的图状态图不建议画得很复杂但“课程生命周期”和“学生学习进度”这两个状态机必须画。课程常见状态包括编辑中、待审核、已上架、报名中、学习中、已完结、已下架。每一个状态迁移都要有触发条件比如“已上架”到“报名中”需要满足开课日期已到且名额未满“学习中”到“已完结”的触发条件是课程结束日期到达或学生完成全部必学内容。如果说明书对状态定义不清晰后端设计数据表时会把课程状态和学习进度混在一个字段里后面统计报表时就全乱了。学生学习进度的状态与课程状态是两个维度。学生进度状态常见有未开始、学习中、待考试、已完成、已过期。状态机的价值在于解决一个典型冲突课程下架了但学生还没学完这时候需要新增一个“已下架但进行中”的规则而不是直接砍掉学生访问权限。这个规则如果不写进说明书研发大概率会简单处理成“课程下架学生不可访问”后面客服来投诉时才发现需求漏了。4. 从功能条目到非功能指标让研发拿到说明书就能开工当用例地图确认后接下来要把需求细化到功能条目并明确非功能指标。这一步是需求分析说明书从“业务文档”走向“技术依据”的转折点。很多说明书只写功能不写非功能需求导致上线后一遇到高并发就出问题然后又回来补服务器资源、改缓存策略成本高得离谱。4.1 功能需求条目的写法否定句也算需求别只写正向行为功能需求条目建议按业务域分组编号。在线教育网系统可以分成用户与权限域、课程与商品域、学习与进度域、作业与考试域、订单与支付域、消息通知域。每条功能的描述格式统一为编号 功能名 功能描述 验收要点。功能描述里要写清楚输入、处理、输出。FR-3.2 查看课程剩余有效期学生可在“我的课程”列表查看每门课程的有效期截止日期。输入为学生选中课程 ID系统根据报名时间与课程有效时长计算剩余天数输出为“剩余 X 天”的文本提示。验收要点当剩余天数小于 7 天时需在课程封面显示黄色预警图标。FR-4.5 批量布置作业教师可从题库中多选题目生成作业并指定班级。输入为教师勾选的题目集合和班级列表系统自动生成作业单并推送给学生端。验收要点单个作业最多支持 50 题推送延迟不超过 30 秒。这里有一个我做需求分析时反复强调的习惯功能描述里要有明确的数值和边界。没有数值的验收要点等于没写。还有一点不要只写正向行为要写“拒绝条件”。比如“当课程已下架或已过期时禁止学生发起新订单”这种否定句也必须写成需求条目。需求条目如果只描写正常路径测试用例就只能覆盖正常路径一旦出现异常场景整个团队都会懵。4.2 非功能需求的量化方式不同模块的数字指标不能一样非功能需求是需求分析说明书里最常被糊弄的章节常规写法是“系统需具备良好的性能和高可用性”这句话没有任何落地价值。我一般会把非功能需求拆成性能、可用性、安全、兼容性、可维护性六类且尽量量化。在线教育网系统的指标建议参考下列初始值非功能指标类型初始建议指标参考说明并发用户数支持 5000 人同时在线学习按通用教育平台初期规模估算投产前压测核心接口响应时间选课、提交作业接口平均响应 500 ms不含带宽不稳场景课程视频播放首次缓冲 2 秒拖动进度条回放缓冲 1 秒依赖 CDN 分发策略数据备份策略业务数据每日全量备份日志数据每周归档需要运维配合执行安全要求学生及家长敏感信息加密存储接口需防重放攻击教务数据和订单数据要分开权限控制可用性要求核心业务选课与播放可用性 99.5%不含计划内维护窗口注意这些数值不一定适合所有团队但要比“高性能”强得多。如果没有历史数据参考在说明书里写明“此为投产前压测基线上线后按月刷新”即可。另一点被忽视的是“数据需求”。数据需求不要写得太偏技术而是从业务视角定义核心实体用户、课程、班级、订单、作业、考试成绩。每个实体说明关键的属性要求就够了比如订单必须保留支付流水号考试成绩必须保留总分、得分明细和提交时间。4.3 把需求说明书和原型区分开别让研发以为你要的是高保真交互需求分析说明书不等于设计稿。正文里可以提界面需求但不能用大篇幅描述按钮颜色和弹窗样式。界面布局、交互细节应该落在原型或设计文档里说明书只描述信息和操作项的必备集合。比如课程详情页只需要写清楚这个页面必须包含课程名、讲师、有效期、学习人数、报名按钮至于按钮放在左边还是右边、用什么颜色不应该出现在需求分析说明书里。否则评审会变成美学会需求边界会越来越乱。再补充一个与功能需求相关的接口需求写法对外对接的模块如支付接口、短信服务、视频转码服务说明书里要写出交互对象、触发时机和失败补偿。支付回调的失败处理尤其要写详细一点因为支付失败时的订单状态不处理好财务对账一定会出问题。常见的错误是先创建订单再发起支付支付成功后回调通知更新订单状态如果回调失败了呢说明书必须写明“订单停留在待支付状态由定时任务每分钟查询第三方支付结果并补偿更新”。这个规则不写研发大概率会忽略掉幂等设计。5. 需求说明书三大常见翻车现场范围蔓延、口径冲突与伪需求这个章节是写这份说明书最容易踩坑的地方。我见过太多在线教育网系统项目需求分析做了两三个月说明书看起来很厚但研发一估工作量就发现没法排期评审会上吵成一团。问题基本集中在范围、口径和需求真实性这三件事上。5.1 范围蔓延每加一个小功能其实都在加整个链路现象是需求评审会上有人提“加个签到功能很简单就一个按钮”大家觉得工作量不大就加进去了。过了两周签到功能引发了一连串新需求签到要不要奖励积分积分能不能兑换课程券课程券怎么核销最后一个小按钮变成了一整套积分体系关键是没有一个人在做需求分析时评估过它。原因是在需求分析阶段没有建立变更基线。说明书的初稿完成后凡是新增或修改需求都必须走变更评审给出影响分析包括关联用例变更、工作量估算变化、测试范围变化。解决的办法是需求说明书里加一个“范围描述”章节明确写出本版本包含的需求编号清单以及明确不包含的需求。必要时附一张“待定事项”表把没有定论的需求放进去避免它们通过口头方式混进主文档。5.2 词义口径冲突开发、教师、教务口中的“已结课”不是一回事现象往往在测试阶段集中爆发。测试用例里写着“课程已结课学生端应展示结课证书”开发完成并通过自测但测试执行时发现课程状态根本不是开发想的那样。测试人员查了代码后才发现开发把“结课”理解成了“课程在排课表中的结束日期到了”而业务这边要的“结课”是“学生完成了全部必看视频、通过考试且成绩合格”。原因大概率是需求说明书里没有建立“术语表”章节。同一词条无法统一各角色按自己的经验理解。解决的方法很简单在说明书最初几页放一个术语和词义对照表把高频词都拉进去至少应包括报名、选课、排课、课时、结课、完成、退款、学分、有效期内、学习进度。每一条都要用一句业务描述限定其精确含义比如“课程结课是指课程下所有必修章节的视频完成率达到100%且通过课后作业或考试”。哪怕术语表只有半页也值得写。因为研发和测试的执行依据就是这些词语的定义而不是他们头脑里的印象。5.3 伪需求收集了所有干系人意见做了个没人用的功能现象是系统上线后后台统计显示某功能使用率为 0最典型的案例是“学员积分商城”需求是运营负责人拍板加的理由是竞品有。开发资源投入不少上线半年没有任何订单最终又排期把这个功能下线白白消耗成本。原因是“竞品有”不等于“用户需要”需求有没有价值要回到两条线上验证一是使用场景本身是不是高频二是目标用户有没有真实的付费或使用意愿。不同的是竞品有积分商城、而你的用户主要是报班追课的学生积分兑换对他们并没有强吸引力这就是典型的伪需求。解决的思路是需求分析阶段对新增功能做一次“动因评估”这个需求是为谁解决的、解决到什么程度、用户不使用这个功能时会怎么样。如果回答不出来就放到待定事项表里不要直接进范围。后面想清楚了再排期。提示伪需求的判定不是以“有没有人提”为标准而是以“如果不做用户是否有替代方案、是否会明显不满”为标准。这条标准可以避免很多无效需求进入开发排期。6. 用评审清单和需求跟踪矩阵把说明书当“活文档”交付写到这里需求分析说明书本身的内容构造已经完整但如果你把说明书当成一次性交付物后续需求变更还是会在开发过程中击穿所有阶段。最后一章分享一招对我来说最实用的做法用需求跟踪矩阵把说明书和开发、测试结果绑在一起让说明书从“静态文档”变成“活版本”。需求跟踪矩阵是一张持续维护的表至少包含这四列需求编号、对应功能模块、对应设计文档或接口、对应的测试用例编号。它的价值体现在两个环节验收阶段可以快速核对“这个需求有没有对应的测试用例覆盖”变更阶段可以快速定位“这个需求改了涉及哪些设计和测试需要同步更新”。在线教育网系统需求数量通常在 100 到 200 条之间上了矩阵之后评审会不再需要翻完整本说明书去核对影响范围。评审阶段我也会准备一张需求评审检查清单重点不是“功能全不全”而是看需求可否测试、是否有歧义、是否有明确优先级。推荐按下表逐项打勾检查项判断标准通过与否需求是否可测试每个需求条目都能写出明确的验收标准是需求是否无歧义时间、条件、状态词都有明确定义无可能一词多解是需求优先级是否明确每个需求都有优先级且与后续排期策略一致是用例是否覆盖主要扩展流程核心用例除了主流程至少覆盖 2 个扩展流程是非功能指标是否量化性能指标有具体数字不写“高性能/快”等描述是异常路径是否有出口支付失败、课程下架等异常场景有描述或关联需求是版本管理这个习惯要单独强调一下。说明书写完之后肯定要经历几轮需求变更建议每次发布新版时在文档开头更新一下版本号、变更日期、变更记录。每条变更记录只写三个信息哪条需求改了、改的原因、关联影响。不出三个版本就能看出说明书在实际项目里的生命力。另外相当关键的一点是没有走评审的变更不要私下口头答应研发或测试哪怕只是一个字段别名也要回到矩阵里留痕迹不然真上线时对不上。我习惯在项目结项后把这份需求分析说明书连同需求跟踪矩阵一起归档到项目知识库它不仅是本期开发的验收证据也是下期迭代和同类项目需求分析的底稿。在线教育网这类系统功能链路长、角色多需求分析说明书不可能尽善尽美但保住术语定义清晰、功能条目可测、非功能指标可验证这三条底线项目基本不会出大的偏差。希望这个做法能帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进