用 Mylar 进行以任务为中心的编程-第2 部分

Mylar 通过将任务无缝集成到 Eclipse 中并管理那些任务的上下文,提高了效率。本教程是有关如何使用 Mylar 的指南,共分为两部分,在后半部分中,项目主管 Mik Kersten 讲解了当在 Eclipse 中开发大型应用程序时,Mylar 的上下文管理工具如何使多任务变得简单并减少信息过载。

本文的前半部分 中,讲解了 Mylar 的任务管理工具如何简化聚焦于与给定日或周相关的任务。一旦任务成为您的 Eclipse 体验中的集成部分,您很可能会注意到许多重复性行为都是以所处理的任务的上下文 为中心的。例如,也许您只想看到与给定任务相关的元素并且希望能够将元素的更改独立于其他相关任务而提交。在进行一项任务时,或许想要只运行与更改相关的测试来节省时间。

正如 Mylar 能够协助集中处理工作周的任务,它也能让 Eclipse 工作空间集中处理手头任务相关的 artifact。安装了 Mylar 的 Focused UI,仅需要指出哪个任务是活动的,要用到的所有代码就会自动添加到该任务的上下文中。管理上下文是为了精确地表示出对所从事的各种工件的聚焦程度。当切换任务,该上下文会被保存,这使得可以恢复该上下文并将其同其他团队成员一起分享。

在本文的后半部分中,解释了 Mylar 如何无缝地将其置于 Eclipse UI 之上来凸现编程任务的上下文。文章以解释 Mylar 管理上下文的机制开始,然后介绍了 UI 工具,如兴趣修饰、视图过滤、编程器折叠、活动视图及上下文驱动单元测试套件,在文章的最后,展示了如何综合运用 Mylar 的任务管理和上下文管理来协助团队协作。

图 1 展示了一些运行中的 Mylar 上下文管理工具:(1)按住 Focus on Active Task 按钮将导致 Eclipse Package Explorer 只显示活动任务的上下文元素;(2)切换活动任务通过 Task List 来完成;(3)一经切换,Eclipse 视图和编辑器就聚焦于新近激活的任务的上下文;(4)更改集自动反映任务上下文中的更改;(5)折叠和上下文帮助使视图聚焦于相关元素。


图 1. 使 Eclipse 聚焦于任务上下文

此处 查看完整的图。

使用 Focused UI

设想一下,假设您正在将更改封装到新功能里,来应对迫近的代码冻结期限。在工作中,创建此功能时,构建了关于所有修改过的类和方法以及所有访问过的 API 的颇有价值的知识。由于在使用 Mylar,这个知识会自动地在任务上下文中获取到。任务要完成时,却出现了一个严重的 bug,需要立即给予注意。

您通过单击激活 bug 报告,并开始调查该问题。在 Mylar 的富任务编辑器中浏览该 bug 加了超链接的堆栈跟踪,新的任务上下文被探查和诊断结果所填充。当单击 Mylar 的自动上下文测试套件(该套件运行与已创建的任务上下文结构相关的单元测试),您发现该 bug 实际上在同事的代码中,而不在您的代码中。通过再一次单击,将该 bug 再分配给同事并共享由您的诊断得出的任务上下文。完成这些都未离开 Eclipse,所以单击 Task List 的 Back 按钮会立即回到之前任务的上下文。同时,您的同事也恰在您停止的地方拾起该 bug 报告。

支持的工具

和 Mylar 需要连接器 来集成任务库一样,Mylar 使用桥接器 将上下文模型同特定于域的工具的结构及 UI 特性集成起来。桥接器的核心套件使用 Java™ 代码、JUnit、PDE、Ant 和各种通用资源的桥接器来支持 Eclipse SDK。在完整的集成环境中,Mylar 需要一个能够适用于所使用的全部工具(如 Ruby 和 JSP)的桥接器。由于在 0.7.0 版中并没有满足 Eclipse SDK 这些条件的桥接器,只能通过通用资源桥接器提供工作空间中的所有文件的互用性。这意味着能够在任何文件中使用 Focused UI,但只能在 Package Explorer 中看到该文件本身,且不具备声明过滤(例如,在 Outline 视图中)、编辑器中的自动声明折叠和高级功能(如自动测试套件)。参见 参考资料,来为额外的桥接器投票。

