软件工程实践总结&个人技术博客
标题
这个作业属于哪个课程 | 软件工程2021W班 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 作业目标 |
作业正文 | ...... |
其他参考文献 | 《构建之法》 |
课程回顾与总结
回顾问题
-
问题1:如何决定一个软件足够好?
在软件工程实践中,就给用户使用的软件,我理解了,决定一个软件是否足够好,需要考虑许多方面的因素。在beta冲刺中,我的小组的成员始终在发现并改正各种各样的bug,使程序的运行逐渐符合预期,最终在大家的共同努力下,让程序运行符合预期,经过测试也并未发现任何问题,我们认为我们的程序在经过不断的修改已经足够好了。但当我们将程序发布给用户使用的时候,收到的反馈却仍存在许多问题。不仅是程序使用上的问题,使用习惯上也给用户带来了不便。因此决定一个软件是否足够好,不仅要保证程序完成它要实现的目标且很少出现bug,而且因为软件是给用户使用的,因此给用户展示的界面,功能,使用习惯等都应满足用户的需求。这才能算一个好的软件。 -
问题2:结对编程是什么?
在软件工程实践中,通过结对编程,让我对结对编程有了深刻的了解。在结对编程中我与我的结对同伴,共同完成了一个论文管理系统。在编写代码的过程中,对于存在的问题,我们一起讨论解决,对于我所遇到的不能解决的问题,我的结对同伴也会提出他的建议,并帮助我,相反对于他,我也如此。这极大提高了双方的编程效率,代码出错的概率也大大降低了。总的来说,结对编程就是两个人一起编程,互相讨论,互相监督,共同完成一个项目。 -
问题3:作为刚入门的软件工程师,是学习掌握越来越多的技术越好,还是精通某一方面比较好?
我认为精通某一方面的技术对于一个刚入门的软件工程师比较好,以本次团队实践为例,我们小组要使用unity开发一个游戏,脚本的编写需要用到c#。在上学期,我选修过c#,但并没有深入学习,我认为所学的知识对于编写游戏脚本已经足够,可当我真正开始编程时,才发现我所学到的知识大部分都用不上,只能和团队中那些没选修过c#的成员一样重新学习相关内容。因此如果当学习的技术很多,但没有一个是精通的,那么对于一些专门的领域,所学的内容就没有任何作用,现如今对于某方面只掌握皮毛是不可行的是会被淘汰的,只有精通某一方面才能脱颖而出。 -
问题4:单元测试必须由最熟悉代码的人来写,如果程序的作者没有意识到某些问题,是否需要其他人的协助。
在beta冲刺,游戏放牌逻辑是由其中一个组员完成的,他经过单元测试后并未出现任何问题,但是当另一个组员使用这个放牌逻辑是却出现了问题。在本可以放牌的位置却显示不能放牌。最后在两个人的协作下双方一起讨论放牌的逻辑,最终解决了这个问题。因此对于单元测试,虽然必须由最熟悉代码的人来写,但是仍可能出现问题,因此对于一些比较复杂的单元测试,他人的协助还是很有必要的。 -
问题5:软件团队的人员也会流动,新的成员要尽快读懂已有的程序,了解程序的设计,这叫做程序理解。如果程序较为复杂,通过何种方式能最大效率的进行程序理解
在beta冲刺前,我们进行了小组成员的换组。而我们组新换进来的小组成员,从来没有接触过unity游戏开发,但是在组长的安排下以及小组其他成员的帮助下,还有因为他的编程基础较好且自己认真学习,使得他很快就读懂了已经编写好的复杂程序,并能参与到游戏的开发中。因此要想最大效率地进行程序理解,小组中其他成员的帮助起到了不小的作用,但最重要的还是要使自己的基础足够的好,并且在编写程序中也不断进行学习。
在实践中学习知识点
每个阶段收获最大的知识或能力是什么?
- 需求
在需求分析阶段,我们主要的关注点集中在做什么,而不是怎么做。在特定环境下发生哪些用户交互,系统处理的对象是什么,要执行什么样的功能,定义什么样的接口,有哪些约束,这些都是需求分析所要做的。 - 设计
在数据库设计阶段以及接口设计阶段,要仔细考虑各个表中包含的内容,,对于一些数据的获取是不是比较困难。接口请求的数据是否容易获取,接口返回的数据是否符合要求。 - 实现
收获最大的就是使用unity和c#语言和其他成员共同开发了一款卡牌游戏,在编程实现过程中,学会了使用unity,通过使用unity丰富的组件构造大体框架,并透过c#脚本的编写,使这些组件动起来,或是完成动作的交互。还有就是在实现过程中,让我感受到了,各小组成员的默契配合以及团结合作,是一个团队能够顺利完成任务所必须具备的。 - 测试
提高了进行单元测试的能力。还有就是通过运行程序,通过直观的结果发现bug,寻找bug出现的原因并修改,然后重新运行程序。 - 发布
发布后,用户使用的反馈情况是非常重要的,对于程序的完善有很大的帮助。对于用户反馈的问题,可以精准快速地找到需要修改的地方,节省了大量的寻找时间。
理解与心得
- 个人项目:在个人项目中,发现了自己存在的许多问题。由于编程基础薄弱,在进行WorldCount编程中没能拿到理想的分数,这对于我来说是一个非常严重的问题,因此在这之后,每天都会抽出固定的时间进行编程,锻炼编程能力。通过这几个月的编程练习,我的编程能力得到了提高。个人项目的实践是发现自身存在的问题的最好的手段。
- 结对编程:结对编程让我初步了解了合作的重要性,以及体会到了合作所带来的好处。首先通过结对编程,不仅提升了自身的编程能力,通过结对同伴,也学到了许多编程知识。其次,在遇到难以解决的问题时,不像之前个人项目时,只能自己一步一步自己慢慢解决,现在在编程中遇到问题时,可以找结对同伴共同讨论,一起解决,这极大地提高了效率。同时代码的错误率,因为有结对同伴的监督,也会大大降低,这对于之后的测试和检查带来了很多好处。
- 团队项目:团队项目使得合作的重要性进一步凸显,首先,每位组员都分配到相应的任务,使得最终的任务能够有条不紊的进行。其次,因为任务被分为若干部分同时进行,所以完成的效率是极高的。最后,由于每个组员只负责一小部分,所以在完成的质量上也会提高。
个人技术总结
博客地址
概述
房间列表中各个房间的属性类似,因此可以通过创建一个预制件,来动态生成房间列表中的一个个房间。通过预制件的使用可以轻松创建许多具有类似属性和操作的物体。