Main

February 20, 2008

Selenium Users Meetup Next Week!

Next week in Mountain View, CA, we'll be hosting the world's first Selenium Users Meetup. If you're in the area and are even remotely interested in development methodologies, QA, or automation, come on by. The event is on Monday, February 25 from 6:30PM to 9:00PM. You can find out more here

November 27, 2007

Review of First OSWorkflow Book

I can't believe it's been over 8 years since I first went from "open source user" to "open source developer", but it was all the way back in 1999 when I released OSWorkflow, which was based on my work at Cisco Systems developing a document management system, to the open source world. It was designed to be a simple, easy-to-use workflow system based on the principles of the "finite state machine".

While it was considered lower level than other competing business process solutions, it actually got quite a bit of traction due to it's simplicity and the fact that instead of using big "businessy" terms that other offerings used to describe themselves, it never hid what it was: a core finite state machine engine designed to make it easy to manage the workflow of many entities (people, issues, documents, etc).

Since then, OSWorkflow has been a pretty good success: a GUI for creating workflows was built, the development team evolved beyond just me (in fact, I haven't been involved in the project directly for 5+ years), became the core of the super-popular JIRA issue tracker, and now it has it's own book.

As the original creator of OSWorkflow, I was given a copy of the book and read through it the other day. In addition to the tremendous pride at seeing the contents in print, I was actually surprised to learn many new things about OSWorkflow. The book covers topics such as complex branching, rules engine integration, Spring integration (Spring didn't exist back when I used OSWorkflow!), and even tie in to those complex business process solutions I never quite "got".

Overall, the book is an excellent guide to OSWorkflow and building workflow systems in Java in general. You can learn more about it here and buy it from Amazon here.

November 03, 2007

Embarassing

Wow - this is embarrassing. Another one of those "I can't believe I haven't posted in so long" posts. But really, it's been 5 months since my last post, and 7 months since my second to last one. Ouch!

That is going to change, especially because I little side project I have going on involves a lot of blogging...

As for what I've been up to...

  • Got married a few weeks ago
  • Sold my company earlier this year (I don't think I ever actually blogged that - whoops!)
  • Been traveling a lot to Boston (50% of the time)
  • Speaking at various conferences (The Ajax Experience, STPCon, StarWest, etc) - mostly QA-related stuff
  • Not too involved in Struts and OpenSymphony, but I hope to be again soon
  • Still fairly involved in OpenQA

I think that's it. More posts soon...

April 11, 2007

Standalone cross-domain XHR interface

Does anyone know of a simple, standalone cross-domain XHR interface that allows for the ability to swap between a real XHR implementation and a cross-domain, iframes-based implementation?

I know Dojo and DWR, among others, have them, but they are all part of a larger framework. Because this is going to be used with Selenium, which needs to avoid polluting common popular JS namespaces, I'd prefer to find something that is standalone.

I'm very surprised one doesn't pop up when I search google.

April 10, 2007

Jive Forums 5.5: A quick review

I recently upgraded the OpenQA forums over to Jive Forums 5.5 (beta) and I am very impressed. We were using a pretty old version (4.2.1) and the difference was like night and day.

The upgrade

The upgrade was as simple as it can get

  1. Copy the new war file over the old one.
  2. Open the forums in the browser.
  3. Enter the administrators password to initiate the upgrade process.
  4. See a nice little list of steps that need to be completed, along with estimated times for each task.
  5. Done.

It really was that easy. Everyone should build software this good. The only other company I know that has a nice upgrade framework is Atlassian, and theirs is nowhere as elegant, nor does it provide the visual feedback that inspires confidence in a process that inherently introduces risk.

Reply by watches

By far my favorite new feature. Previously, the OpenQA forums have been using Jive's unique "email gateway" feature that allowed a mailing list and a forum to stay in sync. This let users choose the style of message delivery (web, RSS, forum watch email, mailing list membership, etc).

I chose RSS+web because I get enough email as is and hate being subscribed to random lists that I can't remember how to jump off of. Plus, I like knowing that my membership is part of the forums, which gets you little things like "reward points" for answering questions (something which obviously email doesn't have).

But whenever I traveled, I missed email. I wanted to be able to reply to the threads I saw in my RSS reader while offline in an airplane, but I couldn't. In the latest version of forums, Jive introduced a killer new feature: reply to watches by email.

Now I can watch my feeds in RSS, but when I know I'll be on the road coming up, I can turn on my email watches to the forum. Then, as each message comes in, I can reply to the watch notification itself and my response will automatically show up in the forums (and get sent out to the mailing lists, thanks to the gateway we're using). To me, this is the best of both worlds, and Jive did an excellent job with it.

My only complaint is that the subject the watches come in with is unique every time. This is due to how they sync up replies with threads. The downside of this is that my watch notifications won't get grouped together as a thread in my mail client, so it's a bit harder to follow conversations. I also had to modify the watch templates to include the entire thread instead of just the new message. This gives the required context that one would expect if they wanted to reply by email.

Wiki formatting

The new forums also allow for common formatting, often found in wikis, to be used in forum posts. This is nice because now I can format new replies by email and I know it'll look good for both audiences: text (email) and HTML (web and RSS).

But what I was really impressed with was the customizations. Jive supports a link syntax similar to Confluence (Atlassian's wiki) that uses square brackets. Unfortunately, the OpenQA forums use square brackets a lot due to the fact that people post xpath expressions all the time, such as

//div[contains(@id, 'border-box')]

This, of course, produced some bogus links. What impressed me is that I could drill in to the wiki formatting settings and individually turn off link support. Even more: when I turned it off, it no longer appeared in the help guide! That's the way software should work all the time.

Other stuff

THe OpenSymphony Forums have had integrated web chat support for a while, written by yours truly. However, the OpenQA ones never did because I didn't want to maintain the code going forward. While it isn't quite as nice as the OpenSymphony forums, Jive Forums now comes with an integrated web-based group chat. This is a great way to host meetings and to help people out in real time.

The features I'm missing from the OpenSymphony forums are:

  • Ability for chat transcripts to be easily searchable and accessible. I did this by posting the chat log to the forums every 24 hours, but other solutions are possible too
  • When in the forums, being notified that activity is happening in the forums (new message posted). I did this with a "chatbot" in the OS forums, but again, this could be done other ways, such as XMPP watches, etc.
  • Tying chat rooms and forums together such that the people in the associated chat room are listed along side the forum as "now chatting". Even better, their expertise level (reward points) are shown, so people can immediately tell if experts are ready to help them in real time.

The good news is that a lot of this stuff will likely end up in some sort of integration between Openfire and Clearspace (think of it as Forums + blogs + wiki + content management + etc).

Overall, Forums 5.5 was a great improvement. I'm looking forward to Clearspace, when hopefully my little nit-picks will be addressed :)

April 09, 2007

Apache Struts 2 from Square One

Great work from Ted Husted...

Apache Struts 2 from Square One:

Ted Husted has put together an impressive training course together for Struts 2 called Apache Struts 2 from Square One. He's released an initial version of the 127-page PDF on SourceForge.
w
p. (Via Raible Designs ~ We Build Web Apps.)

February 27, 2007

Struts 2: released

While I'm on my posting blitz, I thought I'd take a moment to recognize that Struts 2.0 is GA and out.

I upgraded HostedQA to Struts 2.0 a few weeks ago and it was wonderful. I think I might even switch Able back to using it - if I get the time.

But mostly, I just want to say to the guys that made this happen (Don, Ted, Toby, Rainer, and everyone else): thank you for all your hard work.

It's truly amazing to see a project I helped grow over the last few years become so widely distributed and backed up by an amazing team. I only hope I can be more involved in the 2.1 release!

Do it: use ridiculously long test method names

"Dan North" (tastapod!) has a good write-up on what he is calling "BDD": Behavior Drive-Development.

He does a much better job than I can do discussing all these items, but the thing that struck me is that almost all his conclusions can be reached by following just one piece of advice: make your test methods really expressive.

I started doing this in 2004 and it has been a huge help. My tests are more focussed, and because of that, I write more tests because it doesn't take as much thought/energy. And in writing more tests, I often design my code better, and ultimately produce software faster. As a nice side effect, quality has gone up, but that is not the primary reason for TDD or BDD.

Unfortunately, Dan's examples of test methods were rather weak - often the agiledox crowd uses really simplistic examples. So I thought I'd give some examples of some of my methods from HostedQA:

  • parsingHostHandlesHttpAndHttpsAsWellAsOptionalPorts
  • findingAnAccountByNameWorksAfterCreatingAnAccountOfTheSameName
  • creatingNewAppConfigReturnsSameIdAsTheIdSetOnTheAppConfigReference
  • findingAppConfigsForAProjectReturnsThemInAlphabeticalOrderByName

And my personal favorites (broken up with a space because they are so long):

  • updatingAppConfigWithoutResourcesThat UsedToBeAssociatedWithItCausesThoseReferencesToBeDeleted
  • deletingAPopulatedProjectCausesAllChild EntitiesToAlsoBeDeletedAndTheProjectIsCompletelyDeleted

Kind of annoyingly long methods? Absolutely. But not only, as Dan points out, is it easier to know what went wrong when a failure occurs, it is also almost brainless to implement these tests (and thereby design your application in the most direct manner possible).

If my test requires that I test that "updating an app config without resources that used to be associated with it causes those references to be deleted", it's really easy to know what I need to test - it's literally spelled out for me.

As a small note: Dan recommends that tests usually have "should" in front of them. I prefer to think that all my test methods (I use TestNG, so I don't have "test" in the method names) have "test that" prepended in front of the sentence. Ie: "test that adding X and Y results in Z" becomes addingXAndYResultsInZ.

Re: Testing Ajax

Testing Ajax?:

I ran across an interesting article entitled “Improving Test Coverage of Ajax Applications” in which the author likens the challenges of testing Ajax applications to that of testing traditional GUI apps. While some newer frameworks (like Selenium) are positioned to actually verify Ajax-ian behavior, they can lead to a false sense of security because of the complexity associated with the combination of actions in using a GUI.

(Via Test Early.)

I posted the following comment to the entry above, but I think it important enough that I bring it up here as well. I'd be interested in hearing about ideas that can help make expressing tests for AJAX applications easier:

Absolutely - Selenium and other tools are now available to help, but there are still real challenges in describing these new types of interactions. The old-school tools (SilkTest, QTP, HttpUnit, etc) either didn't understand the concept of multiple user transactions in a single page or didn't have the technology to deal with AJAX at all.

Selenium helps with the AJAX/multiple user transactions issue, but it still requires testers to express the desire to "click on button X, wait for Y to appear" in their tests. I think there is still room to make this easier to understand and test against, possibly by integrating with AJAX and/or web-based frameworks, and thereby understanding the interactions at a deeper level.

October 25, 2006

Struts 2 History Overview

Don Brown has a nice piece on the history of Struts 2. Check it out!

October 05, 2006

Apache MyFaces is using HostedQA

I just recently discovered that HostedQA usage is picking up: now Apache MyFaces is using it too!

I'm personally really excited about this because it is one of the first cases where an opensource project has integrated with our products without any help directly from me. Very cool!

September 28, 2006

Selenium 0.8 Released

Selenium 0.8 Released:

Version 0.8 of the web application functional testing tool Selenium has been released.

Jeff Xiong explaing the new features...

(Via Ajaxian Blog.)

I'm especially excited about this release because of the implications with our HostedQA and AutoQ products. The reason is because I started the initial work on the multiWindow mode (though, admittedly, the rest of the Selenium dev team was absolutely required to make it finally work properly) for the very purpose of providing a frameless testing infrastructure for HostedQA.

We've actually been using this multiWindow/frameless mode in our products for a while in our products. The result is that instead of seeing your application inside of an iframe, your app runs in its own window, more accurately reflecting the real world usage.

You can see some example screenshots of what it looks like by checking out some of our opensource projects reports.