[I.3] 个人作业:结课总结
软件工程学习回顾与总结
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2025年春季软件工程(罗杰、任健) |
| 这个作业的要求在哪里 | [[I.3] 个人作业:结课总结]([I.3] 个人作业:结课总结 - 作业 - 2025年春季软件工程(罗杰、任健) - 班级博客 - 博客园) |
| 我在这个课程的目标是 | 学习软件工程的思想和方法,进行软件开发的实践 |
| 这个作业在哪个具体方面帮助我实现目标 | 回顾软件工程课程,理解课程意义、收获转化到今后实践 |
前言
经过一个学期的软件工程学习与实践,从最初的阅读提问到结对项目再到团队项目开发,我对软件工程有了更深入的理解。以下是我的学习回顾与总结。
问题回顾与解答
原始问题链接
[学期初阅读提问博客]([I.1] 个人作业:阅读和提问 - 郎赤娜 - 博客园)
软件工程问题深入分析与解答
1. 需求变更管理的有效实施与平衡
实践经验与解决方案
在团队项目中,我们采用了以下方法来应对需求变更:
-
变更领航员:
我们选取了两位领航Leader,对每个变更请求评估影响范围和优先级。
-
"两阶段"决策法:
- 紧急需求:立即评估,若影响<2人天则当前迭代处理,否则放入下个迭代
- 非紧急需求:放入需求池,定期评审
决策框架建议
当面临重大变更时,使用以下决策树:
- 该需求是否影响核心价值主张?是→优先处理
- 变更是否导致>30%代码重构?是→考虑分阶段实现
- 是否有临时解决方案?有→延迟到下一版本
2. 单元测试独立性与真实性的平衡
在本次团队迭代中,其实没有很好地实现测试。由于我们小组做的是游戏,更多的只是在玩游戏的过程中检查是否出现bug。
3. 单元测试 authorship 的最佳实践
基于实证的结论
在结对测试中,我们发现:
"测试伙伴"制度效果显著:
- 开发者编写70%基础测试用例(正常流程)
- 指定另一位不参与开发的成员编写30%边界用例
在团队测试中,我们发现:
测试评审机制:
4. 需求优先级动态管理方法
经过验证的排序框架
在多次迭代中,我们优化出以下方法:
三维评估模型:
-
商业价值(1-10分)
即展现在评审角度,对游戏的主观能有多少的提升
-
实现成本(1-10分)
-
技术风险(高/中/低)
5. MVP功能集科学确定方法
实证有效的决策流程
在团队的游戏开发中,我们的决策方法如下:
-
Kano模型分析:
- 对每个功能进行用户调研,分类为:
- 基本型需求(必须有)
- 期望型需求(越多越好)
- 兴奋型需求(惊喜因素)
- 对每个功能进行用户调研,分类为:
-
价值流映射:
flowchart LR 用户痛点--> 核心价值主张 核心价值主张 --> 关键用户旅程 关键用户旅程 --> 必备功能点
新产生的问题
- 问题1:敏捷开发在实际项目中如何平衡灵活性与文档要求?
- 游戏开发中,如何平衡创意设计与工程约束?
- 自动化测试在游戏开发中的适用边界在哪里?
各阶段知识点学习
需求阶段
知识点:识别用户痛点
理解:我们游戏开发初期,只是想实现一款肉鸽游戏。但是在后续过程中发现与其他肉鸽游戏的“相似点”十分相似,没有自己的独立风格,玩起来也没有新鲜感。因此,我们创意性地引入了随机幸运房间,希望能给用户更多的刺激体验。
设计阶段
知识点:架构决策记录(ADR)
理解:我们开始记录重要的架构决策,包括上下文、决策内容和后果。这在后期当新成员加入或需要回顾决策时非常有用。
实现阶段
知识点:持续集成
理解:配置GitHub实现自动化构建和测试,大大减少了集成问题。每次推送代码都会触发构建,及早发现问题。
测试阶段
知识点:测试金字塔
理解:在贪吃蛇项目中,我们实践了测试金字塔原则—大量单元测试、适量集成测试、少量UI测试。这比全部依赖端到端测试更高效。
发布阶段
知识点:快速迭代
理解:在团队游戏发布后,我们必须要针对用户反馈来进行不停地迭代。
维护阶段
知识点:错误分类与优先级
理解:通过处理用户反馈,我们建立了错误分类系统,区分崩溃、功能错误和增强请求,并据此安排修复优先级。
项目经验与心得
个人项目
最大的收获是认识到良好的代码结构和测试的重要性。初期为了快速实现功能而忽视设计,后期修改变得异常困难。
结对编程(贪吃蛇)
- 实时交流的价值:两人一起解决问题比单独工作更高效,思路更开阔。
- 知识共享:通过结对,我学到了队友的编程技巧和解决问题的方法。
- 纪律性:因为有同伴监督,代码质量自然提高,更遵循规范。
团队项目(游戏开发)
- 沟通是关键:每日站会帮助我们保持同步,但也发现异步沟通文档同样重要。
- 角色分工:明确的前端/后端/测试分工提高了效率,但也需要适度轮换以避免知识孤岛。
- 迭代价值:看到游戏从一个简单原型逐步完善,深刻理解了增量开发的好处。
总结
这个学期的软件工程学习通过"做中学"的方式让我收获颇丰。从书本概念到实际项目,我不仅掌握了具体的技术和工具,更重要的是理解了软件开发的协作本质和工程化思维。虽然仍有许多需要改进和学习的地方,但这些实践经验为我未来的软件开发工作奠定了坚实基础。

浙公网安备 33010602011771号