分毫不差·同账——原型设计&需求分析

| 这个作业属于哪个课程 | 2601_CS_SE_FZU |
|---|---|
| 这个作业要求在哪里 | 软件工程实践团队作业第二次——原型设计与需求分析 |
| 团队名称 | 分毫不差 |
| 这个作业的目标 | 排好组队之后到学期结束的节点;写清关键点、难点和风险;算出这次的分工和贡献度;写明 QQ 和 GitHub 上怎么协作。同时交需求规格说明书、界面原型、两份 PPT 和两份评审表 |
| 其他参考文献 | 邹欣《构建之法》第 17 章;GB/T 9385—2008《计算机软件需求规格说明规范》 |
目录
- 一、团队项目计划
- 1.1 时间以哪一天为准
- 1.2 八个节点对照
- 1.3 选题:10 月 8 日前后,已完成
- 1.4 原型与需求:博客 10 月 15 日 23:59,答辩 10 月 16 日
- 1.5 概要设计与数据库:约 10 月 23 日
- 1.6 支线:约 10 月 30 日
- 1.7 Alpha:约 11 月 6 日
- 1.8 换组:Alpha 之后,到下一次课前
- 1.9 极限编程:约 11 月 13 日当天,加 11 月 14 日
- 1.10 Beta:极限编程结束后大约一周,约 11 月 20 日前后
- 1.11 一个节点怎样算过去
- 1.12 组队后的整体计划安排
- 1.13 里程碑
- 二、关键点、难点与风险
- 2.1 分摊和净额
- 2.2 最少转账笔数
- 2.3 从预览到结清
- 2.4 谁能操作
- 2.5 邀请和人数
- 2.6 归档
- 2.7 真机、图片和断网
- 2.8 排期
- 三、组员分工与工作量比例
- 3.1 本轮的 8 条任务
- 3.2 五个维度
- 3.2.1 记 60 的理由
- 3.2.2 记 100 的项
- 3.2.3 解开阻塞,各加 2 分
- 3.3 个人分
- 3.4 贡献系数
- 3.5 本次贡献度
- 四、成员协作方式
- 4.1 沟通工具
- 4.1.1 一条消息怎样算数
- 4.1.2 群里谁发什么
- 4.1.3 催交
- 4.1.4 怎样算完成
- 4.1.5 两种说法不一样时
- 4.1.6 这一轮群里的安排
- 4.2 版本仓库怎么协作
- 4.2.1 GitHub 上怎么一起写
- 4.2.2 新人怎么把仓库跑起来
- 4.2.3 文件放在哪
- 4.2.4 分支和 PR
- 4.2.5 华为云
- 4.2.6 Figma
- 4.3 冲突怎么处理
- 4.4 任务怎么同步
- 4.4.1 这一轮按天同步
- 4.4.2 每个人交回什么
- 4.4.3 交接顺序
- 4.5 协作的四个做法总结
- 4.5.1 沟通工具
- 4.5.2 版本仓库怎么协作
- 4.5.3 冲突怎么处理
- 4.5.4 任务怎么同步
- 五、软件需求规格说明书
- 六、界面原型设计
- 七、界面原型设计答辩 PPT
- 八、需求分析PPT链接
- 九、评审表
一、团队项目计划
组队之后到学期结束,同账按八个节点往前走。每个节点写明时间、这次要交的材料、产品本身要做到哪一步。
八个人,队名分毫不差。十月初组队,题目定成同账:一起吃饭、一起出门,记下谁先垫钱、谁该摊,结束时算出最少要转几笔。
选题时技术栈已经定下,后面的排期沿用这一套。
- 手机端:React Native、Expo
- 服务端:Fastify
- 数据库:PostgreSQL
- 语言:前后端都写 TypeScript
手机端发出请求,Fastify 处理,PostgreSQL 存账。前后端都写 TypeScript。

进度参考上一届的实践来排。上一届把这门课从组队写到成品,主线大约一周一个节点,落在十月和十一月。前几次答辩,规格书和 PPT 交齐就能上课讲。要在设备上点给老师看,是 Alpha 那一周,那一周还要每天写一篇博客。写代码的时间留在那之前。
编码完成度我们自己卡在这些区间:原型这一周 20%–30%,数据库那一周 40%–60%,支线那一周 70%–90%。每一周都用同一笔账来对。
1.1 时间以哪一天为准
10 月 16 日之前的日期是已经发生的。16 日之后按「大约七天一节」来估。
助教把截止日期写上作业页面之后,以页面上的时间为准。节点里要做的事保持不动。
同账这学期的节点。曲线是编码该到的程度,橙点是 10 月 16 日我们目前所在的节点。

