Typically, release environments fall in the following categories:
- Development Environments are environments created for the development teams to validate builds and releases.
- System Test Environments are environments that facilitate integration tests during the system test phase. A system test is the initial testing phase during the QA cycle. Typically in these environments, the QA team will be conducting black box testing to validate various system and functional capabilities. From the environment perspective, a system test may not have the hardware and software configurations similar to what may be applied to live.
- User Acceptance Test Environments are created for end-user testing in order to validate the system by meeting the agreed upon functionalities. These environments are used during the later stages or end phase of testing prior to the application being accepted by the customer during the live release. The deployment architecture and environment configurations are similar to live.
- Preproduction Environments emulate live production. They are used as staging environments before an application is deployed to live and also as test environments in which you can validate live issues. These environments have hardware that mirrors the hardware used in the production stage. Application deployment and configuration would be the same as it would be on live. For example, if clustering application servers are used on live, the same should be provided in these environments.
- Performance Test Environments and Capacity Testing Environments are release environments created and configured to facilitate testing of system performance—responsiveness, stability, etc.—during the performance testing phase. Typically load testing, stress testing, and soak testing are performed in these environments.
- Live Environments are environments where applications are deployed on succesful completion through various QA test phases and on final acceptance from the user. Actual users of the system will use the applications deployed on live environments, hence these environments are considered critical for the business.
Environments Management Process
Because software releases are always deployed on environments, the environments management process is linked to release management. Software release management emphasizes planning and managing the release for successful delivery, but in order for it to succeed, test environments are needed to track a team's progress. The environments management process helps in identifying, scoping, planning, and allocating the right environments for release. Environments management is an iterative process, involving the following steps detailed in the next sections.
This is the planning phase of environments management. In this phase, a release manager interacts with stakeholders—such as QA managers, development managers, and technology architects (infrastructure/software)—to understand the requirements of the environments. The release manager must define and manage all of the indentification, scoping, and planning pertaining to the environments.
Regarding identification, the release manager must define the software environments in the context of the software project or product being tested and released. The release manager should also be working with the test manager to come to an agreement regarding the scope and identification of the test environments. The release manager must Identify environment requirements in order to align with the release cycles, QA test phase, and training requirements of projects. The release manager is responsible for managing the progression of software release, deployment, and configuration through various test phases and live. In order to deploy, configure, and manage an application, it is essential that the release manager knows what environments are required.
When a release manager performs scoping, he identifies the hardware and software resources required for environments. In this phase, the release team should be receiving overview of all the different interfaces, applications, hardware, and network requirements needed for the provisioning of release to environments. Typically, a release team interacts with the development, infrastructure, architects, and test team in order to get an overview of the environments requirements.