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

项目 内容
这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)
这个作业的要求在哪里 [I.3] 个人作业:结课总结
我在这个课程的目标是 学习软件工程知识,通过团队协作开发一个具备实际应用价值的软件,从需求分析、设计、开发到测试和部署,完整经历软件开发生命周期,提高工程实践能力。
这个作业在哪个具体方面帮助我实现目标 总结这学期软件工程课学到的内容,并对学期初提出的几个问题作出回答

提问题博客链接

[I.1] 个人作业:阅读和提问

解答自己曾经提出的问题

问题一:如何在保持封装性的前提下测试私有方法?

经过一学期的代码实践后,我认为通过测试公有方法来间接覆盖私有方法的执行路径,是最符合封装思想也最现实的解决办法。
但如果私有方法非常复杂,说明它可能承担了过多职责。此时可以使用重构技巧,将其提取为一个独立的类或工具函数,这样就可以对它进行单独测试。
最后,在一些编程语言,如Python中,可以通过反射或命名约定(如_method())访问私有方法用于测试。虽然违背了一点封装性,但在测试环境中适度放宽是可接受的。

问题二:结对编程中如何进行合理的角色分工与合作效率?

我在小组项目中尝试每30–60分钟或每个子任务轮换一次角色(驾驶员/领航员),这样可以防止一个人主导全局、另一个人沦为打字员。
同时,在课上结对开发中,我们会评估双方在哪些语言/框架上更熟,然后根据任务进行有意识分配,让初学者尝试驾驶员角色,由领航员提供支持和补充。
此外,在团队组建时,我们就可以通过技能图谱或偏好来组合结对人选,尽量让两人之间有技能交集,但也有更多的互补。

问题三:实践中对敏捷开发方式的选择是否真的“敏捷”?

经过阅读与团队开发的实践,我认为一个比较好的实践是从“轻”到“重”,渐进引入敏捷的方式,例如使用燃尽图或两周一次迭代等基础实践,逐渐适配团队再引入复杂流程。
同时我们经过与团队的合作实践发现,团队共识比“标准流程”更重要,我们通过团队会议和回顾来评估流程是否好用,不拘泥于某种方法论。

问题四:SCRUM、MSF等方法对团队的自组织与跨职能协作是否要求过高?

首先,在团队的实践中我们发现,SCRUM和MSF是理想目标,但可以分阶段达成:例如初期由PM布置任务,后期让成员主动拉取任务,或初期需求收集由队长主导而后期团队共同与客户交流,
其次,有管理不等于不敏捷:《Scrum Guide》其实并未排斥“管理”,只是强调“团队对如何完成工作拥有主导权”。即便是在层级管理的组织中,也可以采用敏捷实践:如每日例会、自主计划、迭代回顾,这些并不与“考核制度”冲突。
最后,在经历完结对编程的实践后,我认为结对编程中可以嵌入SCRUM/MSF思想:领航员角色就像是MSF的“监督者”,驾驶员实施计划是MSF的“执行者”,通过不断对结对方式和学习成果进行总结、改进提升团队效率。

问题五:在实际项目中的用户设计里,该如何展示软件的各种功能才能满足差异化的需求?

我们在开发产品的实践中经过一番摸索,最后认为“合理的默认设置+灵活配置”是确实是比较好的答案。
即,初始界面简单,满足80%用户,然后高级功能通过额外设置开启,同时在配置文件或命令行保留开发者/专家通道

在项目各阶段中,我分别学到了什么知识点?

需求阶段

我们在一开始去调查了同学们对于我们理想中的产品的偏好与需求,并深入比较目前竞品中的不足,以此来确定我们要面向的用户群体以及要满足的需求是什么。我在这个过程中学到了一个好的用户群体调查可以让产品在设计初期就明确定位,精准化功能的设计与实现。

设计阶段

我们在项目结构架构设计时将项目的各个模块进行了解耦,每一块都尽可能独立开发与调试。这让我学习到了复杂软件项目设计时的要点,简单、清晰的分层设计能使各个部分的实现与相互沟通事半功倍。

实现阶段

我们在实现阶段设置了持续集成的工具,能够自动检查代码的流程,只要提交代码,系统就会自动帮我们检查是否符合规范。这避免了代码合并时的大部分冲突以及不统一的实现造成的bug,节省了大量时间。

测试阶段

在测试阶段,前后端开发人员会提前对接口的细节进行充分沟通,明确每个接口应返回的内容及其格式。通过在开发前达成一致的约定,双方可以按照统一标准进行开发,从而有效避免因理解偏差导致的问题。

发布阶段

在系统发布时,我们采用了渐进式上线策略,而非一次性全面替换。具体做法是先将新版本推送给一小部分用户进行试用,通过观察其运行情况来评估稳定性,确认无明显问题后再逐步扩展到全体用户。这种方式有效降低了系统刚上线就出现故障的风险,保障了整体服务的稳定性。

维护阶段

在维护更新过程中,我们深入理解了Git分支管理、回滚机制、合并策略的重要性,以及如何处理多人协作时的冲突和上线发布的流程。经历了修改或修复旧代码的过程,我们体会到良好的代码结构、清晰的命名、合理的注释、模块化设计对后期维护的极大帮助。

课程心得

这学期的软件工程课让我第一次完整地参与了一个真正的软件开发项目,从一开始的需求调研,到后来的设计、编码、测试、发布、维护,每一个阶段都踩过坑,也有收获。以前觉得写代码就是敲功能,这次才真正体会到团队协作、流程管理的重要性。比如结对编程、敏捷开发、接口约定这些以前只在书上看过的概念,现在都在实践中感受到了它们的价值。最有成就感的是看到自己参与的产品从无到有,真的被别人用起来,那一刻觉得之前付出的努力都有了价值。这门课让我认为开发软件不再只是写程序,而是更像打磨一件艺术品,很累,但也很满足。

posted @ 2025-06-20 17:08  cxccxc  阅读(14)  评论(0)    收藏  举报