ARTICLE DETAIL

资讯详情

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

软件工程实验报告三:订单管理系统用例建模与分析类图完整实践

软件工程实验报告三:订单管理系统用例建模与分析类图完整实践 简介这是一份面向软件工程与测试方向学习者的实验报告资源围绕单元测试中的逻辑覆盖方法展开重点演示如何借助CASE工具Nunit设计测试用例并完成验证。报告系统整理了语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖与路径覆盖的定义和实现方式并结合具体代码片段剖析了将“AND”误写为“OR”、“X1”误写为“X1”等典型错误能否被测试用例发现给出了多组测试数据的对比结果与原因分析。对于希望深入理解单元测试原理、掌握逻辑覆盖测试设计思路的读者这份报告能提供完整的实验流程参考和结论梳理。资源仅包含1个docx文档压缩包大小约1.09MB内容结构清晰除逻辑覆盖实验外还涵盖循环结构测试用例设计、等价类划分及边界值分析方法可直接用于实验报告撰写或测试课程复习。已有174人学习下载适合高校软件工程专业学生或初学软件测试的开发者参考。 说句实话软件工程这门课前两章概念背得再好真到写实验报告的时候很多人还是不知道该往文档里塞什么。尤其是实验三一般都会落到“案例分析 核心建模”上既要画图又要写设计说明还得让老师一眼看出你确实动手分析了而不是临时拼凑了几个用例就交差。我刚做完华东交通大学软件工程课程的实验报告三题目围绕一套典型的订单管理场景展开这里就把我整个分析、建模、落笔的过程完整拆一遍包括那些不写进实验指导书里的细节给正在做类似实验或者课程设计的同学一个参考。先说明一下实验三这类任务本质上考的不是代码量而是你有没有建立“需求分析 → 用例建模 → 静态结构 → 动态行为”这条完整链条的软件工程思维。所以报告里面真正分值高的部分是需求描述、用例规格说明、概念类图、顺序图和后续的接口设计而我这次会重点分享这几个环节怎么做才能既高效又能拿高分。1. 拿到实验报告三的第一步先搞清楚这次实验到底要练什么1.1 需求背景与实验目标拆解我这份实验报告三对应的项目背景是一个综合性的订单管理子系统涉及顾客浏览商品、生成订单、支付、库存扣减、物流查询等环节。要求以“软件工程方法学”为指导完成从用户需求到系统设计的关键工件包括用例图、用例描述、分析类图、顺序图以及典型场景的数据库表设计。写到这里你大概能感觉到这就是一个标准的“软件工程课程设计”缩影只不过实验课时没那么多要求做到“核心场景闭环”即可。我的第一个建议是拿到要求后别急着开画图工具先花30分钟把系统边界和参与者理清楚。系统边界决定了你的用例图里要画哪些东西参与者决定了系统的使用角色和外部接口。订单管理系统的参与者相对简单顾客、管理员、支付网关、物流系统这四个角色基本就能覆盖主流程。边界画小了后面做设计会很束手束脚边界画大了作业量翻倍老师也未必买账。所以把边界定义为“订单从创建到完成的全生命周期管理”是最稳妥的选择。搞清楚边界之后再去翻一遍实验指导书里的评分标准。大多数情况下用例图占20%左右用例规格说明占20%~30%分析类图和顺序图占30%数据库设计和扩展思考占剩下的部分。如果你时间紧张优先保证用例规格说明和分析类图的质量这两处是老师重点翻阅的地方也是区分“认真分析过”和“只是画了个图”的关键。1.2 工具选型为什么我一直推荐starUML加draw.io组合做软件工程建模工具选择其实挺影响效率的。市面上常用的是Enterprise Architect、Rational Rose、starUML、Visual Paradigm还有网页版ProcessOn和draw.io。我的建议是本地用starUML负责类图、顺序图这些需要后期反复改的模型网页版draw.io负责用例图和部署图这种格式要求不高的图形。两个工具都是免费的也不会遇到版权上的麻烦。starUML的类图编辑体验在免费工具里算比较顺手的可以自定义构造型比如《boundary》《control》《entity》这几种分析类标记导出图片的清晰度也够用。顺序图的激活条、生命周期线都支持快捷键操作对画“系统顺序图”和“细粒度顺序图”都有帮助。draw.io则胜在模板丰富部署图、组件图都有现成元素画起来快。我不太推荐用ProcessOn做全部建模免费版图形数量有限而且网页端画类图时对齐操作特别费劲体验不够顺畅。还有一个容易忽略的点所有图最终要导出为高清图片插入Word所以导出分辨率要提前调到300dpi以上避免老师打开文档后图变模糊。starUML导出PNG时直接在File→Export Diagram那里选大尺寸draw.io导出时把缩放比例调到200%这样插入Word后的字体和线条都是清晰的。2. 核心细节解析用例建模最容易犯的三个错误2.1 别把“功能列表”当用例图用例图和功能拆解表之间最本质的区别在于“是否能给参与者带来可观察的结果”。我在这次报告中看到不少同学会把“查看商品”、“选择商品”这种细碎动作拆成两三个用例这就是典型的把函数调用当成了用例。商品浏览、商品选择、生成订单本质上都属于“顾客购买商品”这个完整流程的子步骤在用例图里应该合并或者通过include关系体现而不是平铺一列。正确的做法是用例粒度要落在参与者的业务目标上比如顾客的“下单购买”、“查询订单物流”、“申请售后”管理员的“处理退款申请”、“管理商品上下架”这种粒度才符合用例驱动开发的基本思想。用例图里一旦出现“删除”、“修改”、“保存”这种CRUD味儿特别浓的节点基本就会被老师认定是没有经过业务思考只是在套数据库功能。2.2 用例描述务必落到“业务规则”和“异常流”层面用例图只是一张皮真正体现专业度的是用例规格说明。我见过太多人把用例描述写成操作步骤比如“用户点击按钮系统跳转到支付页面用户输入密码”这本质上是在写界面操作手册不是软件工程里说的用例描述。合格的用例描述要包含前置条件、后置条件、基本事件流、备选事件流和业务规则。以“提交订单”用例为例基本事件流可以写成“顾客检查购物车商品清单确认商品数量和价格后点击提交系统校验商品库存是否充足系统计算订单总金额并生成待支付状态的订单系统向顾客返回订单编号。”备选事件流里则要写“库存不足时系统提示顾客哪些商品超出库存并允许顾客移除后重新提交”业务规则里补充“订单超过30分钟未支付自动取消并释放库存”。这些内容直接决定了后面数据库和代码实现的高度真正体现软件工程不仅仅是画图。2.3 include和extend关系不要乱用UML用例图里面include和extend是必考的知识点也是扣分重灾区。很多同学把include画成“包含子功能”把extend当成“可选项”这个理解对但不完全。include的本质是基类用例的每一步总是会执行被包含的用例是“非独立可执行业务”的抽取。比如支付时手机验证码校验可以被抽取成一个“身份安全校验”用例只要走支付就必须执行这就是典型的include关系。而extend是在特定条件下才去扩展基用例的行为比如“申请售后”扩展“确认收货”只有当用户对商品不满意时才会触发。把include和extend用反会让系统模块边界变得混乱老师在提问环节随便一问就会露馅。3. 实操过程从需求说明到数据库设计的完整落地3.1 用SSD分析系统行为再反推分析类做顺序图和类图之前我习惯先画系统顺序图SSD。很多教材把这个环节省略了直接画细粒度顺序图导致类图里的方法全都拍脑袋想。SSD只展示外部参与者与系统之间的交互不涉及内部对象作用是把每个用例的事件流转换成一条条系统消息比如“顾客提交订单”、“系统返回订单信息”。这个过程能帮助确定系统的输入输出消息进而为后续识别分析类和消息分配做准备。以“提交订单”为例SSD中会依次出现“提交订单请求(orderId, 商品列表)”、“系统校验库存”、“系统计算金额”、“系统返回订单确认信息”这些消息。据此继续往下拆就能得到处理这个流程的关键分析类包括订单边界类、订单控制器、商品目录实体类、库存管理实体类等。你会发现分析类不是凭空构建的它们是消息链路上每个处理节点的自然映射。3.2 分析类图三种构造型怎么分配最合理分析类图使用边界类boundary、控制类control和实体类entity来组织系统结构。边界类对应与外部参与者交互的界面比如“订单提交表单”控制类负责协调业务逻辑比如“订单处理器”实体类是需要持久化的业务数据比如“订单”、“订单明细”、“商品”、“支付记录”。我在实际操作中总结了一个快速方法先把SSD里每个输入消息都连接到某个边界类再把所有需要“处理”或“计算”的中间逻辑归给控制类最后把要存数据库的信息提取为实体类。这样分完类图上每个类都有明确职责也不会出现一个类又当页面又存数据又写逻辑的三不像。这次实验里我最终确定的实体类是Order、OrderItem、Product、Inventory、Payment、物流信息控制类是OrderManagementController、PaymentController、InventoryService边界类是CustomerOrderUI、AdminOrderUI这个结构既能覆盖基本流程又不至于把图画出十几二十个类来。3.3 顺序图要画出对象之间的“消息往返”从SSD过渡到顺序图关键一步是把每个分析类变成顺序图中的对象生命线然后把SSD中“系统”这一个黑盒进一步拆分成多个对象之间的协作。注意这里的消息一定是“对象之间的方法调用或信号传输”而不是用户点击按钮。比如从CustomerOrderUI发出的应该是submitOrder(orderData)而不是clickSubmitButton从OrderManagementController发给InventoryService的是checkStockAndReserve(productId, quantity)而不是check库存。顺序图最大的作用是帮助后续编码时确定对象方法。所以绘制时我的习惯是给每个消息标注好参数哪怕只是名义参数。这样代码阶段只需要照着顺序图的方法签名补业务逻辑不用再重新想一遍系统设计。另外顺序图最好不要在一次图里塞超过10条消息流程太复杂就拆成创建订单、支付、查询物流三个子场景分别画阅读体验会好很多。3.4 数据库表设计如何与分析模型对齐实验三通常不会强制要求数据库设计但加上这一块绝对是加分项。数据库表应该和分析类图中的实体类一一对应并且按订单业务的标准范式来建。我的表结构大致如下表名关键字段说明customercustomer_id, name, phone, address顾客基础信息productproduct_id, name, price, status商品信息inventoryinventory_id, product_id, quantity, locked_quantity库存与锁定库存分离orderorder_id, customer_id, order_time, status, total_amount订单主表order_itemitem_id, order_id, product_id, quantity, price订单明细paymentpayment_id, order_id, pay_type, pay_time, amount支付流水logisticslogistics_id, order_id, company, tracking_no, status物流信息重点说一下inventory表里的locked_quantity字段这是在“库存校验加超时释放”场景下需要特别设计的字段它表示被未支付订单占用的库存数量。这样既能做到“下单时锁定库存”又能做到“订单超时后保留库存”避免并发场景下超卖。这个小细节在实验报告里写清楚老师能看出你是真做过并发思考的而不是只在画概念模型。4. 常见问题与避坑技巧这份报告里最容易翻车的点4.1 图与图之间不一致是最大的扣分项很多同学独立画用例图、类图、顺序图结果三张图之间完全对不上用例图里有“取消订单”顺序图里却完全没有取消订单的实现逻辑类图里的Order类没有cancel()方法但顺序图里消息却调用了cancel()。这样的前后矛盾会让整个实验报告看起来像临时拼凑的实验三最核心的“可追踪性”被打破分数很难上去。我的建议是做一个简单的追踪矩阵把用例编号、相关类、对应方法列成一张表放在报告附录或者设计说明部分既能体现工程化思维也能自查有没有遗漏场景。比如U01提交订单用例对应OrderManagementController.submitOrder()和Order.save()U02取消订单对应OrderManagementController.cancelOrder()和Order.cancel()表格一列哪里缺了立刻就显现出来。4.2 工具崩溃和版本兼容问题要提前处理starUML在没有正确安装许可证或者使用的老版本里偶尔会出现配置文件损坏导致无法启动的问题。如果你正在赶报告这时候最头疼。我的经验是定期保存并且给每一个核心图单独导出一次图片。也就是说工作目录里至少要同时保留三个文件项目源文件、每张图的PNG导出件、一个备份压缩包。另外需要注意用draw.io导出SVG再插入Word时如果没有转成图片格式很可能会被Word当作普通对象处理在不同电脑上预览时显示不全。建议统一用PNG格式插入文档避免答辩机上字体缺失、线条错位这些低级问题。这一点看起来不起眼但实际上非常影响改报告的效率。4.3 组件图和部署图别硬画要围绕运行环境展开很多实验模板里会顺带提到组件图和部署图但这部分要求不高的时候我建议不要强行堆砌节点。如果系统只是单机Web应用画一个Tomcat节点加MySQL节点就够了硬是画出负载均衡、Redis集群反而显得脱离实际。部署图的价值在于说明系统的物理运行环境不是展示你会多少组件名称。真的想画好部署图可以结合“订单管理子系统”的实际分布式场景来考虑。比如客户端浏览器通过HTTP协议访问Nginx反向代理Nginx把请求转发给应用服务器上的订单服务节点订单服务节点通过JDBC访问MySQL数据库支付回调通过HTTPS连接到第三方支付平台。这个方案描述的是真实可部署的架构不是教材上的标准图复制粘贴放在报告里能拉开和普通作业的差距。4.4 期末复习和面试时这份实验报告能当素材用做实验报告时认真一点到期末复习和面试时是可以直接转化成素材的。软件工程面试经常考你“怎么理解需求分析”、“项目里怎么处理需求变更”、“领域模型怎么落到数据库”这些问题都能从你自己的实验报告里找到案例支撑。我在后续复习时就是拿这份报告里的“订单超时取消”场景来回答分布式事务和状态机设计问题的。面试官喜欢听到的不是背诵的定义而是你真正处理过的边界场景。另外很多同学做实验的时候习惯参考“软件工程头歌”或者课程设计模板这没问题但一定要在模板基础上加自己的业务改动。比如给普通订单管理加上“批量审核”和“异常订单告警”哪怕是实验级别的项目也能体现你的主动思考。课程设计的核心目的不是做一个完美系统而是让你体会到从需求到设计的完整软件工程项目流程。5. 最后再聊一点我自己的实操体会整个实验三做下来我的最大收获不是把UML图画熟练了而是真正理解了“用例驱动开发”这几个字的分量。从用户故事到用例规格从SSD到分析类图再从顺序图到数据库表每一步之间都有清晰的推导关系仿佛都是在为同一个业务目标服务。这种“可追踪”的能力在实际互联网公司的方案评审里很重要产品经理提一个需求你能在半小时内画出用例图和核心对象交互图直接决定了你在团队中的话语权。如果你现在正卡在某个实验环节我特别建议你回到用例描述那里重新读一遍自己的基本事件流看看每一步有没有对应的对象和消息去处理它。很多时候图补不齐不是工具不熟练而是需求理解还没到位。先把文字逻辑理通顺了图自然就画出来了。做完实验报告三之后我还会把同一个场景继续往后扩展做成一个带SpringBoot后端和前端的完整课程设计这样软件工程课程设计和毕业设计的前半段素材就都储备好了。这套从实验内容延伸到课程设计再到毕设的复用思路是我个人觉得性价比最高的学习路径也是这份报告三真正值钱的地方。本文还有配套的精品资源点击获取
返回列表