提问回顾与个人总结

项目 内容
这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健)
这个作业的要求在哪里 提问回顾与个人总结
这个作业在哪个具体方面帮助我实现目标 回顾了软件工程及开发中的一些问题
其他参考文献 《构建之法——现代软件工程》
提问博客 个人博客作业

1. 对自己提出问题的解答及疑惑

关于写单元测试的人选

“代码的作者最了解代码的目的、特点和实现的局限性”这句话没错,但根据我的经验,代码作者往往很难用自己对代码的理解构造真实有效的测试用例。而且就算代码作者对代码进行了完备的测试,也只能保证代码在作者设想的环境下完成作者计划的功能,这不一定满足其他情况对代码的需求。我想这也是为什么我们在面向对象编程中设立了“互测”这一环节。

经过团队开发的洗礼,我认为单元测试还是应该由作者本人完成。我经历了转会过程,先后待了两个团队,在前一个团队是测试的角色,后一个团队作为后端开发的角色。

在给别人的代码写单元测试时,通常是没有方向的,只能写写正常状态下的功能测试,而对于代码的副作用没有了解,很难对异常情况下的代码进行测试;而给自己的代码写测试时就相对来说得心应手了,因为清楚自己的代码的短板,在写测试时知道要往哪方面去测。

关于如何保护创新

可以看到,在此时创新者仅仅是沦为了竞争者,当如书中所说,我们的创新被变成大路货的时候,我们还剩下什么竞争力呢。

又如书中所说,“大部分成功的创新者都不是先行者”,但先行者定义为这个领域乃至这个行业的第一人,是在更宽泛的意义上的创新,然而这种先行者往往被后来居上的产品打败。作为最初的创新者,我们应该如何保护自己的创新?

我现在认为或许保护创新这个想法不一定是好的,如果没有后来者,就意味着垄断,而垄断往往固步自封,造成整个行业的停滞。而“保护自己的创新”最好的方法,可能是不断地创新进步。

关于创新的顾虑

不考虑中文玩家的 WIIFM(What's in it for me),我的疑惑是为什么英文玩家在如此大的优势前都没有屈服。诚然,这与大众习惯的已经形成分不开。但根据我的经验,先入为主的规则往往只适用于先入者不劣于后来者的情况,比如国际标准单位制,因为没有人喜欢改变。但在这种情况下,我想真正的问题在于如何对大众讲清楚,让他们看见这个相对优势。

我仍存在这个疑惑,或者说是对原书观点的怀疑。如果大家能真正认识后来者的优势,考虑需要做出的改变,取代前者不是不可能的。

关于GOTO

这一点与我的经验矛盾。从开始学习编程起,"goto"一直是禁术一般的存在,无论是老师同学还是论坛上都建议不要使用"goto"。在我自己的编程经验里,goto除了打乱我的代码逻辑也并没有为我带来其他的好处。

但是书中的前提是“为了是函数有单一的出口”,我认为如果仅仅在这种情况下使用goto,应该不会造成代码紊乱。但实际的效益还是要在实践中证实。

我仍然认为goto不是应该被无脑禁止的,在不造成代码紊乱的情况下是可以合理使用的。

关于敏捷开发

上文提到了敏捷方法的优势,可以看到,其中“敏捷”指开发速度快,从而使整个开发过程有了字面意义上的“敏捷”。同时我们也可以发现,敏捷的优势都是针对“用户”而言的,体现在对于客户需求的响应变化迅速。

我的疑惑是,敏捷开发对于学习这门课程的我们有什么执行上的必要性。What's in it for us?

经过团队开发、结对项目的洗礼,我大概理解了敏捷开发课程的作用。要经历周期很短的开发阶段,又面临着实实在在的需求和技术栈,就必须具备较强的学习能力,及时更新自己的技术栈。这是敏捷开发课程教我的最重要的东西。

2. 在实践中学习

  • 需求阶段

    需求不是编的,而是去观察并发现的、实际存在的。

  • 设计阶段

    设计的好坏很大程度决定了后续开发的效率。

  • 实现阶段

    配合开发的情况下,交流比代码更重要。

  • 测试阶段

    单元测试最好由代码作者完成。

  • 发布阶段

    多做宣传。

  • 维护阶段

    认真对待用户的反馈,他们提供的是实实在在的改进建议。

3. 理解和心得

  • 个人项目

    个人项目是对软件工程的初体验,要一个人经历需求、设计、实现、测试阶段,了解了软件工程最基本的流程。

  • 结对项目

    结对项目是三个项目中我最喜欢的,因为目标明确,两个人交流起来更直接,更方便监督进度,互相提高对方的效率。

    在结对项目中,最重要的能力应该是学习能力,虽然任务不多,但还是涉及了很多以前没有接触过的技术,需要在很短的时间内完成学习、应用的过程。

  • 团队项目

    两个团队项目让我真正体会了软件工程中团队合作的完整流程,体会到了一个团队中的角色分工的重要性。需求、设计、实现、分布、发布、维护六个阶段都存在着详细的任务,都会切实的分配到每一个人身上,而这些工作都是由PM完成。可以想象PM的工作有多么繁杂。

    团队项目是我为数不多的几次团队合作开发,让我体会到在一个团队中,最重要的莫过于交流,项目进度、工作交接、任务分配等都离不开交流,良好的交流可以促进互相的效率,我想这也是我未来需要改进的一点。

posted @ 2020-06-17 17:32  真空快速吸  阅读(132)  评论(2编辑  收藏  举报