软工实践个人小结(已完成)

本文共6911字,如需完整阅读,约需15分钟

一、请回望暑假时的第一次作业,你对于软件工程课程的想象

  • 对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?

    • 所得
      1. 首先便是编码能力吧,现在已经可以完整的使用一个框架,去做一个轻量级的产品,对比当初订的目标,学好python和java,现在只能说java入门了吧。
      2. 会使用一些工具来提升工作的效率,例如processon之类的软件
      3. 写一些文档,开发手册之类的东西,磨刀不误砍柴工。
      4. 抗压能力和吃苦耐劳能力显著提升。
    • 不足
      1. 没有真正的体验一个合格的软件开发流程,团队协作存在问题。
      2. 想起来再补吧
  • 总结这门课程的实践总结和给你带来的提升,包括以下内容:

    1. 统计一下,你在这门软件工程实践中,完成了多少行的代码;

      估算的话,在个人项目和结对项目中花了约2000余行(含注释),在团队项目中约7000余行,其中后端Java约2800行,SQL语句约700行,前端JS约3500行,wxml约800行,其余的杂项约500行,总计约10000行。(含注释)(用个人项目统计,不含空行 PS:第二次作业)。虽然用代码衡量工作量是不可取的,但我还是想说,这学期的代码比之前几个学期加起来都要多!!!

    2. 软工实践的各次作业分别花了多少时间?(做一个列表)

      有些时间没有具体的统计,但必然是只多不少的。

      阶段 耗时(min)
      个人项目one 1955
      组队作业one 1495
      组队作业two 1760
      团队第二次作业 550
      项目UML设计 225
      团队第三次作业 690
      Alpha 冲刺(1/10) 310
      Alpha 冲刺(2/10) 410
      Alpha 冲刺(3/10) 380
      Alpha 冲刺(4/10) 340
      现场编程-抽奖系统 425
      Alpha 冲刺(5/10) 310
      Alpha 冲刺(6/10) 210
      Alpha 冲刺(7/10) 400
      Alpha 冲刺(8/10) 605
      Alpha 冲刺(9/10) 700
      Alpha 冲刺(10/10) 410
      Alpha 事后诸葛亮 175
      BETA 版冲刺前准备 60
      软件测试(团队) 260
      Beta冲刺 (1/7) 400
      Beta冲刺 (2/7) 550
      Beta冲刺 (3/7) 540
      Beta冲刺 (4/7) 390
      Beta冲刺 (5/7) 380
      Beta冲刺 (6/7) 400
      Beta冲刺 (7/7) 720
      Beta答辩总结 280
    3. 哪一次作业让你印象最深刻?为什么?

      应该是第二次作业,即个人项目之词频统计,在这次作业学到了很多,也踩了许多坑,虽然代码不难,但是开发规范却学到了很多,包括代码规范,面向对象,单元测试等等,可以说,第一次作业做得是最艰辛的,因为所有的都不会。看到一些大牛弄得那么厉害,而我却举步维艰,当时就有一种深深的挫败感。

    4. 累计花了多少个小时在软工实践上?平均每周花多少个小时?同时贴出开篇博客“你打算平均每周拿出多少个小时用在这门课上”的回答

      没有做很具体的统计,但300h是至少的,个人感觉应该在350左右,虽然代码不是软件的全部,但我这个学期的软件工程实践绝大多数时间都在coding,从个人项目到结对项目,再到团队项目,,感觉自己一直在敲代码,平均每周15h左右吧,后期冲刺爆肝的时候差不多可以到40h,可以说是很极限了。
      开篇博客

      • 在开篇博客中我并没有给出具体的回答,现在看来是正确的,因为当时给出的结果必然是天真可爱无邪的。
    5. 学习和使用的新软件;

      • VS2017(要吐槽的是,这个IDE好大啊)
      • Balsamiq Mockups(结对编程阶段时使用的原型设计软件)
      • 微信开发者工具(微信平台提供的开发小程序的IDE)
      • Eclipse(用的最多的Java开发工具)
      • MySQL(感觉比上学期的SQL server好用多了)
    6. 学习和使用的新工具;

      • Leangoo(燃尽图)
      • 有道云笔记(markdown博文的撰写)
      • Processon(uml设计)
      • GitHub
      • Tomcat(测试使用的服务器)
    7. 学习和掌握的新语言、新平台;

      • 新语言:wxml、wxss、js(小程序前端语言)、Java(后端数据处理)
      • 新平台:微信开发者工具
      • 新框架:springboot框架
    8. 学习和掌握的新方法;

      • 首先我觉得最主要就是完整的软件开发方法,尽管我们某些地方做的不足,或没有去做,但总体来说,基本流程都已大致掌握,或许以后还有机会吧。
      • 学习了几门语言来完整的使用一个框架,我认为这是本学期最有价值的收获之一。
      • 服务器的部署(PS:吐槽下,9.9的腾讯云的单核服务器用起来想吐,感觉在用上古世纪的电脑),域名申请,证书配置,整个流程都基本掌握。
      • 还要说的话就是一些开发细节方面的了,比如测试啊,代码规范,文档撰写等等,这里便不再细说,可以归为第一点。
    9. 其他方面的提升。

      • 团队协作方面已经有些许经验了。
      • 学会利用现成的资源去解决问题,有时候百度谷歌五分钟能解决的事情,自己慢慢调慢慢试可能五十分钟也解决不了(血的教训)
      • 感觉自己更心平气和了,慢慢偏向佛系。
      • 对deadline有了更明确的认识。
      • 别问,问就是增加了吃苦耐劳和抗压能力,冲就vans了。

