福大软工 · 最终作业 - 软件工程实践总结(个人)
一、请回望暑假时的第一次作业,你对于软件工程课程的想象
-
对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
1.了解一个应用需要的步骤,包括需要的前端UI、后端数据库、以及逻辑层js和服务器整体使用需要,通过项目答辩需要,找了好多好多的ppt模板和psd图片,进一步提高了自己的审美能力和photoshop的基本能力;
2. 感受到了团队合作的重要性之大,分工合作真的特别重要,有信赖的队友做起事情来真的是事倍功半呀,完全不在怕的,然后就是全组几乎全是转专业的同学,所以交流起来同感特别特别特别特别多!!大家都深有同感,这也是意想不到的特别大的收获;
3. 与团队成功完成一个比较成熟的预期项目,并成功发布了微信小程序的个人版本,发布成功的那一刻,满足感油然而生哈哈哈哈,父爱大发;
4. 对于我个人而言,学习到了新的语言,python自学了解了一点、同时更掌握了html和微信小程序后台程序开发编辑语言,学会了“不懂就去各博客找”;
5. 项目有部分功能还未能够全部实现,所以有些小小的失落,但是对比整体的效果来说,还是挺ok的; 项目后期还可以考虑与队友进行参加一些创新创业大赛,感受一下大赛答辩的氛围;
6.在本次软件工程实践中,其实让我相对比较初步地了解以后的就业方向以及目前的就业前景,开始会选择和制定自己近年来的人生规划,也意识到了学历的重要性,重新更新了自己之前的一些不太成熟的想法,重新审视重新规划不断调整。
-
总结这门课程的实践总结和给你带来的提升,包括以下内容:
-
统计一下,你在这门软件工程实践中,完成了多少行的代码;
Emmm,算上个人作业、组队作业、团队作业,还有最后的微信小程序(小程序里面的wxss后期为了和微信尽量统一和规范,所以有的就直接拿过来套用了),大概应该也许差不多有8000+行吧。
-
软工实践的各次作业分别花了多少时间?(做一个列表)
阶段 耗时(min) 第一次作业 100 第二次作业 300 结对项目1 1050 结对项目2 300 团队展示 250 团队作业2 240 团队作业3 300 团队作业4 200 Alpha 冲刺(1/10) 120 Alpha 冲刺(2/10) 200 Alpha 冲刺(3/10) 210 Alpha 冲刺(4/10) 220 现场编程-抽奖系统 300 Alpha 冲刺(5/10) 420 Alpha 冲刺(6/10) 360 Alpha 冲刺(7/10) 200 Alpha 冲刺(8/10) 420 Alpha 冲刺(9/10) 300 Alpha 冲刺(10/10) 420 Alpha 事后诸葛亮 350 BETA 版冲刺前准备 350 软件测试(团队) 125 Beta冲刺 (1/7) 510 Beta冲刺 (2/7) 400 Beta冲刺(3/7) 388 Beta冲刺 (4/7) 520 Beta冲刺 (5/7) 360 Beta冲刺 (6/7) 500 Beta冲刺 (7/7) 460 Beta答辩总结 550 -
哪一次作业让你印象最深刻?为什么?
Emmmm,最让我印象深刻的还是近期对《福大助手APP》的测评,在这个测评作业中,当天晚上大概从7点就开始写APP的产品对比以及找BUG,找到一个BUG就开心一下,找到两个就开心两下,然后写文,大概到了10点左右吧,开始挑选ppt,因为这段时间刚好在做学院的年终总结ppt,哈哈哈,所以模板就刚好用上来了,然后做这个ppt呀,实在也是没那么好做,要提的点有点多呀,而且材料有点不全,所以…当天晚上就一直做到了3点半+.然后第二天7点50起来,4个小时的睡眠,那个累啊!还不如直接通宵……(这段话是在期末考前写的,现在期末考过了,我要更新一下,4个小时的睡眠,跟通宵还是有差别的!!!四个小时还是很舒适的0.0)
-
累计花了多少个小时在软工实践上?平均每周花多少个小时?同时贴出开篇博客“你打算平均每周拿出多少个小时用在这门课上”的回答
累积花了近200个小时在软工实践上,平均每周应该有15个小时,因为我有点拖延症,然后因为有这这个Alpha版本和Beta版本的规则,所以就一丝不苟地监督着我——>今天更新小程序,通常是晚上7点开始做,然后坐到12点,睡觉,第二天晚上6点准时提交博客心得和更新燃尽图,渐渐地,每天18:10手机的闹钟自然提醒......对比开篇博客里面哈哈哈哈,发现我这个人还是很“谨慎行事”的哈哈哈哈,不过讲真自己当时是觉得一周大概花个5小时再加上周六上午的实践课足够了......我觉得我成熟了好多好多好多呀!!!
- 学习和使用新软件;
- 微信web程序开发工具(团队项目)
- Github(作业以及团队进程)
- Hbuilder(抽奖系统作业)
- VS2017(个人作业)
- 学习和使用的新工具;
- Adobe After Effects(处理图形视频)
- ProcessOn(在线绘图,UML以及流程图等设计)
- Adobe Premiere(编辑图形以及视频界面)
- Leangoo(日常计划和更新跟进进程)
- 学习和掌握的新语言、新平台:
- 新语言:C#、python、Html、以及微信小程序对应的语言(wxss、wxml、js、json等)
- 新平台:微信web开发者工具
- 学习和掌握的新方法:
-
网上现有的资源和论坛有很多,有不懂的地方可以先百度搜索一下;
-
- 其他方面的提升。
- 不怕再自学新知识了,因为会发现,会与不会只差有没有逼自己一把了!
- 团队意识有了很大的提升,懂得了之后就业也是需要如此,团队协作。
-
二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
- 总结与反思:
- 其实总结与反思的重要性主要是从这件事中每天提交Alpha版本和Beta版本这两个阶段主要总结出来的,真的通过每天记录一下自己做了些什么,做得怎么样,然后接下去准备怎么做,对于自己接下去的执行力会有很大很大的提升,另外,通过总结也使自己比较放心,完成任务后,就可以开开心心玩,相反,如果一个任务没有好好完成,后补缺补漏的东西就会越来越多。
- 换位思考:
- 其实我一直觉得换位思考是特别重要的,尤其是在一个团队当中,如果每个人都只考虑到自己的利益,只觉得自己比别人做得多然后就不甘心这点肯定是不行的,其实在实践课过程中“换队员”这一件事情中,就很能体现“换位思考”这个观点,在原来的队员走之后,我们的任务和进度会受到什么影响显然就特别明显。所以应该多站在其他同学的角度上思考问题,在任务分配后就应当先完成好自己的那一部分,有问题的地方在提出,以团队总体利益优先的基本,不要太计较个人目前所得,得学会团队优先原则。
- 服从与配合:
- 在团队合作中,我觉得服从安排是特别需要的,包括一定的威信力也是必不可少的,团队总得需要有一个“头”来把握方向,鼓舞人心!另外在日常合作中,应当尽力服从安排,有问题私底下提出,保持队长一定的威信力,提高团队整体的协作力。
- 不轻易认输:
- 其实这一点对于我们小组后期特别重要呀!!!在Alpha版本演示上,项目没做出来,进度缓慢,对比其他小组真的是差好多好多好多好多呀!不过因为“不服输”这一点,所以大家就一起白天做、熬夜做,相互鼓励,勉励自己,逼着自己不懂就去百度,再不懂就去问,反正就是要做出来,坚持一定要做出来,并相信自己不比别人差的信念,最后我们就坚持下来了,在Beta演示上“突飞猛进”哈哈哈哈哈哈哈,最终的结果其实还是比较欣慰的,感触很深!
三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,对于同期的TA们,对于后来的学弟学妹:
-
你有什么想建议、告知和期许想要告诉他们呢?
付出与收获肯定是成正比的,就算不是线性的,起码你付出后,肯定会有收获的;另外还是从一开始就好好做吧,因为这门课其实对于我们专业最后的就业包括升学还算是目前所有学科中最有用的一科吧!认真学,毕竟接近“10”学分呢!
-
特别地,特别地,下一届要不要中途换队员(强制的、彻底的从一队换到另一队)?
假设依旧是一个90+人数的大班我觉得这个肯定是要继续换的呀!!!!其实这个在团队一开始,不仅能够让大家认清各自的职责,明确自己的任务,更为主要的是,这个操作在团队建立之初,很培养团队集体感的呀!(能够想出这种操作的,我也真的是服气哈哈哈,特别牛X!!!佩服)
-
身在一个格外大的班级,竞争强劲,你认为一个组的人数应当在多少比较合适?
我认为处于6~9人会比较合适。其实在这个比例当中,刚好适合学习与定位的匹配,我觉得很合适。
-
个人/结对/团队作业应该控制在怎样的规模?
我觉得这学期这样的规模还是很好的,由个人——>结对——>团队,这个操作没毛病呀!
-
这学期下来,你最感谢的人是谁?有什么话想要对TA说呢?
我最想感谢的其实是这个“团队”:从一开始的进度缓慢,作业完成度低、Alpha演示几近失败,到我们最后的“脱颖而出”,自学自学自学,别人都自学,你不自学?那几个日日夜夜算是软工这门课留给我们的宝贵经验了吧,很高兴加入这个团队,和大家一样,受益匪浅,十分有幸认识大家,谢谢督促!
四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
- 萌芽阶段:这个肯定是经历过了,当时算是大家的第一次见面,然后就在楼下“开天窗”,各自说出自己想法然后总结,考虑可行性,然后“互怼”,最终确定我们的项目功能(项目由最初的2个功能,沿着主功能拓展到了5个功能,还是很有可行性的)。
- 磨合阶段:这个也经历过了,大家相互协调各自的工作内容,自己适合与不适合相互协调,最终确定。
- 规范阶段:也经历过了,这个其实算是比较后期做的,刚开始其实就有规范了,不过主要还是体现在文档的撰写(这个规范格式XX的大家的执行力比较好),但是代码方面好像效果不是特别地显著,最好还是在总结的阶段,然后规范了大家的代码以及界面风格的设计。
- 创造阶段:这个目前团队还没经历....(因为最后其实还是掐着时间完成最终Beta版本)
五、怎样证明你学会了软件工程?
- 研发出符合用户需求的软件
贴出目前所记录在案的用户使用量情况,如下图所示
- 通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
从编写到测试再到发布,我们历经了好几个迭代的过程,中间通过沟通交流也是修修补补,最终展示的也是后续在既有功能版本上的删减版(个人版开发权限为了配合微信小程序发布的审核问题,导致几乎近半数的功能砍掉才得以上线) - 并且通过数据展现软件是可以维护和继续发展的。
在github上可以搜索到我们项目WeEdit的源码,完全开源共享,欢迎下载并提出建议或者issue,谢谢 - 对着这个检查表:http://xinz.cnblogs.com/p/3852177.html 检查一下,自己如果去企业面试,这些常见的问题是否都能回答,并在此总结。
类别 | 具体技能和面试问题 | 现在的回答(大三) |
---|---|---|
语言 | 最拿手的计算机语言之一,代码量多少?(偏web前端,PC/Mobile App) | wxml、js 4000行+ |
语言 | 最拿手的计算机语言之二,代码量多少?(偏后端,数据处理,网站后台,机器学习,等) | java 2500行+ |
软件实现 | (阅读代码的能力,实现,单元测试)你有没有在别人代码的基础上改进,你是怎么读懂别人的代码的,你采取了什么办法来保证你的新功能不会影响原来的功能?你在开中碰到最复杂的bug是什么,你是如何解决的?这个bug出现的原因是什么,你在将来应该怎么去避免bug再出现? | 1.有,比如这次结对编程就是对学长的代码进行改进;2.刚开始还是要自己通过注释什么的看吧,但是因为每个人的代码规范不一样,后面就直接问写代码的学长了;3.大的框架不变,只修改了需要改进的代码,在新增功能的时候要进行多次测试,看之前的代码可不可以执行;4.遇到的bug就是本身代码就是有问题的吧,还有就是页面跳转,刷新什么的。 |
软件测试 | (测试方法、测试工具、测试实践、代码覆盖率)你如何测试你自己写的代码?你如何测试别人的代码?你掌握了多少种测试工具和方法?你写过测试工具?你如何对一个网站进行压力测试和效能测试?你如何测试一个软件的人机界面(UX/UI)? | 正常的话都是用软件自带的测试工具测试。 |
效能分析 | 效能分析,效能改进,你写过的最复杂的代码是什么?你是如何测量和改进它的效能的,用了什么工具,如何分析的? | 最复杂的代码就是现在团队所做的微信小程序,由于很多东西都要重新学,做起来就感觉这个小程序挺复杂的。 |
需求分析 | (需求分析,典型用户,场景,创新)你做过多少个有实际用户的项目,用户最多有多少?你的项目有什么创新的地方? | 本次软工的项目,用户量大概大概了120+,项目创新主要是根据于目前的市场需求,周围同学以及之前和几个就业的学长学姐有询问的一些建议,然后这个项目主要就是能够实现集一体化的办公,创新的地方就在于解决了办公过程中的是否能够纠错的功能,旨在提高办公效率,推出后市场其实很大的呀! |
行业洞察力 | 你最感兴趣的领域是什么?这个领域过去10年经历了哪些创新?你分析过这个领域前10名产品?请分析一下他们的优劣,你要进入这个领域,应该如何创新? | 目前对前端比较感兴趣。2009年Ryan Dahl发布了node,node是一个基于V8引擎的服务端JavaScript运行环境,类似于一个虚拟机,也就是说js在服务端语言中有了一席之地。 |
项目管理 | 你参与过项目管理么?请描述一下两个当下流行的开发方法在你的项目中的具体应用情况;请问你如何决定项目中各种任务的优先次序,有什么理论来支持你的做法如果你突然发现项目不能按时完成,你作为项目领导,有什么办法? | 参加过,首先是根据所制定的计划来决定各个任务的优先顺序,如果没有及时完成,可能会在做其他事的时候抽一些时间做完。 |
软件设计 | 你做过架构设计,模块化设计,接口设计么?请说明一下你为何是这样设计,你比较过什么不同的设计方式,你的设计取得了什么结果? | 做过呀,做过模块化设计,不断地进行调试,然后降低程序复杂度,使程序设计、维护等操作简单化。 |
质量意识 | (代码复审/代码规范/代码质量)你是怎么做代码复审的,你加入我们团队后,能帮我们提高代码质量么,请具体说怎么提高? | 我做代码复审主要是添加注释,代码行的缩进,让整体代码清晰明了,还有关键代码函数值打印。 |
工具/社区 | Software Tools (performance tool, version control, work item, TFS)你在各种开发平台(web,linux,PC,mobile,machine learning)都使用过什么样的工具,自己写过什么工具来改进工作效率?给社区贡过什么工具和代码?Github有分享代码么?你写的技术博客坚持了多久,读者最多的是哪一篇? | 测试工具junit,效能工具jprofiler,还有xml数据解析。我自己先前尝试写过几篇跟计算机课程相关的博客,不过后来课程比较多,所以就没有继续坚持写下去。 |
团队协作 | work with others(协同工作,提供反馈,说服别人)请描述你在项目中何说服同伴采用你提出的更好的解决方案,或者你如何听取了别人的意见,改进了自己的方案?你如何说服懒情的同伴加紧工作,实现团队的目标? | 首先是讨论商量,把更好的方案的优点和同伴解释清楚,懒惰的同学就需要时常督促,时常查看他的任务进度,给他一种紧迫感。 |
理论素养 | 你上过什么数学,计算机或其他理论课,请举出具体的例子,说明你学到的理论知识如何帮助你解决实际问题。 | 数学分析、高等代数、离散数学、概率论、解析几何、算法与结构、面向对象与程序设计等等,利用离散数学的逻辑,数据结构编写代码,看代码复杂度 |
自我管理 | 全年级你专业排名多少?你从刚入学(大学一年级)到现在的排名有变化么?如何解释你的排名的变化? | 目前排名44/110,从大一上的28到现在,最主要是大二刚转过来,当时对于两边专业的衔接不是很好,导致自己那学期的成绩差了好多,落差特别大,现在逐渐调整自己的状态,努力追上。 |
六*(选做)、阅读软件工程中关于代码质量的的经典论文,从下列文献中选择一篇或若干篇,结合自己的实际做一个阅读笔记(例如,自己写的代码质量如何,是不是一个大泥球,如何衡量自己代码的质量)?从以下参考论文中选择一篇或若干篇:
参考论文文献:
[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
七、个性发挥,包括图文、照片和创意等!
不懂就是百度,不懂就找博客,总有人会懂!