个人作业——软件工程实践总结&个人技术博客
这个作业属于哪个课程 | 2020春S班 (福州大学) |
---|---|
这个作业要求在哪里 | 个人作业——软件工程实践总结&个人技术博客 |
这个作业的目标 | 软件工程实践总结&个人技术博客 |
作业正文 | 个人作业——软件工程实践总结&个人技术博客 |
其他参考文献 | 《构建之法》 |
一、回望
(1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强软件工程专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
- 收获
- (1)熟悉软件项目的开发流程
软件=程序+软件工程:正是因为对软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容的完成,才能完成把整个程序转化成为一个可用的软件的过程。软件工程包括了开发、运用、维护软件的过程中的很多技术、做法、习惯和思想。在软工实践中首先对软件先进行需求分析,包括原型的制作;然后进行数据库设计和系统设计;接下来进行alpha版本的开发,形成产品雏形;最后进行beta版本的开发,完善和增加功能;当然还有后期的发布和维护。熟悉各个开发阶段所应得出的报告。 - (2)掌握各种开发、测试、管理项目的工具
学会了Axure、墨刀进行原型设计;学会了运用单元测试、利用postman进行接口测试;学会了利用github进行项目管理。 - (3)学习了后端SpringMVC框架
学习了利用SpringMVC框架进行Web端的开发,实现前后端、数据处理的分离,虽然我们小组最后没有进行Web端的实现,但还是掌握了这项技能。 - (4)团队合作能力、文档撰写能力、答辩能力都有很大的提升
对团队的分工合作更加了解,懂得如何去和新的队友交流讨论合作;文档撰写能力得到了提升,Markdown文档的编写、团队作业中数据库开发文档的编写、每一次的答辩ppt的制作等等。同时,我们小组大部分线上答辩都是分配给我,让我由原来得做充分准备,写好演讲稿,自己演练一遍,到后来准备一些关键词就可以进行答辩,越来越得心应手。
- (1)熟悉软件项目的开发流程
- 不足
- (1)没有掌握vue前端框架
对前端框架毫无了解。
- (1)没有掌握vue前端框架
(2)你在第一次作业的个人简历中描述了这门课程结束后,你预期你将增长的能力、技术、技能,并绘制了学习路线图。对比当前你的所学所得,你达到了当时的预期值吗?
预期值:
工程能力:能够合作开发出一个比较完善的项目
技术、技能:熟练掌握一个软件工程项目的项目设计、需求分析、软件设计、编程、软件测试、软件维护的全过程
就第一次作业的个人简历中预期增长的能力、技术、技能,基本上达成了预期值,整个软件项目的开发流程(项目设计、需求分析、软件设计、编程、软件测试、软件维护的全过程)都经历过,算是掌握了项目的开发流程,也能够合作开发出一个比较完善的项目。
但是就学习路线图而言,差的太多了。自己制定的学习路线都是得课外自学的知识。在第一次作业中制定的学习路线,高估了自己在家的自制力和自学能力,低估了这学期课程的繁重和在家学习的困难,离预期值还是有点距离。目前只是学习了吴恩达的机器学习课程的视频,学习一些线性回归、logic回归、决策树等机器学习方面的知识,发现机器学习对高数方面的要求有点高,反反复复地回顾了挺多高数的知识。
(3)哪一次作业让你印象最深刻?为什么
寒假作业二-疫情统计这次作业让我印象最深。
首先在这次作业中,给予的时间短,自己不会的知识和技术多,当时给我带来了非常大的压力。当初自己是一个连git是啥都不懂的一个小白,更不会使用github。所以自己自学了有关git的知识,学会了github管理项目,也学会了PSP个人开发流程。后来代码开发完成之后,基本没剩多少时间,可是还有单元测试没有完成,而自己又从来没有做过单元测试,所以又火急火燎地去了解了一下单元测试,模仿着做出来。作业完成后,老师在评论里点评了单元测试的问题,确实自己一开始时间太紧,单元测试没完全搞明白,后来又去回炉重造了一翻。
这次作业让我在短时间内自己独立完成学习各种新的知识、工具,外加代码的编写。同时,这次作业让我记忆深刻的是,对文件的输出没有用UTF-8的格式输出,没有加-encoding-UTF-8,导致结果明明是对的,却一分也拿不到,太心酸了。包括后来对代码进行改进,也再一次加深了对这次作业的印象。
(4)在课程问卷中,我们统计了你在课程上花费的精力和提升;现在请你再次将这些数据罗列出来,作为个人的记录。包括以下内容:
- 统计一下,你在这门软件工程实践中,一共完成了多少行的代码;
大概5000行。
(有很多任务例如模型制作,虽然不是代码编写,但同样需要花费不亚于写代码的大量时间,又如答辩的准备等) - 软工实践的各次作业分别花了多少时间?(做一个列表)
作业 | 花费时长(h) |
---|---|
软工实践寒假作业(1/2) | 18 |
软工实践寒假作业(2/2) | 40 |
结对第一次—疫情统计可视化(原型设计) | 48 |
团队作业第一次—团队展示和项目展示 | 10 |
结对第二次作业——某次疫情统计可视化的实现 | 48 |
团队作业第二次——团队Github实战训练 | 8 |
团队作业第三次—项目需求分析 | 24 |
团队作业第四次—项目系统设计与数据库设计 | 32 |
个人作业——软件评测 | 16 |
团队作业第五次——站立式会议+alpha冲刺 | 76 |
团队作业第六次——beta冲刺+事后诸葛亮 | 52 |
个人作业——软件工程实践总结&个人技术博客 | 16 |
- 累计花了多少个小时在软工实践上?平均每周花多少个小时?
累计388h,平均每周花费21.5h。 - 学习和使用的新软件;
Axure RP(原型制作),Xmind、MindMaster(思维导图),JProfiler(java程序分析工具),3D Max(3D模型制作和动画制作),Photoshop(图片制作) - 学习和使用的新工具;
Cmd Markdown(Markdown文档编写),GitHub(项目管理),腾讯通讯工具,Postman(用于对接口的检测) - 学习和掌握的新语言、新平台;
Markdown语言,Spring框架,hibernate
墨刀,博客园 - 学习和掌握的新方法;
使用 GitHub进行项目团队合作,使用SpringMVC框架进行web前后端分离,使用postman测试接口,使用JProfiler进行性能测试,使用PSP个人开发流程 - 工程能力的提升;
开发流程的熟悉,文档编写规范性(需求规格说明书、数据库设计说明书、系统设计说明书等),学会了原型设计,代码编写遵循代码规范,使用github进行项目管理和团队合作 - 团队合作上的提升;
在团队合作上提升最大的是和伙伴们的沟通合作能力。感受最深的就是alpha冲刺和beta冲刺和队友 启文 进行团队交流。在alpha冲刺我们两个交流常常跑题,效率较低,任务分配不是很顺畅,会磕磕绊绊。但是在beta冲刺中,由于我们两个有了alpha冲刺的经验,所以beta冲刺两个人讨论就得心应手,彼此之间默契度十足,三言两句交流就能明确目标和各自任务。再者就是更加能发现自己在团队中应该充当怎么样的位置,并不一定自己一定得充当开发者的角色,有时候美工、文档编写、答辩也占据了非常重要的地位,这也是自己在软工实践中花费很多时间的部分。 - 其他方面的提升;
自学能力的提升:基本每次作业都有不懂的知识,都得自学,又有时间限制,所以大大提升了我的自学能力。
抗压能力的提升:deadline的压力、这学期十几门课程的压力,同时面临考研就业的压力
二、团队总结
1.你是组员还是组长?你觉得你自己在哪些地方做得好?你觉得自己还有什么可以改进的地方,具体可以怎么改进?
我在我们团队中是组员的身份。
做的比较好的方面应该是我刚好填补了我们组没有人懂同时又没有人愿意学的部分。因为我这次负责的主要是美工(宠物模型的制作)和每次的答辩内容,使用3Dmax进行3D模型制作和Photoshop进行图片处理。这部分我们小组没有人了解过,同时又因为和专业关系不大,所以也没有人愿意学,刚好我以前参加VR社团学习VR技术开发的时候有学习相关的知识,就派上用场了,尽管长时间没使用忘了许多,但还是主动接下来了这部分的任务。同时,我也每次都能按时完成任务,每次小组会议都能到场,并且积极讨论。还有就是自己十分认真对待每一次答辩,因为我觉得答辩非常重要,是一个小组的面子,所以每次答辩都精心做好PPT、写好演讲稿,自己演练一遍。
不足的地方就是我没有及时的提出意见。在团队github实战训练的时候,分工和沟通是非常有问题的,组内没有明确好分工,代码开发基本就集中在两个人身上,其他人都是文档开发或是其他一些杂事,其他人想要做出贡献也不知道怎么做。我当时看出了问题,但是因为和队友不熟悉,我没及时提出,导致我们那一次作业完成的一般。所以后来我们小组讨论的时候大家都提出这个问题,组内积极进行改进。
2.你觉得你的组长(组员们)在哪些地方做得好?你觉得ta(ta们)还有什么可以进一步提升的地方,有什么具体的建议吗?
我觉得组长做的非常好。首先是她的编程能力非常强,对IOS前端开发非常的熟悉和有经验,基本承包了我们小组项目前端的开发部分,给了我们小组带来了很大的帮助。同时,我们小组能够根据每个人的能力和特点进行任务的分配,让每个人都能发挥自己会的、擅长的部分。但是我觉得组长的组织沟通能力要提升,例如有些组员想要有更多的贡献度,但是能力欠佳,应该给予这些同学一些帮助,让他们能在课程中收获更多。
组员们也非常的好,像韩津学习能力很强,代码开发能力也强,是我们小组后端开发小分组的领头人,非常乐于助人;又如启文同学也很积极主动交流,我们两个一起完成小组美工、宠物建模部分。但是我觉得组员之间沟通应该更加大胆主动一点,有话直说,有点时候有些组员之间沟通甚至用匿名。
3.《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
《构建之法》中 萌芽阶段-磨合阶段-规范阶段-创造阶段 这四个阶段我们团队都经历过。
- 萌芽阶段
由于随机组队彼此还比较陌生,缺乏沟通,选个组长也磨磨唧唧,相互推诿,不愿承担重任。 - 磨合阶段
小组经历换组长,彼此之间有了一定的熟悉度,大家开始聊起来了,团队氛围越来越好,能够一起讨论并解决问题。 - 规范阶段
大家从讨论目标,对任务提出自己的看法,到组长分工,到组员各自去完成任务,到中途每天的小组会议,整个过程都严肃认真。 - 创造阶段
大家会主动对项目提出新颖的完善和改进建议。
4.从开发的角度,你在团队中担任了什么角色?你是否完成了该角色的任务?现在你觉得你适合该角色吗?
我在团队负责部分原型设计的工作、需求规格说明书和数据库设计说明书等部分文档的编写,最主要的是负责美工方面3D宠物模型的制作、前端图片的处理,以及每次答辩PPT的制作和负责答辩的任务。我觉得我很好地完成了我在团队中的任务,而且我都是保质保量完成的,包括每次答辩部分也都是精心准备了的。我觉得我是适合该角色的。
三、人月神话
1、怎样证明你学会了软件工程?以下要求你们的团队达到了哪几个?请在随笔中用数据证明上述内容或侧重选择之一。
- (1)研发出符合用户需求的软件
详细内容:用户调查报告 - (2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
我们每次都有详细的项目规划,从需求分析,到具体的数据库设计、系统设计,到alpha冲刺和beta冲刺的实现,到后来的发布和维护,都有定时的进度发布。
日期 | 任务 |
---|---|
2020.5.28 | 讨论功能的具体实现过程以及分工 负责上一阶段宠物建模的同学继续进行优化 |
2020.5.29 | 进行宠物算法的优化 测试人员学习使用新的测试工具 负责上一阶段宠物建模的同学继续进行优化 美工人员优化icon |
2020.5.30 | 优化日记编写页的原型设计 增加周统计页面的原型设计 负责上一阶段宠物建模的同学继续进行优化 测试人员对之前的代码进行新一轮的测试 |
2020.5.31 | 开发新的日记编写页 增加自定义标签的功能的原型设计 负责上一阶段宠物建模的同学继续进行优化 测试人员对之前的代码进行新一轮的测试 |
2020.6.1 | 开发周统计页面 导入3D模型 测试人员对之前的代码进行新一轮的测试 |
2020.6.2 | 开发自定义标签功能 测试人员对之前的代码进行新一轮的测试 |
2020.6.3 | 整体优化,修复bug,准备答辩 |
- (3)并且通过数据展现软件是可以维护和继续发展的。
可以在Github上找到我们的完整代码。
前端GitHub链接,后端Github链接,宠物模型GitHub链接
2、写下属于你自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析,字数不限,开放命题,可以使用你自己喜欢的方式表达
我的人月神话咸鱼的挣扎之路
在寒假作业二-疫情统计的时候,第一遍读题,毫无思路,有很多不理解的概念。什么是git,什么是github,GitHub desktop是用来干嘛的?fork是什么,commit是什么?pull request是什么? 命令行要怎么处理?单元测试是什么东西?作业中给的链接的知识点看了也不是能理解的很清楚,所以我只能自学许多知识。与此同时,还面临着java语法的遗忘。从一开始看缪雪峰的git教程,到后面学习命令行参数的处理,复习java对文件的读写操作,最后又学习了利用JUnite 4进行单元测试,利用JProfiler进行性能测试......勉勉强强掌握了这次作业要求的技能,学会使用GitHub,复习了java,学习了单元检测和性能测试的方法,以及对《构建之法》这本书的学习。
当时看《构建之法》第二章的个人技术和流程以及软件工程师的成长,改变了我长期以来对我这个专业发展方向的很多困惑和误解,我以前一直觉得我作为一个程序员只要学如何写代码,顶多把数据结构和算法掌握清楚、操作系统和计算机网络的知识学习扎实,会写前端会折腾数据库就可以了。后来我才明白自己其实离一个优秀的程序员还差得很远,努力得还远远不够。而且光局限自己把代码写好是远远不够的,团队协作、小组敏捷开发、迭代会议、单元测试和代码复审这些部分都是我之前完全不了解的。
例如代码复审,目的是找出代码错误、发现逻辑错误、发现算法错误、发现潜在的错误和回归性错误、发现可能需要改进的地方、传授经验。“敏捷流程”是一系列价值观和方法论的集合。步骤大概就是,找项目,分配任务,每日例会报告目标和完成的任务,和自己遇到的问题。统一流程Rational Unified Process,团队的各种成员在一个复杂的软件项目中的不同阶段做不同的事。这些不同类型的工作在RUP中叫做规程或者工作流。分为四个阶段:初始阶段(达到生命周期目标里程碑)、细化阶段(达到生命周期结构里程碑)、构造阶段(达到初始功能里程碑)、交付阶段(达到产品发布里程碑)。MSF是微软解决方案框架。MSF过程模型是从传统的软件开发瀑布模型和螺旋模型发展而来的。MSF过程模型的基本元素是阶段和里程碑。
而这些我都是后来在一次又一次的折磨中才弄懂明白的。
在小组中的高光时刻,莫过于自己主动接下美工部分、3D宠物模型制作的工作了。当时因为这部分我们小组没有人了解过,同时又因为和专业关系不大,未来就业大概率用不上,所以也没有人愿意学。刚好我以前参加VR社团学习VR技术开发的时候有学习相关的知识,就派上用场了,尽管长时间没使用忘了许多,但还是主动接下来了这部分的任务。尤其是成为美工小分队的队长,没错,两个人的美工小分队,hhh。3D模型制作部分,我主要采用的是3Dmax软件,这是我们的宠物模型GitHub链接,后来在beta冲刺又给宠物模型添加了不同的颜色。
当然宠物模型的制作并不是一帆风顺的。一开始就我一个人会使用3Dmax,而且我已经有接近一年的时间没有使用了,很多操作都已经忘了或是不熟悉,一个人做模型制作就很焦虑。好在我的队友启文一直主动与我交流,和我探讨模型制作的方法和方案。后来我逐渐一步步教他使用3Dmax,然后两个人一起讨论怎么把模型做出来,再怎么去截图、处理图片,到最后他比较熟悉3Dmax的使用,我们的合作也越来越有默契。
四、建议
1.对于下一届同学,或者大一的同学,你想说:
大学一点都不轻松,想要好好学的人,每天都是过着高中的生活。不想好好学的人,天天寒暑假。进入大学要给自己找个学习的氛围,不要随波逐流,要多学点知识和技能,这样无论是自己面临挑战还是和别人团队合作,都能得心应手,也不用低三下四地抱人大腿了。
2.对于自己今后,你有哪些建言?
小学的时候,老师告诉我,少说话多做事。初中的时候,老师告诉我,该逼自己一把了。高中的时候,老师告诉我,只要做好充足的准备,性格内向也能临危不乱。大学的时候,导师告诉我,对未来的目标明确下来了,你就会发现你和自己身边的人不一样了。这些话,应该会让我记住一辈子,但是自己还是没有完全做到,希望今后自己能够达到吧。
3.对于助教工作,你有哪些建议?
我觉得助教做的非常棒了,而且助教也非常辛苦,对同学们的问题也是知无不言言无不尽。
4.对于软工实践课程,你有哪些建议?对于软工实践课程的上课形式和内容,你有什么具体的意见和建议?在哪儿需要强化或者剔除?
有一点我觉得十分重要,就是这门课学到的东西确实多,但与此同时耗时实在太多了,建议移到大三上学期,大三下同学们考研就业,其他课程也不少,非常影响未来的发展,毕竟这个节点真的挺关键的。
还有就是我觉得小组互评的比重可以再低一点,因为同学之间互评专业性不高,主观性比较大,打分都比较保守。
五、个人技术总结
3DMAX三维编辑命令FFD的使用
技术概述:
3DMAX三维编辑命令FFD是自由形式变形,FFD是网络编辑命令中非常重要的一个命令。它根据创建出来物体的分段数,通过控制点使物体产生平滑一致的编辑效果。FFD分为FFD 2x2x2、FFD 3x3x3、FFD 4x4x4、FFD(长方体)、FFD(圆柱体),不同基本体的控制点不一样。
FFD运用的每次调整的晶格点的控制是比较平滑的,做模型的时候作为大型的宏观的控制是十分方便的。
技术难点:FFD参数的设置、区分控制点与晶格、利用FFD调整模型的方法