为提供 自动更改集管理,Mylar 也需要一个版本控制提供程序的扩展。Mylar 0.7.0 支持 Eclipse 内嵌的 CVS 及 Subclipse 的 Subversion 集成。

接下来的部分将介绍如何利用 Mylar 的上下文管理工具在以任务为中心的方式下工作。这些例子是基于 Java 开发的,因而这些概念和一些功能也适用于可能用到的任何基于文件的工件(参见 支持的工具 获取更多细节)。

兴趣等级模型

Mylar 的上下文管理是基于这样一种理念,即开发人员同系统的交互可以被转换为一个兴趣等级模型,在这个模型中,系统中的每个元素都根据其与手头任务的相关程度来衡量其权重。然后,就可以通过突出最重要的元素、过滤无关紧要的元素以及允许在感兴趣的元素上执行操作(例如,只提交相关更改)来使上下文模型聚焦于 UI。在工作中,上下文建立在一种可预测的方式之上:当激活一个任务时,选择或编辑的每个元素(如一个文件或一个 Java 方法)成为该任务上下文的一部分。和元素交互越多,该元素相对于任务的兴趣等级就越高。如果一个元素的兴趣级别足够高,它将成为一个里程碑 ,即隐式创建的书签。每一次交互也导致组成任务的所有元素已积累的兴趣逐渐衰减,这样兴趣元素的集合就会同当前的兴趣相匹配,而不会无限制的扩张下去。

兴趣修饰与过滤

Mylar 的上下文管理工具使用传统的 Eclipse 视图以一种新的方式来凸现信息。只需单击任务来激活该任务的上下文管理。此后,与之交互的每个元素成为该任务上下文的一部分。Mylar 兴趣修饰器随后使用字体着色来高亮显示每个元素从交互中积累的兴趣等级。默认情况下,非兴趣元素以灰色显示,兴趣元素以黑色显示,里程碑为粗体。

尽管只高亮显示在减少信息过载方面有其局限性,但它还是一直应用于所有能看到诸如 Java 成员和文件等元素的视图中。这能够使得快速挑选元素(如搜索结果等)变得十分简单,如 图 2 所示(Search 视图)。

性能如何呢?

设计 Mylar 是为了确保其上下文管理工具不影响 Eclipse 的性能。如果不考虑工作的系统规模,这是可能的,原因是任务上下文适用于相对少量的交互而不是规模很大的系统。在 Eclipse 下工作时,如果发现 Mylar 导致任何内存开销和速度开销,就应该将其作为 bug 报告。另外,当没有活动任务时,Mylar 的上下文管理和 UI 工具也是不活动的。要了解更多关于 Mylar 性能的配置文件,可以阅读 Mylar FAQ(参见 参考资料)。要打开 Eclipse 的内存监控器,可以使用 Window -> Preferences -> General -> Show Heap Status

Mylar 减少信息过载的关键机制是基于兴趣的过滤。按下 Focus on Active Task 按钮,该机制具有过滤掉所有非兴趣元素的效能,从而使相应的视图聚焦于活动的上下文任务。例如,聚焦模式确保 Eclipse 的 Package Explorer 只显示正在从事的内容:作为任务一部分的所有的源文件和库文件及方法,如 图 2 所示。

一个元素的被选中次数越多,元素的兴趣等级就越高,直到它变为粗体的里程碑。低兴趣的元素(如只选过一次的搜索命中结果)将在兴趣等级中衰减并从过滤过的视图中消失,这确保该视图不会被非兴趣元素所胀满。由于任务上下文在一种可预见的模式下被积极地管理,上下文只包括了有兴趣等级的元素,即使在长期运行的任务中也是如此。尽管设计 Mylar 的任务上下文模型是为了能够一直反映当前与任务相关的东西,但也可以手动地增加或减少元素的兴趣等级(例如,通过使用元素的上下文菜单行为或使用快捷键 Ctrl+Alt+Shift+ 向上/向下的箭头)。

