古德拜
这个作业属于哪个课程 | [2021春软件工程实践|W班(福州大学)] |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 回顾与总结实践经历 |
其他参考文献 | 《构建之法》《Unity3D从入门到精通》 |
第一部分:课程回顾与总结
1.问题回顾
问题链接
-
问题一
结对编程真的能提升效率吗?
寒假期间当我第一次接触到结对编程的概念与想法之后抱着这样的疑虑,好在软件工程实践提供了两次结对作业,这两次结对作业很好地向我回答了这个问题,同时也让我认识并且收获了更多。在原型制作作业中,一人制作原型,另一人不断提供原型制作所需要的图片、文字信息,以及关于原型界面的好想法,这样合理的任务分配使得整个制作效率得到了有力的提高。在结对第二次作业原型实现中,想法层面上,最终的决定总会取决于两人思想点子中更好的一方,甚至由两人想法所结合的更好的方法;技术层面上,因为过程之中两人总是存在着交流,所以在编程中总会经由两人的讨论而得出更好的代码结构和代码规范,提出的解决问题困难的技术方法往往也更加有效与便捷。综上所述,结对编程确实能很好地提升效率,在条件的允许之下,因为编程质量取决于水平技术高的一方,甚至是两人想法结合后的更好方法,使得软件程序的质量得以提升,编程的效率也能大大提高。
-
问题二
为什么更多的创新是在拿手领域外发现的呢?
在这个问题上助教提出的意见和想法消去了我的疑惑也让我有了更深一步的认识。在领域内的专家在其所擅长所专业知识上的领悟以及理解很明显是比领域之外的人高,而在新想法新点子上,他们往往会考虑得更多更细致,同时也会考虑其是否会和已知的定律相违背从而进行否决或更进一步的发展。而领域之外的人在产生一个新的想法、创新之后,可能因为专业知识的缺乏与不足,可能不能考虑到该创新的可行性和执行力,所以在他们的大多数创新和想法中,有大多数是无法被实现的。
-
问题三
创新时是一个人更有优势还是一个合作的团队更有优势?
通过对书上个人创新和团队创新的例子的对比和分析,个人看来,在一些真理定理的发现上,往往个人更加占据优势,而在技术的创新,科学研究的突破和新产品的创新上,团队往往更加具有优势。在软工实践的团队项目中,可以看到在对一个新产品的研究开发与创新中,通过一个团队的集思广益,往往能够得出一个更好的结论和想法。因此在这个问题上,个人和合作的团队在创新之时,各有各的优势。
-
问题四
P36页 两张PSP图的对比,工程师应该更加有经验,为什么花在代码测试上的时间反而更多了呢
在我们的生活案例,以及众多的科研实验之中,也曾出现了众多的因为软件bug而产生的经济损失,人员伤亡,我们因此可见软件测试一直是整个软件周期之中占比最大的一块,所以花在代码测试上的时间理应更多。在bate冲刺阶段中,软件测试给了我深刻的印象和思考,在一次测试过程中出现了我们花费长时间却无法解决的BUG,最后是在上一阶段的软件测试中找出了问题所在。这也让我明白了在测试过程中能否保证测试范围的覆盖率和正确率是十分重要的,更加有经验的工程师有着更加丰富的测试经验和测试能力,以及他们所掌握的测试工具也更加齐全,在测试中所能覆盖的范围也更加广泛且准确,从而保证程序的正确性,因此花在代码测试上的时间反而会更多。
-
问题五
在一项团队合作的项目中,要怎样去找到一个合适的团队合作模式?
在这一学期的软件实践中,也经历了多次的团队实践和团队所合作的项目,通过观察在这个过程中我们团队合作模式的形成以及通过对《构建之法》中的多个案例的分析,我认为大致可以通过以下几种方式:一是为团队设置一个磨合期,在磨合期中对彼此所擅长的技术,所适合担任的团队角色,以及整个团队所适用的相处交流模式进入更深一步的了解,然后去选择各个模式中最适合所在团队的合作模式;二是可以去寻找和本次团队项目相似的以往项目,参考之前团队所采用的的团队合作模式,通过分析其执行的可能性,来对该团队合作模式进行完善,最终进行采用;三是根据团队之间所分配的任务以及主次关系,分析各个模式的优缺点,来寻找对应的团队合作模式。
-
问题六
一味地追求扩展性会有很多副作用,那我们该怎样去把握这个度
在我们进行需求设计的过程中,如果一味地去追求扩展性的话也会产生很多的问题和副作用,而若仅仅是按照用户意愿设计需求,那么我们得到的结果往往也是不能使得用户满意的,因此我们应去把握这个扩展的“度”。而把握这个“度”的方法,在软件工程实践中的各个需求分析阶段和原型设计阶段给出了我答案。在我们经过一轮的需求分析以及设计出软件的大概模型和基本需求后,便将其展示给用户,之后让用户根据其体验感受结果去提出进一步的改进和其他需求,通过这个方法有利于我们去把握这个扩展的“度”,同时又能让用户满意。
2.做中学
-
需求阶段
需求阶段中最大的收获是NABCD模型的使用和原型的设计。NABCD 模型让我能够更好地去进行需求的分析,其中包括需求、做法、好处、竞争与推广,能够使得产品在需求阶段得到更加准确地分析以进入下一阶段。原型的设计中我学会了关于墨刀以及Axure原型设计工具的使用,同时也学会了相关的原型设计技术,能够在相对较短的时间内将程序或产品的大概模型与基本需求展示出来,以便更好地获取用户需求。
-
设计阶段
在设计阶段最大的收获是学会了接口文档的设计以及使用。这有利于今后在相关的前后端项目和工作中提高前后端的对接效率。
-
实现阶段
在实现阶段中我最大的收获是学会了thinkPHP框架以及unity3D。thinkPHP框架让我了解了后端的结构以及编写,学会了数据库的交互,代码的自动生成,前后端的交互渲染,以及mvc结构的基本构造,让我对web程序设计有了更进一步的认识。unity3D中我收获了关于unity引擎的使用,c#脚本语言,UGUI各个控件的使用,以及unity中的前后端对接,让我又了解并且学习了一门新的技术和语言。
-
测试阶段
测试阶段中最大的收获是通过编写与输出相关的代码段从而获取错误信息,这样的方法有助于在测试阶段能够直观地获得错误所在的地方,而不需要再花费更多的时间去进行找BUG;
-
发布阶段
发布阶段最大收获是使用Unity引擎将游戏程序打包成exe可执行文件以及对于web网站的部署。Unity引擎拥有将游戏程序打包成PC端、安卓端、IOS端等等所适配的能力,方便了程序员的使用,也使得游戏不需要去做成多个版本。web网站的部署收获了关于远程连接的使用,数据的上传和公共域名的使用。
3.心得体会
个人项目
- git,github,github desktop这类代码托管工具的使用,能够让我们很好地进行代码的管理,包括代码托管,修改甚至是回溯,在我们当前代码版本出错或者是想要回溯至之前版本时,即可翻阅之前的commit版本,使得代码保存与管理的容错率变得更高。
- 单元测试的使用能够提高程序的正确性,及时地检测错误和修改错误
- 代码规范在各种项目中特别是在我们以后的工作上是十分重要的。代码规范是一个团队中的共同语言,只有在这个共同语言之下,团队之间才能够更好地交流与沟通,同时也能使得整个程序或项目的安全性,扩展性和可维护性变得更好
- 重新温习了java文件的读写操作,让我感受到关于基础知识和底层知识掌握的重要性。
结对编程
- 任务分配以及时间的规划是十分重要的,必须做好统筹规划,按照事情的安排以及轻重来安排时间,不能随心所欲或者是想一出是一出,这样只会使得整个项目进度变得缓慢,效率也会随之变得十分低下
- 接口文档对于整个项目的开发,测试等都起着十分重要的作用。能够让前端开发和后端开发人员去更好地进行配合,提高了工作效率,同时也方便了测试阶段的测试,有利于在寻找BUG时定点地去测试接口,让查看和维护变得更加容易
- 结对编程能够很好地提高编程的效率以及程序质量,在问题一中也曾提及,在条件的允许之下,因为编程质量取决于水平技术高的一方,甚至是两人想法结合后的更好方法,使得软件程序的质量得以提升,编程的效率也能大大提高,在信息的共享,知识的探讨,以及两人之间互帮互助,让许多的问题和困难迎刃而解。
- 一开始查看完作业之后,心中是十分焦虑的,也因为自己的web程序设计是较为薄弱的,因此也担心是否能够很好地去完成这次任务,但是通过网上教程的学习,不断寻找合适的框架技术,最终也是完成了结对作业二的代码编写,所以遇到不会的便去学,遇到困难想方法解决,船到桥头自然直。
团队项目
- 制定好每日的相关工作要求与进度能够有效地督促我们完成相关的工作
- 前端开发人员与后端开发人员的及时沟通交流是十分必要的,例如在接口传递的数据上,通过沟通设计合理的键值能让前端人员更好地去使用这个接口,也有利于后端人员去返回数据。
- 软件测试是一门“必须课”,在问题五中有提及关于软件测试的必要性,同时,掌握一些软件测试的工具也是十分必要的,有效的工具不仅能够提高我们软件测试的效率,也能大大地节省人力精力。相关的自动化测试技术也是十分重要的,人工测试总会存在着一些局限性,自动测试有时能够完成人工所做不到的测试,同时也能做一些复杂且数据量大的测试,这是人工测试所达不到的。
第二部分:个人技术总结
博客地址
概述
unity预制体是用来创建和存储一个游戏对象的所有组件,各项属性和子对象。在unity游戏设计的过程中,当需要多次重复使用同一个游戏对象时,便可以使用预制体,将该游戏对象设置为预制体。