软件工程终期总结

前言

一个学期,两轮迭代的软工、数据库课程设计、编译课程设计,还有一些有的没有的小项目。彷佛这四个月的时间彻底付诸于开发了。天天工做小时数是两位数,总计上万行的代码量,这一个有一个数字无一不在帮助咱们提升这本身的编程水平和开发能力。
或许是时候作一个总结了,总结一下一个学期下来的收获,也会为一下这一段时间以来的艰辛与快乐。html

两阶段开发总结

通过一个学期的努力,咱们的项目完成了M1和M2两个开发阶段,发布了alpha和beta两个版本,其中alpha版本实现了主要功能,二在beta版本的开发过程当中,因为须要多组间合做,所以咱们对上一个版本进行了重构。从环境搭建,到新技术的学习,再到代码实现,进而测试、发布,咱们经历了重重困难才最终发布出来这个网站。
与其说是总结,不如说我更想谈一谈在开发阶段出现的想法。
首先让我印象最深入的是M2的重构。在M2阶段,咱们为了和客户端组公用后端,咱们把本来的使用跳转的网站改形成了单页应用,其中引入了ReactJS。又一次引入新的框架,这显然让咱们感受到有点吃不消。新的框架采用了数据单向流动的思想,造成了本身独有的一套体系,直接限制了jQuery的使用,致使大量的代码须要修改才能使用。为此咱们讨论了好久。可是通过一段时间的努力,咱们的代码成功迁移,新的框架顺利部署,这让咱们的信心大增。
让我印象最深的第二点在时间的分配。在M2开发阶段,咱们同时要完成软工开发、数据库课设开发、编译课设的后期编码工做。几个大型工程同步开发,已经不知足系统的可调度性,那么要怎么作?刷夜!一周刷夜两天三天已经成为了一种常态,天天3点前想睡更是天方夜谭。天天的时间几等分,分别作不一样的事情,坚定不浪费其中的每一点时间。通过很长一段时间的努力,我如今终于能够说,咱们撑过来了,咱们胜利了。这让我想到了真是软件开发中的发布前几天,若是此时真的没有完成工做,或是测试未经过,那么要怎么作?
Scrum Meeting,这是咱们开发过程当中天天或每两天都要进行的活动。每次Meeting事后,咱们都会汇总工做进度,实现开发过程当中人员的动态调配。这也多亏了咱们有一个全栈工程师才能实现这样的调动。如今开发结束了,大概咱们也只剩下最后一次Scrum Meeting做为庆功宴了吧。
经历了两轮迭代的开发,我对软件工程中的不少观点有了更深的印象,对不少问题也有了新的见解。前端

问题整理

曾经的问题

传送门:戳我进入数据库

1.软件工程是一个在不断发展的方法学,随着时间在不断变化。那么咱们如今学习的方法是否会被替代?若是会,缘由是什么?

答:软件工程中的方法确实是在不断发展的,可是这个发展并不意味着完全的推翻。咱们在作项目的过程当中,M1和M2阶段进行了两次重构,由于咱们发现就在咱们开发的过程当中,已经有新的设计思想产生。可是重构并不意味着咱们须要彻底推翻已有的成果,而是修改掉与新的思想不符合的部分。软件工程亦是如此。新的思想产生势必会对老的思想产生冲击,可是二者存在的主要仍是共性,所以能够说新的思想只是旧思想和方法的发展,并不会在很短期内完全颠覆。长远上讲,即便经过不少次思想和方法的演化,就得方法学消失的无影无踪,可是这其中的发展也是值得学习的,更况且咱们不可能在如此长的一段时间以内彻底不进行开发。再者言之,不一样的方法针对不一样类型的问题,所以方法之间想要真正实现彻底的替代也是不现实的。编程

2.书中写,团队须要有明确的分工。可是对于咱们这样的小团队,甚至是更小的团队,没法作到平均的分工,是否还应该有按照职责的明确的分工?

答:分工是要有的,即便并不能作到均分。撇开集市模式不提,对于一个任务型项目,分工显得尤其重要。咱们都知道责任分散效应,若是一个任务没有明确指定完成者,那么全部人都不会采起行动,致使的直接结果就是项目不能完成。所以为了咱们能顺利完成一个可靠的项目,分工是必须的。次之,分工有利于加快项目的完成进度,在咱们进行项目的过程当中就有体会。咱们的项目先后端均使用了较为复杂的框架,框架的学习成本自己较高,若是不进行分工,每一个人都接触全部的框架,那么项目进度将一拖再拖,完成的日期就无法预期了。可是对于小团队,我认为分工不必定须要很是明确,能够采用根据需求和实际开发进度调整的方式,动态调整,维护总体该法进度平衡。后端

3.既然短时间刺激和长期影响并统一,那么在开发时怎样衡量和评估软件的前景?

软件需求能够分为多个层次:新鲜感、基本功能需求、特殊功能需求。新鲜感是指一个软件在发布事后能够吸引到的第一批用户所须要的资本,是咱们能从表面上给别人留下的印象。基本功能需求是指基本全部使用用户都会使用的功能,若是咱们连基本的功能需求都没有,那么必然不能留住用户。特殊功能需求是指咱们有二别人没有的功能,软件须要靠知足特殊功能需求来从其余同类产品中吸引用户并留住用户。一个咱们在软件功能设计的时候也须要考虑这几点。新鲜感主要依靠前端实现,须要前端有足够的吸引力。基本功能能够仿照其余网站实现。特殊功能是咱们设计中着重考虑的部分,所以咱们加入了不少本身的设计。一个软件的前景并不能很好估量,可是经过作到以上几点至少能保证不会很快的被排挤出市场。架构

