[I.3] 个人作业:结课总结
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2025年春季软件工程(罗杰、任健) |
| 这个作业的要求在哪里 | [I.3] 个人作业:结课总结 |
| 我在这个课程的目标是 | 在实践中提升前后端开发与撰写报告的能力,培育需求分析与团队协作素养 |
| 这个作业在哪个具体方面帮助我实现目标 | 回顾开发历程,并进行反思与总结 |
一、以前提问题的博客
二、尝试对曾经提出的问题进行解答
问题一:
如何平衡编写单元测试益处与其使用时间?
虽然理论上单元测试应尽可能覆盖所有路径,但100%覆盖率并不总是最优选择。例如在Unity项目的商店实现中,对于一些逻辑简单的UI组件(如关闭按钮、目录切换)中不写测试,而对于逻辑复杂、数据交互频繁的模块则在EditMode下构建相关测试,例如搜索框的筛选逻辑,购买商品后存入全局背包的流程。
问题二:
如何确保结对编程在极限情况下实际效益处于最优?
有效分工,及时沟通,并使用制定固定时间的轮换机制。在开始讨论时确定实现思路,并进行模块划分,根据个人实力水平进行分配,一方写时另一方review。
问题三:
如何选择PM角色?
在轮值与单PM中,也许并不总存在最优解,这应取决于PM个人素质以及团队结构特性。
在本次项目中,由于考虑到alpha阶段结束时换人的可能,我们组采取了双PM政策,有效预防单PM转会,并通过交叉验证需求合理性,且几乎总能联系到一个PM及时推进,不过双PM也可能因信息不同步而存在重复沟通的问题。
问题四:
如何将PSP模型运用至学习阶段?
直接照搬PSP模式对于实际学习过程而言略显繁琐,使得开发节奏不自然。后续将PSP模型调整为适应初学节奏的轻量模型,即需求分析(20%)、设计(20%)、编码(40%)、测试(20%),记录时间,根据实际效果验证分配的合理性,从而使得该模型思维方式应用于实际。
问题五:
如何决定在何时何处优化?
优化应基于实际需求驱动,而不是预设。
在本次项目中,由于原始的CardData类在商店、卡牌、战斗等场景多处使用,且在各场景均需添加不同字段,而各场景也由不同同学负责。在这过程中,代码耦合较为严重,开发中期dx同学对该类进行了重构,抽象出接口ICardData,并通过继承的方式实现了分离。
三、学到的知识点
需求阶段
从用户的角度考虑需要什么,为什么需要,然后再考虑如何解决。例如本次项目团队考虑到针对人群的需求是想要玩游戏,但游戏影响学习,因此设计了将学习融入游戏的方式,使得这部分用户的需求得以满足。
设计阶段
在设计阶段,主要负责背包对卡牌的全局管理,以及商店内部对于金币的使用。考虑到与卡牌预览的对接,根绝卡牌的属性,设计商店/背包内卡牌的展示界面
实现阶段
首次深入体会敏捷开发进展与git管理。在编码实现中,团队使用Git进行版本控制,对于分配的开发任务,首先创建feature/分支,在初步完成后pr到dev分支上,再由PM审核;对于bug修复,则创建一条fix/分支,之后流程类似。该流程使对git的了解更深入,有效防止代码冲突,提升了团队协作效率。
测试阶段
这一阶段让我掌握了如何在Unity中通过EditMode构建单元测试,比如搜索框筛选、卡牌数据插入背包等流程。
发布阶段
在Alpha和Beta阶段的发布中,我体会到完成比完美更重要,首先需要实现最核心的功能,而其他美化修饰的细节可以在后续迭代中进一步填充。
维护阶段
本次项目实际的维护时间较短,更多的感受是通过PM试玩测试,以及根据软件发布地的评论区反馈进行维护。
四、心得体会
- 在个人项目中,通过阅读了解了软件工程理论层面的内容
- 在结对编程中,我体会到分工与沟通的重要性,锻炼了快速学习能力
- 在团队编程中,我第一次完整体验了多人协作、git分支管理的敏捷开发流程。在实践中体会到开发流程各岗位的职责,也极大提升了沟通交流能力,并初步掌握了Unity开发
浙公网安备 33010602011771号