Acceptance Testing of Flex applications

Luca | January 26, 2009

Acceptance Testing is a fundamental practice: it gives you confidence that your application behaves as expected from the end customer point of view.

In the Flex world there are some projects that are currently emerging in the Acceptance Testing space, each one with specific advantages and weak points.

Let’s have a look to some of these.

FlexMonkey
FlexMonkey Open source but based on closed source API (the Automation API are released only with FlexBuilder and not with the open source Flex SDK), it’s based on the record-playback approach and as far I  have seen is not easily integrable with a Continuous Integration server.

Flash-Selenium
Flash-Selenium is open source, and it works as an extension of SeleniumRC; the tests can be written in Java, .Net, Ruby or Phyton and the integration with a Continuous Integration server is therefore quite out of the box.

SeleniumFLex API
SeleniumFlex is another open source project. it’s an extension of SeleniumIDE, test should be written in Selenese.


FunFX

FunFX is based on the automation API (therefore you can use it only if you’re owner of FlexBuilder), the fixtures are  written in Ruby.

At the moment there isn’t a  de-facto solution: the community is quite dynamic and all these different tools are trying to find their space.

Which one is  my favourite ?

It’s really hard to say, I think that the context matters a lot. I  don’t like the solutions that require the Automation API simply because this tights you to a vendor just for testing; it’s also true that the pure open source solutions requires some extra-hack (like exposing methods through  ExternalInterface) that are less than ideal.

Looking at the two pure open source tools I like Flash-Selenium for its out of the box integration with Continuous Integration server, while I prefer Selenium-Flex approach for handling the necessary ExternalInterface configuration.

Working with Adobe Flex

Luca | June 21, 2008

RIA is a pretty hot topic in these days; even in ThoughtWorks a lot of discussions are going on (if you have time you can check fellow ThoughtWorkers posts here, here and here).

Funny enough I’m quite involved in the discussion, due to the use of Adobe Flex in my current project.

So what is Flex ?

Flex is the Adobe solution for RIA; based on ActionScript, it promises quick development of rich UI, the ability of testing and TDD-ing, good tools for development and out of the box integration with Web Services and REST services.

Everything sounds cool,but my experience with Flex highlighted few elements that worth a bit of attention…let’s analyze those one by one.

Testability

Let’s start from testability: ActionScript is really hard to test !!

A Unit testing framework (FlexUnit) is available, but it cannot be used by command line because the test runner works only in your browser; this slow down your development cycle (red bar-green bar- refactor) quite a lot, reducing your effectiveness during the day.

ActionScript is a half way between a static and a dynamic language (with a clear direction towards being a pure static language, my guess is that the language designers are trying to increase the language appeal to the Java and the dotNet community); the problem is that of a static language you miss the testing framework( mock libraries mostly) and of a dynamic one you’re missing the complete dynamic approach(all the classes are sealed by default, and you can’t do methods override at runtime even for objects that are explicitly declared dynamic).

In this scenario interaction testing is nearly impossible to do; sure, you can write your own mock library or stub everything out but this is a pretty strategic decision and a lot depends on the scope of the project.

Flex Security Model

Another aspect that gave us more than one trouble is Flex security model.

A Flex application can connect to a WebService or a REST service only if:

  • the target service is on the same domain where the Flex application is deployed
  • the target service is on an external domain but in the target domain there is a crossdomain.xml file that declares your domain as secure

What does it mean ?
That if I want to access a public feed (let’s say the BBC weather feed) BBC has to have my domain specified on its crossdomain.xml file that lives on its server.

This is a strong limitation: you cannot simply call BBC and ask to add your domain to their list of trusted site, and this take you down the path of over design your application (like adding a proxy web service on your domain just to be able to get the real data you need from BBC).

Tutorials and suggested best practices

A final comment is for the Adobe tutorials: it’s hard to see in 2008 something so poor.
The tutorials (have a look at the Flickr one to have an idea) are a collection of worst practices: the basic model of development is spaghetti-code, where you write all the code in the Script tag within your main Flex application file (mxml).

And what about separation of responsibilities ?
Do we really think that this is the code you obtain doing TDD ?

The heavily usage of the Script tag will take you down maintenance nightmares, transforming your application in something that is quickly out of your control and you cannot evolve.

…but is it good or not ??

Looking at these pain points, for me Flex is not yet a mature technology.
Adobe promises a lot but a number of the promises are not there; TDD is simply to hard to do due to the lack of mock support(even if it’s promised), the set of possible permissions you can give to the Flash player clashes with the new services oriented feature (introducing cumbersome security model that take you to overdesign as a possible workaround), and with really poor tools (FlexBuilder, the IDE, crashes regularly and the Ant task is pretty basic).

Comments
No Comments »
Categories
Web
Tags
,
Comments rss Comments rss
Trackback Trackback

Article: Patrick Kua on the Agile Coach role

Luca | May 25, 2008

Here a really good article from my friend Patrick Kua on the role of the Agile Coach.

The SOA and Agile culture clash

admin | April 30, 2007

In a certain way this article is enlightnening some of my rants about why I have clashes with colleagues in the IT industry.

…but does this mean that agile is not a good way of managing enterprise projects ?? (and saying enterprise I’m thinking at projects with big heavy infrastrucuture – EJB and friends -).

..or probably is just a matter of attitude, no matter the technology and how much burden we’re adding to the architecture ??