终审报告
一、团队成员的简介
PM 李栋 : www.cnblogs.com/dongl
有责任感的PM。
DEV 吴煜: www.cnblogs.com/weiwu
有才华的DEV
DEV 李世杰:www.cnblogs.com/ymyg
有潜力的DEV
DEV 贺翔: www.cnblogs.com/flyingwing
有能力的DEV
TEST 梁鸿: www.cnblogs.com/17-527
有激情的TEST
TEST杜长春:www.cnblogs.com/duchangchun/
有耐心的TEST
二、关于项目
(1)典型用户:
寻找计算机问题答案的相关人员
(2)典型场景:
一个用户想要寻找一个关于计算机问题的答案,但是怎么也找不到,这个时候他发现了XueBa,发现了一片新大陆
(3)团队项目的目标:
老师定义下载4万个计算机科学的网页,包括问答对,PDF,美国名校计算机学院网页。
(4)实际实现目标:
32万个网页,包括问答对,PDF,美国名校计算机学院网页。其中问答对最多,近28万个。
(5)分工合作:
团队6个人,各取所长,有1个PM,3个DEV,2个TEST
PM负责控制项目进度,规划方向,需求分析,系统架构。
DEV负责根据需求编写代码,单元测试自己所编代码。
TEST负责测试项目性能,发现BUG,DEBUG。
(6)代码质量
我们的代码测试覆盖率达到75%以上,老师上次打分满分10分,我们组第一为9分。
三、实际进展
burndown图记录的软件开发过程中的实际进展
四、团队成员在M2 的角色和具体贡献
五、用户测试报告
按照老师的要求,我们小组对自己的爬虫软件做了用户测试,测试之前没有告诉用户测试细节,只说明是一个爬网页的爬虫。下面是测试的时候拍下的照片。
以下是用户和设计者的一些讨论,设计者简称A,用户简称B
A:你认为我们的软件易用么?
B:其实也没什么太多的功能,只是爬网页嘛,还有个界面,挺好操作的。
A:那关于这个爬虫你还有什么想问的地方么?
B:我只知道它在下载网页,但是我不知道下载到哪儿了,你能不能在下载完毕之后或者直接在揭秘那上告诉我你们把这些网页存在什么地方了?
A:哦,这个我们把下载的网页的相关信息都存在数据库里了,你只要访问我们数据库中的表,就可以查看关于网页的一些相关信息,也可以直接读取网页的链接进行访问,表中有一个add属性,记录的就是文件存放的绝对地址
B:哦,原来是这样。你们这个爬虫不是要爬关于计算机方面的么,能把不是关于计算机方面的网页给过滤掉不?
A:目前可以限定特定的网址,比如限定只能下载csdn下的网页等,对于一般的网址,下载下来的网页目前还没有很好的过滤方式。
B:那如果我下载了重复的网页怎么办?
A:我们不是把网页存在数据库中了吗,新下载网页的时候我们会进去比对,重复的链接我们是不会下载的。
B:好的,其他的没什么问题了。
A:给我们个评价吧。
B:中的来说,相当不错了。
A:嗯,谢谢你的帮忙和提出的建议和问题。
六、M2的进步
我们已经可以分析出网页的各种信息,我们从这个http://academic.research.microsoft.com/RankListentitytype=8&topDomainID=2&subDomainID=0&last=0&start=1&end=100
爬取并准确抽离出来了关于计算机领域的关键词3万个,做成了个关键字字典,并把这个字典交给了pipeline组,以方便他们的工作。
M1阶段我们下载问答对时,可能连没有答案的问答对都下载。在M2阶段,这种情况绝无发生,我们下载的都是已解决的问题。
所以我们在下载前对网页的分析有了很大进步。
同时我们在网页可连续下载个数上也有所突破。在M1阶段我们总共才下载了3万个网页左右,在下载过程中终会出现一些BUG,使下
载中断,而在M2阶段,我们总共下载了32万多个网页,可连续下载个数可达到6万个。
七、总结
软件工程师应该算是稀缺人才了,会编程的人一抓一筐,可是会做软件的人就不那么多了,而软件工程师更是这些人中的凤毛麟角。软件工程师的培养是有难度的,而且这个培养过程没有章法可循,更重要的是培养出的产品的合格率比较低,因为我们培养出的大部分人都将成为码农,而码农显然是与软件工程师有较大差距的。几篇文章也在谈论软件工程师培养的困难和软件工程这个学科本身面临的问题,我总结一下几篇文章的主要内容,即为对于软件工程师的培养还没有形成一个很好的体系与方法,而软件工程不等于计算机科学所提出的观点正是这一大问题的子问题,就是我们着重于培养软件工程师的计算机方面相关素养而忽略了其它,归根结底还是因为没有很好的培养体系,不知道如何培养所致,所以我把它归为主要内容的子问题。
那我们先来看看子问题,我觉得这个问题是普遍存在的,如果说有解决办法的话,我认为需要让计算机系毕业的同学继续深造,在文科专业深造,或者,让学文科的人来编程。第一种办法周期太长,恐怕计算机系的同学不愿意干也干不了,这纯粹属于赶鸭子上架,让计算机系这种典型的工科男学习文科,还不如把我们杀了来的痛快是吧;第二种方法,显然不可行,不是我有对文科的偏见,毕竟术业有专攻,文科的人很难理会计算机的本质,让他们学个C语言还行,到计算机组成原理就不太吃得消了,到了编译原理的话恐怕得有一半人跳楼,然后剩下一半人回家。所以,这两个方法均不行。软件工程这个活真不是什么好活,一边是计算机,一边是人,明明软件工程师是人,可是非得把他们变成人和计算机的纽带,这个要求就高了,一边他得懂计算机,一边他得懂人。所以好的软件工程师为什么这么难就可以理解了,我们真的没有办法培养这样的人才吗?我觉着还是有的,我们在课余是否可以培养一些人文素养,其实不要求我们专门去一心一意做这件事,这件事只要穿插在日常的计算机相关课程中间就好,比如学一些沟通,比如学一些经济,不需要十分深入,只要了解大概就好,不需要把我们带入这些相关领域的大门,只需要让我们在大门口往里一窥就好。而现在学校的培养在这方面是很欠缺的,不说开设专门的课了,就连全校性的关于人文的大讲座都很少,关注一下学校的讲座信息,不是关于出国考研,就是关于就业的,要不然就是几个有头脑的码农不小心变成了高富帅的成功经历(比如李彦宏),可这有什么用,我们毕竟不是他们,他们的成功是不可复制的。软件是人写的,这些人正是软件工程师,试想写软件的工程师都不能了解客户的需求,不能与客户有效沟通,他们可以写出客户需要的软件吗?一旦软件写出的软件和客户需要的软件差别过大,无论这个软件运行多流畅、bug再少、算法再好,这些又有什么意义呢?我们做软件的最根本的目的不正是要能解决需求问题吗?至于其它的,只是在这个继承上的点缀而已。就好比是顾客想买一斤水果,可你递给顾客一碗佛跳墙,你说,这是国宴里的招牌菜,他,他接不接受还真难说,这个例子有待完善。以上我想说明沟通很重要,能想人所想也很重要。毕竟做软件不是写C语言作业,需求就那些,也不用顾及界面友好等等,软件是解决问题的,而且很大一部分软件解决的问题不在计算机领域内,这就要懂相关领域的知识并且能在给领域为客户着想,比如做财务报表,本来需要做一些假账,结果做成了真帐,出了这种事顾客只会责怪软件工程师,而不会承认自己的错误,有些东西就是不言而喻的,但对于天天coding的程序猿来说,还真未必知道。其实这也不能全怪工程师,毕竟你让人家一边搞技术一边搞人事,这很难的,要怪只能怪我们这是中国,谁让中国人说话只说三分,剩下七分要靠猜呢?
关于总问题,上面篇幅也涵盖了一些内容,关于把计算机人员当成板砖哥一样的培养,不对,是建筑设计师,这是个新颖的想法,这两个职业确实有很多共同之处。有一篇文章也举了一些例子来说明它们的共同之处,但我认为有几个比较大的区别还是需要考虑的:1、建筑师只管规划图纸,至于建设过程的细节问题可以不予考虑,而且少了很多人事上的担忧,比如说需求比较明确,设计的是学校宿舍就要有配套的浴室和开水房,设计的是商场就要有逃生避难场所,很多需求是硬性的也是相同的,需求的种类有限,更进一步,这些需求是在大框架下小的需求,和大框架可以毫无关系,比如过道中安排椅子等,这就表明考虑具体需求的人和建筑设计师可以是不同的人;反观软件工程师,就比较苦逼了,他们需要考虑的事情很多,而且各种各样的软件工作的领域跨度很大,更要命的是细节上的考虑是和通盘考虑糅合在一起的,如果不考虑周全,一个细节上的改变就可能引起程序很大的改动,这也就是说一切事情必须自己搞定,没有除了工程师的人可以代替你完成任务。2、就是这两个体系的差别了,建筑业已经形成了培养工程师的教学体系,所以才可以有导师带领来更好的实践它,而软件工程就没有这样完备的并且有效的培养体系,不同的老师带出的软件工程师可以是长得不一样的。在知识传承过程中没有形成教学体系的一个典型的行业就是算命,同一个老师带出的学生,领悟多少就是自己的事了,不同老师带出的学生那更是千差万别,如果让他们给同一个人算命,肯定每个人又不同的答案。不过软件工程还没有沦落到这个地步,否则这些软件工程师也就都到街边自己打个什么半仙的横幅摆摊去了。至于其他的区别,我现在还没想到。有区别但也不是说这种思路行不通,只要有共性就必然有行得通的地方,老师可以在实战中教会学生领悟需求的能力、沟通的能力等等。
综上,培养软件工程师是个体力活加技术活,不过我们也不能操之过急,毕竟中医都传承了几千年了,到现在也是没弄明白什么是冷啊热啊,什么气啊虚啊的,不是照样一代传一代,照样治病吗?