使用 IBM 基於規則的可訪問性驗證環境自動驗證基於 Java 的 GUI 可訪問性
簡介:IBM® Rule-based Accessibility Validation Environment (RAVEN) 是一種 Eclipse 插 件,它提供了對 GUI 組件的運行時檢查,從而確保能夠持續使用 Java™ 可訪問性特性。本文對 RAVEN 工具進行了一番審視,並舉例說明了如何使用它驗證 Java Swing 應用程序。
為軟件系統 創建圖形用戶界面,這在可用性和設計兩方面對適應性技術提出了雙重挑戰。這些類型的界面將對視覺、 聽覺或身體上有殘疾的個體造成困難。Eclipse 平台雖然支持基於 Java、Swing 或 Standard Widget Toolkit (SWT) 的富客戶機界面,但是它不能直接驗證這些界面,從而不能確保適應性技術(例如屏幕閱 讀器)可以訪問所有的可視元素。
計算機科學中最偉大的一項成就就是發明了 GUI。通過組合常見的圖標和可見的命令表示,例如使用 鼠標單擊按鈕,計算機逐漸為人們所熟悉,變得像電話一樣平常。然而,對於殘疾人來說,尤其是有視力 障礙的人,這種優勢造成了巨大困難。如果不作出相應調整使這類人群能夠使用計算機的功能,那麼很大 一部分人就無法享受使用計算機的權利。
創建可訪問的界面還要考慮其他一些法規方面的原因。美國國會在 1998 年通過了 Federal Rehabilitation Act 的修正案,命令所有聯邦機構必須使殘疾人能夠使用計算機技術。這項法規應用到 了聯邦政府使用的所有軟件,包括自己開發的軟件,購買的軟件或者通過其他途徑獲得的軟件。因此,如 果您的公司正是眾多投標聯邦政府項目的軟件開發企業之一,那麼必須保證交付的應用程序符合法規的要 求。
主要有三大類殘疾人需要使用適應性技術:
盲人或者視力低下的用戶 —— 必須提供以下支持:對所有圖形控件元素的文本說明,操作結果的聲 音提示,焦點轉移的提示(表示所選擇的圖形元素),以及提示執行默認操作的方式。
聽覺受損的用戶 —— 對於這類個體,必須提供聲音提示的視覺提示,或者提供所聽到的內容的文字 說明。
行動不便的用戶 —— 對於這類個體,必須提供其他的輸入設備,例如眼球追蹤技術(eye-tracking )和通過口述方式輸入。
幸運的是,可以將造成這類困擾的計算機界面設計為便於和輔助設備交互。例如,Java 編程語言支持 很多能夠使視力受損的用戶使用設備的特性,例如屏幕閱讀器、刷新 Braille 表示和高對比度圖形。要 利用這些特性,必須采取措施來確保界面中的所有元素都可以被訪問,而這一點對於絕大部分不了解這些 特性的開發人員來說都極具挑戰性。要逐個檢查每個 GUI 元素是否符合要求需要付出很多努力,而很少 有軟件開發公司對輔助設備進行過測試。
開發可訪問性
如前所述,Java 語言通過 Java Accessibility 應用程序接口(API)對適應性技術提供支持。全面 支持這種 API 的應用程序應該能夠與眾多常見的適應性技術兼容。創建這種 API 的目的就是提供一種功 能完全的 UI,它不需要使用任何視覺呈現或圖形化交互。該 AIP 位於 Sun Microsystems 的核心 SDK 提供的 javax.accessibility 包。Java AccessibileContext 類是所有 API 特性的核心入口,它只有一 個方法:javax.accessibility.AccessibleContext getAccessibleContext()。
即使有了語言的支持,GUI 的編寫仍然十分困難。有很多指導原則可以幫助創建可用的圖形化界面, 但是很少能夠為同時開發可訪問界面提供幫助。此外,這類應用程序的測試工具很少能夠自動執行針對公 共標准集驗證 UI 的任務,而這種任務很耗時間。IBM 創建了以下一些指導原則,可用來指導開發可被殘 障人士訪問的軟件系統:
為所有操作提供與鍵盤功能相同的設備
為常用功能提供加速鍵(accelerator)和鍵盤快捷鍵
應用 GUI 元素使用的記憶方法
使用合理的選項卡順序設置界面
對所有可見組件應用標簽
為圖標和圖形包括文本說明
提供可見元素之間的語義關系(例如復選框)
根據名稱引用邏輯組
參見 參考資料 中關於這些指導原則的詳細信息。關鍵一點是所有這些原則都可以通過 Eclipse 集成 開發工作台使用 RAVEN 進行驗證。
RAVEN
Eclipse 的 RAVEN 插件的安裝非常簡單,可使用 Eclipse 的內置安裝工具輕松完成。從 Help 菜單 中選擇 Software Updates < Find and Install… 打開如下所示的 Install 對話框。
圖 1. 安裝 RAVEN
如果 Emerging Technologies Toolkit (ETTK) 選項不可用的話,單擊 New Remote Site… 來添加 http://awwebx04.alphaworks.ibm.com/ettktechnologies/updates 位置。展開樹中的 ETTK Update Site 節點,並展開 Emerging Technologies Toolkit -- Technologies 節點。選擇 IBM Rule-based Accessibility Validation Environment 並單擊 Next。
您可以下載有關從 IBM alphaWorks 安裝 RAVEN 的完整說明。不過請注意您先要在 IBM 注冊才能訪 問這些安裝說明或下載 RAVEN。
安裝好產品之後,設置首選參數也非常簡單。使用 Windows < Preferences 下的菜單選項,並選 擇 RAVEN 樹節點。默認配置應該能滿足大部分需求,不過驗證跟蹤級別是為數不多的例外之一。因為在 工作期間將生成大量消息,其中很多信息和警告可以從錯誤顯示中過濾掉。我發現最好的做法是先從錯誤 級別開始,然後啟用警告級別,這可以很好地限制驗證運行中顯示的消息的數量。這是一種很不錯的實踐 ,可以確保在最終交付之前,從經過評估的代碼中消除所有的錯誤和警告。
圖 2. RAVEN 首選參數
規則驅動的驗證
RAVEN 名稱的由來在很大程度上源於它用來檢查 GUI 代碼的高可配置規則引擎。這些規則是嚴格建立 在 IBM Accessibility Guidelines 基礎之上的,並用來指出所有偏離預期應用的行為。這點非常重要, 因為前文提到過手動測試 GUI 代碼來查找所有可訪問性錯誤是非常困難的。通過使用基於一組嚴格規則 並可重復的可靠的自動化測試,錯誤的數量和嚴重性將會大大降低。
其第二個優勢是,您可以修改或增強這些規則來檢查其他 GUI 錯誤,如丟失的行為或操作監聽程序。 例如,您可以創建一個規則來檢查每個定義的按鈕至少分配了一個操作監聽程序。
RAVEN 使用被稱為面向方面編程(AOP)的技術來檢查開發或基於生產的代碼。雖然這種技術超過了本 文討論的范圍,但是需要知道該技術使用了驗證文檔(validation document)(SWT 或 Swing)來定義 驗證規則和上下文。文檔本身是使用 XML 編寫,並且易於編輯,但我並不推薦嘗試這種方法(因為我曾 經嘗試過),除非您曾經使用過這種產品。驗證文檔難於理解,但是功能強大,可以定義 RAVEN 引擎中 可用的別名、腳本語言和其他特殊特性的用法。大量的在線幫助內容詳細說明了驗證文檔的內容以及如何 編寫自己的驗證規則。
驗證一個 Swing GUI
作為驗證 Swing GUI 開發的簡單示例(其中的代碼是可訪問的),我選擇幾年前為一個二進制文件編 輯器開發的小項目。該編輯器的主窗口中包含多個部分,其中之一用於文件頭信息。圖 3 顯示了 GUI 部 分的 JPanel 類。
圖 3. RAVEN 驗證結果
正如您看到的一樣,JPanel 由一些文本字段、標簽和兩個單選按鈕組成。GUI 在生產應用程序中被全 面測試,並且所有的可見組件都按用戶期望的方式工作,不過我從未想過將適應性技術應用到我的小應用 程序上。
我完全沒有料到的是,這個簡單示例所生產的大量錯誤清楚地證明了可訪問性需求。安裝完 RAVEN 之 後,驗證步驟為:在 Package Explorer 中突出顯示我的類元素,並從上下文菜單(右鍵單擊鼠標)選擇 Validate。這樣簡單的操作之後,我看到了圖 3 所示的驗證報告並顯示了 GUI 本身。一個簡要的錯誤檢 查表明我沒有對所有文本字段提供 LABELLED-BY 值,丟失了大量可訪問性名稱,並且沒有為命名的按鈕 組正確分配單選按鈕。當您意識到這些錯誤時,修復它們就相對簡單了。
下面列出了當所評估的 GUI 屬於下面幾種情況時該驗證的惟一限制:
如果是 SWT GUI,類型必須擴展 org.eclipse.swt.widgets.Composite.
如果是 Java Swing GUI,類型必須擴展 java.awt.Panel 或 javax.swing.JFrame,類型要將具有以 下簽名之一的構造函數作為其成員包含進來:
public ()
public (java.awt.LayoutManager)
如果是 Eclipse SWT GUI,類型需將具有以下簽名之一的構造函數作為其成員包含進來:
public (org.eclipse.swt.widgets.Composite)
public (org.eclipse.swt.widgets.Composite, int)
另一個有用特性就是保存驗證會話的結果以供稍後查看或與交付產品進行比較。當前版本的 RAVEN 可 以創建一個本地數據庫,通過 Database Perspective(Window < Show Perspective)來存儲並檢索 驗證會話的結果,從而創建 Cloudscape 數據庫。同樣有大量關於如何創建數據存儲的說明,並且默認情 況下提供了大部分必要的首選參數。這個數據庫的主要價值在於:在開發期間,允許定期檢查代碼庫以查 看代碼是否退化或引入了錯誤。例如,下面這些操作將非常簡單:執行驗證,在 GUI 組件中找到一些錯 誤,比較之前運行的代碼以發現何時引入了新錯誤。
同樣,還可以配置 RAVEN 引擎以便在運行時會話期間驗證 GUI,方法是當應用程序運行在 Eclipse 下時,簡單配置 RAVEN 運行時的操作。這對於 Eclipse 插件開發(Eclipse Plug-in Development)來 說尤其有用,因為 RAVEN 驗證是在同一個插件開發環境中執行的。
驗證已有的 GUI
我們還可以對現有的應用程序 GUI 進行驗證。雖然不用訪問代碼庫,這仍然是一個非常困難的過程。 如前面應用程序必須是 Java Swing 或 SWT,並且測試程序必須使用 Java GUI 視圖來設置 RAVEN 驗證 。如圖 4 所示,還需要設置合適的 Eclipse 啟動程序以及所有源路徑元素,並包括具有所有必需參數的 startup Main。
圖 4. RAVEN 運行時
我發現使應用程序這一特性正常工作非常困難,即使使用上面的示例應用程序並按照 RAVEN 文檔中的 步驟執行。然而,對於無法訪問源代碼的應用程序,或者執行驗證的目的是確保問題應用程序符合所有可 訪問性需求,那麼這種特性將會非常有用。
結束語
對於殘障人士來說,提供軟件界面的可訪問性至關重要。對於軟件生產商來說,這意味著在設計和構 建軟件系統時需要考慮適應性技術的需求。很多現代語言,包括 Java 編程語言,為這些技術提供了內置 支持,但是只有在系統編程人員編寫符合可訪問性要求的界面時才起作用。聯邦法令的調整同樣使完全可 訪問的軟件 UI 的創建變得更加重要。
盡管所有開發可訪問性的理由都非常重要,然而很少有 UI 是完全符合可訪問性要求的。一部分原因 是因為編程語言的功能忽略了這點,但主要原因是因為創建 UI 困難重重,創建符合可訪問性要求的 UI 更是如此。諸如 RAVEN 之類的自動化驗證工具的出現,極大地增加了開發團隊花費時間實現可訪問性的 可能性,並且在實現過程中,大大減少了開發人員遇到的技術錯誤。