软工实践总结作业

  忽然间,说结束就结束了。

  明明是一直以来觉得头疼无比、时间占用巨大的这门课程,在结束的时候,却没有想象中的轻松,反而有一丝失落。

 

  1.课程总结:  


 

  翻开刚刚开课时写下的目标,字里行间读出的,半是憧憬,半是迷茫。计划中要做的,有一些没有完成:

    原打算学习java,最后却学习了一些php和mysql;

    想要学会更好的管理时间,熬夜的次数好像却更加频繁;

    原以为可以初步成长为一个合格的pm,但是回头看看自己做的好像也不怎么样..

  .当然,也有不少的收获:

    学会了一些软件的使用,例如原型开发软件Axure,类图样例图绘制软件star uml,还有js单元测试工具(虽然仅仅使用了一次),最重要的当然是版本管理工具git的使用,当然网页登不上一直是一个很头疼的问题,以至于一开始一直使用qq群进行文件管理,这个后面还会再说到;

    学习了一些php,主要是mysql和web开发方面;

    还学会了关于服务器的部署等...

  技能方面的收获主要是这些,还有一些更重要的心态方面的改变:

    首先,是要勇于学习新鲜的东西,很多时候,碰到问题总会想从已经掌握的能力去解决,因为这样比较省力,但是实际上,这样经常会导致很多能力没有得到应有的锻炼,而只是把时间浪费在重复劳动之上,不利于自己的能力提高;

    其次,碰到问题要尽快解决,拖延会使解决问题的成本不断上升,尤其是在团队开发的时候,问题可能导致的后果会更严重;

    最后,其实助教一直有提到一句话:无论如何,一定要坚持到底。在整个课程的过程中,会碰到很多各方面的困难,就算无法完成的很漂亮,至少要做到有始有终,任务完成的那一刻,无与伦比的成就感会告诉你一切都是值得的~

 

  2.项目历程:


  项目开发占据了实践课程的绝大部分,从最开始的结对编程,到后来的团队开发,不得不说,都是一段艰难而难忘的回忆。

  项目的开发过程收获了不少宝贵的经验,摘录其中一些印象比较深的例子:

    1. 教师报课时,如何处理报课记录和对应备注
      (为了方便说明,以下加引号的表示字段,如”备注“表示表头的备注字段,”报课情况“表示表头的 选择该门课 字段)
      在处理报课页面时,对于判断是否报课,我们采用的是不定长的数组来命名”报课情况“的name的方式,如图所

      这样处理的好处是,只要在后台获取class_select数组的值,就可以从数组的长度判断选中课程数量,不必采用遍历的方式来确定哪些课是被选中的,提高了处理效率;但是同时引入了一个新的问题  --  如何处理对应的备注呢?
           假设我们也采用和处理报课情况一样的方式来处理,那么可以获取到正确的”备注“数量,但是由于”备注“不是必填项,所以当出现 选了某一门课但是不写对应备注 的情况时(如上图),该方法将导致获取的报课记录和备注无法一一对应,那么所有的报课数据都要作废;

           如果我们采用逐行遍历来检查的方式,效率太低,一旦数据量扩大,处理速度将会非常慢;经过小组讨论,我们改变了思考的路线:”备注”的填写获取要依附于“报课情况“的填写,即”某一行的"报课记录"被选中时,获取相应的备注内容“,最终我们确定了以下方案:    
           step1.使用课程的id值作为”报课情况“的value值,由于报课情况只是一个多选框,它的value值并没有实际上的用途,所以我们把这个属性利用起来,作为”备注“的name值;
           step2.在后台利用数组获取所有的”报课情况“时,遍历数组,对于每一个值,(其实就是对应的”备注“的name),获取对应的value(这个就是对应报课情况的备注),这样就可以准确无误的把"报课情况"和"备注"一一对应,并且没有降低到原来的效率。
        简单的来说,就是在”报课情况”数组中存放对应备注的name;根据name再找对应的value;
        
    2. 账号密码字符串的空格处理问题
        
      这也算是我们时间过程中碰到比较经典的问题之一,由于采用的是客户提供的账号密码信息表,采用wps表格保存,在导入数据库后台的时候我们发现 导入的账号密码前面都多了一个空格;
      查了一下php的空格去除函数是trim(),但是使用之后却发现并没有效果;经过查找,又采用了正则表达式的方式mb_ereg_replace('^( | )+', '', $str);来解决问题, 后来经过学长的指导:
      可能因为wps的编码是GBK编码,我们看到不是半角空格而是全角空格,所以要按照以下步骤:
           

          (1).将GBK字符串转成 UTF-8,

          (2).将全角空格转成UTF-8

          (3).将替换后的字符串改成GBK

          (4).去除头尾空格

          (5).返回字符串

      这样才能完整的处理字符串问题;     

  还有一些错误是因为php语法基础不好而导致的,例如字符串匹配的时候使用了“==”而不是“===”,直接后果就是像“00012”这样的账号只需要输入“12”即可匹配,原因在于“==”只是值匹配,“===”是完全匹配,值和类型都要相等;还有在php mysql连接的时候,混用了mysql和mysqli两种连接方式和对应的函数;还有在alpha版本的时候没有对sql的结果进行为空判断,导致当查找的结果不存在的情况下会报错。

  再说说从团队合作里面收获的一些经验:

     1.站立时会议的时间宜设置在15分钟之内;首先,采取站立式会议的好处就是可以让开会的人能够更集中注意力,但是如果时间过长,成员会很疲惫,而每日任务的分配和总结本来就应该在15分钟内完成;为了更好的实现这种方式,可以采用一些措施辅助:组长提早拟定好今日会议的时间以及主要内容,让成员做好准备,以免把开会时间花在想内容上;在每日会议结束后及时总结当天的会议情况,有问题的及时改进;

     2.如果要进行项目冲刺,最好安排在连续的时间里。比如说任务要求冲刺7天,给的总时间是14天,那么最好安排连续3/4天的冲刺,而不是完全割裂成1~2天的多次冲刺,分割的次数越多,就要花越多的时间在回想之前的项目进度;

     3.在任务过程中如果碰到组员有任务无法完成,组长可以想办法调配人员协助完成,但是绝对不能拖延进度,一旦有了不好的开头,就很难达到预期的结果;

     4.每日的会议记录要写的简洁清晰,任务落实到具体的成员;

     5.最后谈一下关于github的使用。github是一个版本管理的工具,由于早期的认识和经验不足,只把它认为是一个像网盘、qq群一样的存储类工具,再加上访问github网页经常上不去,所以没有体会到它的优势,在beta版本中,由于助教老师的严格要求,不得不恶补了一下git的使用,现在已经习惯了使用git进行项目的迭代管理。相比于qq群文件,github最大的优势就在于版本的管理,我们在写项目过程中,肯定会有不断的更新和迭代,如果对于每天的修改都进行打包、封装、保存,一来工作量很大,二来无法直观看出各个文件之间的差异,而github不仅保留了从项目上传到结束的每个版本,而且可以看到每次修改和更新的内容备注,有了分支管理的功能,在团队开发的时候会更加方便,至于网页经常上不去的问题,我后来是采用软件翻墙的方法来解决,还有一个从同学那里得来的方法,如果锐捷上不去,可以连手机热点上去;git刚刚使用起来确实会有很多按难题,但是等到熟练以后就会感受其中的好处,就像游戏中的后期英雄,前期越累,后期越能拯救世界。

 

  3.写给后来的学弟学妹


 

    

    1.栋哥的软件工程相较于其他老师确实更累,而且会要求用博客记录每次任务的情况,安排在大三上这个课程紧密的不像话、并且全是专业课的学期里面,熬夜基本是躲不了的,但是收获也是肯定会有的。在选老师之前请慎重考虑自己的出发点,如果感觉自己掌控能力不强但是想好好学一些东西,那就选栋哥的课,如果选了,请无论如何坚持到底!

    2.软件工程课不会教编程!

     软件工程课不会教编程!

       软件工程课不会教编程!

     重要的事情说三遍,在这门课上,老师会介绍各种软件开发过程中的工具使用,但是也基本仅限于介绍,还是要靠自己去摸索,所以如果没有语言或者技术基础的同学,建议你们在组队的时候要认真一些,最好其中有一个人有一定的基础或者学习热情很足,这样到后面的项目开发的时候不至于太累,但是还是建议你们在这门课开始之前有一些相关的储备。

    3.刚开始一定要用git而不要用github for windows,git是命令行操作,github for windows是图形化界面,对于初学者来说,自然更倾向难度低的后者(我之前也是这样),但是使用git的过程会通过每一条命令加深对github的理解,前面提到了github对于初学者可能会有困难,而git就是不断熟悉这个过程的最好工具,github for windows对于在理解git方面没有多少帮助;其次,github for windows只适合简单的操作如commit、sync(其实就是push),如果碰到合并冲突、版本回退等问题的话,还是要用命令行来解决。git的教程有很多这里就不提供链接了,另:我的博客中有一篇关于git使用里常见问题的解决经验,希望也能对你们有帮助!

    4.还有一些团队项目经验请参考前文内容

    5.大三上的课程会很紧而且难度相对之前大很多(都是专业课,没有体育毛概马哲行测这一类);所以时间安排和目标取舍很重要,加油!

 

  4.对未来的期许


      1.虽然课程结束了,但是实践的项目并乜有达到自己的目标,还会继续修改下去;

  2.希望自己在接下来的日子里,会以更加积极的心态学习新的知识;

  3.在编码能力加强的同时,对于软件开发过程的各种思想理解会更深刻;

  

  5.最后的总结


  其实有些遗憾,本学期的软工实践课程没有很认真的去学习,特别是前几节关于各种工具的介绍和使用的时候,由于个人时间安排不合理,基本是应付过去的。