二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析

  • 还是谈一谈团队项目吧,列举一下踩过的坑

    1. 对于项目开发的流程不熟,团队里没有任何有开发经验的人,拿到项目不知如何下手,导致前五个Alpha几乎没有任何成果,基本上处于“我等你教我,而你也在等我”的尴尬局面,后来慢慢的学习一些开发教程,看看官方文档,mooc之类的,才渐渐把框架搭起来。

    2. 对于前端估计不足,因为我们的项目主打办公,属于堆功能的一个小程序,并且建立在微信平台,类似于网页的开发,所以页面是非常多的,最终的版本(已经删减合并了许多页面),仍有27个页面,而我们之分配的两个前端,导致我们在Alpha版本无法拿出可以看的成果,当然也是因为这个原因,我也基本掌握了小程序的前端开发。

    3. 对于域名,服务器,证书等认识不足,因为微信小程序的特殊性,如果想要发布的话,则必须使用https访问并且域名通过icp备案,这边基本上也是我做的,说实话也走了很多弯路,首先不知道如何配置证书,就这么一个很简单的东西,却花了我数十个小时,其次,配置服务器,单核的服务器真的用起来好难受,这里就吐槽下吧,最后,备案,这是最大的一个坑,我们错误的以为备案很简单,后来才发现,备案如此之麻烦,导致我们在beta答辩总结的时候,备案初审还没审核完毕,为了赶在最终答辩前将项目发布,我和组长分别备案,最终还是赶了出来(还是阿里云效率高啊,腾讯云还要幕布,差评)

    4. 微信发布审核,显然的,这也是一个极大的坑(当然是由于我们没有事先了解好开发文档,这个锅我背了),由于我们是个人小程序,所以不允许包含投票功能,信息发布功能,类漂流瓶功能,所以第一次审核没到10个小时就被打回来了,于是我考虑能不能这样:在后端控制一个变量,审核的时候设为1,前端的wxml对于这个变量进行判断,如果为1,则隐藏敏感内容,为0则显示,审核通过后在从后端改回来。显然的,这个小伎俩是瞒不过腾讯爸爸的,没到1天就被打回来了。第三次,老老实实删代码(心疼啊,都是自己亲手打出来的),在删了一大片代码后,嗯,这次给过了,但是变残疾了。按柯老板说的话就是:曲线救国失败。

