简介:软件工程图书管理系统需求分析报告以docx文档形式提供,面向软件设计人员、程序编写员及高校师生,系统梳理了图书借阅、查找、退还、借书证申请、上架、逾期处罚等核心业务流程,明确了基于Delphi与SQL Server的实现方案。报告从项目背景、任务概述出发,逐一说明运行环境、条件限制,并对静态数据(图书、管理员、读者信息)与动态数据(输入输出操作)进行了详细定义,同时给出SQL Server数据库描述以及顶层、0层、1层数据流图和数据字典,完整呈现需求分析阶段的文档编写与建模思路,对开展课程设计或毕业设计具有直接参考价值。资源包仅1个文件,为docx格式,大小89KB,内容结构清晰,便于按需编辑复用。已有1842人学习下载,适合计算机相关专业学生及初入行的软件工程实践者借鉴。
1. 图书管理系统需求分析报告:从功能清单到可验收需求
软件工程课设里,图书管理系统需求分析报告几乎是出现率最高的题目,但也是最容易写成“系统说明书”的文档。我见过太多人打开空白的 docx,把网上模板改个名字就交上去,结果答辩时老师问一句“借书时遇到预约冲突系统怎么处理”,当场卡壳。这份报告的核心不是罗列功能,而是把业务规则、角色边界和验收标准写清楚,让后面设计、编码、测试都有据可查。下面这套写法按我实际做课程设计的流程来,从需求拆解讲到 Word 文档结构,再讲到怎么用 AI 反向验证需求,适合正在为软件工程课程设计或毕业设计写文档的从业者和学生。
2. 动手前先拆需求:角色、用例与 FR/NF 两条记录线
拿到题目的第一件事不是打开 Word,而是拿一张白纸把业务角色和流程列出来。软件工程导论里需求工程的第一步就是需求获取与分析,图书管理系统的业务看着简单,细节全藏在边界条件里:一本书被预约后又被别人借走怎么处理?读者手里有逾期未还的书还能不能继续借?罚款是还书时结算还是当场收取?这些不拆清楚,后面所有章节都会写得像无源之水。
2.1 三类参与者:读者、图书管理员与系统管理员
用例建模里的参与者不叫“用户”。用户是泛指,参与者是站在系统边界之外、带着明确目标的角色。图书管理系统最少需要三类参与者,每类角色的用例集合完全不同:
| 参与者 | 核心目标 | 典型用例 |
|---|---|---|
| 读者 | 找到书、借到书、按时还书 | 关键词检索、按分类浏览、预约图书、借书、还书、续借、查看个人借阅记录、查询罚款 |
| 图书管理员 | 维护馆藏与流通业务 | 录入新书、编辑图书信息、办理借书、办理还书、处理预约请求、逾期催还、收取罚款、维护读者信息、生成流通统计报表 |
| 系统管理员 | 保障系统运行与数据安全 | 账号创建与权限分配、借阅规则配置、数据备份与恢复、日志审计 |
每类参与者对应一张用例图,也可以合成一张带系统边界的大图。常见错误是把“数据库管理”“登录验证”画成用例,数据库是内部实现,不是参与者目标;登录验证一般作为其他用例的 include 关系出现,不单独成独立用例。画图工具用 StarUML、draw.io 或 ProcessOn 都行,课程设计不强制 Visio,关键是表达规范。
用例画完以后,每个用例都要配一段用例描述。这是很多人偷懒跳过的地方,但恰恰是需求分析报告里最值钱的部分。我一般用一个固定属性表来写,每次都套同一套字段,避免漏项:
| 属性 | 内容示例(以“借书 UC-003”为例) |
|---|---|
| 用例编号 | UC-003 |
| 用例名称 | 办理借书 |
| 参与者 | 图书管理员(读者是次要参与者) |
| 前置条件 | 读者持有有效借书证,读者未处于逾期停借状态,图书状态为“在馆” |
| 主流程 | 1. 管理员扫描图书条码;2. 系统校验图书状态为“在馆”;3. 系统校验读者当前可借数量;4. 系统创建借阅记录;5. 图书状态改为“已借出”;6. 系统显示应还日期 |
| 异常流 | 2a. 图书已被预约,提示预约者姓名并终止;2b. 图书状态为“下架”,终止;3a. 读者在借数量已达上限,提示超限;3b. 读者有逾期未还图书,触发停借规则 |
| 后置条件 | 借阅记录落库,图书状态变更为“已借出”,读者在借数量加 1 |
| 优先级 | 高 |
用例描述不写界面按钮,不写 SQL 语句,写的是参与者和系统之间可见的交互。每一条主流程步骤都是后面功能需求条目的原材料。读到这里你可以自查一下:如果借书用例里没有“校验读者可借数量”这一步,那你的报告在需求层面就已经漏了一项核心业务规则。
2.2 功能需求 FR 与非功能需求 NF:一条需求一个可验证断言
用例拆完,开始写需求条目。功能需求描述系统行为,非功能需求描述行为质量。我习惯给每条需求编一个唯一编号,前面对应到用例,后面对应到测试,形成一条可追踪的线。
功能需求条目建议套这个模板:编号 + 需求描述 + 来源用例 + 优先级 + 验证方法。举例:
FR-001:当读者输入包含书名的关键词并点击检索时,系统应返回书名或 ISBN 匹配的图书列表,展示馆藏状态和可借数量,P95 响应时间不超过 2 秒。来源 UC-001。优先级高。验证方法:使用书名“计算机网络”检索,记录请求发出到结果渲染的耗时。
同样的意思,写成“系统支持图书检索”就废了。前者是断言,可以直接变成测试用例;后者只是一句话愿望。两条写法的差距就是一份需求分析报告合不合格的分水岭。你可以用这个标准检查自己写过的每一条 FR:如果一句话里找不到“当……时,系统应……”的结构,或者找不到一个可以测量的数字,那这条需求大概率会被评审打回。
非功能需求是课程设计报告的重灾区。很多人写“系统运行流畅、界面美观、安全性高”,这些词在需求分析里没有任何价值,因为它们不可验证。我一般只写三类最少指标:性能、可靠性、安全。示例:
NF-001 性能:支持 50 个并发读者在线操作,检索接口 P95 响应时间小于 2 秒,借还书事务提交时间小于 3 秒。 NF-002 可靠性:数据库每日凌晨 2 点全量备份,备份文件保留 30 天,支持恢复到最近一次备份。 NF-003 安全:密码以加盐哈希存储,不同角色仅能访问授权模块,操作日志保留 180 天。
每条非功能需求同样要写验证方法。并发指标怎么测、备份怎么验证恢复,写清楚以后,测试章节才不会变成空话。
2.3 优先级怎么定:用 MoSCoW 划清本期范围
需求不是全部都要做。分析报告里明确优先级,既是工作量评估的依据,也是答辩时的防护墙。MoSCoW 方法够用:Must 必须有,Should 应该有,Could 可以有,Won't 这期不做。
图书管理系统里,借书、还书、检索、读者管理是 Must;预约、续借、逾期催还是 Should;图书荐购、消息通知、移动端适配是 Could;智能推荐、自助借还机对接可以明确写进 Won't,作为后续迭代方向。报告里单列一小节“本期范围与未来扩展”,把 Won't 项列出来并说明理由,评审老师再问“为什么没做 XX 功能”,你就有依据回应:这是有意识的范围决策,不是遗漏。
3. 文档骨架与填写顺序:把空白的 docx 搭成需求文档
理论拆完,可以打开 Word 了。我见过最快的翻车方式是从第一章“引言”开始顺着写,写到最后发现数据字典里少了字段,又回头改前面的描述,前后改了五遍还对不上。正确的做法是先搭骨架,再按依赖关系填充,让后写的每一部分都有前面内容作依据。
3.1 六段式文档骨架:从引言到验收标准的章节结构
一份能交的软件工程课程设计需求分析报告,我通常用六个章节。你可以在 docx 里先把这些一级标题全部建好,再逐段填充:
| 章节 | 定位 | 必须写到的内容 |
|---|---|---|
| 1 引言 | 说清楚文档目的和使用范围 | 编写目的、项目背景、术语与缩写、参考资料 |
| 2 总体描述 | 让读者快速理解系统全貌 | 系统目标、用户特征、运行环境、设计与实现约束 |
| 3 功能需求 | 报告最核心的部分 | 用例图、用例描述、FR 条目表、优先级划分 |
| 4 非功能需求 | 质量属性与约束 | NF 条目表、性能指标、安全与可靠性要求 |
| 5 数据需求 | 数据结构和业务规则落点 | ER 图、数据字典、核心业务流程说明 |
| 6 验收标准与附录 | 定义“做到什么程度算完” | 验收清单、待确认问题、未来扩展范围 |
先说“用户特征”。很多报告写“本系统用户为读者和管理员”,等于没写。读者特征是“具备基本网络操作能力、不熟悉图书馆业务流程”,管理员特征是“经过培训、每天长时间使用系统、需要高频操作”。用户特征直接决定易用性需求的写法:读者端需要更明确的引导和提示,管理员端需要快捷键和批量操作。
“运行环境”也不要笼统写“Windows”。写成“客户端为 Chrome 100 以上版本浏览器,分辨率 1920×1080;服务端为 Linux + MySQL 8.0,后端采用 Python Flask”才有约束力。注意这一节的每一句话都会在后面变成开发和测试的硬限制,写之前想清楚。
“术语与缩写”是很多人忽略但评审老师会看的章节。借书证号、馆藏状态、在馆、已借出、预约中、下架、破损,这些词不定义,后面数据字典里状态枚举写什么大家理解不一致,文档内部先打架。
3.2 先画图再填表:用例图、ER 图、数据字典的先后顺序
我的固定顺序是:用例图 → 用例描述 → ER 图 → 数据字典 → FR/NF 条目 → 回填引言。这个顺序的依赖关系是单向的:用例图决定系统边界,ER 图决定数据结构,数据字典是 ER 图的展开,FR/NF 从用例里抽。
画用例图时记住三个要素:参与者画在系统边界外,用例椭圆画在边界内,参与者与用例之间用直线关联。用例之间的关系只有 include、extend、泛化三种,不需要箭头表示步骤顺序。以检索图书为例:读者在左侧,系统边界框内有“关键词检索”“按分类浏览”“查看馆藏状态”三个椭圆;如果“预约图书”要求必须先登录,就在“预约图书”和“登录验证”之间加一行带 < > 的虚线箭头,指向“登录验证”。
画 ER 图时,图书管理系统最容易踩的坑是“一本书”和“一本副本”的区分。同一 ISBN 的书可能有五本复本,每本有独立条码。ER 图上把“图书”和“图书副本”分开建模:图书表存书目信息,图书副本表存每一本的条码、状态和所在馆藏位置。借阅记录关联的是副本而不是书目。这个模型不清,后面“可借数量”和“预约队列”全部没法算。
关系也要画明白:读者和借阅记录是 1:N,图书副本和借阅记录是 1:N,读者和预约记录是 1:N,图书副本和预约记录是 1:N。如果罚款独立建模,罚款记录挂到借阅记录下 1:1 或 1:N 都可接受,但要写清楚。
3.3 数据字典:字段名、类型、约束一张表说清
ER 图画完,把每张表展开成字段表。下面给两个核心表的示例,字段约束直接决定后续建表语句和前端校验规则:
| 表名 | 字段名 | 数据类型 | 宽度/精度 | 约束 | 说明 |
|---|---|---|---|---|---|
| book | book_id | INT | 11 | 主键,自增 | 书目内部编号 |
| book | isbn | CHAR | 13 | 非空,唯一,ISBN-13 格式 | 国际标准书号 |
| book | title | VARCHAR | 200 | 非空 | 书名 |
| book | author | VARCHAR | 100 | 非空 | 作者 |
| book | publisher | VARCHAR | 100 | 可空 | 出版社 |
| book | publish_date | DATE | - | 可空 | 出版日期 |
| book | category | VARCHAR | 50 | 可空,建议枚举 | 分类号 |
| book | status | ENUM | - | 非空,默认 in_library | in_library/borrowed/reserved/discarded |
| 表名 | 字段名 | 数据类型 | 宽度/精度 | 约束 | 说明 |
|---|---|---|---|---|---|
| borrow_record | record_id | INT | 11 | 主键,自增 | 借阅记录号 |
| borrow_record | book_copy_id | INT | 11 | 外键 → book_copy | 副本标识 |
| borrow_record | reader_id | INT | 11 | 外键 → reader | 读者标识 |
| borrow_record | borrow_date | DATE | - | 非空 | 借出日期 |
| borrow_record | due_date | DATE | - | 非空 | 应还日期 |
| borrow_record | return_date | DATE | - | 可空 | 实际归还日期 |
| borrow_record | fine_amount | DECIMAL | 10,2 | 默认 0 | 逾期罚款金额 |
注意外键字段统一以 _id 结尾,字段名全小写加下划线,日期类型统一用 DATE。这些约定看起来是小事,但后面的建表脚本、ORM 映射、接口字段全都要按它来,文档里先统一,代码里少吵一架。state 枚举带上 reserved 状态也是很多初版报告会漏的:书被预约后,副本状态就必须和“在馆”“已借出”区分开。
3.4 从用例抽 FR,从 ER 图抽 NF:需求不是凭空编出来的
填充功能需求章节时,我从来不离开用例描述空写。每个用例的主流程和异常流步骤,都可以转换成一条 FR。以借书 UC-003 为例,主流程第 2 步“系统校验图书状态为在馆”,就可以写成“FR-004:当图书状态为借出或预约时,系统应拒绝借书操作并提示具体原因,响应时间不超过 2 秒”。主流程第 3 步“校验读者在借数量”,写成“FR-005:当读者在借数量达到上限时,系统应提示超限并终止借书流程”。照这个方式,一个借书用例至少能抽出四五条可验证的功能需求。
数据字典反过来给非功能需求提供依据。看到借阅记录表里有 due_date 和 fine_amount,就知道逾期计算和罚款是核心业务规则,对应 NF 里要写清“系统每日定时任务扫描逾期记录并更新状态”。看到备份要求,对应的是 ER 图里所有数据表必须支持全量导出与恢复。FR 和 NF 都从分析产物里“长”出来,而不是从模板里抄过来。写完一节就用这个逻辑自查:这一条需求,能指回用例的哪一步、ER 图的哪个实体?指不回去的,删掉或者改掉。
4. 从需求到系统:用 AI 把需求分析报告翻译成代码骨架
需求分析报告的终点不是交 Word,而是给后续设计编码提供输入。现在比较高效的做法是:把写好的用例描述和数据字典喂给大模型,让它先出一版能跑的最小后端骨架,再拿骨架反向检查需求是否自洽。用 AI 不等于放弃需求分析,而是用它快速产出候选实现,然后逐条按 FR/NF 验收。
4.1 把用例与数据字典组织成 AI 提示词模板
我一般会把需求文档导出为 Markdown,按下面这个结构组织后提交给 AI。这个模板本身就是一种结构化需求表达的示范,你可以直接复制,改成自己的内容:
我是一名软件工程专业学生,正在做图书管理系统课程设计。我已经完成需求分析,以下是结构化内容。请你扮演系统架构师,基于这些需求生成一个最小可运行的 Python Flask + SQLite 后端骨架,只提供 JSON API,不写前端页面。 【参与者与用例】 读者:检索图书(UC-001)、借书(UC-003)、还书(UC-004)、续借(UC-005) 图书管理员:办理借书(UC-003)、办理还书(UC-004)、录入新书(UC-006) 【关键功能需求】 FR-001:读者输入书名关键词后,系统返回匹配图书列表,P95 响应时间小于 2 秒。 FR-004:图书状态为已借出或已预约时,系统拒绝借书并返回 409 状态码和明确错误信息。 FR-005:读者在借数量达到上限时,系统拒绝借书。 【数据字典】 图书表 book:book_id 主键自增,isbn CHAR(13) 非空,title VARCHAR(200) 非空,status ENUM('in_library','borrowed','reserved') 默认 in_library 读者表 reader:reader_id 主键自增,name VARCHAR(50) 非空,max_borrow INT 默认 5 借阅记录表 borrow_record:record_id 主键自增,reader_id 外键,book_copy_id 外键,borrow_date DATE,due_date DATE,return_date DATE 可空 【输出要求】 请使用 Python + Flask + SQLite 实现上述 API,每个接口都要有与 FR 编号对应的注释,返回结构统一为 {"code": 0, "data": ...} 或 {"code": 409, "message": "..."}。这段提示词的关键在于:先给角色与用例,再给可验证的 FR,再给字段级数据字典,最后限定输出格式和语言。不要让它“自由发挥生成一个完整系统”,那样生成的代码和你的需求对不上;要限定“最小骨架”,后面才好逐条验收。
提示:框架和语言可以自己替换。课程设计选 Java Spring 就让它生成 Spring Boot 骨架,选 PHP 就生成 ThinkPHP 或原生 PHP 版本。但数据字典部分必须是字段级的,AI 才能生成能建表的代码。
4.2 用骨架反向检查需求:接口、异常流与边界
AI 生成的代码不要直接信任,拿来当检查工具。下面是一段典型的生成骨架,注意看注释里 FR 编号的对应方式:
@app.route("/search", methods=["GET"]) def search_books(): # FR-001:按书名关键词检索,返回馆藏状态 keyword = request.args.get("keyword", "") stmt = """ SELECT book_id, title, author, status FROM book WHERE title LIKE ? OR isbn LIKE ? """ rows = db.execute(stmt, (f"%{keyword}%", f"%{keyword}%")).fetchall() return jsonify({"code": 0, "data": rows}) @app.route("/borrow", methods=["POST"]) def borrow_book(): # FR-004:图书状态校验,拒绝非在馆图书的借书请求 reader_id = request.json.get("reader_id") book_copy_id = request.json.get("book_copy_id") status = db.execute( "SELECT status FROM book_copy WHERE book_copy_id = ?", (book_copy_id,) ).fetchone() if status is None: return jsonify({"code": 404, "message": "图书副本不存在"}), 404 if status[0] != "in_library": return jsonify({"code": 409, "message": "图书当前不可借"}), 409 # FR-005:读者在借数量校验 borrowed = db.execute( "SELECT COUNT(*) FROM borrow_record WHERE reader_id = ? AND return_date IS NULL", (reader_id,), ).fetchone() reader = db.execute( "SELECT max_borrow FROM reader WHERE reader_id = ?", (reader_id,) ).fetchone() if borrowed[0] >= reader[0]: return jsonify({"code": 409, "message": "在借数量已达上限"}), 409 # 创建借阅记录,默认借期 30 天 db.execute( """ INSERT INTO borrow_record (reader_id, book_copy_id, borrow_date, due_date) VALUES (?, ?, date('now'), date('now', '+30 days')) """, (reader_id, book_copy_id), ) db.execute( "UPDATE book_copy SET status = 'borrowed' WHERE book_copy_id = ?", (book_copy_id,), ) return jsonify({"code": 0, "data": {"due_date": datetime.date.today() + datetime.timedelta(days=30)}})这个骨架每段都对应前面提示词里的 FR:/search接口的LIKE查询实现 FR-001,/borrow接口的第一道状态判断实现 FR-004,第二道数量判断实现 FR-005。能跑起来以后,拿第 2 章用例描述里的异常流一条条测:借一本不存在的副本返回什么?借一本已预约的书返回什么?在借数量达到上限返回什么?每条异常流都有明确响应,说明需求里业务规则写全了;如果测出 AI 生成的代码没有处理某个分支,那多半是需求分析阶段漏了这条异常流,要回去补用例描述。
4.3 技术选型先问需求文档:运行环境是硬约束
热词里 Python 图书管理系统和 PHP 图书管理系统都有人搜,选型其实不复杂。课程设计时间紧,Flask + SQLite 是最快路径,代码量少、环境搭建简单,适合需求分析报告里运行环境写“SQLite”的场景。想讲设计模式、SSM、Spring Boot 结构的,适合毕业设计,报告里运行环境就要写“MySQL + Spring Boot”。PHP 适合有现成模板、主要想快速跑通页面流程的同学。一句话:第 3.1 节里运行环境写的每一个词,都在这里约束你的框架选型,所以写需求分析报告时就别乱承诺。
5. 避坑:需求分析报告常见的四个翻车点与排查
写完初稿别急着提交。下面四条是我在课程设计和毕业设计里见过最多的问题,每条都按“现象 → 原因 → 解决”的顺序排查一遍,报告质量能上一个明显的台阶。
5.1 把功能需求写成了产品介绍,整条没有一个可验证断言
现象:报告第三章写成“系统支持图书检索、系统支持借书、系统支持还书”,每条后面没有前置条件、没有异常流、没有响应时间。评审老师扫一眼就知道是从功能列表模板抄的。
原因:把需求获取当成了写清单,只回答了“系统有什么”,没回答“做到什么程度算完成”。需求分析的核心是定义一个可以被测试确认的行为边界。
解决:对每一条 FR 套一遍“当……时,系统应……,响应时间不超过……”。原来写“系统支持图书检索”,改成“当读者输入书名关键词并点击检索时,系统应返回匹配图书列表并展示馆藏状态,P95 响应时间小于 2 秒”。如果一句话套不进去,说明这条需求还没想清楚。
5.2 非功能需求写得玄学,答辩时被问性能指标直接沉默
现象:非功能需求章节只有“系统运行流畅,界面美观,安全性高”这种不可测量的描述。老师问“最多支持多少人同时使用”“数据多久备份一次”,答不上来。
原因:以为非功能需求不重要,或者不知道怎么把“好”变成数字。流畅、美观都是主观形容词,不能进入测试验收。
解决:最少补三条硬指标。性能写“支持 50 并发,检索 P95 小于 2 秒”;可靠性写“每日凌晨 2 点全量备份,保留 30 天”;安全写“密码加盐哈希存储,操作日志保留 180 天”。每条跟一个验证方法,比如“用 Jmeter 压测检索接口确认 P95 指标”。没有数字等于没有验收依据,这是需求文档和作文的分界线。
5.3 用例图画成了流程图,椭圆之间全是箭头
现象:用例图里“读者”连着“登录”,登录再连“检索”,检索再连“借书”,箭头排成一条流程。老师看一眼就判错,说这不是用例图。
原因:把用例图当成流程图来画。用例图表达的是“角色为什么使用系统”的目标关系,不是操作步骤的先后顺序。步骤应该写进用例描述的主流程文本里,而不是画在图上。
解决:画完检查一遍——参与者与用例之间只能是无箭头的直线关联;用例与用例之间只允许 include、extend、泛化这三种关系;如果图上出现了表示“下一步”的箭头,把它删掉。主流程步骤留在用例描述表里写文字,不属于图的一部分。
5.4 数据字典和 ER 图对不上,前后逻辑自相矛盾
现象:ER 图里读者实体有 phone 字段,数据字典的 reader 表里却没有;图书副本表的主键在 ER 图里叫 copy_id,数据字典里叫 book_copy_id。两份材料单独看没问题,放一起就对不上。
原因:图和字典是手工分开维护的,后面改了图没有同步回字典,或者先从网上抄了字典,再照着画图,两边来源不一致。
解决:用 Excel 或者在线表格维护一张字段总表,列分别是表名、字段名、类型、宽度、约束、来源实体。每次改 ER 图,先改这张总表,再重新导出数据字典章节。文档提交前,抽三个实体做交叉核对:ER 图里的每个属性,在数据字典里必须有一条对应记录。
5.5 AI 生成的字段约束没有逐条核对,规则是编出来的
现象:用 AI 辅助补全书稿后,报告里出现“图书编号长度为 10 位”“ISBN 为 12 位数字”这类明显错误。原因是大模型把网上的杂糅内容当成依据,生成了看起来专业、实际与真实规则不符的约束。
原因:AI 输出的是“最可能的说法”,不是“你的系统该有的规则”。它不会主动校验 ISBN-13 的校验位逻辑,也不会知道你用的是条码还是 RFID。
解决:对 AI 生成内容做三查。一查 ISBN 长度是否 13 位、日期格式是否统一;二查状态枚举值(in_library/borrowed/reserved/discarded)是否与用例描述一一对应;三查外键字段命名是否符合你在 3.3 节里定的_id规范。AI 产出只能当初稿,数据规则和业务约束必须回原文核对,尤其涉及金额、日期、状态的地方一个都不能放。
6. 用需求追踪矩阵验证报告:一份交付前的自检清单
需求做得好不好,不是“读起来通顺”,而是每条需求都能被追溯到来源和验证手段。需求追踪矩阵是把 FR/NF、用例、数据表、接口和测试串起来的工具,课程设计报告里放一张这样的表,答辩时被问“某条需求实现没有”,一查就落地。
| 需求编号 | 需求描述 | 来源用例 | 对应数据表 | 对应接口/模块 | 测试验证方式 |
|---|---|---|---|---|---|
| FR-001 | 按书名关键词检索,返回馆藏状态,P95<2s | UC-001 | book | /search | 输入书名压测接口 |
| FR-004 | 图书状态非在馆时拒绝借书 | UC-003 | book_copy | /borrow | 构造已借出副本验证 409 |
| FR-005 | 在借数量达上限时拒绝借书 | UC-003 | borrow_record | /borrow | 借满后再次借书验证 409 |
| NF-001 | 支持 50 并发,检索 P95<2s | 总体描述 | - | 所有读接口 | Jmeter 压测 |
矩阵填完,再走一遍交付前检查:FR 和 NF 编号是否连续且无重复;每条 FR 套“当……时,系统应……”模板是否都套得进去;ER 图里每张表在数据字典中都有展开;每个用例描述的异常流至少对应一条 FR 或 NF;运行环境是否具体到版本号;用例图里是否还有多余的流程箭头。这六项全过,报告基本可以提交。
这套习惯我现在写什么系统都还在用。以前做课设时吃过亏:先写了半个借书模块,发现还书时“逾期罚款怎么计算”压根没定义,代码里临时拍脑袋加规则,后来不得不回文档补用例再重写逻辑。从那以后我动手前必写用例描述,因为每条主流程的第三行往往就藏着需求坑:借书流程的第三行是状态校验,还书流程的第三行是逾期判断,预约流程的第三行是队列顺序。写完报告不要急着交,拿需求追踪矩阵跑一遍,对每个异常流问一句“这条如果发生,我的需求文档里有对应的系统行为吗”,没有就回去补。需求分析是软件工程的基本盘,这关过了,后面设计、编码、测试都顺。希望帮到你。
本文还有配套的精品资源,点击获取