What is Service Virtualization?
In software engineering, service virtualization is a method to emulate the behaviour of specific components in heterogeneous component-based applications such as API-driven applications, cloud-based applications and service-oriented architectures. With the emerging Internet of Things (IoT) platform, service virtualization can now be used in Cloud-based applications too. The main objective of service virtualization is to provide development and testing teams access to dependent system components, which are currently not available but which are necessary to test an application.
Let us look at this through a case study
The problem statement:
A Bank is IoT-izing its ATMs with face recognition and finger print sensors to authenticate ATM users. This sensor data and recognition service needs to interact with other services of the Bank that connect to multiple databases. The dedicated availability of such a complex and interdependent environment is practically not possible. How should the team now test this solution?
The service virtualization tool is run on the dependent components to capture their behavior and performance with respect to the system being built. A simulated test environment that replicates the components is then created and provided to the Dev and Test team to carry out their transactions. Service virtualization now provides a dedicated access to the teams and there is no impact and dependency on the original test environment.
How it works:
Service virtualization creates a "virtual asset" that simulates the behavior of an actual component required by the application being developed.
A virtual asset means a dependent component for listening to requests and returning a corresponding response with the appropriate performance. The virtual asset should perform just like the actual component.
There are 3 primary ways to create a virtual asset:
- Recording live communications among components during their transactions with the application.
- Providing logs representing historical communication among components.
- Manually defining the behavior with various interface controls and data source values. This is further configured to represent specific data, functionality, and response times.
Where to use it:
Service virtualization is useful when the dependent components to the application are:
- Being developed
- Controlled by external sources and have limited availability
- Being used by multiple stakeholders and are not conveniently available
- Difficult to provision or configure in a test environment
- Costly to use. e.g. accessing data from the Cloud
Commercial service virtualization tools include:
- IBM Rational Test Virtualization Server
- CA Service Virtualization
- Parasoft Virtualize
- HP Service Virtualization (Trial Version Available)
The development of IoT applications has many dependencies on other components and services. It is difficult for these to be available at just the right time when a component is being tested. IT is here that service virtualization comes in handy and becomes an effective tool to speed up development and testing work, without having to wait for a dependent component to be completed or become available.