为减少不得不关掉聚焦模式的情况,Mylar 也提供 Alt+Click 机制,从而临时地不过滤树视图中的子节点。例如,要选择一个不可见的方法,按住 Alt 同时单击该类并选择该方法,它就会被添加到任务的上下文中。如果按住 Alt 同时单击视图的空格处,就会显示所有的根节点(如项目)。继续按住 Alt 键,将能够从项目节点快速导航到感兴趣的方法。





回页首


将 Mylar 应用于 Java 开发

当将 Mylar 运用到 Java 编程中,通常将 Package Explorer 设为聚焦模式。默认情况下,此按钮在激活任务时被按下,在停用该任务时解除。应用 Mylar 后,只会看到上下文中的 Java 元素。一选定一个 Java 类,不论是通过浏览还是通过常用的 Open Type 机制(Ctrl+Shift+T),该类型就会变为上下文的一部分并显示在过滤过的 Package Explorer 中。选定并编辑的每个方法都会被添加到任务上下文中,从而出现在 Package Explorer 中。图 2 显示了聚焦模式下的 Package Explorer。请注意 Java 元素基于兴趣的修饰及 Package Explorer 中及 Debug 视图中的活动过滤。


图 2. 使 Java 元素视图聚焦于任务上下文

当视图在聚焦模式时,Eclipse 用于打开元素的工具运行良好(Ctrl+Shift+T 用于打开一种类型,Ctrl+Shift+R 用于打开一项资源,Ctrl+O 用于就地打开大纲,Ctrl+T 用于就地打开继承)。为使在上下文中选择类型变得更简单,它们被放至 Open Type 列表的顶部。切换任务时,该列表将包含新任务感兴趣的类型。没有活动任务时,该列表反转成最近使用类型的 Eclipse 全局列表。

如果使用 Java Browsing 视图,请使用窗口的工具栏按钮,通过单击将三种 Java 元素视图设为聚焦模式。

自动折叠及内容辅助排序

编写 Java 代码时,大部分时间都在使用顶级的 Java 编辑器。Mylar 使用自动折叠及内容辅助排序来让 Java 编辑器聚焦于与手头任务相关的东西。如果按下编辑器工具栏上 Mylar 的 Active Folding 按钮,所有非兴趣元素将折叠起来。这增加了编辑器的信息密度并使其更加易于在大型文件中遍历声明,而不必依赖 Outline 视图。一选定某个元素,该元素就成为任务上下文的一部分并呈打开状。请注意图 3 中大多数元素是如何折叠的,这是因为它们都未被选择或编辑过;同时,活动元素是打开的,左边的编辑器装订线提示它是一个里程碑。


图 3. 自动折叠及内容辅助

和 Mylar 在视图中过滤类似,Mylar 也根据其兴趣等级对 Java 内容辅助建议进行排序。在兴趣分隔符下的所有条目都使用 JDT 的标准排序试探法进行排序。这意味着,只需按几次向下箭头键就可以选择感兴趣的建议。如果在选择建议前开始输入,该列表会反转为典型排序。还请注意图 3 中的诸如 getTask() 等感兴趣的方法在编辑器中也是打开的。公开出元素兴趣等级的各种机制间的一致性有助于 Focused UI 变得可预见且易于使用。

用上下文管理打开的编辑器及视图

Mylar 也使用任务上下文来动态地管理和任务相关的打开编辑器的数目。当文件中的元素从兴趣等级中衰减,该编辑器会自动关闭。当停用一个任务时,它所有的编辑器都会关闭,任务激活时重新打开。减少元素的兴趣等级会关闭其编辑器,且反之亦然,关闭一个文件也会减少其兴趣等级。使所有打开的元素都和兴趣元素相对应确保了打开编辑器的数目不会膨胀,也使您能够使用 Eclipse 的编辑器导航工具在感兴趣的文件间导航。例如,如果导航器视图(如 Package Explorer)不可见的话,使用 Ctrl+E 和 Ctrl+F6 命令就可以很方便地在编辑器间进行切换。

