天天看点

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

一、提问回顾

  在学期刚开始的时候,我们阅读了邹欣老师的《构建之法》这本书,对其中不太理解的地方提出了几个问题,当时提出的问题在博客: 【软件工程】第1次个人作业 。问题如下:

  1. 如何选择专和精?需要结合哪些方面考虑?

   我在当时认为不应该只结合自身情况考虑专和精的方向,也应该结合当前时代的热点领域和科技的发展状况等等,但现在看来是像书中所说的那样优先考虑自身情况。如果盲目的去学习和专精社会的热门领域,比如目前大数据和人工智能比较热门,但是计算机领域的技术变革是相当快的,这样盲目的追求热门领域是不切实际的。而是应该结合自身的情况,发现自己的优点长处和缺点弱势,再结合自身的兴趣来决定未来的专精领域,这样才能让个人的能力得到更好的发展和进步。

  2. 最好的编程语言是否存在?

  说实话,现在这个问题我也不太清楚答案。不同的编程语言都有自己的长处和弱点,在某些特定情况下,某个语言能发挥出更好的作用而已。但是对于同一个任务,如果任何编程语言都能解决问题,但是对于某个人来说比较熟练某个特定的语言,那么这个语言对这个人来说就是最好的编程语言。所以书中说,最好的编程语言是一个意见,并不是事实。

  3. 结对编程中角色互换是否有必要?

  在没有进行结对作业之前,我认为角色互换是没有必要的,因为一旦熟悉了一个位置的工作,那么互换工作会造成不必要的麻烦,例如重新熟悉当前角色的任务,熟悉对方的代码等等。但是在实际进行过结对编程之后,我发现了角色互换的重要性。一是更好地全面地发现编程过程中的不足之处,如果从头到尾一直处于同一个角度,那么是很难发现问题的存在的;另外一点是可以缓解开发人员的压力,如果开发工作都是由一个人完成,那么压力无疑是巨大的,容易造成观察力和判断力的大幅度下降而造成不可避免的后果。事先设定好代码规范和代码注释等要求,就可以避免熟悉代码这个过程。

  4. goto的作用?

  助教在之前的博客中已帮助我解答了这个问题,goto是一种语言习惯,目的是为了实现不同代码间的灵活跳动,但是缺点在于加入了goto后代码会变得更加复杂而难以读懂,所以一般情况下不推荐使用goto函数。

  5. 如果结合建模和代码实现?

  在这学期没有经历过团队开发之前,我认为建模的工作和代码实现的工作都是由一个人独立完成的,所以工作量巨大,难以很好地衔接和实现。但是在团队开发过程中,建模的过程是由PM来完成的,因为PM需要把握项目的目标和功能,因此在开发过程中,我们是由PM来设定模型,反馈给前端和后端来进行开发和代码实现,同时设定好规格和接口文档,因此巨大的任务量分配到每个人身上就不是很重了。这样既能够很好地衔接建模和代码实现功能,又能够更好地节省时间。

  6. 为何在学校没有接触到创新理念相关的课程?

  问出这个问题来,确实是没有参与过团队工程的开发。创新对于一个开发团队来说是至关重要的,但是创新理念是无法教给一个人的,在团队开发过程中,我深刻意识到,创新理念的出现往往来源于例会和brain storm,是需要团队每个人参与的。一个人的智力和精力是有极限的,但是一个团队的人在一起思考和努力,会起到1+1>3的效果,从而出现很有创新意义的点子。

二、在项目的需求/设计/实现/测试/发布/维护阶段都学到的“知识点”

  1. 需求阶段

  在需求阶段,我认识到光是理论上考虑用户的需求是不够的,更多的应该是深入进行调查,比如问卷调查的形式,来听取用户们的需求和建议。我们小组通过问卷调查和反馈得到了不少极其有用的建议。

  2. 设计阶段

  设计阶段给我的最深的体验就是,一定要花大量的时间和精力在这上面,不然在开发过程必然会遇到不少问题。一个项目或者产品在拥有良好设计的基础上,才能够更好的扩展和开发,否则可能会遇到需要重新设计的问题。

  3. 实现阶段

  PM虽然没有参与到开发实现阶段,但是其作用也是十分重要的,比如把控进度。实现阶段的进度必须是按时推进的,这样才能给开发人员时间去深入测试产品的各方面。同时实现阶段如果出现了问题,必须沟通团队成员马上解决,如果一个bug搁置,可能会起连锁反应产生更多的bug,这就得不偿失了。

  4. 测试阶段

  在团队开发过程中,测试这个部分教给我的就是:单元测试一定要紧跟实现阶段。在开发人员完成一个阶段的代码任务时,测试人员需要同步进行单元测试,一是为了立刻发现代码中存在的问题,而是为了后续的整体测试留出足够的时间。如果都累到一周的时间完成,那么工作量太过于巨大。

  5. 发布阶段

  明确发布前的目标,也就是必须实现哪些功能才能发布。在设计功能时,我们小组设定了几个需要完成功能的优先级,优先级高的任务,要么是核心功能,要么是极大提高用户体验的功能,因此优先实现。在发布前,必须先将这些主要任务完成,同时测试必须不出现问题,这样才能去发布产品。

  6. 维护阶段

  可能很多人认为开发测试发布后,就没有任务了。这是明显错误的想法,维护阶段也是极其重要的,最基本需要做到的是规格文档、接口的维护,其次比如我们的项目是网站,那么服务器维护也是必须的。我们团队在beta阶段开发过程中,服务器被黑导致用户数据丢失,一方面是因为前端开发人员在设置时未考虑周全,另外一方面也是没有做好项目的维护。因此维护阶段不能懈怠,更应该注重。

三、软件工程心得体会

  在这门课开始以前,其实是不太明白软件工程能教给我们什么知识,因为计组、OO这些课程把大部分知识已经传授给我们了,但是经过一个学期的学习之后,才发现软工这门课的魅力。经历过结对作业以后,我们对软件的开发过程和结对的好处有了一定的了解,在团队开发的过程中,我和我的队友们更是一起努力,做出了一个visual pytorch的网站。这种从无到到有,经过团队协作,共同努力,各抒己见的过程,最后完成一件事的成就感是无与伦比的。这个过程中,我们的默契逐渐提高,我们的项目逐渐完善,大脑的知识得到了充实,也提高了责任心。虽然这门课也有一些不足的地方,比如强制换小组成员,不过相信会越来越好。