三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,对于同期的TA们,对于后来的学弟学妹:

  1. 你有什么想建议、告知和期许想要告诉他们呢?

    • 首先便要明确以下几点
      • 谁能做什么
      • 谁做不了什么
      • 谁愿意做什么
      • 谁不愿意做什么
    • 其次对于项目
      • 明确好目标,要做什么,好做吗,能在自己尽全力下完成吗。如果不切实际,建议换题。
    • 期待
      • 希望你们做出来的产品可以值得一赞,另外,我现在觉得一个完整的开发流程才是最重要的,产品倒是其次。
    • 暂时先这么多,想起来再补。
  2. 特别地,特别地,下一届要不要中途换队员(强制的、彻底的从一队换到另一队)?
    假设依旧是一个90+人数的大班

    个人认为没有必要。首先以UML的现场实践为例,虽然部分被调到其他组的人完成的也较还不错,但毕竟外组人员不了解转入组的情况,会导致效率很低,体验较差。尽管看起来很新奇。

  3. 身在一个格外大的班级,竞争强劲,你认为一个组的人数应当在多少比较合适?

    我觉得一个组的人数控制在5人左右相对合适,相对的紧凑且任务分配也会比较明确,没有必要对文档编写呀制作ppt呀这类没有什么锻炼性的工作分配人员,软工实践到底是一门实践编程的课程,参与其中却没有涉及代码层面的工作我觉得多少有一点点缺乏锻炼了。

  4. 个人/结对/团队作业应该控制在怎样的规模?

    个人觉得5-6人是比较合适的人数,其中三个后端,两个前端,一个PM兼职美工等,人多了难以协同,并增加交流与任务分工分配的成本,且无法保证每个人都能完整的参与这门实践课(真心话)。

  5. 这学期下来,你最感谢的人是谁?有什么话想要对TA说呢?

    感谢自己和并肩作战过的队友,感觉真挺不容易,在这个团队里,没有人教,都是靠自学,从前端到后端,从本地测试再到服务器配置,曾经一度想放弃,后来还是扛住了。(PS:“这谁顶得住啊!”->“不知道我能不能顶得住。”->"顶不住也得给我顶!")

四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)

  1. 萌芽:确立一个项目的立题,大家各自谈谈自己的idea,依据可行性与创新点去评估选取最好的议题。
    这个是必经之路,万物始于萌芽,
  2. 磨合:说实话,我认为这个阶段是最重要也是最难熬的,团队里基本上都没有开发经验,很多人编码能力几乎为0(包括我),曾一度想放弃,也是在这个阶段,大家都学到了很多东西,配合也更加默契,可以说,我们团队在这个阶段待了很久。
  3. 规范:这个阶段组内大致的人员都非常的熟络、交流就非常的多。有什么问题直说,异议点可以及时的去讨论解决。同时编程过程中就会有规范性的要求提出,类似命名的规范规则、必要的注释、文档的编写等等,这些都很好的起到了互相帮助的目的,可供查阅,可供阅读,具有引导的作用。这一阶段也是对目前开发进度的明确,基本的开发结果有了一个直观可描述的形象出现。我们团队基本上达到了这个阶段。
  4. 创造:很遗憾,还未达到。

五、怎样证明你学会了软件工程?

  1. 研发出符合用户需求的软件
    emmm,应该算是了吧,尽管只有120的用户量,还是凑出来的。

  2. 通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
    从编写到测试再到发布,我们历经了好几个迭代的过程,中间通过沟通交流也是修修补补,最终展示的也是后续在既有功能版本上的删减版(个人版开发权限为了配合微信小程序发布的审核问题,导致几乎近半数的功能砍掉才得以上线)

  3. 并且通过数据展现软件是可以维护和继续发展的。
    在github上可以搜索到我们项目WeEdit的源码,完全开源共享,欢迎下载并提出建议或意见,谢谢

  4. 对着这个检查表:http://xinz.cnblogs.com/p/3852177.html 检查一下,自己如果去企业面试,这些常见的问题是否都能回答,并在此总结。

