软件工程实践总结
一、回望开学初对于软件工程课程的想象,回望博客开篇时对于这门课和这学期的期望
-
开学初的期望
想想开学初的期望,是希望自己能学会更多的Android知识,其实说透了就是想多参与编码,那时候真的挺天真的,我甚至希望全队的代码都由我一个人来写,其他组员好好抱住我的大腿就好了。然而就像栋哥说的,编码其实只占软件开发的百分之二十。就算我一个人完成全部编码,我也不过是做了20%的工作,好像也没什么了不起的是吧,但是我要是只参与编码的话我学会的就仅仅是又一门干枯枯的开发语言而已,所以想想那时候还真是菜鸟不懂大神真正神的地方(虽然现在仍然是一名菜鸟-)。当然我也顺着自己的目标,向队长申请我要参与主要编码的工作。不过,如果上天能给我一个重新再来的机会,我一定会对我队长说,让我来当队长吧!(队长看不到看不到看不到...)为什么现在想要以一个pm的角色存在于一个小组里呢,我想主要是因为看到了我们队长在这次软件实践中他的收货,他的成长,这些都不是我们这些苦逼的程序员能得到的,所以自私一点,我也想尝试一把当组长的感觉,说不定我也会受益匪浅! -
学会使用的新软件
- Android Studio:当初小组选择编码软件的时候,因为知道的只有
eclipse
和Android studio
这两个,然后听说eclipse
缺点有点多,逐渐被Android studio
替代(虽然之前自己有用过eclipse,而且感觉还挺好用的)。所以就选择这个神一样的Android studio,用到一度想要放弃它,之前eclipse用惯的快捷键在这完全使不上了,好气啊!不过经过慢慢的摸索,现在终于是算能比较顺手的使用它了。例如:Alt+Enter
这个万能键真的好用,还有就是find usges
功能也是很强大。不过还有个要吐槽的就是,为什么Android Studio的布局文件这么难搞,习惯拖拽式布局的我一度恼羞成怒想要砸电脑!
- Android Studio:当初小组选择编码软件的时候,因为知道的只有
-
git :还没使用它之前我从来没想过一个团队要一起开发一项工程,到底要怎么整合代码,我天真的以为可能得一个人专门把大伙的代码整合到一起,然后再进行编译调试。后面经过学长的讲解,仍然是没能理解
git
到底是个什么玩意,直到自己真正去安装去使用,才明白这个工具的用处,然后在正式使用它之前我也看过好多关于git
的学习,然后也发布了一篇读后感。但是到后来的项目开发过程中,仍然是遇到很多git
的各种问题,比如:代码到底要怎么提交,每次把整个项目push
上去还是只push
自己修改后的那些代码,好像都会产生好多问题,到现在我还是有些不理解,虽然之后都是把整个项目给提交上去了,说实话git
确实好用,但是没配置好,没理解它的实质,还是会出现好多让人头疼的问题! -
Axure RP 8:这是一个原型软件,只是学了一些基本的操作,适用于网页的原型设计,对于我这么个毫无艺术细菌,感觉还是挺难使用的。当时做原型设计的作业时候就是用的这个,然后那页面做出来连我们自己都快看不下去了。
-
学会的新语言
好像并没有学会什么新语言,只能说巩固了之前自学的一些语言,比如
java
之前学习的都只是它的一些基本概念,至于使用好像没有过多深入。这次软工实践我们小组做的是android端的开发,所以java的知识算是得到一个好的巩固,至于会使用java
做一些事了。 -
代码量
在这次软工实践中,完成了可能大概或许1000-2000行代码吧(据不完全统计)。
-
学习的新方法
- 不懂单元测试算不算,应该算吧,单元测试据栋哥说,是一个很重要的测试方法,但是对于我这种菜鸟来说还是有点体会不到,因为我们的单元测试都是全部代码写完后进的,那些bug都解决得差不多了,所以写的测试也是通过的,所以暂时没理解它的作用,不过方法学会总是好的,说不定以后自然就体会到单元测试的重要性!
- 原型法应该也算是新学习到的方法吧,根据用户的需求,用原型设计出符合用户需求的原型,符合用户要求后,再进行真正的软件开发,确实很重要!
-
其他方面的提升
学会了
Markdown
编辑器的使用,妈妈再也不用担心我的博客排版问题啦!一开始栋哥就要求我们用markdown
,我一脸懵逼,这是个什么鬼,用了才知道,又是一个神奇的东西(发现栋哥推荐使用的东西都是牛逼的东西),要是不会使用markdown
,这么多次的博客都不懂要多花多少时间去搞排版!
二、属于自己的人月神话
- 经验总结:
- 在确定自己想要做什么前,一定要搞清楚自己想要做的难易程度适不适合你们小组,否则一旦确定了,到后面如果发现好多问题你们小组很难解决,那时候再想改就很麻烦了。
- 首先是
git
的使用,个人觉得git
的使用熟不熟练对软件开发过程中有很大的关系,我们小组一开始由于大家都对git
不太熟悉,所以,中间出了很多幺蛾子,导致进度拖了好几天,后面用顺了,团队的合作就顺畅多了! - 一定要学会看android studio中的
android monitor
,因为有一些bug是可以通过这里查出来的,学会查看它,就能较快速的查找出自己的代码出现问题的所在。 - 需求确定了最好不要改,最好不要觉得哪个功能模块难做就放弃,确定的功能需求,然后仔细分工,这样团队才能更好的协作。
- 分配给某个人的任务,最好就由完成,不要做着做着,全部人的分配的任务都到了组长和个别人手中。
三、对下一届实践的建议
- 首先我觉得最好一个小组有一个有项目经验的人带着一起做会比较好,并不是说全都是菜鸟就飞不上天,我想说的是,如果有个大神带着的话,可能会少走很多弯路。
- 如果有学弟学妹问我做什么类型的项目的话,我会建议,最好做一个有前端和后端的,一方面适合6个人的小组容易分工,一些人做前端一些人做后端,而且这样的项目也会让你学会更多。
- 如果你想不到很好的创意也不要紧,这只是实践,最重要的是让你体会一个软工项目的过程,并不是一定得做出一个多么有创意,多么有实用性的软件(纯属个人意见)。
- 小组成员一定要沟通沟通沟通!!!千万不要都要开始做alpha版本了,还有人不懂我们的项目到底需要些什么功能。在编码的过程中也要经常沟通,别自顾自的写,然后到后来整合的时候,发现完成无法整合。
- 一定要学好英语!!!看不懂英语是最头疼的,查资料的过程中你会发现很多有用的都是用英文写的,你看不懂那就gg了。
四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?
"Aruba"一支神奇的队伍,这里没有大神,没有美女坐镇,但是也没有一成不变的菜鸟,只有六个勤勤恳恳的追梦少年。当初大伙绞尽脑汁,就是为了给这支队伍取一个响亮的队名,最终商讨决定,以“阿鲁巴”的英文名作为队名,队长也立下flag,以后谁的任务没完成,其余的人要对他实施“阿鲁巴”的大刑伺候!
- 萌芽阶段:六个人并没有经过精挑细选,只是两个宿舍的各三个人组成的一支队伍,为了是交流比较方便。一开始大家的热情度就很高,每次的小会大家都能积极发言,说出自己对项目的期待,以及自己想要在队伍中承担的角色。一支菜鸟队伍就这样冉冉升起!
- 磨合阶段:磨合阶段应该算是比较痛苦的,有些人性格不同,喜欢各做各的,甚至自己擅自增删功能,而且队伍中的其他人并不知道,到了后面,发现对接不上,只能又做修改。后来经过我们强大的队长大人的调解,大家终于是按照分配的任务去做,也更多的交流了,两个宿舍经常相互窜,谁出现bug难以解决,另外的成员会协助他解决调试,场景一度十分和谐!
- 规范阶段:一开始,虽然大家讨论出了一个具体的代码规范,而且队长也给我们每人印发了一份纸质版,然而大家好像都不按照代码规范来做。比如我们规定一个活动的类名要写成
***Activity
,可是就是很多人要取一些奇奇怪怪的类名,以至于后面代码整合出现了许多问题。不过这一切都在beta版本中得到了规范,大家都按代码规范来写,代码的阅读性马上就上了一个阶段。 - 创造阶段:这个阶段我们小组好像并没有达到,虽然大伙都能认真的写代码,而且算是注意力比较集中,但是离创造阶段还是差了一个等级,若不是队长催着要代码,估计我能拖到天荒地老!
五、阅读软件工程中关于代码质量的的经典论文,从下列文献中选择一篇或若干篇,结合自己的实际做一个阅读笔记(例如,自己写的代码质量如何,是不是一个大泥球,如何衡量自己代码的质量)?
这个这个这个。。。。
怎么是全英文的!好可怕,对于我这么一个个英语渣渣来说,真的像天书一样,只能用百度翻译翻译了一下,大概理解了一下论文想要表达的意思,同时反思了自己之前写的代码,发现自己的代码确实是存在许多问题的:首先呢,写代码的时候并没有考虑过为极端的情况,所以app暂时没有什么问题,但是说不定某天就会冒出一大堆的问题,那时候解决起来可能会很麻烦!
六、怎样证明你学会了软件工程?
-
研发出符合用户需求的软件
符合用户需求可能说不上,因为当时我们这个app只是根据我们小组的讨论要实现什么功能之类的,虽然有做过用户需求调查,但是用户有些需求现阶段比较难实现,所以只能说大体上的能满足用户需求吧,只是我们这个用户群体比较小。
-
通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
这点我们小组应该算做的不错吧,用了墨刀设计原型,android studio写安卓,git传代码,整个团队互相协作,在栋哥给定的时间内完成了至少我们认为足够好的软件。栋哥还给予我们小组高度评价:我要是用安卓手机的话,我也要装一个试试!
-
通过数据展现软件是可以维护和继续发展的
这话我没法接。我们这个app做的功能比较简单,维护的话挺容易的。但是继续发展呢,感觉一般吧,对于这种单一功能的软件,如果强加一些没必要的功能,会显得很鸡肋,不过如果一定要说有什么可以继续发展的,我觉得可以搞一个云端,无论何时何地都能找到你在这里储存的信息,还是挺不错的!
七、相处一学期不易,课堂和课程上,我们将就此别过。可惜学生匆匆,时光匆匆,认识和了解的同学却很少。另外我年纪渐长,记忆日衰,会遗憾有时候我连个性或名字都没有记住。写一段话,介绍下你自己吧。
都说每个人最了解的就是自己,其实我觉得我并不是能很好地认识自己,总是会根据别人对我的评价给自己下个定义。所以呢,导致就是有人夸了我,瞬间觉得自己牛逼得不行,飞上了天,然而某个人批评了自己或者对自己提出什么建议的时候又会觉得自己好像真的很差劲。我知道这样很不好,可是好像又很难改变。所以呢,我还是总结一下别人曾经对我的评价,再捎带一下20多年对自己的一些小认识:首先做事算是比较有原则吧,什么事该怎样就是怎样;还有呢就是有点小固执,决定做的事就会义无反顾地去做......额,说着说着感觉画风好像有点不对哈。反正呢,我就是属于那种从来都不耀眼,但是关键时候需要我,我就能成为一个小粗大腿的人!
感觉自己真的很奢侈,眼看七门考试要到来,还花了辣么多时间写辣么长的博客。不过还是挺不错的,对我这种人来说,虽然beta版本结束后就感慨万分,但是老师不要求我可能就不会写下这么长篇大论的博客用来总结这次的软工实践,相信这篇博客不管以后什么时候打开来看,都会是一个美妙的回忆。
致我逝去的软工实践!