2016-03-04 81 views
0

目前我正在開發一段代碼,它首先從一組文檔中搜集句子,然後對這些句子進行標記,然後使用結果分析令牌序列的循環頻率,包括案例變體(大寫/小寫/引導帽/其他),然後打印出結果。實施多階段過程時的TDD策略?

現在我希望在打印出結果之前引入兩個階段:
1.首先,去除「停用詞」(即詞或短序列其頻率永遠是興趣,比如,在英語,「其中」,「其中」,等等) - 從數據庫表中獲取這些停用詞/「停止序列」
2.其次,調出使用戶能夠識別序列的對話新的停用詞,然後刪除所涉及的令牌序列,並將有問題的序列添加到數據庫表中。

問題是,這是一個多階段過程,我只是想知道TDD專家面臨的情況是什麼樣的:我爲每個單獨的階段創建一個新的測試方法......?問題在於每個單獨的階段都需要使用前一階段的「實時內存數據」:另一種可能性是以某種方式將這些數據序列化,然後在測試下一階段時對其進行反序列化......但是這會涉及應用程序代碼做的事情只對測試代碼有好處,也就是說,這意味着爲測試代碼的好處調整(「扭曲」?)應用程序代碼,這在原則上似乎是錯誤的...

此外,如果任何人都可以將我指向一本書或網站的方向,以幫助像我這樣的TDD新手進入「更高層次」,我將非常感激。

爲了誰該標記爲「最喜歡」的人:現在我有一本書叫「成長的面向對象的軟件,通過測試指導」,這是保持良好審查和似乎是有人想從初學者到中級。第一印象不錯。

專家對本書有任何意見也歡迎,當然...

+0

要明確一點,您已經對流程的現有階段進行了測試,您的問題是關於您正在引入的新階段? – forsvarir

+0

我剛剛在單個功能測試中開發了現有的2個階段......我現在想知道如何將多階段過程在實踐中由經驗豐富的TDD人員分解......作爲第一步,我把這兩個階段放到不同的方法中(我使用Jython,而這一切都發生在SwingWorker中)。但只是爲特定的舞臺製作一個方法仍然留下了爲每個要測試的方法創建**前置條件**的問題......希望這是有道理的...... –

回答

1

在它的面前,你似乎是建立一個管道。從我所知道的,你目前正在一個類中實現它,它存儲正在處理的數據並實現處理的方法。你可以採取的一種方法是將問題分解成更小的塊。您不是隻有一個類,而是爲管道的每個階段都有一個類,而另一個類負責編排負責按照正確順序將各個階段組合在一起的過程。

所以,通過你所描述什麼掃描,你似乎有下列處理器:

  • DocumentReader(讀取文檔的某個地方到內存中的文件)
  • SentenceExtractor(文件/文件列表,句子列表)
  • 1個或更多SentenceAnalysers(句子輸入,統計數據輸出),您可能希望根據分析類型以及它的複雜程度將其分解。
  • StopWordExtractor(StopWordProvider和句子,句子出來)

有跡象表明將需要額外的支持類,以支持新的禁用詞到數據庫中寫入並根據stopwordprovider是如何實現的保持它同步因爲用戶選擇新的。

本質上,我所說的是,你似乎在一個位置做得太多。如果你是真的幸福的是,你所描述的代碼是一個單一的單元,那麼你在一個地方進行測試並沒有什麼錯,但是你的輸入將是你的起始文檔/句子和你的輸出將是過程的結束。如果你真的同意我的觀點,那麼在這個過程中會涉及到幾個獨立的組件,這些組件可能會獨立地發生變化,那麼我會建議將這個過程分解成更小的類,並測試那些對於給定的輸入/輸出集按預期執行的那些...

+0

謝謝!是的,你已經說得很清楚了。一條「管道」......這個術語完美地概括了它。今天早上,我一直在撓頭,慢慢地解決問題......也許當你想到它時有點顯而易見(已經給出了答案!)。它意味着一個「協調」的課堂,就像你說的......這樣更多的工作......我想這是付出更強大解決方案的代價。 –