类别 具体技能和面试问题 现在的回答
语言 最拿手的计算机语言之一,代码量多少?(偏web前端,PC/Mobile App) JS 3500行左右
语言 最拿手的计算机语言之二,代码量多少?(偏后端,数据处理,网站后台,机器学习,等) Java 5000行左右
软件实现 (阅读代码的能力,实现,单元测试)你有没有在别人代码的基础上改进,你是怎么读懂别人的代码的,你采取了什么办法来保证你的新功能不会影响原来的功能?你在开中碰到最复杂的bug是什么,你是如何解决的?这个bug出现的原因是什么,你在将来应该怎么去避免bug再出现? 有过,比如说各种实验(编译原理,操作系统等等)看别人的代码还是面向对象的思想吧,先看主函数,知道它的流程是什么,再看具体的类实现,了解他究竟是怎么运行的。改代码的话也是面向对象,加类减类这样吧,感觉口头说不大清楚。感觉没有碰到过很复杂的bug,即便有时候一个bug弄了很久,其实也只是很简单的一个东西,谈不上bug,只是自己疏忽罢了,绝大多数问题都可以通过百度谷歌解决。留存文档吧,但目前还没有养成这个习惯。
软件测试 (测试方法、测试工具、测试实践、代码覆盖率)你如何测试你自己写的代码?你如何测试别人的代码?你掌握了多少种测试工具和方法?你写过测试工具?你如何对一个网站进行压力测试和效能测试?你如何测试一个软件的人机界面(UX/UI)? 一直都是自己写@test,只用过vs和eclipse,更深度的测试方法没有使用过,还没有尝试过对网页进行压力测试,可以通过一切云平台委托测试。目前还没做过,但据了解,可以通过以下几点:①一致性测试,用户操作与机器响应是否一致;②信息反馈测试,机器如何响应用户的各种操作(正确、错误、其他),比如错误提示框;③用户的动作捕捉测试等等
效能分析 效能分析,效能改进,你写过的最复杂的代码是什么?你是如何测量和改进它的效能的,用了什么工具,如何分析的? 暂时还没有过类似的改进工作。
需求分析 (需求分析,典型用户,场景,创新)你做过多少个有实际用户的项目,用户最多有多少?你的项目有什么创新的地方? 只有软工这次的项目,通过微信后台测试,共120个用户量,其实感觉也没啥创新:硬要说的话:1.借助微信小程序平台实现,保证基础用户量 2.采用git的形式对文章进行修改和反馈 3.链式功能,一体化。
行业洞察力 你最感兴趣的领域是什么?这个领域过去10年经历了哪些创新?你分析过这个领域前10名产品?请分析一下他们的优劣,你要进入这个领域,应该如何创新? 对PC硬件方面较感兴趣,在开篇博客里也有提到过,家里也有人在这方面从事工作,但这对我来说也只是兴趣而已,兴趣绝大多数情况下不能当饭吃。
项目管理 你参与过项目管理么?请描述一下两个当下流行的开发方法在你的项目中的具体应用情况;请问你如何决定项目中各种任务的优先次序,有什么理论来支持你的做法如果你突然发现项目不能按时完成,你作为项目领导,有什么办法? 没有,暂时无法回答。
软件设计 你做过架构设计,模块化设计,接口设计么?请说明一下你为何是这样设计,你比较过什么不同的设计方式,你的设计取得了什么结果? 接触过接口设计,使得代码明确,减少了不必要的冗余。其他还未使用,无法进行比较。
质量意识 (代码复审/代码规范/代码质量)你是怎么做代码复审的,你加入我们团队后,能帮我们提高代码质量么,请具体说怎么提高? 我的复审仅仅是对代码的功能进行测试,并将其中不合理和不规范的地方进行相应的修改(如果发现了的话)。如果可以的话,还是按照理论课学到的来吧。
工具/社区 Software Tools (performance tool, version control, work item, TFS)你在各种开发平台(web,linux,PC,mobile,machine learning)都使用过什么样的工具,自己写过什么工具来改进工作效率?给社区贡过什么工具和代码?Github有分享代码么?你写的技术博客坚持了多久,读者最多的是哪一篇? 用的最多的还是eclipse和vs,没有写过工具来改进效率,代码也没有贡献过,GitHub只在这次的软工实践中使用过,包含本次实践的所有代码,还没有写过相关的技术博客。
团队协作 work with others(协同工作,提供反馈,说服别人)请描述你在项目中何说服同伴采用你提出的更好的解决方案,或者你如何听取了别人的意见,改进了自己的方案?你如何说服懒情的同伴加紧工作,实现团队的目标? 如果是我的话,用数据说话显然是比较好的选择,如果它的确实比我好或者反之,我必然是倾向于指标好的那一方的,在这方面还是要理性的。碰到懒惰的队友,我只能去催,别无他法,你永远叫不醒一个装睡的人。
理论素养 你上过什么数学,计算机或其他理论课,请举出具体的例子,说明你学到的理论知识如何帮助你解决实际问题。 高等数学、线性代数、离散数学、算法与结构、面向对象与程序设计等等,还真想不出来有什么解决实际问题了,硬要说一个的话,那便是柯总说的潜移默化了吧,为什么要学组成原理,为什么要学操作系统,以后都用不到,为什么要学,那就是个人知识素养的问题了。
自我管理 全年级你专业排名多少?你从刚入学(大学一年级) 到现在的排名有变化么?目前32/55,emmmm变化挺大的,当然了,一直在下滑。我是转专业的,本来在原专业是6/180这样,但转过来后,成绩下滑较严重,原因比较多,当然最主要的原因是还是我个人懈怠了吧,不狡辩。

