本篇博客是对软件工程这门课一学期的总结。
问题博客:【软工】第一次阅读作业
一、回答问题
问题一:结对编程适合于所有项目吗?
其实现在回想起来,这应该是一个不太好的问题。通过老师的讲解,以及自己结对作业的经历来看,结对编程比较适合那种代码量不算多,但是对于逻辑、代码规范等方面要求比较高的项目。因为两个人同时编程在一定程度上会降低工作效率,所以比较适合那种一个人搞不定的情况。比如说团队项目这种分工比较琐碎的项目,结对编程的效果可能就不太好。所以,结对编程并不是适合所有项目。
问题二:代码规范
但是提出的问题是对于在头文件里定义全局变量是否是很业余的行为。在经历了结对编程和团队作业之后我认为,其实全局变量在一个项目里面是可以不存在的,可以通过多种方式来替换全局变量。同时,在我们的项目中,应该尽可能的避免使用全局变量,尤其是在一些和线程有关的项目中,因为不能保证其值的可靠性。所以,我认为,在头文件里定义全局变量是一种不太好的习惯。
问题三:goto语句的使用
关于“goto”无用论有很多说法,反对goto语句使用的主要原因在于使用之后便无法控制程序的运行逻辑(因为允许程序指令按任何顺序执行),这样无非会造成很多新的问题,所以现在我的答案是应该避免对goto语句的使用。
问题四:团队开发的模式
原问题:如上引用,团队开发的模式有如此之多,而且不同的模式适合不同的项目。既然有这么多模式存在,也就是说我们在开始一个项目之前,都需要根据我们的项目首先选择适合自己的模式吗?还是说团队开发模式只是一个抽象概念,用于后续的总结而不需要在开发前选择。
在经历了团队作业后,我觉得团队开发的模式其实是次要的。在一个团队内部,采用何种开发模式不重要,只要每个人各司其职,合理的分工,项目的进展自然会很快。
问题五:项目经理的作用是不是被夸大了?
项目经理在整个项目的开发过程中毫无疑问是其核心枢纽。在我们的团队项目中,PM需要做的事很多,包括我们项目需要实现的功能,项目规格文档的撰写,项目的发布说明,以及每次会议的总结,所以,结论是,其作用并没有被夸大,而是PM真的很重要。
问题六:创新和构思
提出这个问题的缘由是每届软工课做的那么多项目,其效果都蛮不错的,但是为啥最终发布的或者说被人所知道的项目不多呢?在经历了这学期的软工之后,我得出的结论是:时间不太充足。大三往往是大家比较忙的时候,保研考研或者出国的同学都开始准备了,所以可能不会有太多的时间来准备软工课程,所以对于后期的发布就不可能话费太多的时间,自然鲜为人知。
问题七:是选择冒险还是从众呢
现如今机器学习毫无疑问是计算机比较火热的一个方向,我当时比较迷惑的是如何选择自己的方向,但是如今我已经找到了自己的兴趣点,所以说这个问题已经不重要了。
二、新的问题
软件工程这门课的很多考核我觉得有点过于形式化了。比如说每日一次会议,期末考核不重点考察项目的代码质量以及实现方式是否科学而是考核用户数量等用户层面的东西,这对于一个才一两个月的学生项目来说感觉意义不是很大。当然这门课确实不太好考核,所以这个问题还是有待商榷吧。
三、学到的知识点
需求阶段
在如今的软件开发中,用户需求永远是第一需要考虑的事情。如果一个软件开发出来没人使用那么便是“不好”的项目。在这一阶段,我们小组在做过一些调研之后,学会了一些如何分析某个项目是否为当前用户所需的方法。这些方法支撑我们完成了我们的网站。
设计阶段
在我们的网站开发过程中,我的工作是后端开发,具体便是根据前端返回的数据生成对应的代码。这个工作从难度上来讲是不算大的,但是如果要符合软件工程的一些规范,自然需要下很大功夫。在alpha阶段,由于设计的不合理,导致后来的gamma阶段几乎重构了所有代码,所以我也懂得了设计的重要性。
实现阶段
在设计好了之后,实现其实是最简单的事情。这里就只需要考虑如何优雅的实现而不需要考虑其他的比如可扩展性什么的。在这个阶段,我的主要收获便是对github的熟悉程度又加深了一些。
测试阶段
我不是负责测试的,在这一阶段收获的主要是debug的一些方法吧。
发布阶段
我们的项目由于后期测试的缘故,发布时间比较赶。所以收获便是时间的合理安排吧,不要临时抱佛脚之类的。
维护阶段
在做好一个网站之后,主要工作便是维护了。虽然我们的开发工作结束了,但是我们小组还在继续完善我们的网站,毕竟是一个学期的成果,总还是希望她变得更好的。
四、理解和心得
这学期的软工我经历了结对编程和团队编程。
结对编程阶段,这感觉应该是这门课最耗时的阶段了。一开始我们两个人彼此的配合不太好,我们各自擅长的地方不太一样,所以走了很多弯路,导致后来的测试做得也不多,所以错了很多不该错的测试点。但是后来,随着时间的推移,结对编程的作用逐渐凸显出来,由于我们两个人平时是利用teamviewer来联系的,所以一个人在写代码的时候另一个人在看,这样的开发模式一开始我不太理解,但是慢慢的,突然觉得还是很有用的。也算是学会了一个新的开发模式。
在团队开发阶段,最大的收获便是懂得了设计的重要性,一个好的设计或许比实现更为重要,这也让我想起了大二在计组开发的时候高小鹏老师说过要认真设计,不要忙着写代码。同时,我也收获了关于github的使用规范。在小组成员的提醒下以及自己开发所需,不得不对github有所了解,这促使了我去学习有关知识。
最后则是关于这门课程,总的感受是老师助教都非常负责,课程的总体设计也是可以的,虽然感觉考核啊这些方法可以改改。这段经历应该会很难忘吧。