2026秋软件工程结对作业(第一次)

课程 H202601软件工程与软件工程实践
作业要求 2026秋软件工程个人作业(第三次)
作业目标 完成「校园失物招领小程序」需求分析和原型设计
学号 102401301吴莉芊、102401339任宝硕

《构建之法》读后感

这几章读下来,我对软件工程中的个人成长、结对合作、需求分析和原型设计有了更清晰的认识。以前我对软件开发的理解比较简单,总觉得写代码、实现功能、把程序跑起来就是最主要的工作,但书里的内容让我发现,真正的软件工程远不止这些。一个软件工程师不仅要有扎实的技术能力,还要会分析问题、安排任务、估计工作量,也要能和团队成员保持有效的沟通,对自己负责的工作有明确的判断。工程师的成长也不能只看工作时间长短,更重要的是能不能独立解决问题,能不能在团队里稳定地完成任务,并不断调整自己的工作方法。

结对合作这一部分让我印象比较深。两个人结对合作并不是简单地把任务分成两半,各自写完自己的部分,而是一起面对同一个问题。一个人负责具体操作和编码,另一个人负责观察整体思路、检查代码、发现遗漏的问题,之后再交换角色。这样的工作方式看起来会占用更多沟通时间,但它能让很多问题在开发过程中就被发现,也能减少因为个人习惯和思维盲区造成的错误。两个人在讨论和修改代码的过程中,也会逐渐了解彼此的思路,代码不再只是某一个人的成果,而变成共同维护的内容。

需求分析这一章让我意识到,用户提出的要求并不一定等于真正的需求。很多时候,用户能清楚说出自己遇到了什么问题,却不一定知道应该怎样解决,所以开发人员不能只记录用户说了什么,还要通过访谈、问卷、观察、用户研究等方法了解实际的使用场景。不同的利益相关者关注的内容也不一样,有的人在意功能是否齐全,有的人更关心成本、性能、操作是否方便,这些需求需要经过整理和判断,再确定优先级。原型设计和需求分析之间也有很紧密的联系。正式开发之前,可以先用草图、简单页面或者模型把想法表现出来,让用户直接看到、尝试和反馈。原型不一定要做得精细,重点是尽早发现问题。如果流程设计不合理,或者用户对某个功能理解有偏差,在这个阶段修改通常比系统开发完成后再返工轻松得多。读完这些内容以后,我感觉软件开发其实是一个不断沟通、验证和调整的过程。很多最后暴露在代码里的问题,源头可能并不在代码本身,而是在前期需求没有弄清楚、团队理解不一致,或者设计没有经过足够的验证。把这些基础工作做扎实,后面的开发才会更顺一些。

题目来源

在校园生活中,同学们经常会遇到遗失校园卡、钥匙、水杯、雨伞、耳机、书籍等物品的情况。

目前,大家通常通过班级群、宿舍群、朋友圈等方式发布寻物或招领信息。但是这些信息比较分散,而且随着群聊消息不断增加,之前发布的信息很容易被新的消息覆盖,查找起来并不方便。

例如,一名同学在教学楼捡到一张校园卡,可能只能在自己的班级群或朋友圈发布招领信息,而丢失校园卡的同学未必能够看到这条消息。类似的情况也经常发生在宿舍区、食堂、图书馆和运动场等校园场所。

因此,希望设计一个简单的「校园失物招领小程序」,让同学们可以集中发布和查看寻物、招领信息,并通过物品名称等关键词进行搜索,提高校园失物寻找和归还的效率。

用户需求分析

这个小程序主要面向校内学生。实际使用时,大致有两类用户。一类是丢失物品的学生,他们希望尽快发布寻物信息,也希望能查到别人发布的招领信息。另一类是捡到物品的学生,他们需要把拾取地点、时间和物品特征发布出来,让失主有机会看到。

我们先从这些用户在校园里的实际处境出发,而不是直接列功能。《构建之法》第8章把利益相关者、用户调研和需求优先级放在需求分析过程中。 对这个项目来说,最直接的利益相关者就是发布寻物信息和招领信息的学生,因此我们主要围绕他们找东西、发布信息和确认物品状态的过程来设计。

