项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 提问回顾与个人总结 |
我在这个课程的目标是 | 了解软件开发,提高自己的工程能力和团队协作能力 |
提问博客链接 | 2020软工个人博客作业 |
1.问题解答
问题1.单元测试
之前我提出过这个问题
在我的实际经历中,写代码的人本身可能由于能力不足或者考虑不周到从而不能写出比较完美的单元测试,那么此时是否应该将单元测试的编写交给他人呢?
经过了团队项目的开发,我对这个问题有了更多的了解。因为我本身负责的就是开发工作,也一并负责了单元测试的编写,这个过程中我就发现了我能力上略有不足,没有办法编写出较为完善的单元测试。尽管对于代码整个执行流程比较了解,但却总是会考虑不周,漏掉一些情况。因此最后也请求了他人的帮助,事实证明群众的力量还是强于个人的。所以我对于这个问题的答案是,如果写代码的人能力不足,那么写代码的人可以负责一些主要部分的单元测试,而将其他部分交给更有能力的人。
问题2.小概率需求的问题
有这么一个问题
对于商用软件来说,大部分情况下某个需求可能带来的利益与实现它要付出的代价可能是不成正比的,那么在这种情况下,我们是否还要去实现这个需求呢?
经过了团队项目的开发后,我认为,这类需求可能才是项目的核心竞争力。如果你的项目有的功能别的项目也有,那么你可能就没有一个让客户记住并选择你的项目的理由。因此,可能从表面上看,实现这个需求得不偿失,但事实上,它可能会让客户看到你的项目与众不同的地方,从而使客户选择使用你的软件。
2.产生的新问题
- 在团队项目开始的时候,我们团队采用自荐的方式来决定分工,但是这种方式可能会有,某个成员在开发过程中发现自己不适合这个角色的情况发生。说明这种方式不是很科学,那么我们该怎么去决定人员分工?
3.学到的知识点
1.需求
学会如何使用NABCD分析去了解用户的需求,并且在这阶段要做到尽量精确分析,这样才不会在以后的开发过程中多走弯路。
2.设计
设计有两方面,第一个是对软件功能的详细设计,列出软件的使用流程、逻辑等。第二个是对具体实现进行设计,决定使用什么语言和框架等。设计时还要将任务分解,以便于将任务分配给每一个员工。
3.实现
我们项目是使用unity3d,c#语言编写的游戏。在实现时,代码是比较重要的一部分,但是注释也是非常重要的,没有清楚的注释,会给后续开发者的工作带来很大的麻烦。因此,代码规范和注释的编写,是这个阶段很重要的事情。
4.测试
在实现的过程中要同步编写测试代码,尽量确保每一个阶段每一部分实现的代码都不出现问题。
5.发布
发布在软件针对的群体中,并且做好推广,否则用户量将会很低。并且应该注意收集用户反馈,这些反馈对于软件来说十分重要。
6.维护
在软件发布之后,根据收集到的反馈对软件功能进行改进。
4.理解和心得
个人项目
对于个人项目,作业内容感觉和之前的代码作业没有太大区别。但这个作业应该更多针对代码的规范,github的使用,单元测试的编写,而这些都是团队项目中很重要的部分。因此个人认为这个作业目的不在于写代码,而在于为之后的团队项目做铺垫。
结对项目
结对编程是一个从未见过见过的"船新"合作方式,这个项目注重的点则在于合作。虽然只是两个人的小规模合作,但是要考虑的方面也很多。例如两个人之间的沟通,两个人的时间协调等。这些做的好,就能达到1+1>2的效果,反之,则可能还不如一个人有效率。
团队项目
技术方面。主要学习了如何利用unity实现简单游戏功能,还学习了unity里的动画控制和坐标关系等知识。
团队方面。首先,在做较大项目时,将任务进行分解并分配到对应的角色是很重要的,这会让人明确自己的工作目标,从而提高效率。其次,作为负责程序编写的成员,明白了开发和测试是不能完全割裂开的。在进行一项开发任务之前,应该提前编写好对应的尽量完备的测试程序。最主要的是锻炼了团队交流和团队协作的能力,在一个较大项目的开发中,团队成员之间的合作非常重要,因为一个环节的完成情况都会影响到整个软件,所以大家都会互帮互助,争取尽早尽好地完成任务。和一个团队的成员在一起工作还会可以学习到他人解决问题的方法,他人思考问题的方式。经过大家几个月的通力合作,最后可以说是完美地完成了我们的软工项目,这个过程用到的所有方法和成员间的所有交流都是宝贵的经验。