Environment – as in the atmosphere and the surrounding. Now what’s surrounding a software? Yeah! Database, Front-end files, operating system, Hardware configurations, Server and Network, etc. All the hardware and software requirements for a particular application to work as expected constitutes ‘Environment’ in Software Engineering. Now what’s different with Test environment? What is the Test environment? Why do we need it? What all different Test environments are generally used? Let’s try and answer…
Why do we need different Environments?
What to do if you want to make an online transfer? Yeah! We login to our Bank’s net-banking website and initiate the transaction. Hope you already know that the net-banking application that you use via web is ‘already tested’. Now where does this ‘testing’ happens? Or rather where does the ‘development’ happens? Say the Bank want to change the User Interface. Developers cannot start changing the interface straight-away for the application being used by millions of people, right? The current application needs to be running on the web, and development & testing need to happen on some other ‘environment’ before the changed-application is deployed for public use!
The Test Environment in Software Testing
Now that you know the need, let’s understand what a Test environment is. In simple terms – Test Environment is nothing but a replica of actual production environment (being used by end-users) with close-enough hardware and software configurations, where the testing would happen for the developed application. Test environment is where all the action happens – experiments, defect identification, fixing, retesting, regression and final sign-off. Ideally Test environment configuration must mimic the production environment in order to uncover any environment/configuration related issues.
Once the testing is completed in this environment >> Test team will sign-off the application for actual production deployment.
Behind each successful test environment there is normally a build team responsible for putting the environment together. Test environment preparation work starts well in advance of any delivery of code for testing. It consists of many activities to create the test environment and get the ‘application to be tested’ correctly installed and configured to enable the testers to start test execution.
List of different Test Environments
- Development Environment (Dev): where actual development (including defect fixes) happens. Unit tests are done by developers in this environment. After successful unit tests, the build is promoted to next environment for Testing.
- System Test Environment (ST): Also known as QA environment – where testing happens. All the test cases are executed, exploratory tests are performed, defect retesting and regression. Finally Test team provides a sign-off for the build to be deployed in next higher environment for UAT.
- Performance Test Environment: for performance testing. This is different from general Test environment because for effective performance measurement we need a replica of production environment (i.e. the servers count, capacity, memory, etc.). Generally a Test environment is a toned-down replica of production environment with fewer servers, capacity, memory, etc.
- Acceptance Test Environment (UAT): After successful System testing, the build is deployed in UAT environment for User Acceptance tests (performed by Business team). Once UAT team confirms (A Go / No-Go decision) the application is deployed in next higher environment (known as application Go-live).
- Production Environment (Live): Also known as ‘Live environment’ – this is where the end-user access the application. Real world example – We (end-users) access our Bank’s net-banking application in ‘production environment’ to initiate transfers.
Depending on the criticality and the type of application-under-test (AUT) there might be few variations like a staging environment (migrate/test on real production data), pre-production environment (where you can test user profiles, security, disaster recovery and back-up) and training environments (where client wants the organization’s user training to happen before actual go-live).
Test Environment Management
Test Environment Management (TEM) is a function in the software delivery process which aids the software testing cycle by providing a validated, stable and usable test environment to execute the test scenarios or replicate bugs. The activities include –
- Creation of new environments
- Environment allocation to respective teams
- Maintenance of all Test environments
- Environment Monitoring
- Incident management: Environment issues tracking & resolution
Importance of Test Environment Management
The defect is not reproducible in UAT environment. The System Test environment is not yet ready, we need to re-plan. The environment is down – no work. When did this deployment happen? We were not informed. Configuration is same for Dev and Test environments then where is the problem? This is not a coding defect, but an environmental issue. Deployment instructions were incorrect, hence failure. Again downtime? We are slipping out of the schedule, need to work over the weekends.
Additionally I remember a case where the application was built and tested successfully as per the business requirements. But it failed when deployed in the actual production environment. The reason? Test environment configuration was different than that of production!
Hope you got the importance of Test environment management. It’s a well-known fact that a reasonable amount of a tester’s time is consumed by environment problems, which in turn affect the productivity and test schedules. Often these environments are loosely managed resulting in utilization conflicts and schedule delays. The complexity of the test applications landscape, the number of applications under scope, and the integration architecture and technology variants can all increase the challenges of managing software test environments. There is every need to adopt good practices and implement process to overcome these pitfalls. Good test environment management improves quality, availability and efficiency of test environments to meet milestones and ultimately reduce time-to-market and costs.