提问回顾与个人总结
提问回顾与个人总结
写在前面:
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020年春季计算机学院软件工程(罗杰 任建) |
这个作业的要求在哪里 | 提问回顾与个人总结 |
教学班级 | 005 |
个人博客链接 | https://www.cnblogs.com/black-watch/p/12421083.html |
请尝试对自己曾经提出的问题进行解答,并阐明,是如何通过看书,实践,或者讨论弄清楚的。
1. 单元测试必须由最熟悉代码的人(程序的作者)来写?
原先,我不是很赞同这个观点,我认为单元测试应该由单独的另一个(批)人来写,这其中不能让代码原作者参与其中。
在软件工程课程作业完成过程中,我负责的是前端网页部分的编写,发现我原先的观点是有问题的,让一个没有接触过我的代码的人来写测试是非常异想天开的,因为他可能根本不知道这段代码运行的逻辑,又谈何测试?
所以,单元测试还是应该由代码作者本人来写,这样既可以在写的过程中再次回顾自己写代码时的心路历程,又可以对代码逻辑进行全面而充分的检测;至于以前提到的除了语法、粗心编码造成的问题外,诸如一些架构或性能上的“BUG”,这是前期架构没有做好,不是测试应该解决的问题。
2. 我们是否应该像工程师那样做?
对此,我认为我们应该学习工程师,但是也要清楚自己的学习任务,在不耽误学习任务的情况下尽量向工程师靠拢。
在写代码中,工程师追求效率,追求完善;但是我们是学生,只要不是在一些及其特殊的情况下,像是在一些一般的课程作业中,我们应该以学习、理解知识为主,而不必追求性能、效率上的尽善尽美。
3. 如何在软件开发过程中保持开放-封闭原则?
我所能想到的解决方案就是,在前期进行充分调研,充分理解当前的需求,潜在的需求以及可能的需求。在设计代码结构的时,将这些因素都考虑进去,这样一来,只要前期调研足够充分、全面,那就可以准确预测下一步需求,进而实现代码的开放-封闭原则也就不是那么困难了。
这也从另一方面说明,软件工程中,需求分析、调研占据大量的时间并不是做做样子,更多的是为了未来的迭代开发做准备。
4. 结对编程果真效率高吗?
经过软件工程课程的结对编程实践,我发现,结对编程是一个长期、持久的过程,如果只是偶尔来一次,那自然是效率不高。但是如果能坚持一个星期以上,效率就会得到很大的提高,由于随时随地的代码复审,代码产出的质量也有保证。
5. 如何选择创新?
我之前提出的反例是哥白尼提出日心说的超时代例子。
其实,回过头来看,我这个例子是有失偏颇的,毕竟不是谁都有能力提出超越时代的观点的。我现在想来,创新应当是想到别人没想到的,或者先一步想到别人没想到的,多一个数学问题提出一种新的解法、对一个英文单词有自己独特的理解,这都是创新;而不是要像日心说、相对论那样的才叫创新。
是否原来的问题还不明白?如果有,请分析。
无。
是否产生了新的问题?如果有,请提出。
1. 前后端分离如何协调?
在团队作业完成中,我们采用了前后端分离的模式开发,但是分离之后有一些问题,诸如后端API产能不足,导致前端进度拖慢、或者前后端对需求的理解出现偏颇导致PI实现差异、后端API出现BUG等待修复却耽误了前端进度等。
在这样的情况下,我们应当如何协调呢?
软件工程这门学问有很多 “知识点”, 这门课强调 “做中学” - 在实践中学习知识点。
- 请问你们在项目的 需求/设计/实现/测试/发布/维护阶段(一共6 个阶段)中都学到了什么“知识点”,每个阶段只要说明一个知识点即可。
-
需求分析阶段
在这个阶段我学到了如何通过调研分析,准确地将用户的功能需求、性能需求、可靠性需求等具体的需求,从非形式化表达进行形式化的定义表述,进而确定代码系统的架构、过程等。
-
产品设计阶段
在这个阶段中,我了解到,产品设计要考虑多方面的因素,包括但不限于社会与自然因素(是否考虑到环境保护、是否考虑到当地的生活习性等)、技术因素(技术上是否能够实现等)、审美因素(是否符合用户的审美观念等)、人的因素(是否考虑到了人机协调等)。
一项成功的设计,应满足多方面的要求。这些要求,有社会发展方面的,有产品功能产品功能、质量、效益方面的,也有使用要求或制造工艺要求。
-
功能实现
在这个阶段,最直接的就是学会了如何进行网页开发,学会了HTML、CSS、JS的网页模式,并且学会了使用React框架进行前端网页的开发。
-
产品测试
在这个阶段中我深刻认识到,只对一个产品进行设计而不对它进行测试是及其不负责任的行为。产品的设计者(可以是PM、开发人员等),但是设计者一定要参与到,并且要深入参与到产品的测试工作中,否则可能会导致测试不够完善。
-
产品发布
在这个阶段,我了解到发布应该在预定的日期之前做好准备,不好等到发布当天才开始“发布”,尤其是那种需要审核的产品,我们必须预留充足的时间来进行审核、缓冲。
-
产品维护
在这个阶段,我认识到了产品结构设计的重要性,对于需要在维护阶段新增功能、更改功能的情况,尤其重要,如果没有前期充分的调研、合理的设计,维护阶段会很难受,甚至可能需要重构;而这样做的代价是难以承受的。
结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得。
我曾经以为程序就是软件,软件就是程序。学习这门课程第一个收获是,知道了二者的不同之处;我想,也是程序的不断复杂,导致了软件危机,进而促进了软件工程的产生。
开发软件就像解决一个一般的数学问题(但是周期更长、过程更复杂),首先想想自己这个程序是哪方面的,需要做些什么;然后构造核心思路,想出一种或者多种构造、实现方法,选择最合适的一种;接下来进行各个功能模块的开发和调试;最后测试验证。并且这些过程是循环往复的,不是单向流程,在迭代中升华自己的代码和自己的编程能力。
这门课程的作业很多,课下一半的时间都在写软件工程课程的作业,但是经过个人、结对、团队编程的经历,我对软件工程理解更加深入,这不是死读书就能理解的,感谢这门课让我真实地体验了软件开发的流程。