Usually there is a version control system in place, but in most situations the development team does not take full advantage of it. A good strategy with the CVS could lead to traceability of changes made in each version or a processes to recover a particular release.
The branch strategy determines how to promote finalized work between environments, which tests are executed there, involved teams, etc... The code is promoted to production through a jorney in which branch management will determine the development team's agility.
The goal is to have a fully functional version of our project ready to be installed in any environment with the maximum security.
Continuous integration avoids the nightmare of manually executing large integration test suites, reducing the numebr of defects. A good configuration often implies simple and efficient processes.
Quality and pre-production environments must be as similar as possible to production. This allows to correct deployment errors when detected in non-productive environments, minimizing the probability of failure in production. It also allows us to have the product quickly ready for a demo, a UAT or functional or automatic testing. If this point is not achieved or is partially achieved, we must identify and prioritize which parts should be implemented or strengthened.
These tools can be from a basic defect manager to a complete tool that allows you to manage a scrum team, with virtual post-it, burn-downs calculation, kanban control, etc. Generally the most effective is neither, but to adapt the tool to the team process.
Our QA profiles in an agile team are not only focused on functional testing but have a much broader spectrum, starting with keeping contact with the Product Owner to understand their needs and transmit them to the development team and the tests themselves, managing incidents, leading retrospectives, ensuring continuous improvement, etc. This profile in the client's team can be permanent in a person or a rotating one, but in any case it has to exercise its responsibilities and these have to be known by the whole department.
For both manual and automatic functional or performance tests, the system under test must contain some initial data. This data can be divided into configuration data, necessary for the system to work and business data, which is added to the database during the natural use of the application.
We take care of managing both kinds of data in non-productive environments, which allows to execute more complex functional tests (manual and automatic), performance, UAT, demos, etc... while allowing to reproduce any issue found.
Automatic testing helps to reduce test time and to detect problems that would otherwise be impossible to find before reaching the productive environment. These automatic tests can be divided into:
During the project's life, we provide a quick and clear feedback on it's state in terms of quality and compliance. We offer clear, simple and available indicators automatically updated 24/7. This information, allows the rapid detection of bottlenecks in the process. For example, tickets which are too long and waiting to be validated or code waiting for technical review to be integrated.
We can help to create simple and effective channels to inform the customer about incidences with their product once it is in production.
All these items and many others must be clear before releasing a project to production.