六*(选做)、阅读软件工程中关于代码质量的的经典论文,从下列文献中选择一篇或若干篇,结合自己的实际做一个阅读笔记(例如,自己写的代码质量如何,是不是一个大泥球,如何衡量自己代码的质量)?从以下参考论文中选择一篇或若干篇:

参考论文文献:

[1] Stamelos I, Angelis L, Oikonomou A, et al. Code quality analysis in open source software development[J]. Information Systems Journal, 2002, 12(1): 43-60.

[2] Boehm B W, Brown J R, Lipow M. Quantitative evaluation of software quality[C]//Proceedings of the 2nd international conference on Software engineering. IEEE Computer Society Press, 1976: 592-605

[3] Samoladas I, Stamelos I, Angelis L, et al. Open source software development should strive for even greater code maintainability[J]. Communications of the ACM, 2004, 47(10): 83-87

先放着吧,也许找个时间会做了。

七、个性发挥,包括图文、照片和创意等

回想一下当初团队个人一句话宣言——原文地址点我

  • 风格:一个很懒很佛系很随缘的人
  • 擅长的技术:会敲一些C/C++的代码,python学过一点点,Java目前还在自学
  • 编程的兴趣:至于编程的兴趣,好像还没找到,可能是我技术还不到家吧
  • 希望的软工角色:软工角色方面,就当一个编码人员吧(即便我的代码敲得很烂)
  • 一句话宣言:希望这学期过后我不再会说出上面的话/斜眼笑!

当初的一句话宣言是:

希望这学期过后我不再会说出上面的话/斜眼笑!

其中上面的话:

会敲一些C/C++的代码,python学过一点点,Java目前还在自学

至于编程的兴趣,好像还没找到,可能是我技术还不到家吧

软工角色方面,就当一个编码人员吧(即便我的代码敲得很烂)

即便到目前为止还脱离不了上述的事实,但自我感觉进步许多,不会去自我贬低自己。可以用Not bad就不要用very pool!

最后的最后,安利下我们的产品吧,微信搜索WeEdit小程序,
尽管不是那么的好用,存在一些bug,被砍掉了一大半的功能,但是Not bad啦!

就这样吧,总结告一段落,感谢您的阅读!

posted @ 2019-01-06 13:30  金色玉米YC  阅读(231)  评论(1编辑  收藏  举报