Cloud Foundry: Design and Architecture
Derek Collison discusses the goals, the design premises and patterns employed in creating the architecture of Cloud Foundry, VMware’s open source PaaS, unveiling internal architectural details.
The content has been bookmarked!
There was an error bookmarking this content! Please retry.
Posted by Moxie Zhang on Oct 27, 2008
As rich Internet application (RIA) technologies are becoming more prevalent, more tools are being created to support RIA development. Flex unit test tool Fluint is an example.
InfoQ spoke with Michael Labriola, Fluint developer and Flex architect, to learn more about using Fluint as a unit test solution in Flex development. He explains:
“Fluint” is short for Flex unit and integration. It is a testing framework for developers writing Flex 2 or Flex 3 applications, regardless of whether they are deployed in the Web browser via Adobe Flash Player or on the desktop via Adobe AIR.
Fluint was originally developed as an internal tool at Digital Primates to test several very large projects. Given the growing demand for a framework like this in the Flex community, Digital Primates decided to release it as an open source project. While there are other unit test solutions for Flex development, according to Labriola, Fluint fills an important gap. He explains:
There are several other projects that do unit testing in Flex. However, Fluint is the only project to date that covers both the unit and integration levels. This is important for several reasons. Flex is a component framework. You build upon Adobe's components and make your own when you assemble an application. The problem is that a component doesn't make a very good 'unit' in the testing sense. There is a significant amount of complexity inside of those components and some aspects are inherently asynchronous.
While you will undoubtedly add methods to your application and components that will need unit tests; you will likely find that the most error-prone portion of your application is the integration of several existing components to form something new. The existing frameworks don't handle asynchronicity well. Therefore, they tend to do a very poor job of testing the integration of several asynchronous components.
Asked to provide a typical case in which Fluint may be used, Labriola responds:
This example is a little trite, but it really illustrates the power of Fluint. Imagine a simple log-in form where you have a username field, a password field and a login button. You might also have two client-side validators that ensure that the username and password are at least a character or so long, or perhaps don't contain any invalid characters. When the log-in button is pressed, it validates the two text input fields. If they are valid, it dispatches a 'login' event with the username and password so that another portion of your application can perform the login logic. If the validators fail, it displays an error message on the screen.
Any Flex 101 student should be able to write this component, but no tool other Fluint currently can test it completely.
To illustrate a few distinguishing features, Labriola pointed out the steps that make Fluint shine even in conducting a simple test such as that described in the above example:
With respect to Fluint’s development, Labriola explains:
Fluint consists of an ActionScript library, which contains the testing framework and related classes. It also has a sample test runner that is written in MXML. Those are the only two pieces that you need to write tests that run in a Web browser. However, if you are interested in integrating with an automated environment, Fluint provides a test runner
written for Adobe AIR, which will run tests compiled into separate modules and output the results into an XML file. That XML file will soon be JUnit compatible so that existing reporting tools can be used with Fluint. Finally, there is an ANT task available to make executing the AIR test runner easier.
As to further enhancements, Labriolal says:
There are a number of great enhancements proposed by the community that will likely make it into the next versions of Fluint. Right now we are working on a performance increase that will more than triple the speed of testing when working with a large number of tests by removing some inefficiency in the test runner. However, we are actively looking for contributors to the project. Digital Primates has been the major driving force so far, but we do hope that this will become a community owned project as we move forward.
Tutorial: Integrating SQLFire with tc Server and Spring Data
Early Access! Download JBoss Developer Studio 5.0 now, with packages for Mac, Windows or Linux!
Combining Inspections, Static Analysis, Testing to Achieve >95% Defect Removal Efficiency
Introducing SQLFire: a memory-optimized, high performance SQL database
VMware vFabric SQLFire - Test drive the data management system with memory speed, horizontal scalability and a familiar SQL interface
Derek Collison discusses the goals, the design premises and patterns employed in creating the architecture of Cloud Foundry, VMware’s open source PaaS, unveiling internal architectural details.
Andrew Watson talks about the work of the OMG, where CORBA is alive and well (hint: in your car), UML and UML Profiles vs. custom Modeling languages, DDS and other middleware, and much more.
Sohil Shah discusses creating iPhone and Android enterprise mobile applications based on cloud services using the open source platform OpenMobster.
Paul Sanford presents the transformations supported by data throughout its life cycle, and how that can be better done with Splunk, an engine for monitoring and analyzing machine-generated data.
A common “best practice” for unit tests is to only write a one assertion in each test. I intend to question this advice by showing that multiple assertions per test are both necessary and beneficial.
John Rauser presents the architectural and technological evolution of Amazon retail websites starting with 1994 and ending with adopting Amazon Web Services.
Michael Stal discusses system architecture quality, how to avoid architectural erosion, how to deal with refactoring, and design principles for architecture evolution.
Every developer has had to integrate with another system, API or component. Tis article provides strategies to handle the change and for he separating system boundaries.
No comments
Watch Thread Reply