同样,Mylar 也能通过恢复上次完成一项任务时激活的视图(通过单击 Window > Preferences > Mylar 启用)来管理 Eclipse 的视图。当不同的任务同 Eclipse 提供的不同视图相对应时(例如,一些任务与 Java 开发相对应,其他任务与 PHP 相对应),这点是很有用的。

Ant、PDE 及其他源文件

Mylar 的上下文管理工具能够应用于所有在 Eclipse SDK 中显示上下文的视图:Package Explorer、Navigator、Project Explorer、Outline、Problems、Tasks、Debug、Packages、Types 和 Members 等等。任何树视图的聚焦模式,如 Project Explorer 都添加了兴趣修饰和过滤。列表视图,如 Problems,也能根据兴趣进行分类。由于这种通用的支持,可以在非 Java 项目中使用 Mylar,如在 PHP 开发中,即使所用工具没有定制的桥接器支持(参见 支持的工具)。

例如,如果使用 Ant 或 Plug-in Development Environment(PDE)开发一个应用程序,Eclipse UI 可能和图 4 中的类似,图中有打开的多个视图并显示着上下文:


图 4. 使通用 IDE 视图聚焦于任务上下文

请注意图 4 中的 Project Explorer 视图只显示任务上下文中的文件,在本例中,是一些图像和 XML 文件。打开的文件是 “build.xml” ,该文件由许多 Ant 声明组成。在 Outline 视图中,只能看到正在操作的声明而不是许多非兴趣声明。Problems 视图也聚焦于活动任务,只能看到感兴趣的东西(如所有的错误及警告或任务上下文中其他的元素标记),而不是被数百条无关的警告堆满而过载。最后,Eclipse Tasks 视图也是聚焦的,因而将只看到与任务上下文相关的标记,而不会看到数百条 to-do 而不会立即去做的标记。

提示:同 Mylar 的 Task List 视图形成对比,Eclipse SDK 的 Task 视图显示如 to-do 标签等标记,这些标记指出了某个资源的本地问题,且和编译器的警告类似。这些 “to-do 任务”比 Mylar 的任务的粒度要细得多,并且一个任务能够清理多个 to-do。由于 Tasks 视图很快就过载,使用聚焦模式能够使提交前清理变得很方便。

使用上下文视图寻找相关元素

Mylar 的上下文模型能够扩展到除直接选定的元素之外还包含结构上相关的元素。尽管上下文视图仍是 Mylar 的一个实验部分,其 UI 也将继续改进,但它们的责任就是是记录相关元素。当需要这些元素时,上下文视图节省了搜索相关元素的时间。当前有两个上下文视图:Context Search 和 Context Hierarchy。上下文视图只显示里程碑类型的上下文,所以如果在上下文中还没有里程碑,必须首先创建一个。一种创建里程碑的方法是将一个结构化的元素(如方法)拖曳至一个上下文视图中。

提示:只要有可能,Mylar 就会将现有的 Eclipse UI 功能集成起来,从而不用请求额外的屏幕资源就能显示新视图的上下文。在高分辨率显示器上(1920x1200 或更高),使上下文视图呈打开状能够省去很多次单击来保证将其纳入视图范围中。

在图 5 中,可以看到 Context Search 和 Context Hierarchy 视图。Context Hierarchy 显示了任务上下文的继承结构,而 Context Search 使用 Eclipse 搜索工具来显示上下文中结构上相关的元素。例如,当操作一个由 plugin.xml 文件引用的类时,引用的元素将出现在 Context Search 视图中。


图 5. Context Hierarchy 和 Context Search

Context Test Suite

在以任务为中心的方式下编程更有易于频繁运行单元测试。通常来说,单元测试实践让您为一个或多个当前正在从事的枯燥测试创建一个新的测试启动程序。其他的测试方案是:在一个项目上运行所有测试,这会错过一些相关测试;或运行一整套测试,这很慢。为解决这些问题,Mylar 在任务上下文中自动维护了元素的单元测试套件,并在操作任务时使重复运行测试变得很简单(用快捷键 F11)。