目前失物招领信息通常出现在班级群、宿舍群和朋友圈里。不同学生所在的群并不相同,一条招领信息可能只覆盖很小的范围。群聊里的新消息不断增加,之前的信息也很容易被覆盖。即使知道有人发过相关内容,再回头翻聊天记录也比较麻烦。

因此,用户首先需要一个统一的入口。寻物和招领信息都放在同一个地方,打开小程序后可以直接浏览。用户如果已经知道自己要找什么,也应该能通过「学生证」「雨伞」「钥匙」等关键词搜索,而不是一条条翻看。

发布信息时,双方需要提供能够帮助判断物品的信息。寻物信息至少要有物品名称、丢失时间、丢失地点和物品特征。招领信息也需要记录拾取时间、地点和特征。图片可以帮助识别,但不是所有用户都能提供,所以我们把图片设计为选填内容。

联系方式也需要保留。这个小程序的任务是帮助双方找到对应的信息,我们并不准备在本次作业中实现复杂的即时聊天能力,这不管是从代码还是在合规上都是一个十分复杂的事情。用户在详情页确认信息后,可以通过发布者留下的联系方式继续沟通。

信息发布后还会出现一个问题。物品已经找回或者归还时,原来的内容如果继续显示为有效信息,会影响其他用户判断。因此我们增加了信息状态。寻物信息可以显示「寻找中」或「已找回」,招领信息可以显示「待认领」或「已归还」。

在确定功能时,我们也对需求做了取舍。实名认证、地图定位、即时聊天、消息推送等功能可能有用,但并不是当前流程必须具备的内容,而且会增加后续实现难度。本次原型先保留浏览、发布、搜索、查看详情和修改状态几个功能,把主要使用过程做完整。

功能设计

原型围绕「找信息」和「发信息」两件事展开。我们先画出用户从进入小程序到完成操作的流程,再根据流程确定页面。这样可以避免先画出很多页面,最后却发现页面之间无法顺畅连接。需求分析中确定的几个主要功能最终对应为首页、发布页面、搜索页面、信息详情、我的发布页面。

首页

首页是用户进入小程序后首先看到的页面。

页面顶部放置搜索入口,下方提供「全部」「寻物」「招领」三个分类。主要区域显示最近发布的信息,每条信息使用卡片展示。

卡片只放浏览时需要的信息,包括物品名称、寻物或招领类型、地点、时间和当前状态。例如:

招领

校园卡

一教三楼

9月22日

待认领

用户看到可能与自己有关的信息后,可以点击卡片进入详情页。首页不展示过多文字,具体特征和联系方式放在详情页中。

发布信息

发布页面同时承担发布寻物信息和招领信息的功能。

用户进入页面后先选择「寻物」或「招领」。之后填写物品名称、时间、地点、物品描述和联系方式,也可以上传图片。寻物和招领使用同一套页面结构,只在时间、地点等字段的文字上作区分。

例如选择「寻物」后,页面显示「丢失时间」和「丢失地点」。选择「招领」后,对应内容变为「拾取时间」和「拾取地点」。

填写完成后点击「发布」。如果必填信息完整,页面进入发布成功状态。这个反馈在原型中也保留下来,避免用户点击按钮后不知道操作是否完成。

搜索

搜索页面解决的是用户已经知道目标物品时的查找问题。

用户可以输入「学生证」「雨伞」「耳机」等关键词。结果页面继续使用首页的信息卡片,不另外设计一套展示方式。用户也可以选择只看寻物信息或只看招领信息。

例如丢失校园卡的学生搜索「学生证」后,可以先查看招领结果。如果看到时间和地点接近的信息,再进入详情页确认其他特征。

这种设计没有加入复杂的组合筛选。对于校园失物招领这一场景,物品名称和信息类型已经能够完成最基本的查找过程。

信息详情

详情页用于展示一条信息的完整内容。

