ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

京东商城SRS拆解:软件工程课设需求分析方法论

京东商城SRS拆解:软件工程课设需求分析方法论 简介一份软件工程课程项目文档围绕京东商城网站软件需求说明书的撰写面向软件工程专业学生及相关开发者。文档从项目背景、任务概述到需求分析展开明确系统目标、用户特点、假定和约束并通过业务描述、系统框架图、系统步骤图、用例分析、类图等模块完整呈现商城系统的需求建模过程可为同类电商系统的需求分析提供方法论参考。资源为单个doc文件压缩包1.62MB文件类型为Word文档便于直接阅读和编辑。目前已有125人学习适合需要完成软件需求规格说明课程作业或学习需求分析建模的读者。文档详细涵盖用户注册、商品浏览、下单支付、订单跟踪、退换货等业务流程并包含运行环境要求内容结构规范、章节完整可直接用作模板或对照自查也有助于理解从业务流程到系统建模的完整转化过程。1. 一份软件工程课设里的京东商城SRS能当模板复用的需求分析方法论拿到这份《京东商城软件需求说明指导书.doc》时我第一反应是“又是课设文档”翻完才发现它把在线商城需求分析的标准动作都做了一遍角色建模、数据流分层、用例描述、类图设计该有的都有。对正在写软件工程课程设计、或者刚入行需要参考需求文档怎么写的人而言这份文档的价值不是“京东”两个字而是它成体系的SRS写法——从系统目标一路推演到每个用例的前置条件、后置条件和异常分支。文档由学生团队完成技术栈限定在Windows Server SQL Server ASP.NETC#属于典型的传统三层B/S架构虽然不新但作为教学样板足够完整。适合两类人一是要交软件工程课设、需要参照完整SRS结构的学生二是想了解电商系统需求分析阶段如何拆角色、画数据流图、写用例说明的初级开发或产品助理。接下来我会按文档的实际结构拆开讲哪些部分可以直接抄哪些部分放到真实项目里需要改造。2. 拆解文档骨架三大角色模块与九类功能需求是怎么分层的2.1 系统目标里的十个功能点对应电商系统的完整闭环文档在“任务概述”里列出了十个功能需求种类显示、查询、最新产品、活动信息、促销产品罗列、购买步骤、购物车、登录注册、个人信息、系统设置。这十个点覆盖了前台用户操作和后台管理两条线前台是“逛、查、买、跟单”后台是“管商品、管会员、管订单、管参数”。我在做电商项目时会把这十点再归拢成三块用户交易链路注册登录→浏览→购物车→下单→支付、商品信息链路分类→详情→搜索→促销、后台管理链路商品/会员/订单/库存。文档原样把十点平铺列出没有做链路归拢这是课设文档和真实需求文档的一个典型差异——前者偏重“列出了什么”后者更看重“这些功能之间怎么流转”。从岗位分工看这十点也比较明确前台功能服务于C端用户购物车、结算、个人信息是用户直接操作的后台的系统设置、订单管理、会员管理是运营和管理员用的。文档在“用户特点”一节只写了“网上商店主要参与者是用户、商场和后台管理人员”一句没有进一步区分用户画像比如高频购物者和一次性访客的操作差异。真实项目里这里通常会补一段用户特征分析但在课程设计层面这个颗粒度已经够支撑后续用例编写。2.2 三大角色模块划分用户、业务管理员、仓库管理员的职责边界系统框架图把整个商城拆成三个大模块用户管理模块、管理员管理模块、仓库管理员模块。用户模块包含注册、登录、浏览商品、购买商品、个人信息管理业务管理员模块包含商品管理、留言管理、订单管理、会员管理、管理员信息管理仓库管理员模块只有登录、库存管理、个人信息管理。角色与功能一一对应权限边界清楚这是这份文档在设计上做得好的地方——没有让所有功能混杂在一起而是用角色把系统切分成独立的职责域。对比我见过的一些课设文档经常出现“管理员”一个角色管所有后台功能订单、商品、库存、会员全塞在一起导致用例图的连线混乱、数据流图很难分层。这份文档把仓库管理员单独拎出来库存管理的目标就明确了查询库存、修改库存、删除库存。真实电商系统里仓库管理员通常还需要处理入库单、出库单、盘点单但那是进销存系统的范畴课程设计做到这个程度已经满足教学要求。从数据流图角度看顶层数据流图里三个角色分别与系统交换信息用户传递搜索条件和反馈信息业务管理员传递商品信息、订单信息和查询条件仓库管理员传递库存信息。这为后面的1层数据流图奠定了基础——每个角色一张子图信息流向一目了然。2.3 假定和约束条件怎么从文档反推部署环境文档在第2.3节明确写了假定和约束硬件上服务器基于Intel架构企业服务器、工作站为PC机软件上操作系统Windows Server、浏览器IE和Chrome、数据库SQL Server、编程语言Visual C#、设计工具Photoshop等。这些约束直接决定了系统实现的技术路线。从这份文档反推部署架构的话就是一台Windows Server跑IIS部署ASP.NET应用SQL Server存数据客户端浏览器访问属于典型的单服务器部署模式。放到今天的电商场景这个架构显然偏老但作为软件工程课设完全够用。需要注意一点文档里的“假定”提到用户能提供交付测试环境、用户能参与需求核准工作——这两条是需求工程里非常重要的前提。很多项目翻车不是代码问题而是需求方根本不参与确认开发闷头做完发现驴唇不对马嘴。文档把这两条写进假定说明作者团队理解需求确认的必要性。做真实项目时我会在这个基础上再补一条假设用户提供业务规则样例数据比如商品分类的层级规则、订单状态的流转规则否则需求评审只能停留在“功能名称对了”的层面。2.4 从业务描述到功能拆分SRS最容易被跳过的一步第3.1节业务描述按用户、业务管理员、仓库管理员三类角色分别阐述需要什么功能。用户需要注册、购物车、信息自我管理业务管理员需要商品登记、用户管理、订单管理仓库管理员需要查询和更改库存。这部分对应到需求工程里的“业务需求”层级回答的是“为什么做这个系统”和“谁在什么场景下用”。很多初学者写SRS直接从功能列表开始跳过业务描述结果就是需求文档里全是功能名词没有场景。这份文档把每个角色要做什么业务先讲了一遍然后才进入系统框架图、数据流图、用例分析。我习惯的做法是业务描述里每一个自然段后面都要能追到至少一个用例比如“用户需要注册成会员用户”对应UC001用户注册用例“购物车设计必须清楚、简单、方便”对应UC004购买商品用例里的购物车操作步骤。如果你写完业务描述后发现有一段内容在后面找不到对应的用例或功能模块说明要么业务描述写了多余内容要么功能拆分漏了东西。3. 从数据流图到用例说明需求分析最重要的两类表达工具实战3.1 三层数据流图怎么帮你排查遗漏功能文档画了三层数据流图顶层图图3-5、1层图图3-6、2层图图3-7到图3-13。顶层图把系统看作一个整体三个角色顾客、仓库管理员、网站业务管理员与系统之间的数据交互一眼看清1层图把系统拆成10个加工注册、商品信息查询、购买商品、订单管理、个人信息设置、留言管理、会员管理、商品管理、订单管理、库存管理2层图则对每个加工进一步展开比如“购买商品”拆成登录→浏览→选择→加入购物车→提交订单→支付订单六步。这三层结构的价值在于“逐层精化”从黑盒到白盒每层都只回答一个问题。写SRS时我常用一个自查方法看1层图里的每个加工在2层图里是否都有对应子图再看2层图里的每个底层加工在用例说明里是否都有对应用例。这份文档里两个“订单管理”出现在1层图的不同位置一个是会员的订单管理一个是业务管理员的订单管理但编号用了同一个4严格说这是个编号瑕疵——真实交付时我会把会员侧改成“订单查询与维护”管理员侧改成“订单处理”避免评审时被人追问。遇到这种情况别慌用Visio或Draw.io重画时单独编号就行。数据流图对排查遗漏功能很有帮助。比如你看图3-8查询商品数据流图游客先登录然后浏览商品分类、选择商品、查看商品信息。这里有个值得讨论的点游客如果未登录能不能浏览商品文档的逻辑是必须先登录才能浏览但实际电商网站通常允许游客浏览、到结算时才要求登录。这就是数据流图暴露出来的业务规则问题——评审时你只要顺着图走一遍流程立刻能发现这类不合理约束。3.2 用例图与用例说明这张表是SRS的核心交付物文档里最实用的部分是用例分析。用户用例图、业务管理员用例图、仓库管理员用例图加上每个用例的详细说明表。用例表的结构是标准七件套用例名称、标识符、用例描述、参与者、前置条件、后置条件、基本操作步骤、可选操作步骤。这种结构化的写法非常实用评审时直接拿表逐条核。我以UC004购买商品用例为例拆一下参与者是用户会员前置条件是“登录到系统”后置条件是“完成对商品购买”基本操作步骤是找商品→加购物车→查看购物车→结算→选择付款方法→完成可选操作包含调整商品数量、删除商品、切换付款方式、信息不全时提示补全。这个用例描述已经把主流程、分支流程、异常提示都覆盖了数据库表设计、接口定义都能从中延伸出来。要挑毛病的话“完成对商品购买”这个后置条件写得不够精确——什么叫“完成”是订单生成算完成还是支付成功算完成文档没有定义订单状态机导致这个用例的验收标准是模糊的。写SRS时我一般会给后置条件加上可验证的结果比如“系统生成状态为‘待支付’的订单记录订单号唯一”。这样开发做自测、测试写用例都有据可依。3.3 类图与用例次序图从需求到设计的过渡桥梁文档第3.5节画了类图第3.6节画了部分用例次序图。类图展示系统的核心对象分类及其相互关系商品类、用户类、订单类这三类必然是电商系统的核心类次序图则细化某个用例中对象之间的交互顺序。比如购买商品用例次序图会展示用户界面对象、购物车对象、订单对象、支付对象之间的消息传递顺序这些是后面写代码时画时序图的基础。在课程设计答辩和真实评审里类图和次序图是最容易被追问“为什么这么设计”的部分。我的经验是类图画完后从用户用例图里挑三个核心用例注册、购买商品、订单管理各画一张次序图确认类之间的方法调用能覆盖用例的操作步骤。这份文档在类图和次序图部分比较简略没有把类的方法和属性写全但这不影响整体结构的参考价值——你可以按自己的数据库表设计去补全。3.4 用例粒度的分寸哪些用例要拆哪些可以合观察这份文档的用例划分用户侧拆了注册、登录、查询商品、购买商品、修改个人信息五个用例业务管理员侧拆了登录、订单管理、商品管理、会员管理、留言管理、管理员信息管理六个仓库管理员侧登录、库存管理、个人信息管理。整体粒度适中既没有把“点击按钮”这种操作级动作单独立用例也没有把“系统管理”这种大而全的功能合并成一个干巴巴的用例。一个常见问题是登录用例在三个角色里重复出现UC002、UC006仓库管理员登录未编号。真实项目里登录应该抽成公共用例用泛化关系让三个角色复用而不是在不同角色图里各画一次。这是文档在用例建模上的一个明显短板也正好是你在写自己的SRS时可以做得更好的地方——把登录、修改个人信息这类公共功能提到通用用例层子角色通过include关系引用。4. 避坑记录从这份课设文档看SRS常见的五处翻车点4.1 用例编号撞车与文档一致性维护现象1层数据流图里出现两个“订单管理”编号都为4用户侧和管理员侧各有一个登录用例分别叫UC002和UC006但仓库管理员的登录用例没分配标识符。原因多人协作写同一份文档时各写各的章节没有统一编号和术语表管理。文档里能看出小组是按角色分工的有人写用户模块、有人写管理员模块最后合并时没有做交叉审校。解决写SRS前先建一个“术语与编号约定”小节规定用例编号规则比如UC开头按角色前缀区分UC-C-001表示用户侧、UC-A-001表示管理员侧数据流图加工编号按“图层-序号”规则1-1、2-1走。合并文档后用Excel拉一张编号唯一性检查表筛重复项。从那以后我每次交付SRS第一件事不是写正文而是花半小时把编号规则和文档目录树定死谁来写都用同一套编号体系。4.2 前置条件写“无”导致登录用例形同虚设现象文档里登录用例UC002的前置条件是“无”也就是说任何状态下都能执行登录操作。但查看同一份文档的购买商品用例前置条件是“登录到系统”。这两个用例连起来读就出现了逻辑漏洞既然登录没有前置条件那么“未登录”状态下用户能登录但“未登录”状态又无法购买商品——购买用例的前置条件其实应该是“用户已登录且会话有效”。原因作者把前置条件和“系统初始状态”混淆了。前置条件的正确含义是“执行这个用例之前系统必须处于什么状态”而不是“用户是不是白纸一张”。解决写前置条件时问自己一个问题如果把这个条件删掉用例的主流程还走得通吗登录用例的前置条件更合理的写法是“用户未登录且注册信息已存在于用户表”这比“无”多了信息量也方便测试设计。补充一点后置条件同样要避免“完成XX”这种不可验证的表述改成“订单状态置为待支付”“用户密码更新为新值”这类可检查的状态描述。4.3 数据流图有图无表外部实体与数据存储定义缺失现象文档里数据流图直接画了出来但没有配套的“外部实体说明表”“数据存储说明表”“加工逻辑说明表”。读者只能从图上的名字猜测“会员信息表”“订单信息表”里存什么字段。原因课设文档常见通病——图是重点表是加分项时间不够就只画图。但数据流图的价值恰恰在一致性校验没有数据字典做支撑图的连线对不对没法验证。解决每个数据流图配三张表——外部实体表名称、输入数据流、输出数据流、数据存储表名称、主要字段、被哪些加工读写、加工说明表加工编号、名称、输入、输出、加工逻辑简述。比如“订单信息表”这张数据存储至少列出订单号、用户ID、商品ID、数量、金额、状态字段加工“提交订单”写明输入是购物车数据输出是订单信息逻辑是根据购物车内容生成订单主表和订单明细表。做真实项目时我一般把这些表建在Word附录里评审只看图时有疑问就索引到表效率提升明显。4.4 运行环境约束散落没有独立的非功能需求章节现象文档在第2.3节写了硬件、软件、编程语言约束这部分内容属于“约束条件”但全文没有单列“非功能需求”——系统的性能指标、安全性、可用性、可维护性要求全部缺失。原因课程设计重点抓功能需求非功能需求是老师很少打分的地方学生自然忽略。但在真实项目评审里非功能需求往往是决定项目成败的——电商系统的响应时间、并发用户数、订单支付成功率这些指标直接影响技术选型。解决在写自己的SRS时至少补五条非功能需求性能首页响应时间不超过3秒、并发支持200个同时在线用户、安全用户密码加密存储、后台操作留日志、可用性系统可用率99%、提供数据备份恢复方案、兼容性支持Chrome/Edge/Firefox。哪怕数值是拍脑袋定的也比没有强——有了指标测试阶段才能做性能验证。从这份文档的约束条件看它的并发能力不会太高单机部署符合课设定位但你在真实项目里别照抄这个量级。4.5 购物车与订单的边界模糊缺少状态流转定义现象UC004购买商品用例里“点击结算选择付款方法点击完成显示购物单”——这里“购物单”到底是购物车快照、订单草稿、还是正式订单文档没有定义。订单管理用例UC007里提到“修改订单状态”但订单有哪些状态、状态之间怎么流转没有写。原因用例停留在操作层面没有深入到业务规则层。做需求分析时用例说明回答“谁在什么条件下做什么”状态图则回答“业务对象有哪些合法状态、事件触发什么迁移”——两者缺一不可。解决给订单建一张状态表待支付提交订单后生成、已支付支付回调成功、备货中后台确认、已发货仓库出库、已完成用户确认收货、已取消用户主动取消或超时未支付。每个状态转换标注触发角色和事件比如“待支付→已支付”的触发者是支付网关回调。这类状态表在数据库设计时直接映射成订单状态字段的枚举值开发不用猜。文档要是补上这张表整个订单模块的需求就闭环了。5. 把SRS变成开发基线需求评审与验收清单的落地技巧5.1 从用例说明生成功能模块表和数据库设计草稿SRS写完之后最实用的一步是把用例表“翻译”成开发任务。以这份文档为例UC004购买商品用例展开后能得到前端购物车页面加购、改数量、删商品、结算页面收货地址、支付方式选择、订单确认接口、订单生成逻辑主表明细表、支付跳转接口。对应到数据库至少设计五张表用户表、商品表、购物车表、订单主表、订单明细表。我一般用Excel建一张“用例到任务”映射表每一行是一个用例列分别是功能模块、页面或接口、数据库表、优先级、对应开发人。评审时拿这张表过一遍谁做哪块、要碰哪些表当场就对齐了。文档里没有直接给出数据库表结构但从类图和用例的操作步骤里能反推出来。动手写代码前把每张表的字段列出来——用户表有用户ID、用户名、密码哈希、邮箱、收货地址、手机号商品表有商品ID、商品名、分类ID、价格、库存量、描述、上架状态订单主表有订单号、用户ID、总金额、状态、创建时间、支付时间订单明细表有明细ID、订单号、商品ID、商品名、单价、数量、小计。这份草稿可以直接用来评审也可以作为数据库设计文档的骨架。5.2 需求评审清单15分钟过完一份SRS的检查项结合这份京东商城SRS的优缺点我整理了一份快速评审清单每次需求评审会我都按这个顺序过第一看用例图是否覆盖了业务描述里提到的所有角色和功能——每个角色至少有一个用例图每个用例都能追溯到业务描述的一个自然段第二看公共功能是否抽成公共用例——登录、修改个人信息这类跨角色功能不应该重复画第三抽查三个核心用例的前置条件、后置条件和可选操作步骤——前置条件不能是“无”后置条件必须可验证第四看数据流图的分层是否完整——顶层图到1层图到2层图逐层展开没有跳层第五看数据存储是否有数据字典支撑——图里出现的数据表假如没有字段定义要求补上第六看非功能需求是否有量化指标——没有性能、安全、并发指标的直接打回第七看约束条件是否和技术选型一致——文档写的语言、数据库、操作系统要能对上后续设计。这份清单不是向谁表功纯粹是吃过亏——有次做项目需求评审会上用例表里写着“修改订单”我以为是用户侧改收货地址开发以为是后台改状态测试以为两个都算上线前才发现三重理解不一致。从那以后我每次评审都强制走一遍上述清单先对用例再对状态流转绝不留死角。5.3 把SRS转成测试用例一份文档两头吃最后说一个容易被忽略的技巧SRS的用例说明表稍加改造就是测试用例的底稿。UC004购买商品的基本操作步骤是找商品→加购物车→查看购物车→结算→选择付款方法→完成转成测试用例时主流程走一遍是最基本的Happy Path可选操作里的“调整数量、删除商品、切换支付方式”对应异常流和分支流测试用例描述里提到的“信息不全则提示补全”直接作为校验类测试用例的预期结果。前置条件和后置条件则是测试准备和预期断言。一份SRS如果能做到测试直接照着写说明用例的颗粒度是合格的。反过来测试执行完发现的问题也应该能回溯到具体的用例——追溯不上的要么是需求遗漏用例没覆盖要么是测试步骤写偏了。这种双向追溯在真实项目里靠需求跟踪矩阵管理但在课设文档层面至少在Excel里留一列“对应UC编号”省去大量扯皮时间。写这份拆解文章是希望你把SRS当成活文档用而不是交完作业就扔进回收站——一份需求文档写得好的标准就是开发照着能做出来测试照着能验起来验收照着能查下去。希望帮到你。本文还有配套的精品资源点击获取
返回列表