个人作业——软件工程实践总结&个人技术博客
个人作业——软件工程实践总结&个人技术博客
这个作业属于哪个课程 | 2020春S班(福州大学) |
---|---|
这个作业要求在哪里 | 个人作业——软件工程实践总结&个人技术博客 |
这个作业的目标 | 1、软工实践总结;2、个人技术博客 |
作业正文 | 个人作业——软件工程实践总结&个人技术博客 |
其他参考文献 | 无 |
一、回望
1、对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强软件工程专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
这学期软工实践这门课程让我将所学都能运用到实际应用上,具有了基本开发能力。这学期软工实践共有4次编程作业:疫情统计程序、结对疫情统计可视化的实现、团队GitHub实战完成口罩预约系统以及团队开发。这几次的编程作业让我的编程能力有了一定的提升,能够自己开发一个小的系统,也能够团队合作开发一个较大的系统,还通过自学掌握了Android开发并将其实际应用到项目开发上。至于不足的地方,应该是当初自己制定的学习路线也是由于实践课及自身要考研的原因没有具体执行,被搁置一旁了。
2、你在第一次作业的个人简历中描述了这门课程结束后,你预期你将增长的能力、技术、技能,并绘制了学习路线图。对比当前你的所学所得,你达到了当时的预期值吗?
在第一次作业中,我定制了自己本学期的学习路线,希望在本学期课程结束,自己能够自学掌握一门新语言——Python。但是,很遗憾,当时制定计划的时候,并没有意识到这门实践课,还有后续一个持续整个学期的团队大开发,加上除了实践课外的其他时间,还有其他课程要学习以及备战考研,所以当初制定的学习计划也并没有按计划执行。只在寒假的时候,学习了一些Python基本语法,后面的深入学习应用并没有实际践行。
3、哪一次作业让你印象最深刻?为什么?
印象最深刻的,是团队Github实战。记得课表上是安排了周天一个上午的时间的课程,但万万没想到啊,原来是要跟刚组队不久,还完全没有熟悉的队友哦,在整个一天内针对疫情开发出一个口罩预约系统。而且本来当天也是第二次结对作业——疫情可视化系统实现的截至日期,头一天已经熬了个大夜,把系统实现完成了,想着等第二天再写一下博客,所以当时听到一天都要进行团队Github实战时,整个人都懵掉了,想着该怎么抽出时间把结对作业的博客也给敲完,还好后来结对作业的截止日期延后了一天,才好了一点。
回到GitHub实战本身,因为我本身编程基础并不好,面对完全还不熟悉的队友,极其怕自己拖后腿导致整个系统都没办法完成,所以那一整天都提着精神,不敢松懈。我们是分开开发的,我和另外一个女生,负责的是附加部分——管理员发布预约摇号活动。也是前后端分离开发的,由于一些问题,附加这部分在当天并没有完成。而整个项目在最后整合的时候也出了问题,系统没能够运行起来。最后整合的时候,看着队友在努力debug,自己却什么都做不了的时候,真的很想回去打醒当初没有好好学习的自己。后来助教通知可以继续完成系统时,我们团队才把系统成功运行起来,完成好了。通过这次作业我也意识到了自己代码基础的薄弱,而且团队合作开发也并没有想象的那么容易。开发整合的时候可能会出现各种奇奇怪怪,无法预知的问题。
4、在课程问卷中,我们统计了你在课程上花费的精力和提升;现在请你再次将这些数据罗列出来,作为个人的记录。
软工实践课程个人数据记录 | ||
---|---|---|
各次作业所花的时间 | 寒假第一次作业 | 12小时左右(包含创建博客,修改博客样式,找资料,写博客等所有为完成作业所花费的时间;根据文件创建时间及个人推算得出) |
寒假第二次作业 | 24小时左右(根据commit记录得出) | |
结对第一次-原型设计 | 28小时左右(根据和队友聊天记录得出) | |
团队作业第一次-团队展示和项目展示 | 1小时左右(主要参与讨论选题等团队讨论,为零碎时间) | |
结对第二次作业——某次疫情统计可视化的实现 | 32小时左右(包括找资料,研究github团队使用及具体编码等时间,根据和队友聊天记录得出) | |
团队作业第二次——团队Github实战训练 | 9小时左右(包括助教提出可以继续完善系统后,对系统继续完成所花费的时间) | |
团队作业第三次—项目需求分析 | 14小时左右(和团队另外一个女孩子负责原型制作部分,根据聊天记录得出) | |
团队作业第四次—项目系统设计与数据库设计 | 8小时(负责系统设计说明书的引言和系统安全和权限设计部分,外加整合所有部分,完成说明书的排版) | |
个人作业——软件评测 | 9小时左右 | |
团队作业第五次——站立式会议+alpha冲刺 | 71小时左右(alpha阶段由于刚开始接触android开发,所以正式开始团队开发的每天基本就是起床就开始研究怎么敲,生怕拖后腿,故花费的时间比较多。具体时间根据commit记录及个人推算) | |
团队作业第六次——beta冲刺+事后诸葛亮 | 35小时左右(根据commit记录及个人推算) | |
个人作业——软件工程实践总结&个人技术博客 | 9小时左右 | |
在软件工程实践中的累计代码量 | 1w行左右(Github上每次作业的代码量累计) | |
软工实践累计花费时间 | 280小时左右(除了作业外,还有一些自学技术的时间) | |
软工实践平均每周花费时间 | 约为15.6小时(按开始上课后发布的第一次作业2.24号第二周开始计算,到本次作业截止时间6.25号,大约18周时间) | |
学习和使用的新软件 | GitHubDesktop、Axure、Android Studio | |
学习和使用的新工具 | GitHub | |
学习和掌握的新语言、新平台 | (1)Android开发使用的是Java语言,所以并没有学习新的语言 (2)新平台:博客园,Leangoo,Github |
|
学习和掌握的新方法 | 使用Github进行远程合作开发 | |
工程能力的提升 | (1)掌握Android开发 (2)熟悉了软件的整个开发流程 |
|
团队合作上的提升 | 学会通过Github实现团队远程合作开发、团队前后端分离开发,与队员的沟通交流,协作开发能力得到了提升。 | |
其他方面的提升 | 提升了自学能力 |
二、团队总结
软件工程实践是大学里少有的团队协作经历。
1、你是组员还是组长?你觉得你自己在哪些地方做得好?你觉得自己还有什么可以改进的地方,具体可以怎么改进?
我是组员。我的基础可能没有那么好,但对于组长布置的任务,我都能够很好地完成,尽自己最大的努力将自己负责的部分做到最好,不拖队伍的后腿。我这个人也比较闲不住,当完成自己的部分后,我会尽力再去做一些自己能做的任务,努力找活干,在团队中,如果有人还在忙得不可开交,但是自己却闲得没事干真的会有很强的负罪感。至于改进的地方,还是那个老问题,我的基础不够好,所以在写代码时可能没有那么规范,也很少能考虑到用更有效率的算法来优化代码,所以还是需要继续努力学习。还有就是在团队里面,大概是因为我比较慢热一点,在没有很熟的人面前比较羞涩,所以在整个合作过程中也比较少去提出自己的看法,这点在以后不论是团队开发还是生活中其他方面,都需要改进。
2、你觉得你的组长(组员们)在哪些地方做得好?你觉得ta(ta们)还有什么可以进一步提升的地方,有什么具体的建议吗?
组长在任务分配这方面做得不错,由于大家刚认识,都还没那么放得开,所以组长也会尽量直接根据每个人的能力直接安排任务,组员有异议的话再进行调整或修改。没有异议的话,大家就努力将自己负责的部分做好,不懂就自己学习或者跟队友交流。这也一定程度上提高了整个团队合作开发的效率。对于整个团队,大家都会很积极地去交流沟通开发过程中所遇到的问题,有问题就在开会的时候提出来一起解决或者私底下询问交流。至于提升的地方,大家,包括我自己,在团队中可以更放开一点,更大胆地说出自己的想法,让整个团队更活跃一点。
3、《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
《构建之法》中将团队的发展分为萌芽阶段、磨合阶段、规范阶段、创造阶段这四个阶段。我觉得我们的团队已经经历过萌芽阶段和磨合阶段,现在正处于规范阶段,大家可以互相帮助,更和谐有效地进行合作开发。至于创造阶段,我觉得这可能会是很少团队在一个课程实践合作中能够达到的高度,在课程实践中,团队更多的都是为了更好地完成课程作业,大家各司其职,对于未来,前景之类的创造阶段更多涉及的东西会比较少去考虑。
4、从开发的角度,你在团队中担任了什么角色?你是否完成了该角色的任务?现在你觉得你适合该角色吗?
我主要负责的是我们的记账APP整个新增记账部分的编写,算是前端后端都有涉及,比较偏前端。在项目开发过程中,我完成了该角色的任务,并能够有余力去帮助完成一些相关部分的编写,所以我觉得自己挺适合这个角色的。这部分难度比较适中,能够自己自学完成。在规定的时间内,可能需要花费比别人更多的时间去完成,但只要多花时间去学习就能够解决的问题就不是什么太大的问题。遇到问题的时候就多百度,或者询问队友,都能够得到很好的解决。整个开发过程也比较愉悦。
三、人月神话
1、怎样证明你学会了软件工程?以下要求你们的团队达到了哪几个?请在随笔中用数据证明上述内容或侧重选择之一。
通过本学期的软件工程,我熟悉了一个软件完整的开发周期不仅仅只是开发,还有很多前期准备必须做足。需要进行前期需求分析,系统设计,数据库设计等,只有准备好了进入正式开发阶段后才不会手忙脚乱,整个团队漫无目地开发。
(1)研发出符合用户需求的软件
由于用户记账信息保密性问题,我们的软件并没有公开发布,只在用户使用调查的时候,邀请一些同学进行注册使用。
(2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
我们的项目经历了完整的开发周期,项目规划-需求分析-设计-实现-小范围使用-维护,团队通过Leangoo进行任务发布与进展跟进;使用Github进行合作开发。每个人各司其职,完成自己负责的部分,并在开发过程中持续交流沟通,对各部分进行整合互通。
- Leangoo任务记录
- Github合作开发记录
(3)通过数据展现软件是可以维护和继续发展的。
我们的项目能够在Github上找到源代码且各部分开发文档都在团队开发博客中予以记录,代码能够正常编译,软件能够成功运行。团队项目的任务发布等项目发展资料在团队博客中都予以体现并可以通过Github记录查看项目进展。
【团队博客】(https://www.cnblogs.com/money6/)
【团队GitHub仓库】(https://github.com/qiyuan129/jizm_android)
2、写下属于你自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析。
在本次团队开发中,我体会到对于刚成立不久的团队,在布置任务上,直接根据每个人的特质进行分配会比在讨论中分配任务要有效率得多。因为对于一个刚成立不久的团队,大家都并没有非常熟悉,所以也没那么能放得开,与其在讨论时问说这块有没有谁要做的,倒不如由组长在了解各部分人员的擅长技术后,结合团队初定的开发目标,进行任务的划分与分配。如果有成员有异议的话,再提出自己的想法。如果完全没有异议,那就说明你认可了这个安排,那么分配给你的这块任务就是你的责任了,你得自己想方设法去完成它。这样合作下来,每个人身上都担着一份责任,但凡是想要团队做好这个项目的组员都会尽自己的努力负责好自己的任务。当然,如果有个别人就是不想做,完全不关心这个项目完成得怎么样,那这个人很显然也不适合在团队中待着了,那么他的任务就要由组长视情况再分配了。或者还有另一种方式就是组长将所有的任务细分开,分成几个部分,每个部分有一定的贡献度,由组员自由认领。在这种情况下,自愿度比较高,想要多拿一点分的人自然会去承担更多的任务,而他既然认领了这个任务,也就说明他觉得自己有足够的能力能够完成,也是扛下了一份责任了。所以在团队开发中,领导者是起着非常重要的作用的,一个团队没有领导人就有如群龙无首,一盘散沙,那么这个项目完成的效果自然也就好不到哪去。而领导人的管理方式、能力以及责任心,自然也对整个项目的发展有着至关重要的影响。
四、建议
对下一届同学的建议,或者对于开学初的你,对于大一的你,你有什么建议和想要告知的呢?请写下你对后来人的期许。
对于下一届同学,或者大一的同学,你想说:
请一定不要在听不懂或者学不懂基础课程的时候就放任自流,在基础学习阶段,一定要打好代码基础。学不懂就拿出高三学习的劲头,你都有能力考上大学了,为什么会学不会一门课?努力和回报是成正比的,当然,如果你对一门课很佛系,只求及格就好,那它也绝不会是你今后成功的助力风,只会是你学习路上无尽的绊脚石。总之一句话,上大学了也请好好学习!
对于自己今后,你有哪些建言?
你很菜,所以,请付出加倍的努力来达到你想要到达的高度!
对于助教工作,你有哪些建议?
我觉得助教在整个实践中不应该只扮演一个发布作业,审核作业的作用。应该多和同学们交流,比如说自己当初对这门课的经验、经历,比如自己的一些好的见解方法,都可以提出来和同学们交流沟通。于我们应该更是一个前辈的身份,能给我们更多的建议,有什么问题可以先征求大家的意见,不至于发布出来后大家再以一种暴力的方式反对,最后来谋求某一方的妥协。
对于软工实践课程,你有哪些建议?对于软工实践课程的上课形式和内容,你有什么具体的意见和建议?在哪儿需要强化或者剔除?
对于软工实践这门课程,
- 首先,我觉得这门课开设的时间不太合理。如果这门课开设在大三上学期,那么我认为大家应该不至于对这门课有恶意。大三下大家都要开始准备考研或者开始找实习、就业,而这门课又需要花费大量的时间,所以开设在大三下学期难免激起大家的逆反心理。
- 其次,随机组队可以有,但是可以不那么随机,在组队前可以先收集一下大家擅长的技术,或者根据成绩排名等进行分组,就不会有大佬都在一组,基础比较差的同学在一组的情况出现。
- 还有就是这门课实践课与理论课完全脱节,整个实践过程中的所有技术全靠自学,有些大家都比较不理解的部分,比如测试,大家都不懂,到最后也还是都不懂,这对整个实践项目的完成并没有好处。所以希望在实践课上或者配套的理论课上老师能够针对性地讲一些我们实践过程中可能会遇到地问题,该如何解决等的内容。
五、个人技术总结
OnItemClickListener接口回调实现RecyclerView点击事件
- 概述:
使用ReclclerView列出账单分类,使用OnItemClickListener接口回调的方法实现在RecyclerView.Adapter外实现对RecyclerView的子项的点击交互事件。