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 进行验证。
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 开发的简单示例(其中的代码是可访问的),我选择几年前为一个二进制文件编辑器开发的小项目。该编辑器的主窗口中包含多个部分,其中之一用于文件头信息。图
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 进行验证。虽然不用访问代码库,这仍然是一个非常困难的过程。如前面应用程序必须是 Java
Swing 或 SWT,并且测试程序必须使用 Java GUI 视图来设置 RAVEN 验证。如图 4 所示,还需要设置合适的
Eclipse 启动程序以及所有源路径元素,并包括具有所有必需参数的 startup Main。
图 4. RAVEN 运行时
我发现使应用程序这一特性正常工作非常困难,即使使用上面的示例应用程序并按照 RAVEN 文档中的步骤执行。然而,对于无法访问源代码的应用程序,或者执行验证的目的是确保问题应用程序符合所有可访问性需求,那么这种特性将会非常有用。
对于残障人士来说,提供软件界面的可访问性至关重要。对于软件生产商来说,这意味着在设计和构建软件系统时需要考虑适应性技术的需求。很多现代语言,包括
Java 编程语言,为这些技术提供了内置支持,但是只有在系统编程人员编写符合可访问性要求的界面时才起作用。联邦法令的调整同样使完全可访问的软件
UI 的创建变得更加重要。
尽管所有开发可访问性的理由都非常重要,然而很少有 UI 是完全符合可访问性要求的。一部分原因是因为编程语言的功能忽略了这点,但主要原因是因为创建
UI 困难重重,创建符合可访问性要求的 UI 更是如此。诸如 RAVEN 之类的自动化验证工具的出现,极大地增加了开发团队花费时间实现可访问性的可能性,并且在实现过程中,大大减少了开发人员遇到的技术错误。
学习
获得产品和技术
讨论
|