Monday, November 19, 2012

Architectural Foundations of Testing

Today’s modern application testing matrix is full of rising complexities. In order to save time and money and to assure the success of a developed application, test automation teams have to start with the basics. A strong tower requires strong foundations. In this case, one of the most important parts of that foundation is the development of test framework. In order to ascertain that your product can bear the weight of all of today’s demands – those of both users and technology – all framework has to be flexible and robust. We develop test architectures in a modular, data-driven, and event-driven fashion that includes rich-logic. The  main goal of test architecture is to achieve full testing with less test artifacts, meaning that we will have less maintenance of said architecture down the line. As Test Architects, our main goal is to preferably design one test case per one functional area, which can be achieved through framework modularity.

When designing modular test architecture, one can define two classes of test cases: Test Components and Business Processes. Test Components are usually smaller, reusable test cases that represent a particular functional area, while Business Processes are more procedural test cases oriented to test application business processes.  Let’s take a look at a basic example of a common application to illustrate the above methods – a travel portal. The main purpose of this app is to help a user create their own itinerary for a trip. First, we will set the functional areas as “login”, “book hotel”, and “book rental car”. In order to develop test coverage based on these principles, we will develop test components separately for each of these areas.

Data-driven testing is carried out with a simplified principle of input and output parameters, meaning that our test cases should not have any static input and output values (when this is possible and logical). The advantage of data-driven testing is the ease of driving test scenarios though input and output data within a single test artifact. Later, we will incorporate all of these into a single “book itinerary” business case. Once we develop the business component, we can address the principles of data driving. Our goal is to create an artifact that will take any input and output values into testing procedures. Therefore, we will parameterize every input and output value such as the “user name” text field, etc.

Another important characteristic of a modern test framework is event-driven testing. Event-driven architecture is an script pattern promoting the production, detection, consumption of, and reaction to events in the script. Every test case should end with a triggered event and present validation criteria in the scenario. Building applications and systems around an event-driven architecture promotes validation of test case expected results that each test step has to have by definition. For example, when designing a Login Test Component we will create two test steps: Invoke AUT and Login (typing user name, password and clicking Login button), at the end of each step this test case will be triggering event in AUT presetting validation, i.e. Login dialog invoked, or Welcome page appears (including output data from the previous input step).

Last but not least on our list of foundations is rich-logic. This element allows testing teams to incorporate all business requirements. This includes applying conditional statement into the expected results area. For example, when there are multiple user groups in the application under test, we can create a conditional statement to validate which user of the group is logged in and outline subsequent steps for the user to proceed test in a certain way. Such framework can be executed either manually or in an automated fashion across any platform. With this method in place, we can take our business case of booking an itinerary and use it anywhere (Windows, Mac, Unix,Mobile etc.) without any further modification.


This approach allows better collaboration for team members, like application SME and Automation Specialists or new colleagues. It improves change management and reduces maintenance of test artifacts, therefore increasing testing ROI.

In conclusion, designing your framework in the most efficient way from the very beginning is the ultimate test strategy. In order to achieve a rapid pace of modern software development and offer proper test coverage, the foundations for an application’s script must be strong. Once the foundations are built with care and focus, the tower will stand tall and unwavering even in the strongest of winds.

No comments:

Post a Comment