我们想成为继往开来的一届
在经过了α阶段的研究,稍微对爬虫和数据处理这块整理清楚了思路,总结之后计划了一下下一个阶段的工作重点,
其实感觉目的还是挺明确的,稍微发篇博客记录一下这个阶段性的进展。
首先先说α阶段的工作重心和遇到的困难:
一、阅读代码,辅助性文档完全缺失
第一个阶段最主要的是承接往届的代码,就是要获取到源代码,然后读明白个大概,至于细节功能实现,这个之
后慢慢深度研究。在读代码这个阶段,我们遇到最大的问题就是,完全没有辅助理解的文档和注释,这个为我们迅速
接手项目造成了巨大的挑战,在没有辅助性文档的情况下,想要在短时间内读明白整个大工程几乎是不可能的,无奈
之下,我们搜索到了往届的团队博客,根据每日例会的汇报博客中的微小线索,一点一点拼凑整个信息集合。之后更
让人绝望的事情来了,在往届团队博客的置顶总结中,我们看到了让整个情况更恶化的一句话。文末原文摘录:
********************************************************************************************
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
我们学到了测试也是非常重要的,只有这样才能及时发现软件中的问题,并作出相应的改进。我们会利用与写代码同等的重视去看待测试。
我们会直接摒弃学长的代码,然后自己重新规划,重新来做!
警戒下一届的学弟学妹们:
请推倒我们的代码,重新架构!一开始与所有组进行沟通,了解所
有情况之后再来着手,否则就会陷入泥潭之中不可自拔。谨记谨记。。。。。
*********************************************************************************************
我不知道学长在最终总结里写下这句话的时候,心情是如何的,想必应该不是很开心的。但请相信我,当我看到
这句话的时候,内心绝对比他感觉更糟糕,我们唯一的线索,断了。
真是个愁人的情况啊,我们整个组看到这些情况的时候心里不免抱怨一句,没有文档,跑不通的代码,连接不上
的服务器,看不懂的整体架构,细节实现就更不必说了,连想去寻求帮助的学长似乎都放弃我们了呢,真是……锻炼个
人能力啊。
还好大家都是被一路虐过来的,可惜归可惜,但是大家还是没有放弃的,代码看不懂就根据变量名猜吧(吐槽一下
里面的英语拼写错误),代码跑不通,调试一行一行的跑,总之各种偏招歪招用尽了,代码总算能跑出个像样的样子来,
整体结构说不上明察秋毫,但是大概框架是能梳理出来的。
当我们守得云开见月明,就发现了事实上,此月仅算是个十六夜之月(残缺之意),很明显的感觉到代码是被一代
代团队像揉雪球一样攒起来的,凑合能用,但是问题百出。
其之一、模块功能重叠,代码冗余。
工程整体采用面向对象编程,一共定义了26个类,但是在这26个类中有近三分之一的类是没有被调用过的,那么为
什么要写这些类呢,我们发现,这些类中的功能函数或者就是个空函数撑个样子,或者它的功能在其他类里面被实现了,
一个模块的功能被化整为零塞进了其他的类中,于是就出现了这么多个名存实亡的模块。
这部分是对我们阅读代码阶段造成误导的罪魁祸首,本身没有注释就很伤,还有一堆空的类放在那里迷惑视听,简直
和玩推理一样。
其之二、类的安全性很低
这点说小了,算是代码风格不好,说大了就是没有考虑防御性编程。主体的类内的主要属性,几乎全都是public static
,其他随便一个类就可以修改访问这些属性,属性在被那里修改的根本不知道,而且失去了划分模块面向对象编程的意义。
贴几段感受一下:
类内的成员全都是静态
所有修改直接改
二、根据需求添加新功能,摒弃无用功能
读了往届代码之后,发现在数据处理部分,非常的迷,支持pdf和html文件的数据处理,但是对于更常见的word
文件却不支持,而且对于中文文本的处理功能的实现很多块都被注释掉了,于是我们添加了处理中文文件,word文档的
功能,选择中英文分词效果都很好的分词器(关键词提取算法有待提高,这个暂且按下不表,之后说),添加了来自更
多网站的html文件的处理,增添了关键词翻译功能,并且能按照得到的要求上传到solr,总之大概功能实现了,加了一些,
也删了一点。
说到快一半了,题目一点都没提,真是失策啊。
并不是的。
做完了阿尔法阶段,我们的心情就是题目所说:
我们想成为继往开来的一届
足够中二,足够大口气,但是请不要笑话我们,我们确实暂时是这样想的。
我们“继往”的工作已经完成的差不多了,虽然做的说不上多全面,但是确实有一个能满足需求的程序可以用了,那么
问题来了,我们β阶段做什么呢,继续研究怎么处理文件,处理的更精准?处理更多类型的文件?我们确实有想做,但这是
锦上添花的bonus,我们现在更想的是,这个项目八成还是会传下去的,那么我们能不能像邹欣老师所问:“这个项目能否
能可持续开发呢?”下一届的学弟学妹们是否要和我们走一遍相似的,不顺利的过程呢?这是我们不想看到的,我们想从我
们这届开始,做出一点改变,哪怕只是一点点微小的改变,我们也想改变目前的这个境况,我们想让之后的接手的人能够
迅速上手继续我们的工作,开启全新的、充满开放性的局面。
基于以上,我们决定,我们的β阶段的主要任务是“开来”。
拟定计划如下:
1、保留原有功能代码的基础上,重新规划模块的划分,定义好接口,去掉多余的模块,使模块间的任务划分的更明确。
2、将程序编译成动态链接库,和爬虫部分的JAVA程序合二为一,做成后台程序。
3、爬虫部分选用更好地爬虫器(crawler4j),已经开始在做(之前的26小时爬到30多个网页真的不行,还爱死循环)。
4、建立一个前端网页,控制程序的开始,查看进度。
我们考虑过时间是否充裕的问题,也是因为考虑到时间,我们决定保留原有功能代码,只是在模块划分上更加清晰化,
增强安全性和防御性,还能省下一些时间。之后的几个部分的工作从上周末开始已经在不同进度的挺进了,感觉时间上虽然
不会特别充裕,但是大家努把力还是有希望的。
当当当~所以我只是想把自己负责的这部分模块化后的结果记一下。
数据处理这块大概要分成一下几个模块:
1、源文件和文件去噪合成一个模块,统一为去噪,功能是获取源文件,去噪,返回去噪后的文本信息。
2、分词,统计关键词和翻译也应该合成一个模块,分词的结果直接影响关键词,原本的全文翻译功能摒弃,只需要关键词翻译。
3、展示最终结果在后台程序中就不需要了,可以去掉。
4、手动添加标签的类也可以去掉。
除了数据处理,其他方面:
1、主程序需要一个类,统筹各个分功能,其他模块中要实例化主程序,通过方法访问变量。
2、连接到爬虫的模块可以合到主程序中,毕竟只是一个连接,一个函数解决,不需要一个模块。
3、向solr发送数据需要一个模块。
具体各个模块的接口定义,就是明天大家一起讨论的结果了,暂且不写了。
(PS,说个题外话,其实在写博客这块,我属于内向型,之前不怎么用博客,也不习惯把自己的
过程性总结发布出来,今天尝试了一下,感觉还好,欢迎来表扬,我是得到表扬才能进步的孩子啊)