1.2 八个节点对照
| 节点 | 大致时间 | 这次要交的 | 同账要做到 |
|---|---|---|---|
| 选题 | 10 月 8 日前后,已完成 | 团队博客、选题 PPT、评审表 | 划定首版模块;排除支付、离线同步与 Web 端 |
| 原型与需求 | 博客 10 月 15 日 23:59;答辩 10 月 16 日 | 需求规格说明书、原型、两份 PPT、博客、两份评审表 | 原型覆盖账本、分摊、结算、结清与归档 |
| 概要设计与数据库 | 约 10 月 23 日 | 数据库设计说明书、系统设计说明书、博客、PPT | 账本至转账落成表;金额以分入库,刷新后净额仍可查询 |
| 支线 | 约 10 月 30 日 | 支线博客和 PPT,题目以当年布置为准 | 消费与结算接口可用;正式结算后消费只读;服务端可访问 |
| Alpha | 约 11 月 6 日 | 每日博客、代码规范、冲刺计划、测试、总结、资源汇总、PPT | 接通账号、邀请、记账、结算、还款登记、结清与归档 |
| 换组 | Alpha 之后,到下一次课前 | 复盘、后续规划、交接博客 | 交接已完成模块、数据表与未接通页面 |
| 极限编程 | 约 11 月 13 日、14 日 | 一篇博客,每人至少 3 次自己的提交 | 同账不新增模块 |
| Beta | 约 11 月 20 日前后,地点听老师安排 | 每日博客、用户使用调查、总结、PPT | 交付可安装客户端;独立完成建账、记账与结算预览 |
下面按节点写全。对照表只列结果,每一节写这一周完成哪些模块、交哪些材料。
1.3 选题:10 月 8 日前后,已完成
这一节点在组队展示那次收口。
- 队名定为分毫不差,产品定为同账。
- 用户是一起聚餐、一起短途的人。
- 技术栈定为上面那四行。
- 首版模块定为账号与登录、账本管理、成员与邀请、消费记录、分摊设置、成员余额、结算与还款、结清与归档。
- 排除真实支付、到账校验、离线同步、Web 端、OCR、即时通讯、多币种换算,以及预算、导出、成员移除和取消结算。
当时交了团队博客、选题 PPT 和评审表。界面原型留到下一周再定稿。
1.4 原型与需求:博客 10 月 15 日 23:59,答辩 10 月 16 日
这是现在所在的节点。原型在 10 月 12 日已经能点,16 号上课就用这一版。
同账这一周交付原型与规格,不交付可运行模块:
- 界面原型覆盖账本管理、成员邀请、消费录入、分摊设置、成员余额、支出统计、结算预览、还款登记、整本结清与个人归档。
- 需求规格写清账本状态:进行中、结算中、已结清。
- 写清创建者与普通成员的权限。
- 金额以整数分表示。
这一周要交齐:
- 需求规格说明书,传到华为云,博客里给链接。推荐 PDF。
- 界面原型。Figma 可点击原型的链接写进博客。
- 界面原型答辩 PPT、需求分析 PPT,同样上传华为云,博客里给链接。
- 这篇博客,开头有目录。
- 界面原型设计评审表、需求分析评审表,用腾讯共享文档。
16 号答辩前,原型停在 10 月 12 日这版,不再加页。
1.5 概要设计与数据库:约 10 月 23 日
第二次答辩结束到下一次课。要交数据库设计说明书、系统设计说明书、博客和 PPT。
同账在这一周把类落到库里:
- 用户、账本、成员、邀请、消费、分摊、图片、结算批次、转账各一张表,类名与表名一致。
- 金额以整数分持久化。
- 消费与分摊在同一事务中提交,分摊未写入则整笔回滚。
- 成员余额由消费与已登记转账派生,刷新后净额仍可查询。
编码按我们自己的区间,这一周走到 40%–60%。样本消费从这一周起以数据库记录为准。
1.6 支线:约 10 月 30 日
第三次答辩结束到下一次课。支线题目每届会变,上一届是大模型评测,我们以老师当年布置的为准。
材料上,这一周交支线的博客和 PPT。主线不再交一份新的规格书。文档做支线,写代码的人把同账往前推。
同账这一周完成这些模块:
- 消费记录与分摊守恒的写入接口。
- 结算模块按当前净额生成最少转账方案并持久化;全员净额为 0 时返回空方案。
- 正式结算后账本进入结算中,消费与成员变更为只读。
- 服务端完成一次可访问部署。成员邀请、还款登记、归档的界面可以尚未接通。
参考上一届的实践,「第一次部署留到 Beta」是后面最容易卡住的地方。打包、地址、老师打不开,会全堆在最后一周。所以这一周先走通部署,页面少几张也可以。编码按我们自己的区间,这一周走到 70%–90%。
1.7 Alpha:约 11 月 6 日
第四次答辩结束到下一次课。上一届这一周的材料很多,我们按那个清单准备:
- 冲刺阶段每天一篇博客
- 团队代码规范、冲刺计划
- 测试、阶段总结、资源汇总
- 答辩 PPT、评审表
演示在自己的手机上完成,请求打到自己的服务端。接通账号与登录、账本管理、邀请加入、消费记录、分摊设置、成员余额、结算预览与正式结算、还款登记、整本结清、个人归档。只演示已经通过的模块。
权限由服务端校验:普通成员不可修改他人消费,不可重置邀请或执行整本结清。收据每笔至多一张。预算、导出、成员移除、取消结算不纳入本阶段。
1.8 换组:Alpha 之后,到下一次课前
上一届在 Alpha 答辩结束到下一次上课之间,要交三篇:
- Alpha 阶段复盘
- 后续规划
- 换组交接
交接写清已实现模块、数据表,以及尚未接通的页面,包括扫码加入、按份分摊、按金额分摊、收据与流水筛选。只修复阻断主路径的缺陷,不新增模块。
1.9 极限编程:约 11 月 13 日当天,加 11 月 14 日
上一届是第六次上课当天再加第二天,和主线项目分开。题目以老师当年布置的为准。
一篇博客里写清这些:
- 项目跑起来的截图
- 仓库地址
- 运行环境
- 分工
- 功能是怎么做的
- 遇到的问题和解决办法
- 提交记录。每人至少 3 次,提交记在这个小项目上
同账不新增模块,功能集保持在 Alpha 已完成的范围。
1.10 Beta:极限编程结束后大约一周,约 11 月 20 日前后
时间和地点由老师安排。材料和 Alpha 同类,再加一份用户使用调查:每天一篇冲刺博客、代码规范、阶段总结、资源汇总、答辩 PPT、评审表。
交付可安装的移动端与可访问的接口。外部用户在自己的设备上独立完成三步,中间不需要我们代点:
- 账本创建。
- 消费录入。
- 结算预览,得到付款人、收款人与转账金额。
演示范围限于已通过验收的模块。真实支付、离线同步、预算、导出、取消结算不进入本阶段。
1.11 一个节点怎样算过去
每个节点按该阶段的模块验收。金额以整数分守恒,成员净额加总为 0。
入口可进入,操作完成,刷新后数据仍在,净额仍可查询。四条都对上,才进入下一个节点。
1.12 组队后的整体计划安排
十月初组队定题之后,同账沿用 React Native、Expo、Fastify、PostgreSQL。十月到十一月按上一届的间隔排:先划定首版模块并完成原型与需求,再把用户到转账落成表,支线周接通消费与结算接口并完成一次部署,Alpha 接通账号到归档,换组交接已完成模块和未接通页面,极限编程不新增模块,Beta 交付可安装客户端。16 日之后的具体日期以作业页面为准,每周要完成的模块按上面各节执行。
1.13 里程碑
每个节点写同账这一阶段完成的模块。要交的材料见上面的对照表。
| 节点 | 时间 | 完成的模块 |
|---|---|---|
| 选题 | 10 月 8 日前后,已完成 | 确定产品范围与技术栈。首版模块定为账号与登录、账本管理、成员与邀请、消费记录、分摊设置、成员余额、结算与还款、结清与归档。排除真实支付、到账校验、离线同步、Web 端、OCR、即时通讯、多币种换算,以及预算、导出、成员移除和取消结算。 |
| 原型与需求 | 博客 10 月 15 日 23:59;答辩 10 月 16 日 | 界面原型覆盖账本管理、成员邀请、消费录入、分摊设置、成员余额、支出统计、结算预览、还款登记、整本结清与个人归档。需求规格写清账本状态(进行中、结算中、已结清)、创建者与普通成员的权限,以及金额以整数分表示。本阶段交付原型与规格,不交付可运行模块。 |
| 概要设计与数据库 | 约 10 月 23 日 | 用户、账本、成员、邀请、消费、分摊、图片、结算批次、转账落成表,类名与表名一致。金额以整数分持久化。消费与分摊在同一事务中提交,分摊未写入则整笔回滚。成员余额由消费与已登记转账派生,刷新后净额仍可查询。 |
| 支线 | 约 10 月 30 日 | 完成消费记录与分摊守恒的写入接口。结算模块按当前净额生成最少转账方案并持久化;全员净额为 0 时返回空方案。正式结算后账本进入结算中,消费与成员变更为只读。服务端完成一次可访问部署。成员邀请、还款登记、归档的界面可以尚未接通。 |
| Alpha | 约 11 月 6 日 | 移动端与服务端接通。完成账号与登录、账本管理、邀请加入、消费记录、分摊设置、成员余额、结算预览与正式结算、还款登记、整本结清、个人归档。权限由服务端校验:普通成员不可修改他人消费,不可重置邀请或执行整本结清。收据每笔至多一张。预算、导出、成员移除、取消结算不纳入本阶段。 |
| 换组 | Alpha 之后,到下一次课前 | 交接已实现模块、数据表与尚未接通的页面,包括扫码加入、按份分摊、按金额分摊、收据与流水筛选。只修复阻断主路径的缺陷,不新增模块。 |
| 极限编程 | 约 11 月 13 日、14 日 | 另交独立小项目。同账不新增模块,功能集保持在 Alpha 已完成的范围。 |
| Beta | 约 11 月 20 日前后 | 交付可安装的移动端与可访问的接口。外部用户独立完成账本创建、消费录入和结算预览,得到付款人、收款人与转账金额。演示范围限于已通过验收的模块。真实支付、离线同步、预算、导出、取消结算不进入本阶段。 |
二、关键点、难点与风险
每项都标出关键点、难点和风险。
往后卡住进度的,主要是算账、冻账,以及几个人同时改同一本账。鼓山一日在原型里能点通,是因为金额和成员是预设的。真做的时候要按当时的数据重算。个人归档、邮箱不换绑、结算不能取消已经定了,下面只写做的时候还会踩的地方。
2.1 分摊和净额
关键点 金额按分存。一笔消费的分摊合计必须等于这笔金额,全本成员净额加总必须是 0。
难点 人均和按份的零头用最大余数法,余数相同按成员 ID 的固定顺序分。100 元三人均分得到 33.34、33.33、33.33 元。按金额可以有人摊 0 分,合计仍要等于消费总额。界面显示元,库存和接口用整数分,120 元传 "12000"。鼓山一日要对上这组数:
| 成员 | 已付 | 应摊 | 净额 |
|---|---|---|---|
| 小安 | 12000 分 | 9000 分 | +3000 分 |
| 小白 | 12000 分 | 6000 分 | +6000 分 |
| 小陈 | 6000 分 | 9000 分 | −3000 分 |
| 小丁 | 0 | 6000 分 | −6000 分 |
总支出 30000 分,待转账 9000 分。
风险 差 1 分,净额加总不再是 0,结算方案整份不能用,验收过不了。
2.2 最少转账笔数
关键点 12 人以内给出真正的最少转账笔数。全员净额为 0 时返回空方案。
难点 去掉净额为 0 的人以后,设还剩 n 人,最多能拆成 k 个互不重叠、各自能结清的组,最少笔数就是 n−k。同一组里,应付的人可以向多名应收的人转账。
三人例子和鼓山一日不是同一组数。A 净额 −100 元,B +20 元,C +80 元。最少是两笔:A 付给 C 80 元,再付给 B 20 元。用来核对一个人要付给两个人的结果。
风险 人数一多,计算时间会明显变长,12 人的最坏情况要在测试环境里测过。算不完或算失败时,如果仍展示一份凑出来的方案并写成“最少”,正式结算会按错误结果冻结。本次没有取消结算,冻住以后退不回进行中。
2.3 从预览到结清
关键点 预览只给出方案,账本保持原样。创建者确认后方案固定,消费和成员冻结。再次打开读已保存的转账,不再重新配对收款人。
预览不改账本。创建者确认后冻结,登记已还,再确认才结清。归档记在每个成员自己身上。

难点 确认时要在同一个事务里依次做完:
- 核对当时的账本版本。
- 停止继续改消费、改变成员。
- 写入结算批次和每一笔转账。
- 把状态改为结算中。
登记已还只更新这一笔的状态和剩余净额,总支出、类别占比和原始应摊保持原样。全部登记完,创建者再确认一次,才变成已结清。进行中两人同时改同一笔时,后保存的请求带上打开时看到的版本;版本已经变了就拒绝,表单上已填的内容留着。新增消费、正式结算、登记已还带请求标识,同一次请求只保留一个结果。
风险 预览之后又有人改了一笔,仍用旧方案冻结,转账和真实净额会对不上。保存连点两次,会多出一笔消费,或把同一笔还款登记两遍。进度页如果重新跑算法,小陈付给小安 30 元、小丁付给小白 60 元,可能换成另一对。
2.4 谁能操作
关键点 创建者和普通成员的权限由服务端判定。邀请码只打开加入确认,确认前看不到账本内容。
难点
| 操作 | 创建者 | 普通成员 |
|---|---|---|
| 改、删进行中的消费 | 全部 | 只限自己记下的 |
| 登记已还 | 全部转账 | 只限自己要付出的 |
| 邀请、重置邀请码、正式结算、整本结清 | 可以 | 不可以 |
| 查看账本、收据、结算 | 可以 | 可以;非成员不可以 |
当前原型主要是小安的视角,四个账号的权限没有分开演。
风险 按钮藏了、接口没查,成员仍能改别人的消费、重置邀请码,或凭图片编号打开收据。若只按原型把创建者路径做通,普通成员登记自己那一笔、不能整本结清,要到多人联调才看得到。
2.5 邀请和人数
关键点 邀请、加入和 12 人上限在服务端再查一次。
难点
- 6 位邀请码和二维码是同一条记录,默认 7 天。
- 重置以后,旧码和旧二维码一起失效。
- 只有进行中的账本可以加人。确认加入时,服务端再查一次人数和状态。
- 已在账里的人直接进入,不建第二条成员关系。
- 加入发生在应用内部。系统相机扫到码不会打开应用;相机未授权时,仍可以用手输。
- 上限 12 人,含创建者。
风险 两人同时加入,可能超过 12 人。重置邀请和别人正在输入旧码撞在一起,会加入失败,失败时还可能提示成功。四人一起记账依赖邀请可用。这一环断了,后面的分摊和结算没有真实成员可测。
2.6 归档
关键点 归档记在成员身上。财务状态只有进行中、结算中、已结清。
难点 归档时间写在该成员身上,只把自己的当前列表挪空,而且只能归档已经结清的账。
小安把已结清的账归档以后,自己的当前列表里没有了。小白的当前列表里还应该看得到这本账。原型没有把这个差别演出来。
风险 若把归档做成整本移走,一个人整理列表,其他人就找不到这本已结清的账。未结清的账也被归档时,结算中的账会从列表消失,登记已还的入口一起没了。
2.7 真机、图片和断网
关键点 安装包、图片和联网要在真机上先走通。业务必须联网。断网时,当前页已经填写的内容留着,以便重试。
| 难点 | 风险 |
|---|---|
| 先定 Android 或 iOS 里的一个必达平台,在真机上打包,并试相机、相册、复制邀请码 | 临近答辩才试,容易白屏、扫不了码,或复制没有进剪贴板。两个平台都承诺必达,时间会耗在打包上,主路径没有在一台机器上走完 |
| 封面和收据放进独立表的二进制字段。创建前的封面先不挂账本,创建成功再绑定,没用上的图清掉。读图核对是不是本账成员。收据最多一张,检查实际类型、字节数和像素 | 图片塞进消费记录,或只凭编号就能下载,库会过大,收据也会被账本外的人看到 |
2.8 排期
关键点 结算前面是分摊守恒,后面是登记、结清和归档。统计图、关于页和协议正文放在这条链之后。
难点 分摊差额没测过,结算页就没有可信数据。结算事务没合进去,结清和归档只能对着假状态做。
风险 顺序反了,后面几步都在假数上做,返工会叠在一起。
三、组员分工与工作量比例
这次是第二次作业,从这次起按我们团队的考核方案(具体方法在上一次选题博客内)算贡献系数。
(1) 不数代码行,不数提交次数,也不看谁先交。
(2) 代码是否完成,以组长风车在群里确认为准。
(3) 文稿和 PPT 以风车确认可以发出为准。
3.1 本轮的 8 条任务
一条任务一个负责人。点数只用 1、2、3、5、8。
难度和时效各两档,相乘,不组成四种情况。本轮全部按时,时效都是 1.00。普通难度 1.00。认领时写明要先验证技术方案的,难度 1.25。
任务得分 = 点数 × 难度 × 时效。
| 编号 | 学号 | 昵称 | 任务 | 做完的标准 | 点数 | 难度 | 时效 | 任务得分 |
|---|---|---|---|---|---|---|---|---|
| T1 | 072403324 | whisper | 可点击原型和跳转 | 从欢迎页走到结清归档,链接能打开 | 8 | 1.00 | 1.00 | 8.00 |
| T2 | 072403123 | 饶恩哲 | 四张类图和字段边界 | 账本与成员、支出与分摊、结算转账、成员余额能对上鼓山手算 | 8 | 1.25 | 1.00 | 10.00 |
| T3 | 102400307 | 风车 | 页面清单 | 说明书、原型、清单是同一套功能点 | 3 | 1.00 | 1.00 | 3.00 |
| T4 | 102400201 | 陈林祺 | 引言、用户场景、功能描述 | 不看代码能知道同账要做什么 | 3 | 1.00 | 1.00 | 3.00 |
| T5 | 102400103 | 李润君 | 验收标准和鼓山手算 | 300 元抵成两笔、90 元,对不上就判不通过 | 3 | 1.00 | 1.00 | 3.00 |
| T6 | 102400109 | circlexx | 页面跳转和输入保留 | 记账、分摊、结算、登记已还能沿着原型走 | 3 | 1.00 | 1.00 | 3.00 |
| T7 | 102400202 | G_bamboopole | 华为云仓库和链接位置 | 说明书、PPT、原型链接放在约定位置 | 3 | 1.00 | 1.00 | 3.00 |
| T8 | 052406103 | 叶银珍 | 视觉规范落到页面 | 颜色、字号、按钮、卡片、底部栏是同一套 | 3 | 1.00 | 1.00 | 3.00 |
全组任务得分 = 8 + 10 + 3 + 3 + 3 + 3 + 3 + 3 = 36.00。
本期人均 = 36.00 / 8 = 4.50。一半是 2.25。
规模只看任务得分够不够这条线,不看单笔高低。
- 达到人均,记 100
- 达到一半、还没到人均,记 60
- 不到一半,记 0
| 昵称 | 任务得分 | 和 4.50 比 | 规模分 |
|---|---|---|---|
| whisper | 8.00 | 达到人均 | 100 |
| 饶恩哲 | 10.00 | 达到人均 | 100 |
| 风车 | 3.00 | 过半,未到人均 | 60 |
| 陈林祺 | 3.00 | 过半,未到人均 | 60 |
| 李润君 | 3.00 | 过半,未到人均 | 60 |
| circlexx | 3.00 | 过半,未到人均 | 60 |
| G_bamboopole | 3.00 | 过半,未到人均 | 60 |
| 叶银珍 | 3.00 | 过半,未到人均 | 60 |
T2 的难度是 1.25,因为认领时写了要先把分摊、结算和鼓山手算对上。对上之后规模分到顶仍是 100,不会因为单笔 10 分再往上加。T1、T2 记 8 点,因为本阶段看原型和验收能不能检查,这两条是关键路径。T3 到 T8 各记 3 点,都过了人均的一半,规模没有人记 0。
3.2 五个维度
交付、协作、规范、文档也只打三档:达标 100,能用但有缺陷 60,打不开或对不上任务 0。60 分写明理由。
| 学号 | 昵称 | 交付 | 规模 | 协作 | 规范 | 文档 |
|---|---|---|---|---|---|---|
| 072403324 | whisper | 100 | 100 | 100 | 100 | 60 |
| 072403123 | 饶恩哲 | 100 | 100 | 100 | 100 | 60 |
| 102400307 | 风车 | 100 | 60 | 100 | 100 | 100 |
| 102400201 | 陈林祺 | 60 | 60 | 60 | 100 | 60 |
| 102400103 | 李润君 | 60 | 60 | 60 | 100 | 60 |
| 102400109 | circlexx | 60 | 60 | 60 | 100 | 60 |
| 102400202 | G_bamboopole | 60 | 60 | 60 | 60 | 60 |
| 052406103 | 叶银珍 | 60 | 60 | 60 | 60 | 60 |
3.2.1 记 60 的理由
一项一行。分数仍是 60,只把原来挤在一段里的话拆开。
| 昵称 | 哪一项 | 理由 |
|---|---|---|
| whisper | 文档 | 走查页能看,整份答辩还不能按清单讲完 |
| 饶恩哲 | 文档 | 四张类图能核对,整份答辩还不能按清单讲完 |
| 风车 | 规模 | 任务得分 3.00,过了 2.25,没有到 4.50 |
| 陈林祺 | 交付 | 引言、用户场景、功能描述能读,组长还没确认可以发出 |
| 陈林祺 | 协作 | 文稿在,没有留下一条指出具体下一句该怎么改的记录 |
| 陈林祺 | 文档 | 场景能检查,整份演示还不能按清单走完 |
| 李润君 | 交付 | 鼓山手算能复算,独立验收表还没到可以发出的版本 |
| 李润君 | 协作 | 例子在,没有留下一条指出说明书哪一行要改的记录 |
| 李润君 | 文档 | 300 元抵成两笔、90 元可以复算,整份演示还不能按清单走完 |
| circlexx | 交付 | 记账、分摊、结算、登记已还的跳转已经写了,还有控件没有接通 |
| circlexx | 协作 | 跳转写了,没有留下一条指出原型哪一根线要改的记录 |
| circlexx | 文档 | 跳转可以照着走,整份演示还不能按清单走完 |
| G_bamboopole | 交付 | 仓库位置写了,华为云上的 PDF 还不是可以发出的终稿 |
| G_bamboopole | 协作 | 目录在,没有留下一条指出哪个文件该放到哪的记录 |
| G_bamboopole | 规范 | 还没有对上任务编号的提交 |
| G_bamboopole | 文档 | 链接位置能看,演示还不能按清单走完 |
| G_bamboopole | 规模 | 任务得分 3.00,过了 2.25,没有到 4.50 |
| 叶银珍 | 交付 | 颜色、字号、按钮、卡片、底部栏已经是一套,还有状态页没有套完 |
| 叶银珍 | 协作 | 规范在,没有留下一条指出哪一页偏离了这套变量的记录 |
| 叶银珍 | 规范 | 视觉变量还没有对上任务编号的仓库提交 |
| 叶银珍 | 文档 | 主路径能看,整份演示还不能按清单走完 |
| 叶银珍 | 规模 | 任务得分 3.00,过了 2.25,没有到 4.50 |
3.2.2 记 100 的项
| 谁 | 哪些是 100 | 因为 |
|---|---|---|
| 陈林祺、李润君、circlexx | 规范 | 各自那一块的章节、手算例子、跳转和任务编号对得上 |
| 风车 | 交付、协作、规范、文档 | 清单把说明书、原型、功能点收成同一套,八条任务也在这张表里 |
3.2.3 解开阻塞,各加 2 分
| 昵称 | 加分 | 做了什么 |
|---|---|---|
| 陈林祺 | +2 | 把用户场景写成可以检查的条目,解开了验收没法落笔的阻塞 |
| 李润君 | +2 | 鼓山手算是当时别人接不了的验证 |
| circlexx | +2 | 跳转把原型和说明书的路径对齐,解开了对不齐的阻塞 |
3.3 个人分
R = 0.35 × 交付 + 0.25 × 规模 + 0.20 × 协作 + 0.12 × 规范 + 0.08 × 文档。
| 昵称 | 计算 | 五项结果 | 加 2 分后 | 计入 W |
|---|---|---|---|---|
| whisper | 0.35×100 + 0.25×100 + 0.20×100 + 0.12×100 + 0.08×60 = 35 + 25 + 20 + 12 + 4.8 | 96.8 | 不加 | 96 |
| 饶恩哲 | 0.35×100 + 0.25×100 + 0.20×100 + 0.12×100 + 0.08×60 = 35 + 25 + 20 + 12 + 4.8 | 96.8 | 不加 | 96 |
| 风车 | 0.35×100 + 0.25×60 + 0.20×100 + 0.12×100 + 0.08×100 = 35 + 15 + 20 + 12 + 8 | 90 | 不加 | 90 |
| 陈林祺 | 0.35×60 + 0.25×60 + 0.20×60 + 0.12×100 + 0.08×60 = 21 + 15 + 12 + 12 + 4.8 | 64.8 | 66.8 | 66 |
| 李润君 | 0.35×60 + 0.25×60 + 0.20×60 + 0.12×100 + 0.08×60 = 21 + 15 + 12 + 12 + 4.8 | 64.8 | 66.8 | 66 |
| circlexx | 0.35×60 + 0.25×60 + 0.20×60 + 0.12×100 + 0.08×60 = 21 + 15 + 12 + 12 + 4.8 | 64.8 | 66.8 | 66 |
| G_bamboopole | 0.35×60 + 0.25×60 + 0.20×60 + 0.12×60 + 0.08×60 = 21 + 15 + 12 + 7.2 + 4.8 | 60 | 不加 | 60 |
| 叶银珍 | 0.35×60 + 0.25×60 + 0.20×60 + 0.12×60 + 0.08×60 = 21 + 15 + 12 + 7.2 + 4.8 | 60 | 不加 | 60 |
whisper、饶恩哲的五项结果是 96.8,比 96 多 0.8。陈林祺、李润君、circlexx 加完 2 分是 66.8,也比 66 多 0.8。这 0.8 不进入 W。风车的 90、G_bamboopole 的 60、叶银珍的 60 没有这 0.8。
计入 W 的个人分之和 = 96 + 96 + 90 + 66 + 66 + 66 + 60 + 60 = 600。
3.4 贡献系数
W = 这个人计入 W 的个人分 / 600。
- 先得到百分数,再保留两位。
- 两位之后加起来要是 100%。
- 小数部分从大到小,每个加 0.01,直到补齐。
- 小数相同,按封面学号从小到大。
| 学号 | 计算 | 未补余数 | 贡献度 |
|---|---|---|---|
| 072403324 | 96 / 600 = 16.00% | 16.00% | 16.00% |
| 072403123 | 96 / 600 = 16.00% | 16.00% | 16.00% |
| 102400307 | 90 / 600 = 15.00% | 15.00% | 15.00% |
| 102400201 | 66 / 600 = 11.00% | 11.00% | 11.00% |
| 102400103 | 66 / 600 = 11.00% | 11.00% | 11.00% |
| 102400109 | 66 / 600 = 11.00% | 11.00% | 11.00% |
| 102400202 | 60 / 600 = 10.00% | 10.00% | 10.00% |
| 052406103 | 60 / 600 = 10.00% | 10.00% | 10.00% |
这八个百分数已经是两位,加起来是 100.00%,没有余数要补。
3.5 本次贡献度
| 学号 | 工作内容 | 贡献度 |
|---|---|---|
| 102400307 | 组长。功能点收进页面清单,核对说明书、原型和清单是同一套;排期、风险和这次贡献度 | 15.00% |
| 072403123 | 主程序员。四张类图和功能边界:账本与成员、支出与分摊、结算转账、成员余额;前后端字段对齐,按功能点留目录 | 16.00% |
| 072403324 | 原型。整套可点击原型和跳转,从欢迎页到结清归档;设计条目和界面答辩走查页 | 16.00% |
| 052406103 | 视觉规范落到原型:颜色、字号、按钮、卡片、底部栏同一套 | 10.00% |
| 102400103 | 验收标准。鼓山一日主路径和手算(300 元抵成两笔、90 元),对不上的步骤写成不通过 | 11.00% |
| 102400109 | 页面结构和交互:记账、分摊、结算、登记已还的跳转,输入出错时留在当前页 | 11.00% |
| 102400201 | 需求规格说明书:引言、用户场景、功能描述,目录和章节按规格文本排 | 11.00% |
| 102400202 | 华为云仓库和提交路径,说明书、PPT、原型链接放在约定位置并能打开 | 10.00% |
16.00 + 16.00 + 15.00 + 10.00 + 11.00 + 11.00 + 11.00 + 10.00 = 100.00%。
四、成员协作方式
沟通在 QQ 群,代码在 GitHub,要交的说明书和 PPT 在华为云,视觉和原型在 Figma,两份评审表在腾讯共享文档。
这一节写交接实际怎么做。学号和这次要交回去的东西先对照在这里,后面的规矩都按这张表认人。
| 学号 | 这次要交回去的东西 |
|---|---|
| 102400307 | 页面清单;收口说明书;汇总博客;在群里说可以发出 |
| 072403123 | 四张类图;GitHub 仓库、基础设施和架构;review PR |
| 072403324 | 这次先交可点击原型和跳转,从欢迎页走到结清归档 |
| 052406103 | Figma 上的颜色、字号、按钮、卡片、底部栏 |
| 102400109 | 记账、分摊、结算、登记已还的跳转;输错留在当前页 |
| 102400103 | 鼓山手算和验收。300 元抵成两笔、90 元,对不上写成不通过 |
| 102400201 | 引言、用户场景、功能描述 |
| 102400202 | 华为云上的说明书、两份 PPT,以及博客里的链接位置 |
4.1 沟通工具
同账的日常协作在一个 QQ 群里。
截止、催交、点名、链接、确认可以发出,都发在这个群里。私聊只用来看还没定稿的内容。只在私聊里说过的截止和分工,全组按没通知到来处理。
4.1.1 一条消息怎样算数
要同时满足这三条:
(1) 发在群里,不是私聊。
(2) 需要别人做的,点到具体的人,写清要交什么、什么时候交。
(3) 被点到的人在群里回一句。没有回复,就当没看到,风车再点一次名字。
4.1.2 群里谁发什么
| 谁发 | 发什么 | 别人怎么接 |
|---|---|---|
| 风车 | 本轮要交的东西、谁做、内部截止、可以发出 | 被点到的人当天回复 |
| 饶恩哲 | 代码组怎么排、哪条 PR 在等 review、main 合并了哪一块 | 写功能的人按自己的分支做,做完把 PR 链接发回群里 |
| whisper | 可点击原型的链接,并写明从欢迎页走到归档 | 做 PPT 和写博客的人换成这一条。打不开就在群里说,他重发一条当时能打开的 |
| 叶银珍 | 视觉规范改了哪些变量、哪一页已经套上 | whisper 按这一套改原型 |
| circlexx | 记账、分摊、结算、登记已还的路径,输错留在哪一页 | whisper 对原型,陈林祺对说明书 |
| 陈林祺 | 引言、用户场景、功能描述交到哪一稿 | 风车收口成需求规格说明书 |
| 李润君 | 鼓山手算。总支出 300 元,两笔转账,待转账 90 元。对不上就写不通过 | 饶恩哲改类图,陈林祺改正文里的数字 |
| G_bamboopole | 华为云上的文件名、目录、打开后的链接 | 风车打开,确认是终稿,再写进博客 |
4.1.3 催交
- 催交发在群里。
- 到了内部截止还没回「请看」的,风车再点一次名字。
- 点过之后仍然没有稿,这一项按未交记,不用旧稿顶上。
4.1.4 怎样算完成
文稿和 PPT:风车在群里回复可以发出。
代码:饶恩哲把 PR 合并进 main,并且风车在群里确认。
只在群里说写完了、PR 还开着,不算完成。只合并了、群里没说,文档组和做 PPT 的人先不改博客里的完成度。
4.1.5 两种说法不一样时
(1) 以后发的那条为准。
(2) 前一条还要不要,风车在同一条消息里写明。
(3) 两份 PPT 选三个人、两份审核表选一个人,也在群里点,不在私聊里定。
(4) 审核表用腾讯共享文档,写完把链接发回群里。
4.1.6 这一轮群里的安排
周五先把文档组要的三样发在群里。
- 原型和使用说明。 用鼓山一日走完:建账本、记三笔、看到谁转给谁。
- 类图。 写类名、主要属性和关系,金额用「分」。
- 功能说明。 写操作、输入、输出、做完之后账本变成什么样、输入不对时看到什么。
周末两天把这三样交给文档组。周一到周四写功能,文档组同时写说明书、做 PPT。文档不干等功能做完。
周一再把要交的总数发在群里:
(1) 需求使用说明 1 份,由风车收口。
(2) 原型设计 PPT、需求分析 PPT 各 1 份,选三个人一起做,做的人要能打开原型。
(3) 审核表 2 份,选一个人写。
(4) 内部截止周三。博客由风车汇总。
陈林祺、G_bamboopole、李润君已在群里回复接到。
QQ 群里发出的文档安排和代码组、文档组的分工

QQ 群里发出的交付物、人选和内部截止

作业页面上的博客截止仍是 10 月 15日 23:59。周三是内部截止,用来留出汇总、上传和改链接的时间。
4.2 版本仓库怎么协作
| 地方 | 谁收 | 放什么 | 什么时候更新 |
|---|---|---|---|
| GitHub | 饶恩哲 | 工程骨架、基础设施、架构、参考文档;之后的功能代码 | 骨架先放进 main。功能写完开 PR,review 通过再合并 |
| 华为云 | G_bamboopole | 需求规格说明书、原型答辩 PPT、需求分析 PPT。推荐 PDF | 风车说可以发出之后再传。博客里的链接指向这里 |
| Figma | 叶银珍改视觉,whisper 改跳转和链接 | 颜色、字号、按钮、卡片、底部栏;可点击原型 | 链接有变就发到 QQ 群。风车确认后再写进博客 |
| 腾讯共享文档 | 群里点到的那一个人写两份评审表 | 界面原型设计评审表、需求分析评审表 | 写完把链接发到群里,风车看过再放进博客 |
4.2.1 GitHub 上怎么一起写
饶恩哲先开仓库,把基础设施、架构、参考文档和基本技能放上 main。别人不在空目录里各自起一套工程。技术栈和选题时定的一样:React Native、Expo、Fastify、TypeScript、PostgreSQL。
main 上先有的:
- 移动端联调页
- API 健康检查和接口文档
- 共享包
- 数据库连接
- 开发配置和 CI
还没进 main 的:
- 登录
- 账本
- 邀请
- 记账
- 结算
图标和启动图仍用 Expo 模板,不当成已经做好的界面。
tongzhang 仓库,协作都在这一份 main 上进行