4.为提高用户的第一印象,不少软件选择减小开启界面的复杂度,可是这样会掩盖不少软件的功能和特色。对于这一矛盾应如何抉择?

暂未解决。咱们致力于经过显而易见的方式让用户能够发现咱们的功能,虽然不在主页面上显示,可是从主页面找到任何功能的操做都不会很是复杂。框架

5.敏捷开发中,尽早持续交付是一个基本原则,而十五章又讲须要渐进发布,这两者应该分别用于什么场景?

尽早交付和按部就班并无矛盾。尽早交付只是意味着交付一个可使用的版本,而渐进交付意味着不断添加功能。就像Windows10的更新方式,每次添加额外的功能而不是直接发布新版本。这种方式能够实现尽量早的给用户他们指望的功能,用户也必定会根据先用功能决定是否继续进行项目,这是一个相互促进的过程。学习

6.若是开发过程当中,用户的需求出现了较大变化,应选择重构代码,仍是在现有基础上修改?

暂未解决。咱们没有改动需求,只进行过两次重构,其中第二次是需求出现了较少变化。可是每次重构的工做量都不小。若是是需求发生较大变更,恐怕会不得不重构,是否能承担这样的风险就不得而知了。测试

7.书中对绩效的评定方式阐述的很含糊,没有给出一个能够量化的方式。在现实中绩效是如何考察的?

对于绩效的评定,没有一个肯定的方法,不一样类型的团队能够采用不一样的方法。咱们曾选用时间工做量综合量化加奖惩机制的方法。这种方法在开发过程当中虽然起到了必定的激励做用,可是必然是不公平的。绩效的存在自己就是为了鼓励成员高效高质量完成工做,所以只要能达到这个目的,任何方式都是能够的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~请叫我分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~网站

产生的新问题

1.当开发不能正常完成时,咱们应采起什么样的措施?
2.在多组合做进行开发时,若是已经设计好接口,某一方发现须要额外的数据或须要调整接口设计,是否应当联系其余组进行修改?
3.在工做量难以预估的时候应怎样设计开发计划和进行人员分配?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~我也叫分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

软件工程收获体会

软件工程是一门实践性课程,在课程的实践过程当中,我体会到了不少仅仅经过上课所得不到的东西。我还将其中的一些思想带入到数据库课设和编译课设的编码过程,发现确实对编码效率和质量有很大提升。如下是我感觉最为深入的几点:

1.结对编程

结对编程是我在这个学期体会最深的东西。在数据库课设开发的过程当中,体会尤其明显。结对编程的核心思想在于一我的写代码,一我的指到思想,同时指正代码中出现的失误或错误。在一我的编程时,因为手误致使的错误频发,这类错误难于调试,老是出如今很是隐蔽的位置,在debug的过程当中老是会花费大量的时间。在结对编程的模式下,因为引入了一个一直在关注屏幕而不是键盘的人,这类错误的出现几率明显下降。除此之外,结对编程还有利于发现逻辑上设计的失误,有利于一遍写出高质量的代码。

2.架构和设计的重要性

编码速度和质量会对一个软件最终成型的效果产生较大影响,可是这个影响远远不及前期的架构选择和设计。咱们在M1阶段使用了Semantic UI + Django的架构,在第二阶段为了实现单页应用又引入了React JS。这一套架构的选择直接为咱们省去了不少基础性功能实现的编码时间。
软件结构的设计也是十分重要的。在咱们的开发过程当中,最重要的就是数据的传递。咱们拥有大量的数据,这些数据要在多组之间共享。所以咱们须要制定好接口,肯定哪些数据在前端处理,哪些数据在后端处理。M1阶段咱们没有清楚地划分界限,在M2阶段就不得不进行重构,从新定义接口规范,修改先后端的中间件和数据处理模块。

3.软件开发的六个阶段中的知识点

软件开发分为六个阶段,需求/设计/实现/测试/发布/维护。

  • 分析:结构化需求分析和面向对象需求分析,两者相互辅助,共同决定一个软件的设计功能需求。
  • 设计阶段:软件结构设计、数据格式设计、接口设计共同决定了软件的流程,在每一个流程中还要设计各个过程从而真正实现一个软件。设计是要遵循高内聚、低耦合的设计思想。
  • 实现阶段:能够采用结对编程的形式提升编程效率。每一处代码须要有单元模块测试,迁入时须要进行复审。
  • 测试阶段:主要测试模块间的耦合关系。能够选用人工测试的方法,也可使用脚本测试。背刺软件从新编译后,都须要进行回归测试来保证没有破坏更改前的功能。测试能够选择白盒测试、灰盒测试或黑盒测试,可是须要尽可能保证覆盖代码段中的每一条语句。
  • 发布阶段:软件正式上线。此后须要不断收集用户反馈的信息,维护软件功能,修复bug。
  • 维护阶段:维护阶段持续时间最长,维护的成本很高。因此在实现阶段就须要考虑到可维护性,不能滚泥球!
相关文章
相关标签/搜索