我們想成為繼往開來的一屆
在經過了α階段的研究,稍微對爬蟲和數據處理這塊整理清楚了思路,總結之后計划了一下下一個階段的工作重點,
其實感覺目的還是挺明確的,稍微發篇博客記錄一下這個階段性的進展。
首先先說α階段的工作重心和遇到的困難:
一、閱讀代碼,輔助性文檔完全缺失
第一個階段最主要的是承接往屆的代碼,就是要獲取到源代碼,然后讀明白個大概,至於細節功能實現,這個之
后慢慢深度研究。在讀代碼這個階段,我們遇到最大的問題就是,完全沒有輔助理解的文檔和注釋,這個為我們迅速
接手項目造成了巨大的挑戰,在沒有輔助性文檔的情況下,想要在短時間內讀明白整個大工程幾乎是不可能的,無奈
之下,我們搜索到了往屆的團隊博客,根據每日例會的匯報博客中的微小線索,一點一點拼湊整個信息集合。之后更
讓人絕望的事情來了,在往屆團隊博客的置頂總結中,我們看到了讓整個情況更惡化的一句話。文末原文摘錄:
********************************************************************************************
我們學到了什么? 如果歷史重來一遍, 我們會做什么改進?
我們學到了測試也是非常重要的,只有這樣才能及時發現軟件中的問題,並作出相應的改進。我們會利用與寫代碼同等的重視去看待測試。
我們會直接摒棄學長的代碼,然后自己重新規划,重新來做!
警戒下一屆的學弟學妹們:
請推倒我們的代碼,重新架構!一開始與所有組進行溝通,了解所
有情況之后再來着手,否則就會陷入泥潭之中不可自拔。謹記謹記。。。。。
*********************************************************************************************
我不知道學長在最終總結里寫下這句話的時候,心情是如何的,想必應該不是很開心的。但請相信我,當我看到
這句話的時候,內心絕對比他感覺更糟糕,我們唯一的線索,斷了。
真是個愁人的情況啊,我們整個組看到這些情況的時候心里不免抱怨一句,沒有文檔,跑不通的代碼,連接不上
的服務器,看不懂的整體架構,細節實現就更不必說了,連想去尋求幫助的學長似乎都放棄我們了呢,真是……鍛煉個
人能力啊。
還好大家都是被一路虐過來的,可惜歸可惜,但是大家還是沒有放棄的,代碼看不懂就根據變量名猜吧(吐槽一下
里面的英語拼寫錯誤),代碼跑不通,調試一行一行的跑,總之各種偏招歪招用盡了,代碼總算能跑出個像樣的樣子來,
整體結構說不上明察秋毫,但是大概框架是能梳理出來的。
當我們守得雲開見月明,就發現了事實上,此月僅算是個十六夜之月(殘缺之意),很明顯的感覺到代碼是被一代
代團隊像揉雪球一樣攢起來的,湊合能用,但是問題百出。
其之一、模塊功能重疊,代碼冗余。
工程整體采用面向對象編程,一共定義了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,說個題外話,其實在寫博客這塊,我屬於內向型,之前不怎么用博客,也不習慣把自己的
過程性總結發布出來,今天嘗試了一下,感覺還好,歡迎來表揚,我是得到表揚才能進步的孩子啊)