对MSRA-USTC 2010的MSRA_SE_TEAM的KOFLive项目的学习报道
2011年8月12日19:30,我们小组的成员与去年的MSRA-USTC 2010的MSRA_SE_TEAM的KOFLive项目的成员田飞进行了长达一个小时的采访和学习。
他们的项目是一个格斗游戏,叫做KOFLive。特点是把现实中的真实人物的图片放在游戏中进行操作。游戏有五个固定的人物,分别是组里的五名队员:A
Mi,Teacher
Tian,程序猿,football
Xin和gossip
girl。每个队员都有有各自的各种炫目的招数。游戏里有三种模式:双人对打,人机对战(涉及到AI设计)和练习模式。下面是他们的游戏的两张截图。
对于他们的项目,我们组六名队员总结提炼出一些问题并与田飞开会讨论,现在总结问题和回答如下:
PLANNING
Q:你们最终做的东西与最初的规划差别大吗?
A:很大。第一,一开始我们计划做到用户可以自己拍照、创建并设定自己的角色。后来发现这个太难做了,涉及到很多没有解决的问题,例如如何从图片中把用户的人体部分给提取出来(image segmentation)。第二,我们一开始计划把游戏做成3D的,后来发现工程量太大,并且实现起来难以做到,最后就做成2D的。【注:可以参考改组去年发布的项目展望:http://www.cnblogs.com/MSRA_SE_TEAM/archive/2010/12/10/1902669.html】
Q: 你们是如何确定要做的项目?
A: 大家在一起提出各种想法,然后一起商量选出一个公认的合适的。
Q:如何一个项目是否有价值?
A:第一就是要难度适合,可以在规定的时间内实现。第二就是觉得会有一定数目的人喜欢用。
Q:你们是如何组织的?如何分配任务?组里都有么角色?这样分配有作用吗?
A:按照传统的软件工程的组织和分配方法:Program Manager,Designer,Developer和Tester。这样分配很有作用,是被几十年经验证实的分配方法。
Q:团队配合方面有什么经验?如何避免有人打酱油?
A:彼此要友好,一定要体谅对方的难处,每个人都有自己的难处,大家互相理解非常重要。
Q:你们是各自有自己明确的特定的任务,不互相影响,还是在一起做事情?对我们做项目的分组有什么建议,像这样两种情况:1.每人做的东西会有一定交叉性;2.每人的任务基本没有太大的交叉性。哪个更有利于团队,或者有其他情况?
A:按照Program Manager,Designer,Developer和Tester各自应该负责的任务去做。
Q:整个过程中是不是所有人都实时地知道整个工程的进度?.
A:是的,而且是必须的。需要经常开会来交流最新进展。
Q:每一阶段,是不是都要根据目前团队进度,来调整方向和目标?
A:是的,而且是几乎无可避免的。因为做的过程中会遇到很多之前没有想到的问题。其中有些问题是很难在一定时间解决的,所以就必须调整方法,方向和目标。
Q:做的过程中,是不是要经常和邹欣老师沟通?你们当时怎么做的?
A:不同的组有不同的需求。如果技术方面确实需要帮助,是应该和老师沟通的。我们当时因为技术方面没有什么问题,所以沟通的并不多。但是如果做学术搜索的项目,可能就会有一些东西需要请教老师。
Q:当几个项目同时进行时,你们是怎么分配时间的?能否分享下经验?
A:我们当时是串行做的。如果是指自己工作的项目和课程项目同时进行,那就是好好分配时间,抓紧时间。我们当时很多人都是经常工作到半夜两三点才回去的。
Q:如果遇到一些瓶颈性的困难导致工程无法往下进行,你们会采取什么措施?是遇到问题马上降低目标难度还是钻研一段时间之后再放弃原目标?
A:应该先钻研问题,一段时间后发现很难实现或者解决就降低目标难度。例如我们一开始准备做3D和用户自己输入图片来创建人物,后来发现太难实现,就降低了目标难度。因为毕竟这是工程项目,不是研究。
CODING
Q:对没有接触过Silverlight和c#的同学有什么建议,就是如何快速上手?
A:买书或者下载手册看。而且老师会安排人讲课,这个课很好也很重要,一定要好好听。
Q:编程方面有什么经验或者教训吗?例如如何选择编程语言和编程环境?
A:最好用C#,因为大的工程使用比较“低级”的语言很有可能会造成内存泄露之类的问题。编程环境就是TFS,这个也会有人讲,要好好听。
Q:对于那些编程基础不是很强的人,应该如何尽快融入组内工作?被安排些什么任务比较合适?
A:让所有人尽快容易组内工作很大程度取决于Program Manager的工作。对于任务量的安排,一定要人尽其能。有些人编程能力弱一些就不要让他/她们做太多编程,例如可以做设计和测试。要发挥每个人的长处,互相体谅,这是非常重要的。
TEST
Q:你对测试的看法是什么?它的重要性有多大?
A:测试是很重要的。但是我们没有办法做很专业的那种软件测试。不过我们一定要有足够的测试。而且整个项目过程中都需要测试,及时发现bug并且及时解决它。
Q:你们是如何设计你们的测试样例的?
A:我们做的是游戏,主要就是玩游戏。这个问题可以问做学术搜索的同学。
OTHERS
Q:你们的工程中,你觉得最大的失败或者最后悔的事情是什么?如果让你们重做一遍,能否完全避免它再次发生?
A:第一个就是初期目标定的太高,没有查询足够的相关资料和信息。第二个就是初期的计划中软件框架一开始没有想好,要做哪几个模块,怎么实现等等细节没有想好。你们设计的时候不要眼高手低,一定要设计好,越详细越透彻越好。磨刀不误砍柴工。如果再做一次也没有信心做好,因为设计和架构这个东西,说起来容易做起来难,所以大家一定要用心做。你们如果第一次就能做好这个就太牛了。
Q:除了专业技能的提高,软件工程还给你带来了什么启示?
A:与人的合作技巧和能力。从这门课学到的与人的合作能力非常有用。这对我们现在在微软亚洲研究的工作已经有了明显的作用,对以后的学习和工作也一定会有很大帮助。
Q:如何吸引更多用户?如何才能让用户更喜欢用我们的产品?
A:第一就是对自己的产品要自信。然后就是大力宣传了,呵呵。【注:根据MSRA_SE_TEAM的博文KOFLive Beta 下载情况及用户反馈,截止到2011/3/13 10:00 pm的下载量为1631次(没有计算通过U盘、网络硬盘等设备拷贝的部分)。所以仅从这个数据来看,用户量还是比较客观的。】
通过这些我们可以把我们学习到的东西总结如下:
- 前期的设计一定要做好。不能眼高手低,好高骛远,也不能过于简单。需要有足够的细节,软件的框架,实现的方法都要考虑清楚。
- 要注意团队之间的合作,发挥每个人的长处,相互理解相互配合。安排任务时要考虑到每个人的不同情况。PM,Designer,Developer和Tester要各尽其能。
- 要好好听课,听课对于学新的知识(Silverlight,TFS等)很重要。
我们自己对该项目的一些想法:
- 这个项目最后发现自己本来的设想“用户自己输入接受用户输入的照片,从中提取出人的影像,加入到游戏中,让用户可以操纵任何他想操纵的人来进行对打!“难以实现,最终放弃这个功能。根据田飞的描述,难度就在于难以提取照片中的人物影像。但是我觉得可否限制用户输入的图像的内容,例如背景必须是白色的,影像必须是摆好的某种姿势,这样会不会容易很多?