[I.3] 个人作业:结课总结
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2025春季软件工程 |
| 这个作业的要求在哪里 | [I.3个人作业]:结课总结 |
| 我在这个课程的目标是 | 学习并掌握软件工程方法,与团队成员一起完成一个属于我们自己的软件工程项目。 |
| 这个作业在哪个具体方面帮助我实现目标 | 技术总结和问题反思 |
提问博客链接
对之前提问的解答
问题1:个人开发流程和团队流程如何平衡?
在整个课程中,我逐步体会到:个人开发流程强调效率和灵活性,而团队流程更注重标准化和沟通协作。起初我习惯自己独立推进开发工作,但在团队合作中,必须遵守项目进度和统一的技术规范,例如代码规范、接口定义、版本控制流程等。为此,我学习使用 Git 分支管理、每日 Stand-up Meeting 和 PR Review 来协调个人和团队的节奏。两者的平衡点在于:个人在保留独立思考空间的同时,也要融入团队合作的流程之中。
问题2:如何处理团队协作中的技术差异与沟通障碍?
最初我们团队在技术选型和代码风格上存在较大差异,例如是用 Vue 还是 React、是否使用 TypeScript 等问题。为避免陷入争论,我们采用了“少数服从多数 + 技术调研投票”的方式,并建立了每周技术分享会,让每位成员有机会展示其观点。另一方面,沟通障碍主要来自于信息不对称与表达方式差异,通过建立微信群、Notion 文档协同、每周总结等手段大大改善了协作效率。最终我们形成了技术包容 + 高效沟通的良好团队氛围。
问题3:如何确保单元测试的覆盖率?
课程中我意识到,良好的单元测试不仅是质量保证的手段,更是提升开发效率的重要工具。我们通过引入 Jest + CI 自动测试框架,在每次 push 后自动执行测试脚本,确保代码变更不会破坏已有功能。同时通过 coverage 工具定期检查测试覆盖率,强制要求关键业务模块达到 80% 以上的覆盖率。虽然测试代码编写初期会耗时,但长远来看节省了大量的 debug 成本。
问题4:如何了解用户需求?
我们采取了以下几个步骤:首先进行问卷调查和竞品分析,初步了解潜在用户的基本需求;其次通过原型演示收集反馈,验证需求的真实有效性;最后建立用户画像和使用场景图,细化功能设计。在这个过程中,我学到了从用户视角出发比从技术视角更重要,因为最终软件是为人服务的,开发者不能闭门造车。
问题5:软件测试如何处理不可预测的用户行为?
不可预测行为往往是 bug 的根源。我们的策略包括:1)制定健壮的输入校验机制,防止非法输入;2)设计“异常路径”的测试用例,如网络断开、输入为空等;3)设置错误日志和用户行为跟踪系统,一旦发生异常立即上报并追踪溯源。“假设用户永远会误操作”是我们进行测试设计时的重要原则。
每个阶段分别学习到了什么
需求阶段
这一阶段我学习到了如何从混乱的用户愿景中提取出清晰可执行的需求。通过调研、用户访谈、需求文档撰写(SRS),我掌握了使用用例图、用户故事等工具来规范表达需求。同时,我认识到需求是动态变化的,需求管理和变更控制同样重要,不能一味追求完美。
设计阶段
在设计阶段,我首次系统接触到了 UML 类图、时序图、模块划分等技术。在团队中我主导了部分模块的系统架构设计,这让我意识到:一个清晰、合理的架构能极大降低后续开发复杂度。此外,我们使用原型工具(如墨刀/Figma)设计 UI,并对接口进行了 RESTful 风格统一,为后端和前端协作提供了基础。
实现阶段
代码实现阶段是最具挑战性的部分之一。我们采用了分模块开发、任务认领制度,避免了重复劳动。个人负责的模块包括用户注册登录、数据存储等,在实现中我进一步熟悉了前后端分离架构、API 开发、异常处理、数据库操作等核心知识。最重要的是,实现阶段不是闭门写代码,而是团队协作、文档同步、持续沟通的结果。
测试阶段
本阶段我学到了软件测试是一个系统性过程,而不仅仅是“试一试有没有问题”。我们从功能测试到单元测试,再到用户测试,逐步构建了完整的质量保障体系。我负责编写了一部分自动化测试脚本,并通过 Postman 对接口进行压力测试。此外,bug 跟踪系统(如 GitHub Issues)也帮助我们高效修复缺陷。
发布阶段
项目发布过程中,我深刻体会到部署与上线并不是开发的结束,而是产品走向用户的开始。我们部署了测试服务器,通过 Docker 打包发布,解决了环境一致性问题。同时我们为用户提供了使用手册,并组织了几轮用户试用,收集反馈用于后续改进。这个阶段让我意识到运维、上线和监控同样属于软件工程的一部分。
维护阶段
虽然课程周期有限,但我们仍模拟了维护阶段的流程,包括版本升级、热修复、用户反馈处理等。我体会到:好的软件不仅要能跑起来,还要“活下去”。我们学习了语义化版本号管理,制定了变更日志和发布计划,积累了真实的维护经验。
总结与感悟
这门课程带给我的,不仅是一个项目的完成,更是一种对软件工程系统性认知的建立。从一开始的懵懂,到后来可以主动规划开发流程、分配任务、控制风险,我明显感受到能力的提升。
同时,团队合作教会了我包容与协调。软件工程不只是技术堆砌,更是一个综合工程:它需要明确的目标、合理的设计、高效的执行、持续的反馈与改进。最重要的是,它需要人——一个能够互相支持、互相信任的团队。
未来无论我是否从事软件开发,这门课程留下的影响都将深远。它让我学会了如何面对复杂问题、如何将抽象需求转化为具体实现、如何在有限时间内追求卓越质量。
感谢这段旅程,感谢我的队友,感谢老师的指导。
浙公网安备 33010602011771号