页面显示物品名称、信息类型、图片、时间、地点、特征描述、联系方式和当前状态。列表页面负责帮助用户快速判断是否值得继续查看,详情页面再提供完整信息。

例如用户在首页看到「黑色雨伞」的招领信息后,可以进入详情页查看拾取地点和时间。如果与自己的情况接近,再通过页面中的联系方式与发布者联系。

这里没有设计站内聊天。联系方式直接显示在详情页中,也可以设置「复制联系方式」按钮。

我的发布

「我的发布」用于管理自己已经发布的信息。

用户可以在这里查看之前发布的寻物和招领内容,也可以修改信息状态。寻物信息找到后可以改为「已找回」,招领物品交还失主后可以改为「已归还」。

我们加入这个页面,主要是因为发布并不是流程的终点。一条信息在物品找回后还需要结束。状态修改后,其他用户也能知道这条信息是否仍然有效。

用户使用流程

用户打开小程序后进入首页。首页显示校园失物招领的横幅和物品列表。每条信息包含物品图片、名称、地点、日期和当前状态。用户可以在「全部」「寻物」「招领」之间切换,先找到自己关心的信息类型。列表加载时,页面显示占位内容。如果加载失败,页面给出重试入口。

01_首页与搜索

用户可以从首页进入搜索页,输入物品名称或地点等关键词。输入过程中,页面显示最近搜索和热门搜索。提交关键词后,用户可以浏览匹配的物品,也可以按区域和时间缩小范围。搜索结果加载时,列表暂时显示占位内容。没有匹配结果时,页面提示用户更换关键词或调整筛选条件。

用户点开一条信息后,可以查看物品照片、名称、拾到时间、地点和描述。点击照片可以打开大图,便于核对外观。详情页还显示发布者留下的联系方式。准备联系发布者时,用户先确认自己了解物品特征,避免误领。页面随后显示联系方式,并在打开过程中给出等待提示。用户复制联系方式后,页面提示复制成功。

02_发布信息

需要发布信息时,用户点击底栏中间的「发布」。发布页提供「寻物」和「招领」两种类型。用户填写物品名称、丢失或拾到的时间与地点、物品描述和联系方式,还可以选择照片上传。照片上传时,页面显示上传进度。用户提交前如果漏填必填内容,页面会标出对应字段,并保留已经填写的信息。

填写完成后,用户点击「立即发布」。提交期间,页面显示正在发布的状态,避免用户重复操作。发布成功后,页面展示新发布的物品,并提供查看信息和返回首页的入口。如果提交失败,用户可以返回草稿检查内容,再次发布。

03_详情与认领

用户进入「我的」后,可以在「我的发布」中查看自己发布的物品及其状态。物品找回后,用户点击状态按钮,确认后将信息标记为「已找回」。状态更新期间,页面显示处理状态。用户也可以打开编辑页,修改物品信息、联系方式或照片。

保存编辑内容时,页面先检查必填字段。联系方式为空时,输入框会显示提示,用户补全后可以继续保存。保存期间,页面显示等待状态。保存成功后,用户可以返回「我的发布」查看更新后的信息。保存失败时,页面保留编辑内容,并提供重试入口。

04_我的发布与编辑

流程图:

