提问回顾与个人总结
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 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的工作有多么繁杂。
团队项目是我为数不多的几次团队合作开发,让我体会到在一个团队中,最重要的莫过于交流,项目进度、工作交接、任务分配等都离不开交流,良好的交流可以促进互相的效率,我想这也是我未来需要改进的一点。