[I.3] 个人作业:结课总结
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2025年春季软件工程(罗杰、任健) |
| 这个作业的要求在哪里 | [I.3] 个人作业:结课总结 |
| 我在这个课程的目标是 | 学习软件工程知识和软件开发中的通用方法,提升实际项目开发的能力,参与从需求分析、设计、编码、测试到维护的完整软件开发流程,并完成一个完整、实用、好用的软件 |
| 这个作业在哪个具体方面帮助我实现目标 | 反思、总结一学期的学习收获与体会,明确一学期的所得 |
提问博客链接
曾经提出的问题
1.敏捷开发中的“适应性”是否意味着需要接受任意的需求改动?
- 曾经的困惑:敏捷开发中若要接受需求的“任意”改动,可能会导致项目没有稳定的方向,带来软件质量的变化
- 实践后的解答:我们认为,在软件开发的过程中,最合适的做法是定期设置一个窗口期,来接纳和反馈用户的意见,对于用户的意见,经过讨论后再决定如何修改。这样,既能做到及时与用户沟通,又能减少软件开发中的不确定性。实际开发中,过于频繁的需求变更也往往容易导致程序员手忙脚乱,也降低团队的士气与信心。
2.如何更好地与客户和最终用户合作?
- 曾经的困惑:客户往往并不知道自己想要什么,提出的需求是模糊的甚至错误的,由此带来一系列矛盾,如何处理这些矛盾?
- 实践后的解答:软件工程团队不仅要学会理解客户,与客户保持紧密沟通,还要学会引导客户,帮助客户明确他们的需求。团队应该对功能的细节特点与客户多加推敲,确定客户的真正需求,让客户明确“我想干什么”,也让开发者明确“我要干什么”,这样才能让双方都满意发布出来的产品,也让软件开发过程更清晰高效。对于客户需求之间的矛盾,对于同一客户提出的需求之间的矛盾,优先满足后提出的需求,或者与客户再次沟通;对于不同的客户需求之间的矛盾,优先满足多数客户的需求。
3.用户体验(UX)和功能在软件开发中的优先级?
- 曾经的困惑:核磁共振机通过牺牲成像质量、改进患者检查体验,获得了成功,但应该如何在用户体验和功能中权衡呢?
- 实践后的解答:在不明显影响功能的前提下,用户的体验是更重要的。一个使用卡顿、交互逻辑不合理或者页面简陋的软件,往往不如一个使用流畅、交互清晰且页面美观的软件更易得人心。软件的根本在服务用户,降低一些功能强度以换取用户体验的提升,对软件的成功是十分有利的。可以在产品开发早期,着重开发功能逻辑,确保功能的正确性和性能;在后期,根据用户反馈,着重优化用户界面和UX。
4.是否应该使用 goto 语句?
- 曾经的困惑:书中认为可以使用 goto 语句,而 goto 语句似乎是上大学以来一直不提倡使用的。
- 实践后的解答:我认为在软件开发中还是尽量不要使用 goto 语句,因为高级编程语言已经设计得十分完备,没有必须使用 goto 语句的场景;其次,随处可见的 goto 会极大提高代码逻辑的复杂性、混乱性,降低代码的可读性与可维护性,提升软件出错的概率,因此在开发过程中,还应避免使用 goto 语句这一已经过时的用法。
5.回归测试中,基准样例是否会随着代码不断迭代变得过于庞大?
- 曾经的困惑:书中认为应该进行回归测试,即每一次成功的测试,都能得到该软件功能的一个基准线。但这就意味着每次测试的用例都要保存,随着时间的推移,测试用例集会越来越庞大,这是否会影响测试的效率?
- 实践后的解答:我们认为仍然应该进行充分的回归测试,但可以采取一些避免影响测试效率的方法。例如,在测试用例逐渐变得过于庞大时,只保留一个同质的测试用例,尤其是对于那些经过反复测试没有问题,且比较确定新加入的功能不会影响的原功能;还可以采取如微软等公司采用的实践方法,即事先分析代码变动会影响的功能,只挑选相应的测试用例进行测试。
实践中学到的知识点
需求分析
需求分析应该以用户为中心,站在用户的角度上考虑问题,同时多与用户交流,密切与用户的联系。
架构设计
架构设计应当充分考虑功能实现、性能和扩展性,这三个因素缺一不可,才能设计出既有强大功能,又有长期发展空间的软件。
代码实现
代码实现应该在整个软件团队中保持一致的代码风格;同时代码实现应当尽量解耦合。
软件测试
软件测试应当在开发过程中就逐步进行,而不是全部堆积到开发完成后,做到单元测试和集成测试结合。
产品发布
产品发布要结合产品的主要受众,考虑合适的发布渠道;同时在发布后,应该及时收听用户的反馈。
产品维护
产品维护过程中要注意在优化现有功能的基础上,不引入新的 bug ,同时一定要保持代码的可维护性。
理解与心得
在结对编程中,我感受到了极限编程方法带来的高效性,以及与队友轮流互换角色,在“驾驶”与“领航”两种角色中共同推进项目的崭新体验,锻炼了我在短时间内进行代码编写的能力和代码审查的能力;在团队项目中,我感受到一个多人团队为一个共同的软件目标而奋斗是一件充实而有意义的事,用一个学期将我们三年来所学过的知识化作一个完整的软件产品,给了我很多收获。在代码能力方面,学到了一些新的技术栈,并提升了自己代码管理工具的使用能力;在团队合作方面,学会了如何与团队合作、按照团队的进度开发一个软件,学会了沟通与交流;在软件开发方面,学会了一个软件开发的完整流程,以及需要的各种人员组成、不同岗位的职责等。本课程是我们利用软件工程知识进行软件开发实践的绝佳平台。

浙公网安备 33010602011771号