README:新人按这份说明把骨架在本机跑起来

4.2.2 新人怎么把仓库跑起来
按 README 起环境,不在 QQ 里另传一份安装步骤。
- 环境:Node.js 24、pnpm 12.6.0,Docker Desktop 先开着
- 移动端默认用 Development Build
- 第一次装开发客户端、配置真机 IP、用 Expo Go 临时预览,写在仓库里的开发说明里
先起 API:
pnpm install
pnpm env:setup
pnpm db:up
pnpm db:migrate
pnpm dev:api
另一个终端再跑 pnpm dev:mobile。
API 默认 http://localhost:3300。本地这四条都通,才开始在自己的分支上写功能。
/health/live:只看进程,不连数据库/health/ready:查真实的 PostgreSQL,失败返回 503/api/v1/system/info:对两端的基础约定/docs:开发环境的 Swagger
4.2.3 文件放在哪
review 时先看目录放对没有。
| 目录 | 放什么 |
|---|---|
apps | 移动端和 API |
packages | 前后端共用的类型和字段名。两套字段名不能并存 |
infra | 数据库和本地依赖 |
docs | 参考文档和基本技能 |
scripts | 安装、起库、迁移 |
.github/workflows | CI。合进 main 之前,这条要能过 |
4.2.4 分支和 PR
不直接往 main 上推。
(1) 从 main 用 worktree 开自己的分支。一个人一块功能,一条分支。
(2) 后端功能由开发同学写。风车自己写的服务端也走分支。这次作业 whisper 先交原型,之后写的服务端同样开 PR。circlexx 的页面和接口调用也开 PR。
(3) 写完在 GitHub 上开 PR,指定饶恩哲 review。PR 说明里写改了哪一块、用鼓山一日的哪几个数验过。某一行要改,写在 PR 的评论里。diff 不贴进 QQ。
(4) QQ 里只回一句:PR 开了,或者已经合并。群里不代替 review。
(5) 下面任何一条对不上,PR 先不合。main 保持现在这份能跑的骨架。
| 看什么 | 对不上就退回 |
|---|---|
| 目录 | 新文件没有放进上表对应的目录 |
| 分支 | 功能直接提交到 main,没有 PR |
| 金额 | 用了小数。120 元存 12000 分,接口传 "12000" |
| 鼓山手算 | 四人净额加总不是 0,或两笔转账不是小陈付给小安 30 元、小丁付给小白 60 元 |
| 类图 | 字段名和饶恩哲四张图、packages 里的共享类型不是一套 |
| 完成度 | README 写成登录、账本、记账、结算已经做完,main 上还没有这些接口 |
4.2.5 华为云
G_bamboopole 上传之前,在群里写文件名和目录。上传之后把链接发回群里。风车打开,确认是终稿,再让链接进入博客。
华为云上只放这三份:
- 需求规格说明书
- 原型答辩 PPT
- 需求分析 PPT
4.2.6 Figma
两处分开改。
- 叶银珍改全组共用的颜色、字号、按钮、卡片、底部栏。
- whisper改可点击原型和按钮跳转,从欢迎页走到结清归档。
做 PPT 的人打不开链接,就在群里说。whisper 重发一条当时能打开的,不各自留一份旧稿。
4.3 冲突怎么处理
先分清是哪一种,再决定在哪改。
- 文件撞在一起:在 PR 里解决。
- 内容对不上:按下表听谁的,改完在 QQ 群里回一句。
| 情况 | 以什么为准 | 谁改 | 怎样算解决 |
|---|---|---|---|
| 两个分支改了同一处代码 | 饶恩哲 review 通过的那一版 | 开 PR 的人先把 main 上的新提交接进自己的分支,冲突在分支里解决,再请他看 diff | 合并进 main。main 上不留冲突标记 |
| 原型按钮和说明书路径不一致 | whisper 当时的可点击原型 | circlexx 改说明书里的路径。功能点要增减时,先改风车的页面清单,再改原型和说明书 | 清单、原型、说明书是同一套功能点 |
| 类图、正文和手算差了金额 | 李润君的鼓山手算。总支出 30000 分,待转账 9000 分,四人净额加总为 0 | 饶恩哲改类图或计算说明,陈林祺改功能描述里的数字 | 差 1 分,这版不能发出 |
| 某一页的颜色、字号和规范不一致 | 叶银珍的视觉规范 | 做那一页的人改回规范里的变量 | 群里写明是哪一页 |
| 群里有人还在用旧的原型链接 | whisper 最新发在群里、并且有人回复打得开的那条 | 做 PPT 和写博客的人换成新链接 | 风车打开博客里的链接,看到的是这一版 |
| 华为云上的 PDF 和群里确认的稿不是同一份 | 风车回复可以发出的那一稿 | G_bamboopole 重新上传,替换链接 | 博客链接打开的是终稿 |
| README 写成业务已完成,main 上还没有 | README 里「尚未实现」那一句 | 饶恩哲改 README,或等 PR 合并后再改「已完成」 | README 的边界和 main 上的代码一致 |
| 群里前后两种说法 | 风车后发的那一句 | 按后一句做 | 前一句还要不要,他在同一条消息里写明 |
PR 里意见不一致,也是风车定。他定的那一句发回 QQ 群,饶恩哲按那一句决定合还是不合。不合的 PR 留在分支上,main 保持能跑的那一版。
4.4 任务怎么同步
一条任务一个负责人,对应贡献度表里的 T1 到 T8。进度只在 QQ 群里同步。GitHub 上的同步只发生在 PR 和 main 上:开了 PR 是请看,合并进 main 才进入可以确认完成的那一步。
状态只用三句。
- 接到了,被点到的人回。
- 请看,稿或 PR 交出来,等人看。
- 可以发出,只有风车能说。
4.4.1 这一轮按天同步
| 时间 | 群里在同步什么 | 接到之后要交回什么 |
|---|---|---|
| 10 月 9 日 | 文档三样;饶恩哲当晚排代码组;周末给齐材料;周一到周四写功能,文档组同时写文档和 PPT | 饶恩哲把代码组安排发回群里。骨架先落在 main 上 |
| 10 月 10 日、11 日 | 周末 | 原型说明、类图、功能说明给到写文档和做 PPT 的人 |
| 10 月 12 日 | 五类交付物。说明书风车收口。PPT 点三个人。评审表点一个人。内部截止周三 | 陈林祺、G_bamboopole、李润君已在群里回复接到 |
| 10 月 13 日 | 开始两份 PPT | 三个人打开原型。打不开就在群里说,whisper 重发链接 |
| 10 月 14 日周三 | 内部截止 | 章节、PPT、评审表、原型链接交到风车 |
| 10 月 15 日 23:59 | 博客作业截止 | 风车汇总并发出。此前 G_bamboopole 已把 PDF 传到华为云 |
| 10 月 16 日 | 原型答辩 | 用已经在群里发过、并且有人打得开的那版可点击原型。main 上还没有的登录、记账、结算,答辩不说成已经做完 |
4.4.2 每个人交回什么
| 谁 | 发到群里的东西 | 谁来看 | 完成 |
|---|---|---|---|
| whisper | 可点击链接,并写明从欢迎页走到归档 | 风车,以及做 PPT 的三个人 | 群里有人回复打得开 |
| 饶恩哲 | 四张类图;GitHub 上待 review 的 PR | 李润君对金额,风车对功能点 | 手算对上,并且 PR 已合并。现在 main 上还只有骨架,功能 PR 还没算完成 |
| 叶银珍 | 视觉规范改了哪些变量,哪一页已经套上 | whisper | 原型页面用的是这一套 |
| circlexx | 记账、分摊、结算、登记已还的跳转 | whisper 对原型,陈林祺对说明书 | 路径和原型一致,输错留在当前页 |
| 陈林祺 | 引言、用户场景、功能描述 | 风车 | 风车回复可以发出 |
| 李润君 | 鼓山手算,以及对不上就判不通过的步骤 | 饶恩哲、陈林祺 | 300 元、两笔、90 元写进说明书 |
| G_bamboopole | 华为云目录、文件名、打开后的链接 | 风车 | 链接打开的是可以发出的 PDF |
| 风车 | 页面清单的增删;博客汇总稿 | 全组 | 他在群里说可以发出,博客才交 |
4.4.3 交接顺序
跳过前面的人直接改后面的稿,群里先说,等清单改完再改。
(1) 功能点先改页面清单。
(2) 再改原型和类图。
(3) 陈林祺改功能描述。
(4) 李润君用鼓山手算核一遍。
(5) PPT 用已经能打开的原型。
(6) G_bamboopole 上传风车点过头的 PDF。
(7) 风车把链接写进博客。
(8) GitHub 上的功能要等 PR 合并,再改 README 里的「尚未实现」。
4.5 协作的四个做法总结
4.5.1 沟通工具
通过QQ 群沟通。截止、催交、点名、链接和可以发出的都发在群里。点到人、人在群里回复,这条才算数。文稿要看是否可以发出,代码要看 PR 合并再加上群里确认。
4.5.2 版本仓库怎么协作
代码在 GitHub 的 main 和 PR 上协作:骨架先放上 main,功能用 worktree 开分支,饶恩哲 review。说明书和两份 PPT 在华为云,视觉和原型在 Figma,评审表在腾讯共享文档。
4.5.3 冲突怎么处理
代码冲突留在分支里,合进 main 之前清掉。金额、路径、链接和终稿各有一份为准的稿。PR 里意见不一致,风车在群里定一句,饶恩哲按那一句决定合还是不合。
4.5.4 任务怎么同步
一条任务一个负责人。状态只有接到了、请看、可以发出。每天在群里对进度,交回的东西按上面的人和顺序走。
五、软件需求规格说明书
说明书上传到华为云。
六、界面原型设计
七、界面原型设计答辩 PPT
课堂讲述用,上传到华为云。
八、需求分析PPT链接
课堂讲述用,上传到华为云。


