【软件工程】提问回顾与个人总结

项目 内容
课程 2020春季计算机学院软件工程(罗杰 任建)
作业要求 提问回顾与个人总结作业要求
个人博客作业连接 个人博客作业
我的课程目标 掌握软件开发的方法论和诸多技术,与同学合作开发出好的软件。
本次作业的作用 回顾以往提出的问题,总结学期收获。

一、对学期初问题的解答

· 问题:单元测试的编写者

当时提出这个问题是觉得由于编码者自身思维不周全而导致的bug不容易被本人发现。然而,在实际的软件开发过程中大部分时候不会涉及过于复杂的算法。实现一个典型的软件功能(如对元素的增删改查)所涉及到的算法难度并不大,但是却横跨了前后端,在“横向”上比较广。而在快节奏的开发中,其他组员往往不能对某项功能的代码了解得十分细致,因此由作者对自己编写的代码进行测试是最合适且高效的。当然,如果某项核心业务的确设计到复杂算法,那么还是值得为它专门投入更多人力去测试。

· 问题:goto&异常处理

在软件开发中,关键是要保持各部分代码的可读性和代码习惯的一致性。在实际开发中,我们会编写文档对代码加以规范。goto的自由的确可能导致代码变得不好理解,但是在大多数简单逻辑下并不会造成太大影响,有时反而能使逻辑更清晰。异常处理也是一样,关键在于以统一的方式进行处理。

· 问题:why agile?Sprint过程中需求的变化

经过一个学期的体会,敏捷开发的方式的确是十分高效的。即便是对编程语言尚不熟悉的情况下,每天的SCRUM Meeting上也可以专门抽时间请教经验丰富的同学,或者形成临时的二人结对小组,通过观看的方式快速入门。上手开发后,如果在某个技术问题上遇到很大的困难,也可以及时调整策略选择其他路径。

纵观现在的应用软件市场,几乎所有APP都在以几天或一周为周期高速迭代,随时解决着新问题与新需求。这也是因为如上提到的,当软件已经大体成型时,解决一个已发现的问题,或是面临一个新需求时,所要做出的改动或增量开发并不会太多。当然,有时也确实会遇到任务量很重的情况,比如一个游戏公司发现他们现有的引擎已经无法满足玩家对画质的需求,决定更换引擎。而一次Sprint的时长也是根据预估的任务量而定,核心便在于以最快的时间完成新功能。

· 问题:创新的迷思

现在回看书中的观点,感到非常认同。首先,作为软工新人,最应该关注技术上是否熟练,能否快速写出“足够好”的代码。那些最终实现了创新的高手,大多都是从小就熟练掌握了技术。其次,创新并不仅仅局限于技术,当今很多非常成功的软件在一开始并没有基于太深奥的技术,而是能敏锐地发掘的人们的需求,并在背后实现了商业模式的创新。创新本身并非目的,关键还是在于解决实际问题。

二、软工知识点总结

  • 需求分析阶段

    • NABCD需求分析框架。
    • 在分析过程中形成UML图作为需求分析阶段的最终输出。
  • 设计

    • FDD功能驱动的设计。
    • 由于我们组是在以往代码的基础上进行增量开发,更加适合这种设计模式。基于需求构建出新功能,并分派至各个成员,是我们小组的典型工作方式。
  • 实现

    • 源代码管理平台GitHub的使用。
    • 在开发过程中挖掘了GitHub如Issue管理、Commit与Issue之间的关联等功能。
  • 测试

    • 验收测试。
    • 在基本完成两个阶段的开发后,交由测试同学进行一次完整的测试并针对问题创建新Issue。验收测试中往往能发现一些各模块之间关联性的问题。
  • 发布

    • 从用户的角度审视。
    • 在Alpha阶段发布前的展示中,罗老师提出让我们从用户的角度审视平台,这给我们带来很大的启发,发现了很多跳转不够合理以及功能设计不够人性化的问题。在Beta阶段解决了大部分问题。
  • 维护

    • 收集用户反馈。
    • 发布之后积极关注用户反馈,除了能快速解决一些暂时的问题(如服务器问题),也是提炼下一阶段开发任务的机会。

三、心得体会

软工课程的每一个阶段都带给我非常深刻的感触和收获。

个人项目时我经历了一次比较大的算法改动。由于美赛占据了很多时间,以及对C++尚不熟练,临近最后发现扫描线算法难以完成,而当时又没有形成一个可用版本,因此十分焦急,连夜换回了最基础的算法。这次经历给了我很好的教训,当对基本内容尚不熟悉时,不应想着一次实现较难的算法,而是应先着重于整体架构的设计与实现,并快速完成一个可用版本。然后再对其分析、优化。这样在节奏上更加稳定。

在结对项目中我主要负责后端新功能的实现以及优化。在这个过程中,我充分关注了C++不同数据结构背后的实现方法。第一次在实践中体会到算法与数据结构之间密不可分的联系。的确,竞速的要求会在一定程度上给人压力,然而伴随着时间精力的投入,一定能有所收获。毕竟使你的程序更快是实实在在的知识。在我最终向队友交付成果的时候,他指出我应该打开VSCode自带的编译优化选项,这一下子又使程序的执行快了一大截。一方面,共享知识使我收获了一个实用技巧。另外从技术的角度讲,优化的确应该考虑整个过程中的每一个环节(核心是性能瓶颈的分析)。

而团队项目是我第一次与一个集体协作开发。每天繁多的学习、开发任务的确让我感到许多压力。然而在队友的耐心指导下,这种压力便完全转化成动力。在团队开发过程中组员在技术上互相帮助,之间的友谊也更进一步。我们小组在合作模式上经历了多次转变,从最开始适合入门的小组结伴模式,到每人都能独立完成新功能的开发。良好的合作模式使得每位同学的优点被最大化为团队所用,每位成员都做出了不可替代的贡献。

本学期的软工课使我感到非常充实。

你可能感兴趣的:(【软件工程】提问回顾与个人总结)