2026软件工程结对作业(第一次)
| 课程 | H202601软件工程与软件工程实践 |
|---|---|
| 作业要求 | 2026秋软件工程个人作业(第三次) |
| 作业目标 | 完成「校园失物招领小程序」需求分析和原型设计 |
| 学号 | 102401301吴莉芊、102401339任宝硕 |
《构建之法》读后感
这几章读下来,我对软件工程师的成长路径和需求分析有了更具体的认识。以前我对软件开发的理解比较简单,总觉得能把代码写出来、功能跑通,就算完成任务了。但第三章讲的内容让我发现,会写代码和能稳定交付是两回事。书里用两个程序员的例子说明,平均用时差不多的人,一个交付时间在5到15天之间波动,另一个稳定在7到9天,后者在团队里更可靠。这个例子我之前没想过。我判断自己水平的方式一直是“能不能做出来”,但书里衡量能力的标准还包括估计得准不准、交付稳不稳定。这两个维度我以前基本没关注过。
第三章还讲了“技能的反面”。作者拿自己玩魔方举例,说能背口诀还原六面,和真正掌握魔方是两码事。离开口诀只能拼一面,那“精通魔方”就写不进简历。我对照了一下自己,很多时候其实也是口诀式的——跟着教程走过一遍,换个场景就卡住。书里说技能的反面是“解决问题”,意思是真正掌握了技能的人,低层次问题已经变成自动操作,不用再花脑子。还在花时间解决低层次问题,就说明还没到“会”的程度。这个说法确实能对上我自己的经历。
第八章讲需求分析,开头那条链让我印象比较深。从用户最需要的,到用户表达出来的,再到团队理解的、写进文档的、写成代码的、测试通过的,一层层传下去,最后交付的东西可能已经偏了。书里画的秋千图很直接:用户想要一个秋千,产品经理理解成板子拴树上,开发做成水平板子,测试觉得能晃就行。每一环都觉得自己在认真做事,但最终结果和最初的需求已经对不上了。这个图让我意识到,需求分析不是把用户说的话记下来就完了,而是要尽量缩短这条链上的损耗。书里列了很多调研方法,比如小组访谈、深入面谈、卡片分类、眼动跟踪、对比测试,各有各的用法。但方法多不代表能做好,难点在于拿到信息之后怎么判断哪些需求值得做。书里还提到一种分类方式,把功能分成最关键的、锦上添花的、必须有的和辅助性的;另一种思路是从需求、做法、好处、竞争和推广五个角度把想法说清楚。这些框架的作用不是替你决定,而是让你在做取舍的时候有个依据,不至于什么都想做,或者只凭感觉做。
两章读下来,我觉得它们讲的其实是同一个问题:怎么判断。第三章里,工程师要判断自己的能力边界、判断一项任务需要多久;第八章里,开发者要判断用户的哪句话值得当真、哪个功能值得优先做。这些判断没有标准答案,书里给的是框架和参考,真正做决定的时候,靠的是自己积累的经验和诚实的自我认知。
题目来源
在校园生活中,同学们经常会遇到遗失校园卡、钥匙、水杯、雨伞、耳机、书籍等物品的情况。
目前,大家通常通过班级群、宿舍群、朋友圈等方式发布寻物或招领信息。但是这些信息比较分散,而且随着群聊消息不断增加,之前发布的信息很容易被新的消息覆盖,查找起来并不方便。
例如,一名同学在教学楼捡到一张校园卡,可能只能在自己的班级群或朋友圈发布招领信息,而丢失校园卡的同学未必能够看到这条消息。类似的情况也经常发生在宿舍区、食堂、图书馆和运动场等校园场所。
因此,希望设计一个简单的「校园失物招领小程序」,让同学们可以集中发布和查看寻物、招领信息,并通过物品名称等关键词进行搜索,提高校园失物寻找和归还的效率。
用户需求分析
这个小程序主要面向校内学生。实际使用时,大致有两类用户。一类是丢失物品的学生,他们希望尽快发布寻物信息,也希望能查到别人发布的招领信息。另一类是捡到物品的学生,他们需要把拾取地点、时间和物品特征发布出来,让失主有机会看到。
我们先从这些用户在校园里的实际处境出发,而不是直接列功能。《构建之法》第8章把利益相关者、用户调研和需求优先级放在需求分析过程中。 对这个项目来说,最直接的利益相关者就是发布寻物信息和招领信息的学生,因此我们主要围绕他们找东西、发布信息和确认物品状态的过程来设计。
目前失物招领信息通常出现在班级群、宿舍群和朋友圈里。不同学生所在的群并不相同,一条招领信息可能只覆盖很小的范围。群聊里的新消息不断增加,之前的信息也很容易被覆盖。即使知道有人发过相关内容,再回头翻聊天记录也比较麻烦。
因此,用户首先需要一个统一的入口。寻物和招领信息都放在同一个地方,打开小程序后可以直接浏览。用户如果已经知道自己要找什么,也应该能通过「学生证」「雨伞」「钥匙」等关键词搜索,而不是一条条翻看。
发布信息时,双方需要提供能够帮助判断物品的信息。寻物信息至少要有物品名称、丢失时间、丢失地点和物品特征。招领信息也需要记录拾取时间、地点和特征。图片可以帮助识别,但不是所有用户都能提供,所以我们把图片设计为选填内容。
联系方式也需要保留。这个小程序的任务是帮助双方找到对应的信息,我们并不准备在本次作业中实现复杂的即时聊天能力,这不管是从代码还是在合规上都是一个十分复杂的事情。用户在详情页确认信息后,可以通过发布者留下的联系方式继续沟通。
信息发布后还会出现一个问题。物品已经找回或者归还时,原来的内容如果继续显示为有效信息,会影响其他用户判断。因此我们增加了信息状态。寻物信息可以显示「寻找中」或「已找回」,招领信息可以显示「待认领」或「已归还」。
在确定功能时,我们也对需求做了取舍。实名认证、地图定位、即时聊天、消息推送等功能可能有用,但并不是当前流程必须具备的内容,而且会增加后续实现难度。本次原型先保留浏览、发布、搜索、查看详情和修改状态几个功能,把主要使用过程做完整。
功能设计
原型围绕「找信息」和「发信息」两件事展开。我们先画出用户从进入小程序到完成操作的流程,再根据流程确定页面。这样可以避免先画出很多页面,最后却发现页面之间无法顺畅连接。需求分析中确定的几个主要功能最终对应为首页、发布页面、搜索页面、信息详情、我的发布页面。
首页
首页是用户进入小程序后首先看到的页面。
页面顶部放置搜索入口,下方提供「全部」「寻物」「招领」三个分类。主要区域显示最近发布的信息,每条信息使用卡片展示。
卡片只放浏览时需要的信息,包括物品名称、寻物或招领类型、地点、时间和当前状态。例如:
招领
校园卡
一教三楼
9月22日
待认领
用户看到可能与自己有关的信息后,可以点击卡片进入详情页。首页不展示过多文字,具体特征和联系方式放在详情页中。
发布信息
发布页面同时承担发布寻物信息和招领信息的功能。
用户进入页面后先选择「寻物」或「招领」。之后填写物品名称、时间、地点、物品描述和联系方式,也可以上传图片。寻物和招领使用同一套页面结构,只在时间、地点等字段的文字上作区分。
例如选择「寻物」后,页面显示「丢失时间」和「丢失地点」。选择「招领」后,对应内容变为「拾取时间」和「拾取地点」。
填写完成后点击「发布」。如果必填信息完整,页面进入发布成功状态。这个反馈在原型中也保留下来,避免用户点击按钮后不知道操作是否完成。
搜索
搜索页面解决的是用户已经知道目标物品时的查找问题。
用户可以输入「学生证」「雨伞」「耳机」等关键词。结果页面继续使用首页的信息卡片,不另外设计一套展示方式。用户也可以选择只看寻物信息或只看招领信息。
例如丢失校园卡的学生搜索「学生证」后,可以先查看招领结果。如果看到时间和地点接近的信息,再进入详情页确认其他特征。
这种设计没有加入复杂的组合筛选。对于校园失物招领这一场景,物品名称和信息类型已经能够完成最基本的查找过程。
信息详情
详情页用于展示一条信息的完整内容。
页面显示物品名称、信息类型、图片、时间、地点、特征描述、联系方式和当前状态。列表页面负责帮助用户快速判断是否值得继续查看,详情页面再提供完整信息。
例如用户在首页看到「黑色雨伞」的招领信息后,可以进入详情页查看拾取地点和时间。如果与自己的情况接近,再通过页面中的联系方式与发布者联系。
这里没有设计站内聊天。联系方式直接显示在详情页中,也可以设置「复制联系方式」按钮。
我的发布
「我的发布」用于管理自己已经发布的信息。
用户可以在这里查看之前发布的寻物和招领内容,也可以修改信息状态。寻物信息找到后可以改为「已找回」,招领物品交还失主后可以改为「已归还」。
我们加入这个页面,主要是因为发布并不是流程的终点。一条信息在物品找回后还需要结束。状态修改后,其他用户也能知道这条信息是否仍然有效。
用户使用流程
用户打开小程序后进入首页。首页显示校园失物招领的横幅和物品列表。每条信息包含物品图片、名称、地点、日期和当前状态。用户可以在「全部」「寻物」「招领」之间切换,先找到自己关心的信息类型。列表加载时,页面显示占位内容。如果加载失败,页面给出重试入口。

