ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

需求分析实验报告怎么写:从需求清单到可验证行为

需求分析实验报告怎么写:从需求清单到可验证行为 简介《软件工程实验报告——需求分析.doc》围绕酒店管理系统详细演示了需求分析阶段的完整过程适合软件工程课程设计、实验报告撰写及建模入门者参考。内容涵盖系统需求概述、部门划分与子系统功能随后重点讲解用例建模包括参与者、用例列表、用例规格说明与辅助需求对象建模部分列出了客房管理、用户管理、财务管理等五个管理类和三个实体类的属性与关联动态建模部分则用顺序图和状态图描述登录、入住、退宿等流程并附有总结与反思。资源为 1 个 doc 文件压缩包约 289KB轻量易用方便直接打开学习目前已有 78 人学习浏览。通过这份报告读者既能掌握需求分析文档的章节结构和写作方法也能学会如何将用例图、类图、顺序图、状态图应用到实际系统建模中是一份内容完整、结构清晰的实验报告范例。1. 需求分析实验报告为什么越像“需求清单”越容易翻车带过几届软件工程课设之后我发现一个规律那些被退回重写的需求分析实验报告几乎不是“没写够字数”而是“写成了需求清单”。功能点列了三十多条每条都说“用户能登录、能查询、能导出”但评审人问一句“谁能登录、查询什么、导出给谁用、不做行不行”报告里一个字都答不上来。这不是写作能力问题而是需求分析这门课最核心的那一步——把模糊的业务意图转成有边界的、可验证的软件行为——没有走完。这份 .doc 的实验报告本质上是在回答四个问题这个系统为谁解决什么问题它必须做什么、不做什么怎么证明“做对了”以及你作为分析师是怎么从零摸到这些结论的。这篇文章就沿着这条链路把报告从空白文档写到能过评审。适合正在写课设报告的学生也适合刚接手需求文档、想理顺分析方法的初级开发。2. 实验报告骨架从评审视角倒推一份需求文档的结构2.1 实验报告与真实需求文档的差异一份报告有三层读者需求分析实验报告和公司里那种几十页的《软件需求规格说明书》SRS不是一个物种。SRS 是给后续设计、开发、测试当契约用的每一条都得抠到“按钮在窗体右上角”或者“响应时间小于 2 秒”这种粒度。实验报告是给导师看的目的是证明你掌握了需求分析的方法和过程而不是证明你写出了可交付的商业文档。我一般把实验报告的读者拆成三层第一层是导师他看的是方法对不对、结构全不全、有没有自己的思考第二层是模拟的甲方也就是场景里的业务方报告里的用例、原型、词汇表要让他能看懂、能确认第三层是自己过两个月回来看这份报告能不能想起来当时为什么这么定边界。很多报告翻车就是因为只盯着第一层把 UML 图画得花团锦簇但图和数据流对不上业务规则含糊用例之间互相矛盾导师一眼就看出是拼凑的。所以写报告前先问自己一个问题如果我不是作者而是一个没参与过这个项目的评审拿到这份文档我能不能照着它判断“这个系统值得做、能做、做出来能用”如果答案是否定的那结构肯定有问题。2.2 从用例到验收标准一份 30 页报告的内容排布实验报告没有强制模板但按软件工程教材的习惯一份能站住的需求分析报告通常包含七个部分项目背景与目标明确问题域和系统边界用户角色定义列出每类角色及其权限功能需求用用例图和用例规约表达数据需求用类图或 ER 图表达非功能需求包括性能、安全、可用性验收标准把每条需求映射到可验证的指标附录包括访谈记录、问卷结果、词汇表。我建议按“从粗到细”排布每章之间用需求编号建立索引。示例如下1. 项目背景 1.1 现状与问题 1.2 项目目标 2. 角色定义 2.1 角色清单与职责 2.2 权限矩阵 3. 功能需求 3.1 用例图 3.2 用例规约UC-xx 4. 数据需求 4.1 类图 4.2 关键数据结构 5. 非功能需求 6. 验收标准 7. 附录 7.1 访谈记录 7.2 需求追溯表注意一个细节背景部分不要写“随着信息化的发展”这种空话直接写“当前某学院课程选课依赖 Excel 表存在三大问题……”。问题越具体后面的需求越站得住。很多报告的背景和需求是两张皮背景说“效率低”需求里却没有任何一条是和效率相关的指标这就叫脱节。2.3 用需求条目编号把全文串起来实验报告最容易被扣分的地方是内部不一致。用例图里画了“修改密码”用例规约却没有这条类图里有“订单”实体数据需求里却没有订单表结构非功能需求说“支持 100 人并发”验收标准里根本没有压测指标。解决这个问题最土也最有效的办法是给每条需求一个唯一编号全文所有图表和文字都引用这个编号。编号规则我用的是三层结构FRFunctional Requirement 表示功能需求NFR 表示非功能需求前缀加模块名缩写后缀是序号。比如教务系统里“学生登录”可以记为FR-AUTH-001含义是“认证模块功能需求第 1 条”。在用例图的参与者说明里写“学生见 FR-AUTH-001”而不是写“学生可以登录”在验收标准里写“FR-AUTH-001 通过标准登录失败时提示语可读且不泄露账号是否存在”。这个编号会一直贯穿到需求追溯表是全文的骨架。3. 需求获取别坐在电脑前编需求3.1 访谈、问卷与现场观察三类获取手段怎么选需求获取最忌讳的是拍脑袋。实验场景里没有真实甲方但模拟项目也必须走获取流程。常见做法是三类手段组合第一类是访谈约谈两三位业务角色每人准备 8-10 个开放式问题比如“你每天最烦的处理动作是什么”“这个数据填错了后面会有什么连锁反应”第二类是问卷覆盖更大范围的使用者收集频率、痛点、功能期望的量化数据第三类是现场观察或文档分析去实际盯半小时业务流转看表单、看台账、看在途流程。选型逻辑很简单访谈解决“为什么”问卷解决“有多少”观察解决“实际上是怎么做的”。三者产出不同报告里都要体现。我见过一份写超市收银系统的报告只做了一个问卷就说“80% 的人希望支持扫码支付”这就是典型的方法缺陷——问卷只能说明大家想要说明不了收银台空间、扫码枪型号、网络环境是否允许。现场观察才能暴露这些物理约束。这三类手段在报告里要写成“做了什么、得出什么结论、如何影响需求”三段式不要只贴一份空白问卷充数。每类手段至少对应两条需求依据导师看的时候能顺着“问卷第 5 题 → 需求 FR-XXX-002”的路径查下去报告的可信度会高很多。3.2 从对话原话到需求条目四条转换规则访谈做完最难的步骤是把对话转成需求。我总结了四条规则按顺序执行基本不会漏。第一去掉情绪词只留事实。甲方说“系统太卡了”这是情绪转成需求就是“列表页加载时间不超过 3 秒”或者“支持 100 条以上的数据列表分页展示”。第二区分“要什么”和“怎么实现”。甲方说“我要一个红头文件一样的打印模板”这是实现方案真实需求是“打印出的文件包含发文机关标志、标题、正文、落款四部分格式符合公文规范”。第三把隐含主语补全。甲方说“要能导出 Excel”谁导出、导出什么数据、Excel 的哪些字段、什么触发时机全部要明确。第四识别非功能属性。对话里出现的“快”“稳”“安全”“随时”都是非功能需求的来源但要落到可验证的指标上比如“随时”要变成“7x24 小时可用计划内维护窗口除外”。为了不让转换过程变成黑匣子报告里可以放一个“需求来源映射表”。表的字段包含编号、来源访谈记录第几条/问卷第几题/观察记录第几段、原话摘要、分析过程、所生成的需求编号。这张表是报告里最容易被忽视、但最容易被导师认可的内容因为它展示了你“怎么想”的过程而不是只有结果。3.3 用 PlantUML 画业务流程图让流程比文字更早暴露矛盾需求获取阶段画业务流程图有个额外好处画图的过程就是检查矛盾的过程。文字写“采购申请由部门经理审批超过 5000 元还需要分管领导审批”这句话看不出问题画成流程图就会发现一个分支缺口——5000 元整怎么算审批不通过要不要通知申请人这些分支必须在图里显式画出来画不出来的地方就是需求询问表里下一轮要问的问题。报告里流程图可以用 PlantUML 代码生成方便修改且能保证逻辑一致性。示例代码如下startuml start :提交采购申请; if (金额 5000) then (是) :部门经理审批; else (否) :部门经理初审; :分管领导审批; endif if (审批通过?) then (是) :生成采购单; stop else (否) :通知申请人并附原因; stop endif enduml这段流程图的逻辑说明分支条件的边界要在文字需求里写清比如“金额大于 5000 元不含时触发分管领导审批等于 5000 元时仅部门经理审批”审批不通过的通知路径必须单独成一条因为很多报告在这里漏掉了节点导致流程图中“审批不通过”之后没有任何活动这本身就是需求缺陷。PlantUML 的好处是改条件后图自动重新布局不会出现文档里图和文字对不上的尴尬。4. 需求建模用例图、类图与时序图的实验报告画法4.1 用例图边界、主角色与用例的粒度控制用例图是需求分析报告里曝光率最高的图也是被画得最稀烂的图。三个高频问题第一系统边界框里塞了大量非功能内容有把“登录时加密传输”画成用例的第二用例粒度忽大忽小既有“下单”又有“输入收货地址”第三参与者关系乱画把“管理员”和“超级管理员”画成泛化关系但实际只是角色权限不同。我的做法是三个原则。其一用例必须是“参与者通过系统获得一个可观察、可衡量的结果”像“登录”只是前置条件不是结果但如果系统有“找回密码”的独立流程那“找回密码”可以是用例。其二同一份报告里用例粒度要保持在同一层级要么都按业务事件分提交申请、审批通过、导出报表要么都按子系统功能分订单管理、库存管理不要混着来。其三参与者只画直接与系统交互的角色不画部门不画外部系统。类似“短信服务商”这样的外部系统建议用actor标注还是component报告里第一次出现时要统一说明。用例图画完后必须配一份参与者说明表包含参与者名称、身份描述、使用系统的目标、主要用例编号。这张表能解释“为什么这个参与者存在”是评审时最容易问到的点。4.2 类图从需求名词中筛出实体与属性类图画得不好的报告共性问题是把类图画成了数据库表结构图光秃秃地罗列字段毫无行为。实验报告里的类图是要展示“需求里有哪些数据实体、实体间什么关系”不是给开发看的物理设计。做法是从用例规约的“基本事件流”里提取名词然后做三轮筛选第一轮删掉角色名词学生、管理员这些是参与者不是实体第二轮删掉系统组件名词界面、按钮、页面这些是实现概念第三轮合并同义词“用户”和“账户”合并为“用户”实体。剩下的名词对照用例的事件流判定如果一个名词既会被创建/修改又会被查询基本可以确定是实体如果只出现在某一个用例里且没有属性大概率是该用例的一个输入参数不是独立实体。类图里每对关联关系都要能回答“为什么需要这个关联”。双向关联慎用实验报告里十有八九只需要单向导航。比如“订单”知道“客户”但“客户”不需要知道“订单”的全部细节那就在订单类这边画箭头指向客户类即可不要为了对称画双向。属性列不要贪多每个类列 3-5 个核心属性就够了重点是关联和多重性的表达。4.3 时序图只画三条关键路径别贪多很多报告里的时序图是灾难现场一张图塞了十几个对象、二十多条消息箭头缀成蛛网评审根本没法看。实验报告不要求覆盖所有流程只挑最能体现系统交互逻辑的三条路径即可一条主业务路径比如“用户提交申请到审批通过”一条异常分支比如“库存不足时如何处理”一条跨角色路径比如“学生选课与教学秘书排课之间的数据交互”。时序图的作用是验证用例规约里的事件流是否完备。画图时按“顺序从左到右边界对象 → 控制对象 → 实体对象”排列消息能明显看出职责分配是否合理。如果消息全部在一个对象上进出说明控制逻辑全堆在界面层需求分析报告里就要提示后续设计阶段注意。画时序图的 PlantUML 代码示例如下startuml actor 学生 participant 选课界面 as UI participant 选课控制器 as CTL participant 课程 as Course student - UI: 提交选课申请 UI - CTL: 校验选课资格 CTL - Course: 查询剩余名额 Course -- CTL: 返回剩余容量 alt 名额不足 CTL -- UI: 返回容量不足提示 else 名额充足 CTL - Course: 扣减名额 CTL -- UI: 选课成功 end enduml代码对应的逻辑说明alt 分支是时序图里最容易出错的地方分支条件必须在用例规约中显式写明不能只画图不写条件。上例中“校验选课资格”这步在校验什么、不通过怎么办时序图里只画了一个 message文字部分要补全。时序图中不建议出现超过六个参与者的场景参与者的职责说明放在图下方的表格里。5. 避坑需求分析报告常见的五个翻车现场5.1 把“点击按钮”写成需求现象需求条目写成“用户点击查询按钮系统显示结果列表”全文找不出一个非功能指标也没有业务规则。原因把用户界面操作直接当成需求混淆了“界面交互”和“系统能力”。这类报告通常没有参与流程图也没有用例规约靠想象写界面行为。解决把需求改写成“用户输入查询条件后系统返回符合条件的结果列表结果按记录编号升序排列查询条件为空时提示用户输入至少一个筛选字段”。如果实验要求包含界面原型原型里画按钮没问题但需求条目里写的是系统能力和约束不是按钮坐标。5.2 功能需求与界面混淆导致需求无法验证现象验收标准写成“登录页面美观大方”“界面简洁易用”导师问怎么量化答不上来。原因需求分析报告里把“设计偏好”写进了功能需求。美观是主观感受且和后端实现无关。解决把这类描述移入非功能需求中的“可用性”类别并量化。比如“登录页面的核心操作输入账号、输入密码、点击登录必须在一次屏幕高度内完成”“常用操作不超过三级菜单”。如果实在量化不了就删掉不要凑数。验收标准里只留可验证的指标。5.3 用例图中参与者缺失角色与用例对不上现象用例图里学生能“查看成绩”“打印成绩单”“申请复查”但参与者只画了学生一个没有教务处角色或反过来说图上画了“系统管理员”但所有用例里管理员只是“维护用户信息”没有和业务流产生互动。原因参与者集是从现成用例反推的没有回到业务现场看角色分工。解决重新对照业务流程图给每一条关键业务路径列一遍角色清单。一个角色只要在任一路径中执行动作、接收结果或承担审批职责就应当出现在用例图里。反过来的角色如果只是系统配置和数据备份建议单独放一张“系统维护用例图”避免和业务用例混在一起。5.4 需求优先级一刀切缺少取舍逻辑现象所有功能需求标注“高”优先级或干脆不标报告里没有一处讨论“如果时间不够先砍什么”。原因没有从业务价值和成本两个维度去看需求。解决在需求追溯表之外增加一列“优先级高/中/低”并在报告正文里用一段话说明判定依据。一个比较容易上手的维度是检查每条需求对核心业务目标的影响没有它业务无法闭环就是高没有它业务能用但效率受损就是中没有它不影响主线就是低。优先级低的条目在验收标准里可以放宽甚至标注“超出本期范围见展望”。5.5 需求追溯表缺失报告前后脱节现象用例图、类图、需求条目各做各的评审提出“类图里的订单实体在用例里没有对应的‘提交订单’用例”作者无法回答。原因写报告时按章节顺序写完就交没有做一致性检查。需求追溯表就是把图纸和文字串起来的关键工具。解决在报告附录里放一张需求追溯表格式如下。需求编号需求描述关联用例关联类验收标准编号优先级FR-ORDER-001用户提交订单时校验库存UC-004订单、库存AC-ORDER-001高这张表不用写得很长能把测试用例或验收条目接住即可。它的作用不是给导师看是给你自己“抄写”用的写完后逐行过一遍任何一格填不出来的都说明前面有遗漏。6. 收官技巧用需求追溯表和验收矩阵证明分析有效实验报告写到最后一章很多人草草收尾“本文对某系统进行了需求分析完成了用例图和类图的绘制。”这句话没有任何信息量。真正能让报告加分的收官是两条验证闭环一是需求追溯表把每条功能需求映射到用例、类图、非功能指标和验收标准二是验收矩阵把验收标准组织成“条件 预期结果”的结构化列表。两者合在一起才能回答“你怎么证明需求分析做对了”。需求追溯表我习惯放在附录在正文里留一段“追溯表的使用方法”说明。比如 FR-AUTH-001 对应 UC-001 登录用例类图里需要对应用户实体验收标准 AC-AUTH-001 写“输入错误密码三次后系统锁定账号 15 分钟并显示剩余锁定时长”。每次写完一条需求就问自己能不能找到画出这条需求的用例能不能在类图里找到数据载体能不能写出一个测试步骤证明它做完了三个问题有一个答不上来这条需求要么删掉要么拆细。验收矩阵则建议单独一张表列出测试步骤、输入数据、预期结果、需求编号。比如“输入已注册账号和正确密码点击登录预期跳转至首页并显示用户昵称”。我见过一份报告用这个方法把 30 多条需求全部接了一遍导师当场就说“这报告可以当模板”。我自己的教训是第一次写需求分析报告时时间分配严重失衡画图用了三天写追溯表只用了一个小时结果图里画了一个“导出课程表”的用例追溯表里却找不到对应的数据字段翻回去改又花了半天。从那以后我改成“每写完一个用例立刻填对应的追溯表行”不攒到最后。这个习惯也带到了真实项目里每次评审前只需要检查表格有没有空项就能快速判断文档是否完整。需求分析的本质不是画图是让模糊的描述变成机器可验证行为的边界。把这份报告当作第一次“从对话到代码之间搭桥”的练习多花时间在追溯和验证上少纠结措辞。希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

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