为启用此功能,为 JUnit Plug-in 测试或普通 JUnit 测试创建一个 Context Test Suite(如图 6 所示)。Context Test Suite 自动更新以包含当前活动上下文中的所有测试用例。该套件也包含了相对于该上下文有着可预见的兴趣等级的所有元素,如由重构引起更改的元素。如果打开了 Context Search 视图,Context Search 视图中显示的结构上相关的元素也会包含在该套件中。

例如,如果正在一个类上操作,且该类被一个 Context Search 视图上显示的测试所引用,尽管并未直接选择该测试,该测试仍将运行。


图 6. Context Test Suite

什么使 Mylar 变得 “灵巧” 呢?
尽管 Mylar 经常被称作灵巧的用户界面,但它本身并没有任何灵巧之处:它只不过是利用了您的智慧。Mylar 上下文是您同系统元素及关系进行交互的一种可预测的投影,它并没有使用难于预测和理解的知识型模型。该模型由 Context Framework 公开,这样,其他工具也能在上面操作并将其应用于特定于域的视图和编辑器中。参见 参考资料 以了解更多 Mylar 内在的东西及其架构,了解如何将 Mylar 扩展到您的项目中。

将上下文用于协作

协作性工具都是关于共享信息的,任务上下文能聚焦于该信息而阻止过载和分散。开发人员不断地来回发送电子邮件、即时消息及文件,来交换执行日常任务所需的必要消息。尽管 Mylar 仍没有排除对即时消息或电子邮件的需要,但它能够通过将它们锁定在任务周围来简化一些协作活动。由于任务定义了清晰、易于理解的工作单元,且任务上下文提供了同该任务相关的元素及工件的排序,所以用单击来共享任务上下文的功能能够帮助您极大地提高协作效率。

我在 本文的上半部分 中演示了 Mylar 的任务管理 UI 是如何将基于 Web 的库(如 Bugzilla)集成起来的,从而提供了您期待从电子邮件客户端中得到的那种协作集成程度和响应程度。这一部分则解释了 Mylar 对跟踪更改集和任务活动的自动支持(联合了对上下文共享的支持)是如何进一步便利了团队工作及获取专门技术的。通常,您可以根据需要以及 Mylar 同源码及任务库集成的程度挑选要使用的功能。

自动化的更改集

更改集 是一项用于给资源分组的内置的 Eclipse 工具,可以在 Synchronize 视图中对其进行操作,以提交、更新或创建补丁。除非在一个非常静态的项目中工作,否则手动管理更改集常常得不偿失。Mylar 通过自动管理更改集便利了对源码库的操作。一旦激活一项任务,该任务的更改集即被添加,并随后显示在 Synchronize 视图(图 7)中。操作该任务时做出的更改被添加到该更改集中。可以使用位于视图的 Change Set 节点的上下文菜单来覆盖、提交或创建一个补丁。由团队成员做出的更改按照任务分组显示,可以通过右键单击一个引入的更改集来打开相应的任务。请注意如果有了更改,但任务停用,更改集不变,使您可以操作同时进行的多项更改。Mylar 确保在上下文和更改集之间的一对一映射,所以如果将一份文件手动地添加到更改集中(通过 Synchronize 视图中的上下文菜单),该文件也会被添加到上下文中。当前支持的源码库是 CVS 和 Subversion(通过 Subclipse)。


图 7. 更改集管理并将其映射到任务

尽管一开始效果也许不明显,Mylar 使用上下文将任务和资源绑到一起的方法将对您工作的方式产生根本性的影响。例如,对于 Mylar 项目本身,不需要编写提交消息,因为它们是由 Mylar 的更改集集成(使用 Window > Preferences > Mylar > Team 页面来编辑自动提交模板)自动生成的。这使我们能够通过单击从 History 视图导航至与修订相对应的任务,这节省了跟踪更改及修订至原始任务的时间。相反地,这也使得可以通过 CVS 日志查询所有针对一个特定任务更改过的文件。