flowchart TD Start(["打开小程序"]) --> Home["首页"] Home --> HomeLoad["加载物品列表"] HomeLoad -->|成功| List["浏览全部、寻物或招领信息"] HomeLoad -->|失败| HomeRetry["提示加载失败"] --> HomeLoad List --> Search["输入关键词"] Search --> Suggest["查看最近搜索和热门搜索"] Suggest --> Filter["按区域、时间筛选"] Filter --> SearchLoad["加载搜索结果"] SearchLoad -->|有结果| Result["查看匹配信息"] SearchLoad -->|无结果| Empty["提示调整关键词或筛选条件"] Empty --> Search List --> Detail["查看物品详情"] Result --> Detail Detail --> Photo["放大查看照片"] Photo --> Detail Detail --> Confirm["核对物品特征并确认联系"] Confirm --> ContactLoad["打开联系方式"] ContactLoad --> Contact["显示联系方式"] Contact --> Copy["复制联系方式并显示提示"] Home --> Publish["点击底栏发布"] Publish --> Form["选择寻物或招领,填写信息并选照片"] Form --> Check{"必填内容完整?"} Check -->|否| FormError["标出缺失字段"] --> Form Check -->|是| Upload["上传照片"] Upload --> Submit["提交信息"] Submit -->|成功| Published["发布成功,可查看信息"] Submit -->|失败| Draft["保留草稿,支持重试"] --> Submit Home --> Mine["进入我的发布"] Mine --> StatusConfirm["确认标记为已找回"] StatusConfirm --> StatusUpdate["更新物品状态"] StatusUpdate --> Mine Mine --> Edit["编辑已发布的信息"] Edit --> EditCheck{"必填内容完整?"} EditCheck -->|否| EditError["提示补全内容"] --> Edit EditCheck -->|是| Save["保存修改"] Save -->|成功| Saved["显示编辑成功"] --> Mine Save -->|失败| SaveError["保留编辑内容,支持重试"] --> Save

原型设计

原型设计工具我们使用的是 Figma。下面是我们原型设计的页面截图。Figma 共享链接。

image

结对过程

这次作业虽然没有写代码,我们还是参考了《构建之法》第3章中结对工作的方式。两个人没有完全拆成互不相关的两份任务,而是在需求分析和原型设计过程中互相检查。

第一次整理需求时,一人负责记录用户场景、功能和页面,另一人检查有没有遗漏,以及某个功能是否真的需要加入。确定 P0、P1 和 P2 后,我们再开始画页面。这样做主要是为了防止原型越画越多,最后超出下一次实现能够承担的范围。

进入 Figma 后,一人负责实际修改页面,另一人检查页面跳转、字段是否一致,以及用户完成当前操作后下一步应该去哪里。检查完一轮后再交换。我们重点核对了发布、搜索、详情和状态修改几个流程。

原型也不是一次完成的。前期更关注页面长什么样,后面开始检查加载失败、没有搜索结果、表单缺项、提交失败和保存失败这些状态。博客文字也跟着原型调整。比如搜索功能最后没有继续增加区域和时间的组合筛选,收藏也没有作为本次正式功能保留。

PSP

PSP 阶段 预估时间/min 吴莉芊实际时间/min 任宝硕实际时间/min
阅读任务并讨论需求 45 30 30
需求分析 40 45 45
功能与页面规划 30 20 20
整理用户流程 30 40 40
Figma 原型制作 360 300 300
结对检查与修改 40 40 40
博客整理 90 60 45
个人总结 30 15 10
合计 635 550 530

个人总结

任宝硕

这次做原型时,我开始时比较关注页面是否好看,后面发现页面之间能不能顺利走完更重要。用户点击发布之后去哪里,搜索不到内容怎么办,保存失败后原来的输入还在不在,这些问题不一定会体现在一张静态截图里,但会直接影响实际使用。

前期我们绘制的视觉草图帮助我们较快确定了风格,但是对于交互的细节状态后面还是需要回到 Figma 里逐页检查和修改。原型并不是把几个界面画出来就结束了,还要不断对照需求,看页面里有没有多余功能,主要流程有没有断掉。这次把这些问题提前处理,也能给下一次真正实现小程序留下一份更明确的范围。

吴莉芊

这次作业里,我对需求分析的理解比以前具体了一些。开始时很容易想到“还能再加什么功能”,但真正整理以后发现,确定哪些功能不做同样重要。地图、聊天、收藏都可以继续扩展,但它们不是这次失物招领流程必须具备的内容。把范围缩到浏览、发布、搜索、详情和状态管理之后,页面之间的关系反而更容易理清。

结对检查也发现了不少一个人容易忽略的问题。有些文字自己写完后会默认它是对的,另一人从用户流程重新走一遍,更容易看出前后的字段、状态和跳转是否一致。

posted @ 2026-09-25 22:21  宝硕  阅读(23)  评论(0)    收藏  举报