用户可以从首页进入搜索页,输入物品名称或地点等关键词。输入过程中,页面显示最近搜索和热门搜索。提交关键词后,用户可以浏览匹配的物品,也可以按区域和时间缩小范围。搜索结果加载时,列表暂时显示占位内容。没有匹配结果时,页面提示用户更换关键词或调整筛选条件。
用户点开一条信息后,可以查看物品照片、名称、拾到时间、地点和描述。点击照片可以打开大图,便于核对外观。详情页还显示发布者留下的联系方式。准备联系发布者时,用户先确认自己了解物品特征,避免误领。页面随后显示联系方式,并在打开过程中给出等待提示。用户复制联系方式后,页面提示复制成功。

需要发布信息时,用户点击底栏中间的「发布」。发布页提供「寻物」和「招领」两种类型。用户填写物品名称、丢失或拾到的时间与地点、物品描述和联系方式,还可以选择照片上传。照片上传时,页面显示上传进度。用户提交前如果漏填必填内容,页面会标出对应字段,并保留已经填写的信息。
填写完成后,用户点击「立即发布」。提交期间,页面显示正在发布的状态,避免用户重复操作。发布成功后,页面展示新发布的物品,并提供查看信息和返回首页的入口。如果提交失败,用户可以返回草稿检查内容,再次发布。

用户进入「我的」后,可以在「我的发布」中查看自己发布的物品及其状态。物品找回后,用户点击状态按钮,确认后将信息标记为「已找回」。状态更新期间,页面显示处理状态。用户也可以打开编辑页,修改物品信息、联系方式或照片。
保存编辑内容时,页面先检查必填字段。联系方式为空时,输入框会显示提示,用户补全后可以继续保存。保存期间,页面显示等待状态。保存成功后,用户可以返回「我的发布」查看更新后的信息。保存失败时,页面保留编辑内容,并提供重试入口。

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

结对过程
这次作业虽然没有写代码,我们还是参考了《构建之法》第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 里逐页检查和修改。原型并不是把几个界面画出来就结束了,还要不断对照需求,看页面里有没有多余功能,主要流程有没有断掉。这次把这些问题提前处理,也能给下一次真正实现小程序留下一份更明确的范围。

浙公网安备 33010602011771号