提示:Eclipse 有两种更改集模式,3.2 版中新出现的基于模型的更改集和标准更改集。尽管这些模式实际上很难辨别,但每种模式都有一些值得注意的局限之处。为获取详情,请参照 Mylar FAQ(参见 参考资料)。

共享上下文

任务上下文获取执行任务时创建的知识。重新激活一个任务会立即将您带回到该任务的上下文,而不是迫使您恢复与该任务相关的那部分系统。如果半途将任务移交给团队成员,任务上下文会为他或她提供一个起点。由于上下文是从交互中创建的,而不仅从更改中创建,每个任务上下文都包含了相关信息,如处理该任务时访问过的 API 以及引用过的文档。为支持这个及类似的协作场景(如结对编程),上下文能被轻易地共享。可以通过 Task List(如图 8)中的上下文菜单或通过单击任务编辑器中相应的复选框来激活上下文共享。


图 8. 通过任务附件进行上下文共享

当使用支持附件的 Bugzilla 和 Trac 连接器时,可以将任务上下文附在 bug 报告中来轻易地实现共享。当获取一个共享上下文时,可以从所有可用的上下文中选择(如果当前有多个上下文的话)。例如,在 Mylar 项目中,我们将上下文附在每一个解决了的 bug 报告中,并且要求每一个贡献的补丁都要附上上下文。这种通过上下文共享专门技术的方法使应用补丁、向团队成员移交 bug 报告、在结对编程会话结束后清理代码变得更加简单。所有已解决的 bug 都存储了一个上下文这一事实意味着只要 bug 被重新打开或类似的错误发生,我们都能立即恢复并使用过去的技术。





回页首


结束语

在这一分为两部分的文章中,我介绍了如何用 Mylar 进行以任务为中心的编程。我介绍了 Mylar 是如何通过将任务作为 Eclipse 中头等重要的部分对待而让您日常的工作变得相当地简单。我也介绍了 Mylar 如何使用 Eclipse 视图来帮助您聚焦于手边的任务,并为个人及团队的使用凸现这些任务的上下文。

Mylar 背后的哲学是少就是多 。它的任务管理和上下文管理工具联动,确保您只需要查看感兴趣的信息。一个针对于将 Mylar 用于日常工作的业内开发人员所做的现场用户的研究已经验证了 Mylar 的上下文模型的高效性(参见 参考资料)。自从 2004 年 8 月创建了 Mylar 0.1 的原型开始,我就已经在所有的工作中使用 Mylar。像许多其他 Mylar 用户一样,我已经无法想象还要手动寻找并识别工作中的相关信息的情景了。

如果 Mylar 支持您的任务库,它也能使您的日常工作变得更加简单、更加有效且更加专注。如果它不支持您的任务库,您可以试着用它来完成个人任务。不管何种情况,都请使用 Bugzilla 集成来给出回馈并为您愿意看到被支持的其他连接器投票。您的回馈将帮我们进一步优化该工具,因为 Mylar 计划将于 2006 年 12 月早些时候发布其 1.0 版。

致谢

Mylar 现在的成功和进步很大程度上得益于大量的用户参与,他/她们报告 bug 并贡献补丁。正是这种协作让 Mylar 从一个研究原型发展成为了一个成千上万的程序员们在日常工作中所依赖的好帮手。

Athen O'Shea、Robert Elves、Gail Murphy 和 Ducky Sherwood 为本文提供了有益的回馈。



参考资料

学习

获得产品和技术

讨论


关于作者

 

Mik 热衷于构建一些使工作更易于专注且更高效的工具。作为 Xerox PARC 的一名研究科学家,他创建了第一个面向方面的编程工具,且继续参与 eclipse.org/aspectj 项目。在不列颠哥伦比亚大学攻读博士期间,他创建了以任务为中心的交互技术,他也是 eclipse.org/mylar 项目的领导者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值