提高 Java 代码质量
高質量代碼中往往缺陷更少!確保高的 Java 代碼質量有兩個步驟:盡早并經常地編寫各個層次的測試用例,以及持續的監測質量狀況。那么我們又該如何實踐呢?本專題匯集了大量來自代碼質量專家們的專業經驗、最佳實踐以及實用技巧,內容涵蓋了軟件測試理論、Bug 模式與代碼診斷、代碼靜態分析、測試驅動、單元測試、覆蓋率、測試工具和 IBM Rational 測試平臺等方面,其豐富的文章、教程及系列專欄將為您的代碼質量加油提速!。
軟件質量與軟件測試
什么是軟件質量?
軟件質量(software quality)是與軟件產品滿足明確或隱含需求的能力有關的特征和特性的總和。高質量的軟件通常具備了這樣一些特性:
- 滿足用戶的需求。
- 合理的進度、成本、功能關系。
- 具備擴展性和靈活性,能夠適應一定程度的需求變化。
- 足夠的強壯、足夠的魯棒,能夠有效的處理例外的情況。
- 保持成本和性能的平衡。
- 能夠可持續的發展。
關于軟件質量的具體講述,您可以請閱讀這個由五個部分組成的系列文章:“軟件質量之路”。
什么是軟件測試?
軟件測試是為了發現程序代碼中的錯誤(Bug)而執行程序的過程,是軟件質量保證的重要手段,屬于軟件工程領域。其目的是:
- 為了尋找錯誤,并盡可能地為修正錯誤提供更多的信息;(參閱?如何診斷與調試 Java 代碼中的 Bug?)
- 為了證明軟件有錯誤,而不是證明軟件沒有錯誤;
軟件測試技術根據測試原理,又分為:
- 靜態測試:不實際運行程序,而是通過代碼檢查的手段來發現錯誤并評估代碼質量的軟件測試技術;(參閱?如何靜態測試 Java 代碼?)
- 動態測試:實際運行程序,并通過觀察程序運行的實際結果來發現錯誤的軟件測試技術;
代碼質量專家 Andrew Glover 在他的專欄“追求代碼質量”中介紹了如何使用最新的測試工具來保證代碼質量,他重點闡述一些看上去比較神秘的東西。
什么是測試驅動開發(TDD)?
測試驅動開發(Test-Driven Development)起源于極限編程(XP)開發過程中所提倡的測試先行實踐。測試先行實踐重視單元測試(Unit Testing),強調程序員除了編寫代碼之外,還應該編寫單元測試代碼。在開發的順序上,它改變了以往先編寫代碼,再編寫測試的過程,而采用先編寫測試,再編寫代碼來滿足測試的方法。這種方法在實際中能夠起到非常好的效果,使得測試工作不僅僅是單純的測試,而成為設計的一部分。(具體請參見后面的?如何實踐測試驅動開發?)
如何診斷與調試 Java 代碼中的 Bug?
BUG 模式與 Java 診斷
正如好的編程技能涉及很多設計模式(您可以在不同的程序上下文中組合和應用這些模式)的知識一樣,好的代碼診斷和 Bug 調試技能也涉及對錯誤模式的一定了解。錯誤模式就是已發生的錯誤和程序中潛在的錯誤之間的重復出現的相互關系。很多錯誤都遵循我們可以識別的幾種錯誤模式的其中一種。一旦您可以識別出這些錯誤模式,您就可以診斷出錯誤的原因并且更快地糾正它。錯誤模式與反模式有關,反模式是一次又一次被證明是失敗的公共軟件設計的模式。雖然反模式是設計模式,錯誤模式卻是與編程錯誤相關的錯誤的程序行為的模式。這與設計根本沒有關系,而是與編程和調試過程有關。
了解各種具體的錯誤模式以及如何診斷和糾正 Java 程序中反復出現的錯誤類型,請參閱 Eric Allen 的系列專欄:
- 診斷 Java 代碼。
在此專欄中,Eric Allen 針對各種錯誤模式進行了一些具體的討論:
- 錯誤模式簡介
- Dangling Composite 錯誤模式
- Null Flag 錯誤模式
- Double Descent 錯誤模式
- Liar View 錯誤模式
- Saboteur Data 錯誤模式
- Broken Dispatch 錯誤模式
- Imposter Type 錯誤模式
- Split Cleaner 錯誤模式
- Fictitious Implementation 錯誤模式,第 1 部分
- Fictitious Implementation 錯誤模式,第 2 部分
- 孤線程(Orphaned Thread)錯誤模式
- 連續初始化器錯誤模式
- 將時態邏輯用于錯誤模式
另外,他還討論了許多其它關于 Java 代碼診斷的主題:
- 設計可測試的應用程序
- 設計可擴展的應用程序
- 設計可輕松維護的代碼
- “殺手組合”— mixin、Jam 和單元測試
Java 調試
即使是最高級的開發人員所開發的最簡單的應用程序也可能包含錯誤。如果要成為好的調試人員,不必象大偵探那樣調查蛛絲馬跡。您只需了解概念并熟悉正確的工具。
- “教程:Java 調試”提供了關于基本 Java 調試概念和更高級調試類型的詳細信息。
如何靜態測試 Java 代碼?
Java 開發人員現在擁有很多通過代碼度量、靜態分析等方法來度量代碼質量的工具。所有的這些新的工具使得確保代碼質量比以前簡單得多,不過您還需要知道如何使用它們。
代碼度量
- “監視圈復雜度”展示如何使用簡單的代碼度量工具和基于 Java 的工具來監視代碼復雜度。
- “軟件架構的代碼質量”解釋了如何持續地監視并糾正會影響軟件架構的長期生存能力的代碼質量方面。
- “用代碼度量進行重構”介紹如何使用相同的代碼度量方法和提取方法模式進行有針對性的重構。
靜態分析工具
靜態分析工具承諾無需開發人員費勁就能找出代碼中已有的缺陷。當然,如果有多年的編寫經驗,就會知道這些承諾并不是一定能兌現。盡管如此,好的靜態分析工具仍然是工具箱中的無價之寶:
- FindBugs?是一個靜態分析工具,它檢查類或者 JAR 文件,將字節碼與一組缺陷模式進行對比以發現可能的問題:
- “FindBugs,第 1 部分”和“第 2 部分”分別介紹使用 FindBugs 的原因和方法 以及如何編寫自定義檢測器以查找特定于應用程序的問題。
- “消除 bug”展示了這個靜態分析工具如何幫助分析代碼。
- “平衡測試,第 1 部分、第 2 部分?和?第 3 部分”討論如何通過引進 FindBugs 靜態代碼分析工具來改進管理軟件質量的方式。
- PMD?是一個開源的靜態分析工具,它分析 Java 源代碼,并找出潛在的 bug:
- “用 PMD 鏟除 bug”解釋如何使用 PMD 內置的規則以及您自己定制的規則集來提高 Java 代碼質量。
- “馴服復雜的冗長代碼”展示了如何使用諸如 PMD 和 JavaNCSS 之類的工具,在您需要的時候獲得更高的代碼復雜度測試精度。
- Eclipse 靜態分析插件,能在構建代碼前便發現代碼中潛在的問題:
- “用 Eclipse 插件提高代碼質量”將帶來一些關于 Eclipse 插件的例子,您可以安裝、配置和使用這些靜態分析插件,以便在開發生命周期的早期預防問題。
- IBM Checking Tool for Bugs Errors and Mistakes,可用于分析并查找 C、C++ 和 Java 代碼中的一些不容易發現的潛在錯誤:
- “使用 IBM 靜態工具優化 Java 代碼,第 1 部分: 工具入門”介紹如何在 Windows 上成功運行 BEAM,檢查 Java 代碼中的潛在錯誤,從而提高代碼的安全性和穩定性。
- “使用 IBM 靜態工具優化 Java 代碼,第 2 部分: 分析錯誤報告”學習如何對其輸出的報告結果文件進行分析,并修改代碼中的潛在錯誤。
如何實踐測試驅動開發?
測試驅動開發
測試驅動開發是敏捷開發的最重要的部分。該方法主要是先根據客戶的需求編寫測試程序,然后再編碼使其通過測試。在敏捷開發實施中,開發人員主要從兩個方面去理解測試驅動開發。
- 在測試的輔助下,快速實現客戶需求的功能。通過編寫測試用例,對客戶需求的功能進行分解,并進行系統設計。我們發現從使用角度對代碼的設計通常更符合后期開發的需求。可測試的要求,對代碼的內聚性的提高和復用都非常有益。
- 在測試的保護下,不斷重構代碼,提高代碼的重用性,從而提高軟件產品的質量。
更多請參見文章“使用模擬對象(Mock Object)技術進行測試驅動開發”。
單元測試
單元測試測的是獨立的一個工作單元。在 Java 應用程序中,“獨立的一個工作單元”常常指的是一個方法(但并不總是如此)。作為對比,集成測試和驗收測試則檢查多個組件如何交互。一個工作單元是一項任務,它不依賴與其他任何任務的完成。
相關技術文章:
- 利用 Ant 和 JUnit 進行增量開發
- 怎樣使用 JUnit 框架編寫單元測試
- AspectJ 和模仿對象的測試靈活性
- 使用模仿對象進行單元測試
- 安全抵達!:防御性編碼和單元測試“交通規則”
- 用 Jython 構建 JUnit 測試包
- 用 Groovy 更迅速地對 Java 代碼進行單元測試
- Hibernate 配置文件在單元測試中的靈活運用
- TestNG 使 Java 單元測試輕而易舉
- Eclipse 3.1 中使用TestNG:基于注釋的單元測試框架
- JUnit 4 搶先看
- 自動進行團隊構建和單元測試過程
- 對方面進行單元測試
- 使用 ConTest 進行多線程單元測試
- 測試對象串行化
- 使用 TestNG 的新特性管理實際項目中的大量單元測試
- 單元測試利器 JUnit 4
- 利用 Eclipse 進行單元測試
- 對 Ajax 應用程序進行單元測試
- 使用 Grester 簡化 Java 應用程序的 JUnit 測試
- 應用設計模式編寫易于單元測試的代碼
- 使用 JUnit 對規則進行單元測試
- 擴展 JUnit 測試并行程序
測試覆蓋率
測試改進了代碼質量,但這也只是針對實際測試到的那部分代碼而言的。您需要有一個工具告訴您程序的哪些部分沒有測試到,這樣就可以針對這些部分編寫測試代碼并找出更多 Bug。
- 用 Cobertura 測量測試覆蓋率
- 使用 EMMA 測量測試覆蓋率
- 使用 EclEmma 進行覆蓋測試
軟件測試自動化
軟件的手動測試非常耗時,勞動強度高,并且很單調,而且還會引入一些人為的錯誤,因此測試自動化勢在必行。通常自動化測試是通過一些測試自動化工具開發和執行測試腳本,達到評估軟件質量的目的。自動化測試不僅能夠大大減輕測試人員的工作量,并減少了測試過程中人為出現的錯誤。
更多的相關內容,請參見:“軟件測試自動化專題”。
Java 開發測試與 IBM Rational 產品平臺
Rational 軟件交付平臺簡介
面對 IT 開發日益增長的復雜性和越來越短的項目開發周期,您是否在尋找能統一企業開發團隊的開發平臺,和能全面管理您基于面向服務體系結構(SOA)資產的解決方案?Rational 軟件交付平臺(SDP)V7 產品正是您的最好選擇!
Rational SDP V7 產品為您的 IT 開發帶來了更多的靈活性,支持您實現全球跨地域分布開發團隊的同步開發,更好地實現和管理軟件交付及系統架構,并能顯著改進 IT 資產的生命周期和產品質量的管理。當中的熱門產品 Rational Software Architect V7.0 能幫助您更快更好地設計 SOA 解決方案,Rational Functional Tester V7.0 能幫助您全面測試軟件產品的功能特性,而 Rational Unified Process V7.0 更是指導軟件團隊開發的經典軟件過程。
Rational Java 測試解決方案
IBM Rational 質量管理解決方案通過自動化以及人工測試工具,可幫助測試人員最大化測試的成果并增加工作的有效性,這些測試工具同時保證了業務關鍵應用在功能性,可靠性以及性能方面的品質。Rational 工具通過在通用的框架上進行集成,支持廣泛的開發環境,并且在緊密協作、以及在跨軟件交付生命周期管理分布式測試資產和信息方面具有強大的能力。
IBM Rational Functional Tester?是專門為關注其 Java?、.NET? 以及基于 Web 的應用品質的質量保證(QA)團隊而準備的自動化功能測試以及回歸測試解決方案。
最新產品文檔:
- IBM Rational Functional Tester 7.0 版本介紹
- 使用 Rational Functional Tester 給開發人員帶來的好處
- 用 Rational Functional Tester 創建隨需應變的自動測試腳本
- 將調用封裝到 Rational Functional Tester API 中
IBM Rational Robot是為需要對基于多種 C/S GUI 技術進行應用的功能,和性能自動化測試的質量保證(QA)團隊準備的測試工具。現在 Rational 為此產品提供了固定期限的許可證。
IBM Rational Manual Tester?是專門的人工測試認證和執行工具,可促進測試步驟的重用,以減少軟件變更對業務分析人員和測試人員的影響。新的和改進的功能特性包括:
最新產品文檔:
- 介紹 IBM Rational Manual Tester V7.0
IBM Rational Performance Tester?是專門的性能測試和壓力測試工具,可幫助測試人員實現自動化的性能和壓力測試。
最新產品文檔:
- IBM Rational 助您輕松完成基于 J2EE 的 Web 應用系統的性能測試和性能優化
Rational 軟件需求變更與缺陷跟蹤解決方案
Rational 提供集成的版本控制、版本和發布管理、缺陷和變更跟蹤,以及工作流管理。利用這些功能可以進行團隊合作、提高生產率、改善運營效率、降低成本,使企業應用程序開發、Web 內容和技術計劃適應業務需求。
配置管理類別中的產品包括:
- IBM Rational RequisitePro?(英文)?—— 主要關注于項目的文檔、通信和控制的不斷變化的需求。
- IBM Rational ClearCase? family?—— 利用全面的版本控制、工作空間管理以及構建和版本管理來實現軟件資產管理。
- IBM Rational ClearQuest? family(英文)?—— 通過開發生命周期來管理工作流和變更請求,缺陷和增強都包括。
最新產品文檔:
- 需求版本化
- 統一變更管理的力量
- 利用 WebSphere Studio 和 Eclipse 的集成 SCM 提高開發人員的生產力
Rational 軟件測試過程方法論
項目經理和規劃管理經理將發現,開發基礎設施工具和過程需要訪問最新的項目狀態信息、精確地估計所需的資源并作出綜合而靈活的項目計劃,以助于團隊更加高效地協作。IBM 軟件交付平臺的核心是一個靈活的、已證實的、可配置的、同時針對大型和小型開發項目的過程。
Rational 統一過程(Rational Unified Process? )是業界公認的指導軟件團隊開發的經典軟件過程。其中同軟件質量保證相關的測試過程和方法論指導,是眾多開發團隊借鑒的軟件測試框架和測試過程原型。
Rational 統一過程軟件質量保證參考文檔:
- IBM Rational 質量管理解決方案 V8
- IBM Rational 測試解決方案
- IBM Rational 軟件測試工具包
- Rational 開發過程
- 軟件質量保證的成功之路
- 高品質軟件,Rational工藝
- 持續質量保證:一個案例研究
總結
以上是生活随笔為你收集整理的提高 Java 代码质量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring获取ApplicationC
- 下一篇: 详解Java中的clone方法 -- 原