沉寂的圆锥
现今许多公司都趋向于声明他们对于敏捷过程的十二分忠诚。我们经常长时间地进行 SCRUM 会议,希望能尽快地交付产品,我们经常……可是我们如何真正衡量这些应用程序是成功了还是一堆垃圾呢?我们都知道页面点击量和图表在供货商以及一些博士眼中的重要性……我们应该如何评估应用程序中的“必要”特性是否被用户使用和如何被用户使用的呢?更重要的是,我们如何准确地评估我们是否位于一条通向成功产品和公司的康庄大道上呢,还是我们仅仅是在挖开另一个无底洞?
以上的问题激发了 MOle 的基本想法。最近我也曾处于应用即将交付的阶段。应用程序中的特性非常丰富,代码被完整地测试,而服务器不间断地运行着。我们被产品的需求奴役了很长时间。其中的一个特性是一个美妙的基于 Ajax 的滑动条,它可以允许用户根据一些排序算法设置自定义的内容显示。我们不禁要问,用户会使用这个功能吗?如果他们使用,将会如何使用呢?可以肯定,花费几千美元可以找到一些志愿者,进行一些实验,或许会对我们的问题给出一些帮助。可是谁可以忍受这样地时间和金钱上的耗费呢?因此,我们需要一些办法来记录这些数以千计的各种各样的操作,探测这些特性,记录这些事件,这样我们就可以建立基于这些特性的测量和报告。我们在应用程序中需要一个代理来做这些事情(探测这些特性和记录需要的事件)。MOle 允许我们收集用户的输入。它给我们提供了必要的回馈用于对下次的迭代进行调整。同样,它也指出了一些在我们的需求文档中被列为“必须”的需求,而实际上完全没有被用到的情况。同样,MOle 在评价我们的测试团队在测试环节的覆盖率和有效性方面也有一定的作用。
让我们开始吧
期望现在已经激起了你的欲望,下面是几个 MOLe 你的应用的必经步骤:
- 下载插件:
ruby script/plugin install svn://rubyforge.org/var/svn/liquidrail/plugins/mole/trunk
在安装的过程中,插件将会在数据库中创建两个表,分别为 mole_features 和 mole_logs - 在 config/environment.rb 中设置 MOle
<span color="#006600">MOLE</span> = File.<span color="#6666cc">new</span>( "<span color="#006699">#{RAILS_ROOT}/config/mole.conf</span>" )<br></br><span color="#006600">MOLEABLE_APP</span> = true<br></br><span color="#006600">MOLE_PERF_MAX_TIME</span> = 5
应用程序中所有被探测的动作都是由 mole.conf 文件设置的。一个 mole.conf 文件的样例在安装插件时已经被安装到 config 文件夹中。你可以通过 MOLEABLE_APP 来控制插件是否工作。MOle 的一个内建的特性是用来记录一些较长的操作。我们将会在后面提到它。最后一个变量将会对创建的性能进行设置,这里是 5 秒。 - 加载 MOle 配置在 ApplicationController 中添加如下代码:
<span color="#3399ff">load</span><span color="#006600">MOLE</span>.<span color="#6666cc">path</span> <span color="#3399ff">if</span>File.(<span color="#3399ff">MOLE</span>.<span color="#6666cc">path</span>) <span color="#3399ff">and</span> <span color="#006600">MOLEABLE_APP</span>
上面的代码将会加载一个用于说明如何探测你的 rails 应用程序的配置文件。只需一个文件即可,不需要在你所有的控制器代码中处处进行说明。在配置文件中仅仅需要简单的指明 MOle 应该在什么地方和捕获什么特殊的事件。
4. 探测一个控制器事件: MyController.<span color="#6666cc">before</span>( <span color="#006600">:feature</span> => <span color="#006600">:show</span> ) do |context, feature, args|<br></br> Mole::DbMole.<span color="#6666cc">mole_it</span>( context, feature, context.session[<span color="#006600">:user_id</span>],<br></br> <span color="#006600">:some_var</span> => context.<span color="#6666cc">instance_variable_get</span>('@myVar'))
上面的代码将会在 show 事件被调用之前探测 MyController 的 show 事件,并将控制器的 myVar 状态记录到数据库中。因此,我们不仅可以记录事件是否被调用,还可以记录与该调用相关联的状态。
或者……
MyController.<span color="#6666cc">after</span>( <span color="#006600">:feature</span> => <span color="#006600">:show</span> ) do |context, feature,ret_val, args|<br></br> Mole::DbMole.<span color="#6666cc">mole_it</span>( context, feature, context.session[<span color="#006600">:user_id</span>],<br></br> <span color="#006600">:some_var</span> => context.<span color="#6666cc">instance_variable_get</span>('@myVar'), <span color="#006600">:return</span> => ret_val))
与上述代码基本相同,但是是在事件被调用之后进行记录。
5. 就是这样了!
支持控制台
. 我们还捆绑了一对控制台用于即时查看 MOle 的情况:Snitch 和 Yahoo! Widget MOlet。
Snitch代码可以在以下地址下载:
svn://rubyforge.org/var/svn/liquidrail/plugins/mole/samples/consoles/snitch
下载完毕后,用如下的命令来完成安装:
ake setup
上述命令将告诉应用程序如何通过用户数据库表名来访问用户模型,以及通过数据库表的列来显示用户名。同样,可能需要编辑 database.yml 文件来指明数据库名称。不过不用担心应用程序会改动你的数据库。
为了运行另一个面板程序,需要安装 Yahoo! Widget Engine ,然后下载 MOlet 并将其保存到面板目录中。(MAC:Documents/widgets,Windows:Document And Setting/user/widgets)
svn://rubyforge.org/var/svn/liquidrail/plugins/mole/samples/consoles/widgets/molet
## 总结
感谢您驻足观看关于 MOle 的一点介绍。无论你是否有着固定的需求,还是考虑如何能便捷地在 WeightWatcher 中寻找一块匹萨,我们希望你找到你的出发点。我们希望看到你关于 MOle 的感受,我们将会尽我们最大的努力来帮助你。欢迎您提出有关于帮助我们改善 MOle 的任何意见或建议。
资源
- 博客: liquidrail
- 视频: The MOle - Getting started
- 论坛: MOle Forum
- 文档: Documentation
关于作者
Fernand Galiana 是 Imhotep Software LLC 的拥有者,这是一家关于 Rails 应用的咨询与培训公司,位于科罗拉多的丹佛。他拥有 15 年的用户界面和中间层软件开发经验,同样他也是 ZiYa (一个 rails 的绘图插件)的作者。他目前在丹佛 Rails 用户组中(aka DeRailed)。
查看英文原文: The MOle Plugin - - - - - -
译者简介:张立,博士研究生,喜欢新技术,新思想。经历了一些企业级软件开发后,逐渐将兴趣转向 C#和 JAVA 的企业级应用。同时对动态语言的发展非常关注,喜欢用 Python 进行一些计算,对 Ruby 也倾注了一定的精力。大部分时间在学校从事一些理论研究,工作之余关注开源软件的进展。
评论