最终作业 - 软件工程实践总结(个人)
一、请回望暑假时的第一次作业,你对于软件工程课程的想象
1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
开篇博客的课程目标和期待
- 提高自己的代码能力
- 学到新知识,提高自己的专业水平
已经达到的期待和目标
- 代码能力比起开课之前的确有所提升。开课前,自己可能一个月都不会去打上一行代码,大一学的C语言和C++可能只记得"Hello World!"该怎么写了。经过这学期的软工实践,在词频统计的个人作业中,我头一次发现自己对C语言那么地陌生,自己的的确确学过但是完全代码该怎么写。 经过这次的个人作业,我重新捡回了被自己丢弃的C语言,加深了对C语言的学习和认识。在团队项目中,我负责Android前端开发,使用的语言是Java。Java对于我来说是一门陌生的语言,之前从来没学过也没想去学过,因为听说Java又臭又长(人生苦短,我选Python).但是为了完成自己的任务,我不得不硬着头皮开始进行Java的学习,过程当然是痛苦的,但是结果还是非常美妙的。团队项目完成后,我对Java已经有了基本的掌握和了解(当然还算不上精通),能够用Java解决一些不算太复杂的问题,当然还能自己写Android了(这是我最有成就感的一点)。
- 学习到了很多的新知识。在词频统计的个人作业中,我懂得了如何进行单元测试,如何进行性能检测;在原型设计的结对作业中,我学会了原型设计工具Adobe XD CC和Axure RP的使用,并且强行提高了自己的审美水平;在UML设计的团队作业中,我学会了类图、用例图、泳道图的画法;在设计抽奖系统的团队作业中,我学会了使用HTML进行网页设计;在Alpha冲刺和Beta冲刺中,我学会了Android Studio的使用,懂得了用Java进行Android开发,更重要的是提高了自己的自学能力,团队协作能力和交流能力。
存在的不足
- 虽然自己的代码能力是得到了很大的提升,但是代码规范还是做得不够好,在写代码的时候经常不注意代码规范,没有养成良好的习惯。
- 学到了很多的东西,但都只是学会了基本的运用,比如Android开发,简单界面的开发你自己可以完成,但是遇到更难更复杂的界面设计,自己就完全不知道该怎么做了。自己虽然学的多,但是学到的都不够精通,今后还是继续下功夫钻研。
- 最重要的一点就是自己的时间管理做得不够好,简直是血和泪的教训。因为这个熬了不知道多少个夜。因为大部分时间全用来做软工了,很多课上课都没在听,到期末考试才知道后悔
我恨呐!!!
2)总结这门课程的实践总结和给你带来的提升,包括以下内容:
1、统计一下,你在这门软件工程实践中,完成了多少行的代码
参照自己的学习进度条,在软工实践中我差不多完成了4200行代码。当然这只是估计,肯定会存在些许误差,但是总的来看应该差不了多少。下面是我在Alpha冲刺和Beta冲刺中完成的代码量,大概在3600行左右。
2、软工实践的各次作业分别花了多少时间?(做一个列表)
作业 | 花费时间 |
---|---|
自我介绍 | 5 |
福大软工1816 · 第一次作业 - 准备 | 520 |
福大软工1816 · 第二次作业 - 个人项目 | 720 |
福大软工1816 · 第三次作业 - 结对项目1 | 1810 |
福大软工1816 · 第四次作业 - 团队展示 | 150 |
福大软工1816 · 第五次作业 - 结对作业2 | 1580 |
福大软工1816 · 第六次作业 - 团队选题报告 | 160 |
福大软工 · 第七次作业 - 需求分析报告 | 175 |
福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队) | 195 |
Alpha冲刺 | 4325 |
福大软工1816 · 团队现场编程实战(抽奖系统) | 355 |
福大软工 · 第十次作业 - 项目测评(团队) | 95 |
Beta冲刺 | 2625 |
福大软工 · 第十二次作业 - Beta答辩总结 | 295 |
3、哪一次作业让你印象最深刻?为什么?
让我印象最深刻的暑假做的第一次作业福大软工1816 · 第一次作业 - 准备。我记得那时候自己对软工实践一无所知,唯一了解的还是从学长那里得来的消息,软工实践螺旋爆炸难(现在想想的确是这样)。为了完成那次的作业,我看了许多大佬写的博客,了解了他们从小白到大牛的成长历程,了解了他们是如何学习计算机的,也了解了自己有多咸鱼。看了这些博客我认真地反思了一下自己,好像大一大二的两年完全没有一个计算机专业学生该有的样子。上课写作业然后考试,好像和高中的自己没多大区别,就算说自己是其他专业的学生,好像也没毛病,几个月都不会打一行代码的人可不像是计算机专业的。那次作业给了我深刻的反思,到现在都忘不了那个下午,看完博客的我坐在椅子上想了好久好久。
4、累计花了多少个小时在软工实践上?平均每周花多少个小时?同时贴出开篇博客“你打算平均每周拿出多少个小时用在这门课上”的回答
粗略地算了一下,差不多花了220小时在软工实践上(我怎么觉得比这多多了呢?),平均每周大约花13个小时左右,平均每天差不多两个小时......(我不信我只花了这么点时间!)。当初开篇博客并没有具体说出每周要花费多少时间(还好没立flag)
5、学习和使用的新软件
- 安卓开发学习和使用Android Studio
- 原型设计学习和使用Adobe XD CC和Axure RP
3.第二次结对作业学习和使用IntelliJ IDEA - UML设计学习和使用ProcessOn
- 团队代码管理学习和使用GitHub
6、学习和使用的新工具
- 安卓开发学习和使用Android Studio
- 原型设计学习和使用Adobe XD CC和Axure RP
3.第二次结对作业学习和使用IntelliJ IDEA - UML设计学习和使用ProcessOn
- 团队代码管理学习和使用GitHub
- Visual Studio的性能分析和代码覆盖率
7、学习和掌握的新语言、新平台
- Java,安卓开发全靠它
- GitHub,我的新大陆,虽然还是很会用
8、学习和掌握的新方法
- 学会了如何进行Android开发
- 学会了原型设计
- 学会了Git的使用
- 学会了如何进行性能测试
- 学会了如何进行单元测试
9、其他方面的提升
- 代码能力得到提升
- 专业水平得到提升
- 团队协作、交流能力得到提升(但是还不够好)
- 自学能力得到提升
二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
经验和总结最多的就是完成团队项目的时候了
-
经验总结
在完成任务的时候,我们往往会事先估计一下这次的任务的难度怎么样,工作量是多少,需要多少时间来完成。但是往往在这个时候,我们会犯错。“这个任务听起来也不算难啊,不就是写个接口,传一个json数据再接收json数据嘛”。这样的情况经常会遇见,过于乐观地看待自己的任务,没有真正地认清任务的工作量以及自己的能力。所以在实际完成任务的过程中,我们总是会遇到各种各样的困难,大大延长了自己完成任务的时间。不管是什么样的任务,自己都应该早早地开始着手完成,因为你对这个任务的估计可能不够准确,早一点开始做就能早一点发现问题,也会有足够的时间来解决这些问题。只有提早开始做,提早发现问题和错误,才能顺利完成自己的任务,而不会在deadline之前心态爆炸。 -
实例分析
在Alpha冲刺阶段,我的任务是完成登录注册界面和用户回答问题界面。我最先开始设计登录注册界面,那时候可以说是从容不迫,悠哉悠哉,想着自己不就是登陆注册吗,设计两个可编辑文本框再把账号密码传到后端不就行了,多大点事儿啊。回答问题也是一样啊,从后端接收一下用户要回答的问题再把用户的答案发回去不就好了。这么简单的任务真是美滋滋(我是真的傻啊)。但是当我慢慢悠悠慢慢悠悠写了一段时间都,发现怎么登录还要有token,这是什么东西,登录失败还要用http码来判断失败的原因,注册怎么还要短信验证码......各种问题层出不穷,当时进度实际上只完成了一点点。那段时间一直在赶一直在赶,每天肝软工每天熬夜,真的是心态爆炸。现在想想,要是当时能尽快着手完成,就能早点发现自己原来还要那么多东西不懂,早点发现就能早点解决,早点解决就能早点完成,早点完成我就不会拿上课时间肝软工了(到了期末真的是恨呐)。在接到任务的时候,一定一定要尽早开始准备,这样才能有足够的时间来应付你在开发过程中遇到的困难和问题。
三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,对于同期的TA们,对于后来的学弟学妹:
1)你有什么想建议、告知和期许想要告诉他们呢?
- 软工实践的的确确非常锻炼人,可以提高你的代码能力和专业水平。但是在选这门课之前,你要好好考虑一下自己这学期的计划是什么样的,选完软工之后自己的计划会不会发生改变。软工实践会花费你大量的时间在学习新东西、写bug和改bug上。如果你觉得自己可以安排好自己的时间,那么选了软工绝对血赚不亏。如果你没办法合理安排时间来完成软工,那么我的建议还是不要选了。(血和泪的教训啊!我的编译凉了呀!我为什么要在编译课搞软工呢?)
- 在完成团队项目的时候,一定要认认真真完成,我觉得收获最大的就是在这个阶段了。你会学到很多很多自己没接触过的新东西,从小白到大牛的路从这里开始。
- 保护发际线
- 开篇博客不要立下太多flag
2)特别地,特别地,下一届要不要中途换队员(强制的、彻底的从一队换到另一队)?
我觉得不要,因为一个团队好不容易磨合好了,又突然换了一个人进来,这个刚进来的这段时间肯定对整个团队项目都不熟悉,要花时间了解整个团队的进度以及自己的任务,了解自己应该干什么。这都是需要花费时间的,软工实践本来就耗时间,这样子做不仅整个团队进度被拖后,刚加进来的那个人肯定也会因为不熟悉而无所事事。所以我觉得并没有必要。
3)身在一个格外大的班级,竞争强劲,你认为一个组的人数应当在多少比较合适?
8-9个人吧,三个前端、三个后端、一个PM和一个机动人员
4)个人/结对/团队作业应该控制在怎样的规模?
个人作业我觉得规模是有那么一点点大(也可能是因为我比较菜),结对作业的话规模刚好,团队作业除了现场编程抽奖系统那个,其他都还好。现场编程就三个多小时,工作量那么大,完全不合理啊亲。
5)这学期下来,你最感谢的人是谁?有什么话想要对TA说呢?
最感谢的人,当然是柯老板还有助教姐姐了。
郑重感谢我的每一位队友,还有炜哥。要说的话在这都说啦(戳这里)
四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
- 萌芽阶段:一开始PM他们在班群和课堂上说了他们项目的想法,感觉还挺不错的。后来自己向组个队但是人不够,果断投奔PM去了。现在想想还真是个正确的选择,团队每个人都很nice,大家都有着相同的目标。
- 磨合阶段:一开始大家彼此都不是很熟,所以在开发时遇到问题都只会是自己闷头钻研,有点耽误进度。但是经过一段时间的接触和几次站立式会议之后,大家都开始慢慢地交流了起来。整个团队也慢慢地凝聚了。
- 规范阶段:我们的后端有规范文档,当时有不少同学都有来向畅畅同学学习规范文档。每个人也都分工明确,能够独立及时地完成自己的任务,在遇到困难时能够及时提出,一起解决。
- 创造阶段:我觉得我们的团队还没有能够达到创造阶段,虽然每个人都能很好地完成自己的任务,但是如果要进行小组之间的角色转换的话,可能还胜任不了其他位置的工作,需要一段时间的学习才能在各个角色之间灵活转换。
五、怎样证明你学会了软件工程?
1)研发出符合用户需求的软件
我们的团队项目“即食”APP没有发布到应用商店平台上,但是已经向部分同学开放使用。根据后台数据库显示,目前的用户已经超过了一百人。
2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
我们团队的项目有项目规划,有需求分析,也有具体的实现设计。整个流程都是整个团队通力协作一起完成的,大家每个人都尽了自己最大的努力完成了我们的项目--“即食”APP
需求分析报告
团队选题报告
3)并且通过数据展现软件是可以维护和继续发展的。
Github上的源代码
分别是前端代码、后端代码和Web端代码
前端代码的最近一次更新是在9天前,仍然在近些代码的完善和部分问题的修改
4)对着这个检查表:http://xinz.cnblogs.com/p/3852177.html 检查一下,自己如果去企业面试,这些常见的问题是否都能回答,并在此总结。
认真看完了整篇博客,满心羞愧,本来度过了软工实践以为自己变强了,非常膨胀,没想到还是差了这么多。特别是在Java那块的问题,看完我感觉自己好像没学过Java吧,我都学了些什么?
硬的问题看的我心态爆炸,软的问题初看还好,但是选完后仔细想了想,自己跟条咸鱼有什么区别。每一题我都知道选什么才是正确的,但是考虑了一下自己的实际情况,好像离正确的选择还差了好大一段距离。看完整篇博客,我觉得按我现在这样子去企业面试,估计没有一家企业会要我(不是估计,而是绝对没有一家会要我)。我现在还是不够强啊~~
六*(选做)、阅读软件工程中关于代码质量的的经典论文,从下列文献中选择一篇或若干篇,结合自己的实际做一个阅读笔记(例如,自己写的代码质量如何,是不是一个大泥球,如何衡量自己代码的质量)?
这篇论文主要讲的是代码质量分析,大概浏览了一遍论文(菜鸡只能翻译成中文看),发现自己之前写的代码存在许多问题,代码质量都算不上高,甚至还有那么一点点差。例如没有写单元测试的习惯,命名也不够规范。自己在接下来的学习中必须养成时刻检查自己代码规范的习惯,提高自己的代码质量。这样不仅可以让自己的代码看起来赏心悦目,在找bug的时候也会方便很多。说实话这篇论文我只看懂了个大概,大部分内容我都没真没看懂,像衡量组件质量的10个指标看的我头疼,自己看论文的能力还是需要提升啊。对了英语水平也要提升,菜鸡才看中文翻译。