[I.3] 个人作业:结课总结

软件工程学习回顾与总结

项目 内容
这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)
这个作业的要求在哪里 [[I.3] 个人作业:结课总结]([I.3] 个人作业:结课总结 - 作业 - 2025年春季软件工程(罗杰、任健) - 班级博客 - 博客园)
我在这个课程的目标是 学习软件工程的思想和方法,进行软件开发的实践
这个作业在哪个具体方面帮助我实现目标 回顾软件工程课程,理解课程意义、收获转化到今后实践

前言

经过一个学期的软件工程学习与实践,从最初的阅读提问到结对项目再到团队项目开发,我对软件工程有了更深入的理解。以下是我的学习回顾与总结。

问题回顾与解答

原始问题链接

[学期初阅读提问博客]([I.1] 个人作业:阅读和提问 - 郎赤娜 - 博客园)

软件工程问题深入分析与解答

1. 需求变更管理的有效实施与平衡

实践经验与解决方案

在团队项目中,我们采用了以下方法来应对需求变更:

  1. 变更领航员

    我们选取了两位领航Leader,对每个变更请求评估影响范围和优先级。

  2. "两阶段"决策法

    • 紧急需求:立即评估,若影响<2人天则当前迭代处理,否则放入下个迭代
    • 非紧急需求:放入需求池,定期评审

决策框架建议

当面临重大变更时,使用以下决策树:

  1. 该需求是否影响核心价值主张?是→优先处理
  2. 变更是否导致>30%代码重构?是→考虑分阶段实现
  3. 是否有临时解决方案?有→延迟到下一版本

2. 单元测试独立性与真实性的平衡

在本次团队迭代中,其实没有很好地实现测试。由于我们小组做的是游戏,更多的只是在玩游戏的过程中检查是否出现bug。

3. 单元测试 authorship 的最佳实践

基于实证的结论

在结对测试中,我们发现:

"测试伙伴"制度效果显著

  • 开发者编写70%基础测试用例(正常流程)
  • 指定另一位不参与开发的成员编写30%边界用例

在团队测试中,我们发现:

测试评审机制

graph TD A[开发者编写测试] --> B[提交PR] B --> C[测试伙伴进行测试] C --> D[团队评审测试覆盖率] D --> E[合并]

4. 需求优先级动态管理方法

经过验证的排序框架

在多次迭代中,我们优化出以下方法:

三维评估模型

  • 商业价值(1-10分)

    即展现在评审角度,对游戏的主观能有多少的提升

  • 实现成本(1-10分)

  • 技术风险(高/中/低)

5. MVP功能集科学确定方法

实证有效的决策流程

在团队的游戏开发中,我们的决策方法如下:

  1. Kano模型分析

    • 对每个功能进行用户调研,分类为:
      • 基本型需求(必须有)
      • 期望型需求(越多越好)
      • 兴奋型需求(惊喜因素)
  2. 价值流映射

    flowchart LR 用户痛点--> 核心价值主张 核心价值主张 --> 关键用户旅程 关键用户旅程 --> 必备功能点

新产生的问题

  1. 问题1:敏捷开发在实际项目中如何平衡灵活性与文档要求?
  2. 游戏开发中,如何平衡创意设计与工程约束?
  3. 自动化测试在游戏开发中的适用边界在哪里?

各阶段知识点学习

需求阶段

知识点:识别用户痛点
理解:我们游戏开发初期,只是想实现一款肉鸽游戏。但是在后续过程中发现与其他肉鸽游戏的“相似点”十分相似,没有自己的独立风格,玩起来也没有新鲜感。因此,我们创意性地引入了随机幸运房间,希望能给用户更多的刺激体验。

设计阶段

知识点:架构决策记录(ADR)
理解:我们开始记录重要的架构决策,包括上下文、决策内容和后果。这在后期当新成员加入或需要回顾决策时非常有用。

实现阶段

知识点:持续集成
理解:配置GitHub实现自动化构建和测试,大大减少了集成问题。每次推送代码都会触发构建,及早发现问题。

测试阶段

知识点:测试金字塔
理解:在贪吃蛇项目中,我们实践了测试金字塔原则—大量单元测试、适量集成测试、少量UI测试。这比全部依赖端到端测试更高效。

发布阶段

知识点:快速迭代
理解:在团队游戏发布后,我们必须要针对用户反馈来进行不停地迭代。

维护阶段

知识点:错误分类与优先级
理解:通过处理用户反馈,我们建立了错误分类系统,区分崩溃、功能错误和增强请求,并据此安排修复优先级。

项目经验与心得

个人项目

最大的收获是认识到良好的代码结构和测试的重要性。初期为了快速实现功能而忽视设计,后期修改变得异常困难。

结对编程(贪吃蛇)

  1. 实时交流的价值:两人一起解决问题比单独工作更高效,思路更开阔。
  2. 知识共享:通过结对,我学到了队友的编程技巧和解决问题的方法。
  3. 纪律性:因为有同伴监督,代码质量自然提高,更遵循规范。

团队项目(游戏开发)

  1. 沟通是关键:每日站会帮助我们保持同步,但也发现异步沟通文档同样重要。
  2. 角色分工:明确的前端/后端/测试分工提高了效率,但也需要适度轮换以避免知识孤岛。
  3. 迭代价值:看到游戏从一个简单原型逐步完善,深刻理解了增量开发的好处。

总结

这个学期的软件工程学习通过"做中学"的方式让我收获颇丰。从书本概念到实际项目,我不仅掌握了具体的技术和工具,更重要的是理解了软件开发的协作本质和工程化思维。虽然仍有许多需要改进和学习的地方,但这些实践经验为我未来的软件开发工作奠定了坚实基础。

posted @ 2025-06-21 21:59  郎赤娜  阅读(13)  评论(0)    收藏  举报