不管怎么说,万幸还是坚持走到了最后。

   

刚刚开始组队的时候还是穿着秋天的短袖;

  

到最后结束时已经穿上厚厚的冬装。

  从10月到12月,从金秋到寒冬,两个月的共同奋斗也培养了几个人之间的友情,话不多但认真细心的俊达,偶尔会迟到、善于攻坚、幽默搞笑的毓顺、认真学习又经常犯二的昆明,还有挂着组长之名却经常没有耐心、做事急躁的自己...几个性格各异的人,为了一个共同的目标一起开会讨论、一起熬夜加班、一起交流学习,这段难忘的回忆,将刻在宝贵的大学生涯里。We are the code.R!

  开学的时候栋哥说过一句话“靡不有初,鲜克有终”。能够坚持到底的同学都是好样的。一路走来,感谢栋哥每一次课程的认真规划,感谢助教老师的每一份博客的细致审核,以及提出的宝贵意见,感谢实践过程中同学的提醒和帮助,感谢一路走来、一直勤勤恳恳、完全配合、不闹情绪的队友。特别感谢一直提供技术帮助和解答的又帅又会写代码的伟鹏学长。

  软工实践之路就到这里,但是成为一名合格的程序员之路还有很长。

  靡不有初, 鲜克有终。

 

posted @ 2015-12-19 15:22 Mr-inlin 阅读(...) 评论(...) 编辑 收藏