您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 >
追求代碼質(zhì)量: 測(cè)試 Struts 遺留的應(yīng)用程序
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/28 14:03:36 ] 推薦標(biāo)簽:

基于 Java™ 的 Web 開發(fā)領(lǐng)域近出現(xiàn)了豐富的競(jìng)爭(zhēng)性技術(shù)。啟動(dòng)新項(xiàng)目的開發(fā)人員可以在許多不同的框架之間進(jìn)行選擇,包括 JavaServer Faces、Tapestry、Shale、Grails 和 Seam (只列舉眾多機(jī)靈的名稱中的幾個(gè))。很快,我們可以通過 JRuby 框架在 Java 編程中使用 Ruby on Rails 了!

但在不遠(yuǎn)的過去,只有一個(gè) Java Web 開發(fā)框架卓然而立。Struts 是第一個(gè)在 Java 世界掀起風(fēng)暴的框架,而且多年以來,好像是如果一個(gè)項(xiàng)目不用 Struts 構(gòu)建沒有前途一樣。沒有 Struts 經(jīng)驗(yàn)的 Java 開發(fā)人員很稀少,也很不幸,像的開發(fā)人員沒有聽說過 Ruby on Rails 一樣。
 
提高代碼質(zhì)量
不要錯(cuò)過 Andrew 的附帶 討論組 ,可以得到迫切問題的答案。

即使 Struts 正慢慢地從舞臺(tái)中央退去(原來的基本框架,現(xiàn)在叫做 Struts 1,似乎正在退出 Web 框架的歷史舞臺(tái)),但它的遺產(chǎn)仍然存在,既以 Shale (請(qǐng)參閱 參考資料)的形式存在,又以運(yùn)行在世界各地的成千上萬的遺留應(yīng)用程序的形式存在。因?yàn)樵S多企業(yè)寧愿測(cè)試和維護(hù)這些應(yīng)用程序而不愿意花錢重新編寫它們,所以理解 Struts 應(yīng)用程序的一些缺陷,以及如何圍繞它們進(jìn)行重構(gòu),是個(gè)好主意。

這個(gè)月,我要把以質(zhì)量為核心的方法用于 Struts 應(yīng)用程序的測(cè)試場(chǎng)景。結(jié)合現(xiàn)實(shí),這個(gè)場(chǎng)景圍繞著普遍的 Struts 構(gòu)造:深受喜愛的 Action 類。

1、2、3,行動(dòng)!

Struts 的革新之一是把 Web 開發(fā)從 Servlet 移進(jìn)了 Action 類。這些類包含業(yè)務(wù)邏輯,以 JavaBean 的形式(通常叫做 ActionForm)把數(shù)據(jù)傳送到 JSP。然后 JSP 處理應(yīng)用程序視圖。Struts 到 MVC 的方法非常容易掌握,以至于許多開發(fā)團(tuán)隊(duì)冒失地闖進(jìn)去,而很少考慮與 Action 相關(guān)的長(zhǎng)期設(shè)計(jì)和維護(hù)問題。

 
測(cè)試和復(fù)雜性

我已經(jīng)發(fā)現(xiàn),在開發(fā)人員的測(cè)試和代碼的復(fù)雜性之間存在強(qiáng)烈的相關(guān)性:沒有其中一個(gè)的地方,通常也沒有另一個(gè)。高度復(fù)雜的編碼難于測(cè)試,結(jié)果是很少有人會(huì)真正為它編寫測(cè)試。反過來,編寫測(cè)試可以降低代碼的復(fù)雜性。因?yàn)榻o復(fù)雜代碼編寫測(cè)試更困難,而且因?yàn)闀?huì)邊走邊測(cè)試,所以會(huì)發(fā)現(xiàn)自己朝著更簡(jiǎn)單的代碼構(gòu)造前進(jìn)。如果代碼太復(fù)雜,而且知道不得不測(cè)試它,您可能會(huì)在測(cè)試之前對(duì)復(fù)雜性進(jìn)行重構(gòu)。不論如何看待,為不那么簡(jiǎn)單的代碼編寫測(cè)試是消滅代碼復(fù)雜性的好實(shí)踐。

雖然在那個(gè)時(shí)候(過去的自由時(shí)光。┛赡軟]人想過,但 Struts Action 類通常成為復(fù)雜性的保護(hù)所。像在老的 EJB 架構(gòu)中聲名狼籍的會(huì)話 Facade 一樣,Action 類會(huì)成為特定業(yè)務(wù)過程的嚴(yán)格偽裝,或者通過直接調(diào)用 EJB,通過打開數(shù)據(jù)庫連接,或者通過調(diào)用其他高度依賴的對(duì)象。Action 類還有輸出耦合(通過 java.servlet API 包中的對(duì)象,例如 HttpServletRequest 和 HttpServletResponse),從而極難把它們隔離出來測(cè)試。

隔離出來測(cè)試 Action 類的困難意味著它們可以很容易變得相當(dāng)復(fù)雜 —— 特別是當(dāng)它們變成越來越深入地與遺留框架耦合的時(shí)候,F(xiàn)在我們來看這個(gè)困難在真實(shí)的遺留應(yīng)用程序場(chǎng)景中作用的情況。

測(cè)試挑戰(zhàn)

即使簡(jiǎn)單的 Struts Action 類也會(huì)是個(gè)測(cè)試挑戰(zhàn)。例如,以清單 1 中的 execute() 方法為例;它看起來足夠簡(jiǎn)單,可以測(cè)試,但是真的么?

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd