Mylar 通过将任务无缝集成到 Eclipse 中并管理那些任务的上下文,提高了效率。本教程是有关如何使用 Mylar 的指南,共分为两部分,在上半部分中,项目主管 Mik Kersten 向您介绍了 Mylar 的任务管理工具以及任何将其与 Bugzilla、Trac 和 JIRA 等库集成。
虽然软件系统、框架及工具可以持续无限期地发展,开发人员处理信息的能力却有一个实际的上限。大多数现代 IDE 用增强的编辑工具、结构视图工具及搜索工具来试图解决这个问题。尽管这些机制使得在大型系统中导航变得十分简单,但对于开发人员为了完成编程任务管理而必须处理大量信息这一事实却于事无补。其结果是会导致 IDE 结构视图过载 —— 即使对于一个小的企业应用程序,Eclipse Package Explorer 都可能包含好几万个元素 —— 且开发人员会在滚动信息、导航信息、解析信息上浪费大量的时间,而不能及时完成任务。
有趣的是,在大多数情况下,为完成编程任务,并不需要看到系统的整个等级结构或对一个特定方法的一个引用。对于处理 bug 或添加功能来说,您所关心的只是系统的一个子集。
Mylar 是一项新的交互技术,它通过给 Eclipse 添加两种新工具:任务管理和上下文管理让子集变得清晰。任务管理工具将 bug/task/issue 跟踪器集成到 Eclipse 中,并提供高级的任务编辑及计划安排工具。上下文管理工具监控同 Eclipse 的交互,自动识别和手头任务相关的信息,并聚焦到 Eclipse 视图及编辑器,从而只显示相关信息。将此结合起来,这些工具极大地减少了过载并显著提高了开发人员的生产效率(有关该领域研究的成果,请参见 参考资料 中的文章 “Using Task Context to Improve Programmer Productivity”)。
|
这个分为两部分的文章是使用 Mylar 的指南。第 1 部分是对 Mylar 的概述,同时介绍了其任务管理工具。第 2 部分 展示了其上下文管理工具,并探讨了 Focused UI 对日常编程及开发方法论的影响。为了方便您学习,这两篇文章是同时发表的。
请注意本文假设您熟悉 Eclipse IDE。第 1 部分适用于任何编程语言或 Eclipse 发行版。第 2 部分专注于 Java™ 开发,但也探讨了适用于所有基于 Eclipse 的工具的特性。Bugzilla 是贯穿于全文的样例中所使用的任务库,但也可以推广至由 Mylar 支持的其他问题跟踪器。
Mylar 以记录任务(参见 参考资料,获取支持版本)的复杂机制拓展了 Eclipse SDK。任务 被定义为想要回顾或同他人一起分享的任何工作单元,如一个由用户报告的 bug,或写给自己的一条关于改进功能的注释。可以将任务存储到本地的工作空间,或从一个或更多任务库中获取。要连接到任务库,必须有一个支持该库的连接器。(任务库 是如 Bugzilla、Trac 或 JIRA 等的 bug/ticket/issue 跟踪器。)
任务一旦集成,Mylar 监控这些任务的活动,从而识别与手头任务相关的信息。Mylar 从中创建一个任务上下文,它是与任务相关的所有工件的集合。这些工件可以包括编辑过的方法、引用过的 API,以及浏览过的文档。Mylar 使用这个任务上下文使 Eclipse UI 聚焦于有趣的信息、隐藏无趣的信息并自动寻找相关信息。如果手边有了这些完成任务需要的信息,就会减少花在搜索、滚动及导航上的时间,从而提高效率。通过使任务上下文显式,Mylar 也便利了多任务的执行、计划、对过去的劳动成果的重用以及技术经验的分享。
随着时间的流逝,使用 Mylar 将会让您的工作方式发生微妙的根本性转变。当习惯于在以任务为中心的工作方式下工作时,您会像其他 Mylar 用户那样,经历工作效率的急剧提高。组织好工作、主动应付大量的 bug 报告以及跟踪改进将逐渐变得毫不费力(参见 参考资料 中 Mylar 用户的反馈)。
图 1 显示了工作中的 Mylar 的一些任务管理及上下文管理功能,编号为:(1)有一个活动任务的 Mylar Task List,以及计划在今天处理的分配好的 Bugzilla 报告;(2)引入的注释和过期的任务;(3)由任务上下文管理的更改集合;(4)有离线支持的富任务编辑器;(5)Eclipse 的 Package Explorer 上的以任务为中心的模式。
图 1. Mylar 的 Task List 和 Focused UI
从 这里 看全图。
接下来的部分中,将在 Eclipse 平台上设置并安装 Mylar,并介绍其使用频率最高的任务管理功能。在对 Mylar 任务管理工具的全貌有所了解后,将更加深入地理解它是如何影响日常工作过程的。
在本文中,使用 Mylar 的 Bugzilla Connector 以突出任务库集成中的主要概念。当使用其他支持的任务库时,这些概念是一样的。表 1 显示了由 Mylar 0.7 支持的任务库及其集成程度。当使用如 Bugzilla 等完全集成的连接器时,可以完全依赖 Mylar 同该库一起工作。当使用只支持查询的连接器时,可以从该库中保存并计划任务,并用 Eclipse 内嵌的 Web 浏览器对其进行编辑。如果 Mylar 尚不支持您的任务库,仍可以用它完成本地任务及与 Web 浏览器集成(例如,通过将 URL 拖到 Task List 来自动地创建链接任务)。然而,连接器的集成越是复杂,效率就越高,所以如果您的任务库还不被 Mylar 所支持,那么就投票选择一下吧(参见 参考资料)。
表 1 的功能注释:富编辑 提供了集成编辑功能,如拖放附件。离线支持 无需在打开任务时等候慢吞吞的库,且允许离线工作。集成更改通知 允许将 Task List 作为收件箱使用,而不用依赖于电子邮件客户机。
表 1. 支持的任务库(Mylar 0.7)
| 连接器 | 查询 | 富编辑 | 离线支持 | 更改通知 |
|---|---|---|---|---|
| Bugzilla | * | * | * | * |
| Trac | * | * | * | |
| JIRA | * | * |
通用 Web 库连接器(Generic Web Repository Connector)也为 Google Code Hosting(code.google.com)、IssueZilla(java.net, dev2dev, tigris.org)、GForge(objectweb.org)、SourceForge(sf.net)、JIRA、Trac、phpBB 及 vBulletinhe 提供了基本查询支持。参见 参考资料,以了解更多。
Mylar 所做的一切都是关于如何减少信息过载。为达到此目的,它的关键设计目标之一是将 Eclipse 现有的 UI 工具无缝集成到一起。另一项目标是让您只安装及使用需要的功能。例如,如果您的角色是进行 bug 筛选而不是开发,可以安装 Mylar 的 Task List 而不安装 Focused UI,并为问题跟踪器单独挑选连接器。如果您是一名软件开发人员,很可能两个功能都要安装。本系列的第 1 部分涵盖了 Task List,在第 2 部分将介绍 Focused UI。
图 2. 选定 Mylar 功能及库连接器
要为 Eclipse 版本安装 Mylar,可以使用 Eclipse 软件更新机制:Help > Software Updates > Search for new features to install。更新 Eclipse 时,最好使用这个机制而不是 Search for updates,该机制通常不会执行正确的依赖项查找。如果使用的是 Eclipse 3.2,请添加 download.eclipse.org/technology/mylar/update-site/e3.2 更新站点并选定图 2 所示功能。如果使用的是 Eclipse 3.1 或 3.3,请参照 Mylar 下载页面中的正确更新站点(参见 参考资料)。
提示:Mylar 构建在 Java 5 之上,所以如果使用 JDK 1.4 或更早的版本,Mylar 将不会运行。通过 Help > About Eclipse SDK > Configuration Details 检查您的 Eclipse 版本所使用的是哪个版本的 JRE。关于安装中的故障处理,请参照 Mylar FAQ(参见 参考资料)。
假设安装了 Focused UI,在重新启动 Eclipe 前,将看到一个关于设置推荐的选项的弹出式向导。该向导会提示打开上下文管理性能,该性能能被打开或关闭,正如向导页所给出的那样。我将在第 2 部分中介绍 Mylar 的上下文管理功能,所以请选中这些选项,因为日后可以进行修改。现在,直接看一下 Task List 视图,如图 3 所示:
图 3. 安装后自动出现的优先选项设置向导
|
Mylar 以其对两种任务的支持拓展了 Eclipse。
- 个人任务被存储至本地 Eclipse 工作空间,并提供基本任务管理功能,如计划安排。
- 共享的库任务被存储至服务器,并提供协作特性,如注释线程及文件附件。
这一部分展示了如何创建并编辑个人任务,并探讨了操作库任务时可用的各种功能。请注意下面描述的功能是否可用取决于连接器的 集成程度,所以只需参照适合您的情况。不考虑集成程度,可以使用 Mylar 的所有任务管理功能,这将在 任务管理及个人计划 部分中探讨。
安装了 Mylar 后,使用 Task List 视图(如图 4 所示)上的工具栏按钮创建一个新任务,并填充其描述。创建本地任务的另一种方式是将文本或 URL 从 Web 浏览器中拖至 Task List。新任务的描述会根据相应 Web 页面的标题自动填充。操作很简单,在 Firefox 中,只需一个常规的拖曳;在 Internet Explorer 中,只需在拖曳时按住 Ctrl。双击 Task List 中的任务,打开任务编辑器,可以用该编辑器创建注释并按某个特定日期对任务进行安排。默认情况下,新创建的任务将按照其创建日期进行安排。可以使用任务注释来存储相关信息、粘贴超链接或创建粒度细微的要做的事情的条目。也可以创建任务分类将相关任务保存到一起。
图 4. 编辑个人任务
共享的库任务和个人任务类似,只是前者存储在服务器上,如 Bugzilla。库任务包括由用户填写的 bug 报告和计划要完成的新功能,以及涉及到协作的任何其他工作单元。库任务和个人任务使用同一个 Planning 选项卡来保存注释及个人计划。
可以通过打开 Task Repositories 视图(Window > Show View > Mylar > Task Repositories)并使用该视图的工具栏添加新库来创建一个任务库。然后可以输入一些关于库的细节或从一些可用模板中选定一个。图 5 中显示的 bugs.eclipse.org 库是在安装 Mylar 时自动创建的,以使报告 Mylar 和 Eclipse 的 bug 及特性请求变得简单:
图 5. 添加 Eclipse.org Bugzilla 库
一旦添加了任务库,就可以通过 Task List 的弹出菜单中的 New Query 菜单项创建查询来访问该库中的任务。例如,我也许会编写一个查询来访问分发到我的电子邮件地址的所有 Bugzilla 报告,如图 6 所示:
图 6. 创建新的 Bugzilla 查询
设置好参数并单击 Finish,查询分类就被命中的内容所填充,如图 6 所示。打开一个命中的结果,就会检索其内容并将其转换为任务,这意味着当编辑该任务时,会出现个人 Planning 选项卡。要更改查询的参数,可以重新打开它(通过双击 Task List 中的查询)并编辑选中的值。
Mylar 的 Web 集成用您所习惯的 Web UI 的形式提供了完美的灵活性。可以右键单击任何任务或查询,用 Web 浏览器来打开它(Eclipse 浏览器的设置在 Window > Preferences > General > Web Browser 内),任何库任务都有一个 Browser 选项卡。也可以用浏览器打开一个查询,在其中使用 Bugzilla Web UI 对其进行改进,然后在 New Query 向导的提示下,从生成的 URL(通过粘贴)在 Task List 中创建一个新查询。
搜索任务和创建查询类似,但并不在 Task List 中存储结果。使用 Ctrl+H 或 Search 菜单(Search > Task Search),选定库,输入搜索条件,并单击 Search。打开 Search 视图,允许打开与搜索相匹配的任务,如图 7 所示。要改进搜索,简单地再次打开 Search 对话框,之前的搜索条件会恢复。请注意在 Task List 中匹配项和任务图标已经一起显示了出来。(参见 参考资料 中的 Mylar 文档,获取 Mylar 图形设计的图例。)
图 7. 搜索查询和结果
要创建一个新的共享的库任务,请使用 Task List 工具栏中的动作或 File > New 菜单,如果有多个库,选定其中一个库,然后为任务选定一个产品。开启一个新编辑器来填写细节。与平台及 OS 等相关的属性被自动选定。
提示:一个捷径是,可以右键单击查询节点,该节点根据查询自动选定库和产品。
也许要创建的另一种任务是为 Mylar 或您使用的另一种基于 Eclipse 的工具创建 bug 报告。添加bugs.eclipse.org 库和自动 bug 报告的动作(可以从 Eclipse 的 Error Log 视图中访问)使 bug 报告变得简单。如果看到想要报告的错误事件,右键单击它并选择 Report as Bug。New Repository Task 编辑器将打开并包含所有相关信息,比如堆栈踪迹信息。
由于通过单击来报告 bug 的这种形式可能会潜在地导致大量重复的 bug 编档,Mylar 为此提供了自动重复探测。Search for Duplicates 按钮使用在报告的 Description 中自动插入或手动粘贴的堆栈踪迹的来查询相应的库以获得任何潜在的重复。重复探测的结果显示在 Search 视图中,如图 8 所示。如果找到一个匹配项,可以打开它并做出注释,而不必创建一个新的 bug 报告。
图 8. 集成的错误报告和重复探测
打开一个任务时,将会注意到编辑器上的 Bugzilla 和 Planning 选项卡。库任务提供所有个人任务的功能,但也允许直接编辑存储于库中的信息。当查看对 bug 的注释时,可以使用 Outline 视图进行导航,到其他 bug 报告的引用和 Java 堆栈踪迹元素均被做成了超链接。(参见 图 9)。
图 9. Bugzilla 及通知弹出的库任务编辑器
如果连接器支持离线编辑,Mylar 会为打开的任何任务保留了一份缓存副本,并当相应的查询或任务同步时更新这份副本。可以通过按住 Ctrl+S,在本地保存更改,这将导致该任务上具有一个向外的 箭头(也如 图 9 所示)。准备好提交该任务时,单击编辑器底部的 Submit to Repository。
如果有人更改了库中的任务,例如添加了新注释,会有一个弹出框指示该更改,该任务将同一个向内的 箭头一起显示。如果本地副本和服务器副本都更改了,会显示一个红色的冲突箭头,并提示您解决该冲突。
如果一个任务之前被打开过,再次打开它将打开一个离线副本,并立即对任务的背景同步进行初始化。这确保了在开始阅读及操作一项任务前不必等待对服务器的来回访问。确保任务在离线工作前已经同步是一个好主意,因为这样可以在未连接到服务器时就可以进行查看及编辑。
提示:由于 Mylar 的背景同步,可以不再依赖电子邮件通知就能在 Bugzilla 中掌握 bug 报告的改变。所需做的仅仅是设置用以获取所有感兴趣的任务(例如,复制的每份报告)的查询,同时,也会收到不会使收件箱过载的向内的箭头形式的通知。通过单击 Window > Preferences > Mylar > Tasks 设置同步计划。请注意,可以通过右键单击树中的节点并选择 Synchronize 来手动同步查询及任务。
可以通过单击任务编辑器 Attachment 部分的 Add... 按钮来为库任务添加附件。也可以将文件或文本从工作空间或从窗口管理器拖至编辑器的 Attachment 部分。添加附件触发了一个向导,允许选择附件是从 Clipboard 内容中创建,从计算机上的文件中创建,还是从 Eclipse 工作空间中创建。Attachment 表允许用 Web 浏览器或编辑器打开附件,并通过上下文菜单执行特定的行为,如保存或复制到剪贴板。
|
对许多开发人员来说,在任何给定的工作周中,要跟踪及安排的任务包括:
- 正在着手处理的产品要解决的缺陷及功能。
- 与您合作或您所指导或管理的同事所完成的任务。
- 所使用的框架、API 和软件的 bug 报告。
- 个人要完成的事项和剩下的事。
需要将所有的任务集成到一个单一的视图中使它们便于管理,因为只需看一个地方就知道下一步该做什么了。为进一步便利任务管理,Mylar 收录了公认的任务管理的最佳实践,如安排任务和任务延期,以及 XP 风格的开发的立即性和适应性的特点。Mylar 的任务管理工具让您能够轻松适应一周当中不断更新的需求,而不会丢掉对长期优先事件的跟踪。除了能够让您将每个星期都控制在自己手上,Mylar 还通过使共享库属性(如里程碑及优先级)易于掌握来帮您将团队实践集成到一起,所有这些都不必离开 Eclipse。
|
接下来的部分探讨如何使 Mylar 成为单个的任务列表及收件箱,以管理所有与工作周相关的任务。
既然 Mylar 使创建及共享任务变得如此简单,那么看起来似乎一使用 Mylar,Task List 很快就会被几打或可能是几百项任务填满而溢出。具有讽刺意味的是,Mylar 似乎要为信息过载负责,是它将所有信息都装在了 Task List 中。事实上,这正是发生在最早采用 Mylar 的用户身上的事。我的 Task List 目前承载了超过二千四百条条目,其中七百条尚未完成。好消息是,用于聚集 Eclipse 视图的相同的工具(如 Package Explorer)也为 Task List 服务。Mylar 为安排任务和任务延期提供了最有效的工具,它使用此信息使 Task List 只集中展示与工作周相关的任务。可以通过 Planning 编辑器或上下文菜单将新创建的任务安排到创建日来完成,并可以快速地将它们延后到稍后的时间或日期。
任务一旦到期,任务及其容器(例如,一个查询)就会变成红色,且桌面上会出现一个弹出窗口,以防 Eclipse 窗口不可见。如要用其他 Mylar 颜色及字体设置,可以通过单击 Windows > Preferences > General > Appearance > Colors and Fonts 设置任务的首选项。由 Window > Mylar > Tasks > Scheduling 设置的工作日的开始时间,决定了当任务要延期到将来某一天的话,所要延期到的具体的小时。而对工作日结束时间的更改则决定了安排给当日的任务到具体的那个小时过期。
Mylar 任务管理模型的关键是基于兴趣的排序和过滤,这可以通过 Task List 工具栏上的 Focus on Workweek 动作来激活。其中,基于兴趣的排序和过滤确保了只显示安排在给定的某个星期的任务。如图 10 所示,任务被进一步地高亮显示和分类以助于快速确认下一步的任务,如下所示:
- 过期的任务是红色的并总在列表顶部。
- 安排到今日的任务以蓝色显示。
- 安排给本周接下来几天的任务显示为黑色。
- 今日完成的任务显示为绿色。
完成的任务将不再显示在查询中,但仍显示在 Archive 中,Archive 里包含了所有曾处理过的任务。有更改和注释的任务一直都会显示出来,这样就可以将 Task List 当作收件箱来使用。
图 10. 安排任务
通过简单地安排并延后任务,且将视图限制到给某个给定星期安排的任务,Mylar 提供了一种整体的优先级处理。为使当前的工作日变得明确,Mylar 将当日安排的所有任务突出为蓝色。由于在 Focused 模式下工作时,很不希望看到滚动条,所以 Task List 是展开的,您一直都能知道下一步要做什么。
设想一下使用 Mylar 管理的典型工作周中的流程:
- 一周开始时,任务列表中包含了大量的之前安排的或推迟到本周完成的红色任务。在 JUnit 中,红色可不是一个使人开心的颜色。
- 使用上下文菜单来安排今天或本周后几天的每项任务。一旦所有的红色都处理掉了(变为蓝色的是计划给今天的任务,变为黑色的是计划延后到本周后几天的任务),就可以根据需要来考查该周的计划安排以验证任务是现实的任务、延后的任务或是委托代办的任务。
- 在工作日结束时,那些本应该完成但却未完成的任务变成红色,那些当天已经完成的任务会变成绿色。在 JUnit 中,绿色是一个使人开心的颜色。
- 在第二天开始时,当天安排的所有任务都是蓝色的,且过期的任务显示为红色。当估量工作日时,也许会将一些任务延后到这周的后几天完成,这样,可视的蓝色任务代表了那天能够实现的全部任务。任务完成后,它们会变成绿色。当临近周末时,滚动条应该从 Task List 中消失。
- 周末时,滚动条应该消失,且列表中大部分的任务应该变为绿色。
除了自动化的工具,Mylar 还包含了手动排序及过滤工具,如图 11 所描述的那样。这些工具具有不得不再三拖拽各种过滤器和排序器这种常见的麻烦,但当计划和组织时它们很有用。请注意当 Focus on Workweek 处于活动状态时,手动过滤和排序设置被存储了起来。
- 通过在列上单击对列进行排序,比如按优先级排序。
- 通过使用视图中的下拉菜单的优先级来过滤。
- 通过视图菜单过滤所有完成的任务。
- 通过单击 Go Into(在 Focused 模式下也可运行)来过滤特定分类或查询中的任务。
- 使用拖放对任务进行手动排序;按类别排序库任务。
图 11. 手动 Task List 过滤
可以通过 Move to Category 上下文菜单或通过选择上下文菜单中的 Remove from Category 来移动任务。除非将任务从上下文菜单中显式地删除,否则任务将不会消失,即使从查询中消失或从其分类中被删除。可以在 Archive 容器中找到删除的任务,当使用列表顶部的 Find 栏时容器将显示出匹配项。
Task List 顶部的 Find 栏是搜索存储于档案文件中或其他地方的旧任务的好地方。单击其右边的 Clear 按钮或按住 Esc 键恢复之前可视的任务。Archive 容器还能用于查看之前已经解决的、加过注释的任务,因为通常创建查询的方式并不包含已解决的任务。
越是使用以任务为中心的工作方式,Task List 就越是有价值。默认情况下允许自动备份 Task List,可以通过单击 Window > Preferences > Mylar > Tasks 来设置备份目录。要从备份中恢复,请选择相应的单选钮并选择一份备份快照。默认情况下,Mylar 快照了每日所有的任务数据,并保留了三十天的备份(通过 Preferences > Tasks 配置)。可以通过单击 File > Export 导出任务。
提示:当在多个工作空间下工作时,可以通过单击 Window > Preferences > Mylar > Tasks 将任务数据目录设置至共享位置,而不是使用 Import 来获取任务。请注意如果将这一位置放到网络驱动器下,它应当通过一个快速的连接来访问,因为它将被频繁访问。
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)折叠和上下文帮助使视图聚焦于相关元素。
在 此处 查看完整的图。
设想一下,假设您正在将更改封装到新功能里,来应对迫近的代码冻结期限。在工作中,创建此功能时,构建了关于所有修改过的类和方法以及所有访问过的 API 的颇有价值的知识。由于在使用 Mylar,这个知识会自动地在任务上下文中获取到。任务要完成时,却出现了一个严重的 bug,需要立即给予注意。
您通过单击激活 bug 报告,并开始调查该问题。在 Mylar 的富任务编辑器中浏览该 bug 加了超链接的堆栈跟踪,新的任务上下文被探查和诊断结果所填充。当单击 Mylar 的自动上下文测试套件(该套件运行与已创建的任务上下文结构相关的单元测试),您发现该 bug 实际上在同事的代码中,而不在您的代码中。通过再一次单击,将该 bug 再分配给同事并共享由您的诊断得出的任务上下文。完成这些都未离开 Eclipse,所以单击 Task List 的 Back 按钮会立即回到之前任务的上下文。同时,您的同事也恰在您停止的地方拾起该 bug 报告。
|
接下来的部分将介绍如何利用 Mylar 的上下文管理工具在以任务为中心的方式下工作。这些例子是基于 Java 开发的,因而这些概念和一些功能也适用于可能用到的任何基于文件的工件(参见 支持的工具 获取更多细节)。
Mylar 的上下文管理是基于这样一种理念,即开发人员同系统的交互可以被转换为一个兴趣等级模型,在这个模型中,系统中的每个元素都根据其与手头任务的相关程度来衡量其权重。然后,就可以通过突出最重要的元素、过滤无关紧要的元素以及允许在感兴趣的元素上执行操作(例如,只提交相关更改)来使上下文模型聚焦于 UI。在工作中,上下文建立在一种可预测的方式之上:当激活一个任务时,选择或编辑的每个元素(如一个文件或一个 Java 方法)成为该任务上下文的一部分。和元素交互越多,该元素相对于任务的兴趣等级就越高。如果一个元素的兴趣级别足够高,它将成为一个里程碑 ,即隐式创建的书签。每一次交互也导致组成任务的所有元素已积累的兴趣逐渐衰减,这样兴趣元素的集合就会同当前的兴趣相匹配,而不会无限制的扩张下去。
Mylar 的上下文管理工具使用传统的 Eclipse 视图以一种新的方式来凸现信息。只需单击任务来激活该任务的上下文管理。此后,与之交互的每个元素成为该任务上下文的一部分。Mylar 兴趣修饰器随后使用字体着色来高亮显示每个元素从交互中积累的兴趣等级。默认情况下,非兴趣元素以灰色显示,兴趣元素以黑色显示,里程碑为粗体。
尽管只高亮显示在减少信息过载方面有其局限性,但它还是一直应用于所有能看到诸如 Java 成员和文件等元素的视图中。这能够使得快速挑选元素(如搜索结果等)变得十分简单,如 图 2 所示(Search 视图)。
|
Mylar 减少信息过载的关键机制是基于兴趣的过滤。按下 Focus on Active Task 按钮,该机制具有过滤掉所有非兴趣元素的效能,从而使相应的视图聚焦于活动的上下文任务。例如,聚焦模式确保 Eclipse 的 Package Explorer 只显示正在从事的内容:作为任务一部分的所有的源文件和库文件及方法,如 图 2 所示。
一个元素的被选中次数越多,元素的兴趣等级就越高,直到它变为粗体的里程碑。低兴趣的元素(如只选过一次的搜索命中结果)将在兴趣等级中衰减并从过滤过的视图中消失,这确保该视图不会被非兴趣元素所胀满。由于任务上下文在一种可预见的模式下被积极地管理,上下文只包括了有兴趣等级的元素,即使在长期运行的任务中也是如此。尽管设计 Mylar 的任务上下文模型是为了能够一直反映当前与任务相关的东西,但也可以手动地增加或减少元素的兴趣等级(例如,通过使用元素的上下文菜单行为或使用快捷键 Ctrl+Alt+Shift+ 向上/向下的箭头)。
为减少不得不关掉聚焦模式的情况,Mylar 也提供 Alt+Click 机制,从而临时地不过滤树视图中的子节点。例如,要选择一个不可见的方法,按住 Alt 同时单击该类并选择该方法,它就会被添加到任务的上下文中。如果按住 Alt 同时单击视图的空格处,就会显示所有的根节点(如项目)。继续按住 Alt 键,将能够从项目节点快速导航到感兴趣的方法。
|
当将 Mylar 运用到 Java 编程中,通常将 Package Explorer 设为聚焦模式。默认情况下,此按钮在激活任务时被按下,在停用该任务时解除。应用 Mylar 后,只会看到上下文中的 Java 元素。一选定一个 Java 类,不论是通过浏览还是通过常用的 Open Type 机制(Ctrl+Shift+T),该类型就会变为上下文的一部分并显示在过滤过的 Package Explorer 中。选定并编辑的每个方法都会被添加到任务上下文中,从而出现在 Package Explorer 中。图 2 显示了聚焦模式下的 Package Explorer。请注意 Java 元素基于兴趣的修饰及 Package Explorer 中及 Debug 视图中的活动过滤。
当视图在聚焦模式时,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 中大多数元素是如何折叠的,这是因为它们都未被选择或编辑过;同时,活动元素是打开的,左边的编辑器装订线提示它是一个里程碑。
和 Mylar 在视图中过滤类似,Mylar 也根据其兴趣等级对 Java 内容辅助建议进行排序。在兴趣分隔符下的所有条目都使用 JDT 的标准排序试探法进行排序。这意味着,只需按几次向下箭头键就可以选择感兴趣的建议。如果在选择建议前开始输入,该列表会反转为典型排序。还请注意图 3 中的诸如 getTask() 等感兴趣的方法在编辑器中也是打开的。公开出元素兴趣等级的各种机制间的一致性有助于 Focused UI 变得可预见且易于使用。
Mylar 也使用任务上下文来动态地管理和任务相关的打开编辑器的数目。当文件中的元素从兴趣等级中衰减,该编辑器会自动关闭。当停用一个任务时,它所有的编辑器都会关闭,任务激活时重新打开。减少元素的兴趣等级会关闭其编辑器,且反之亦然,关闭一个文件也会减少其兴趣等级。使所有打开的元素都和兴趣元素相对应确保了打开编辑器的数目不会膨胀,也使您能够使用 Eclipse 的编辑器导航工具在感兴趣的文件间导航。例如,如果导航器视图(如 Package Explorer)不可见的话,使用 Ctrl+E 和 Ctrl+F6 命令就可以很方便地在编辑器间进行切换。
同样,Mylar 也能通过恢复上次完成一项任务时激活的视图(通过单击 Window > Preferences > Mylar 启用)来管理 Eclipse 的视图。当不同的任务同 Eclipse 提供的不同视图相对应时(例如,一些任务与 Java 开发相对应,其他任务与 PHP 相对应),这点是很有用的。
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 中的 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
在以任务为中心的方式下编程更有易于频繁运行单元测试。通常来说,单元测试实践让您为一个或多个当前正在从事的枯燥测试创建一个新的测试启动程序。其他的测试方案是:在一个项目上运行所有测试,这会错过一些相关测试;或运行一整套测试,这很慢。为解决这些问题,Mylar 在任务上下文中自动维护了元素的单元测试套件,并在操作任务时使重复运行测试变得很简单(用快捷键 F11)。
为启用此功能,为 JUnit Plug-in 测试或普通 JUnit 测试创建一个 Context Test Suite(如图 6 所示)。Context Test Suite 自动更新以包含当前活动上下文中的所有测试用例。该套件也包含了相对于该上下文有着可预见的兴趣等级的所有元素,如由重构引起更改的元素。如果打开了 Context Search 视图,Context Search 视图中显示的结构上相关的元素也会包含在该套件中。
例如,如果正在一个类上操作,且该类被一个 Context Search 视图上显示的测试所引用,尽管并未直接选择该测试,该测试仍将运行。
|
协作性工具都是关于共享信息的,任务上下文能聚焦于该信息而阻止过载和分散。开发人员不断地来回发送电子邮件、即时消息及文件,来交换执行日常任务所需的必要消息。尽管 Mylar 仍没有排除对即时消息或电子邮件的需要,但它能够通过将它们锁定在任务周围来简化一些协作活动。由于任务定义了清晰、易于理解的工作单元,且任务上下文提供了同该任务相关的元素及工件的排序,所以用单击来共享任务上下文的功能能够帮助您极大地提高协作效率。
我在 本文的上半部分 中演示了 Mylar 的任务管理 UI 是如何将基于 Web 的库(如 Bugzilla)集成起来的,从而提供了您期待从电子邮件客户端中得到的那种协作集成程度和响应程度。这一部分则解释了 Mylar 对跟踪更改集和任务活动的自动支持(联合了对上下文共享的支持)是如何进一步便利了团队工作及获取专门技术的。通常,您可以根据需要以及 Mylar 同源码及任务库集成的程度挑选要使用的功能。
更改集 是一项用于给资源分组的内置的 Eclipse 工具,可以在 Synchronize 视图中对其进行操作,以提交、更新或创建补丁。除非在一个非常静态的项目中工作,否则手动管理更改集常常得不偿失。Mylar 通过自动管理更改集便利了对源码库的操作。一旦激活一项任务,该任务的更改集即被添加,并随后显示在 Synchronize 视图(图 7)中。操作该任务时做出的更改被添加到该更改集中。可以使用位于视图的 Change Set 节点的上下文菜单来覆盖、提交或创建一个补丁。由团队成员做出的更改按照任务分组显示,可以通过右键单击一个引入的更改集来打开相应的任务。请注意如果有了更改,但任务停用,更改集不变,使您可以操作同时进行的多项更改。Mylar 确保在上下文和更改集之间的一对一映射,所以如果将一份文件手动地添加到更改集中(通过 Synchronize 视图中的上下文菜单),该文件也会被添加到上下文中。当前支持的源码库是 CVS 和 Subversion(通过 Subclipse)。
尽管一开始效果也许不明显,Mylar 使用上下文将任务和资源绑到一起的方法将对您工作的方式产生根本性的影响。例如,对于 Mylar 项目本身,不需要编写提交消息,因为它们是由 Mylar 的更改集集成(使用 Window > Preferences > Mylar > Team 页面来编辑自动提交模板)自动生成的。这使我们能够通过单击从 History 视图导航至与修订相对应的任务,这节省了跟踪更改及修订至原始任务的时间。相反地,这也使得可以通过 CVS 日志查询所有针对一个特定任务更改过的文件。
提示:Eclipse 有两种更改集模式,3.2 版中新出现的基于模型的更改集和标准更改集。尽管这些模式实际上很难辨别,但每种模式都有一些值得注意的局限之处。为获取详情,请参照 Mylar FAQ(参见 参考资料)。
任务上下文获取执行任务时创建的知识。重新激活一个任务会立即将您带回到该任务的上下文,而不是迫使您恢复与该任务相关的那部分系统。如果半途将任务移交给团队成员,任务上下文会为他或她提供一个起点。由于上下文是从交互中创建的,而不仅从更改中创建,每个任务上下文都包含了相关信息,如处理该任务时访问过的 API 以及引用过的文档。为支持这个及类似的协作场景(如结对编程),上下文能被轻易地共享。可以通过 Task List(如图 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 为本文提供了有益的回馈。