Git – Where should QA team do the testing in Gitflow branching model

branchinggitgitflowqatesting

We are a big team (10-12 developers and 4 qa) working on multiple projects with the same git repository. Its a spring boot based backend web service. We are looking for a good git branching and deploy strategy. we also have a qa team who ensures that our features are working as expected (bug free to a certain extent).

After reading few articles, I got a feeling that the Gitflow model would work well for us. Here comes my question.

Where should our QA team test our features ?

  1. should they test on feature branch, where they will raise bugs and developer will fix it and once it passes QA test we merge to develop. and QA will again do the integeration testing in develop branch.
  2. should we merge all the features (after unit tests and basic testing from developer) to develop branch and let the qa test from there. fixes and tests will all happen in develop as well.

I am curious to hear what approach worked well for others.

Best Answer

QA should probably be testing twice.

The first testing should be around the specific changes and done on the feature branch. This lets QA test around the specific changes and see that the particular change is complete as specified and behaves as expected. It also gives them an early preview for the second round of testing, which is what actually matters for QA.

Coming from my background in various regulated environments, the second testing needs to be done on either a tag on the development branch that corresponds to a release, or the release branch, or perhaps the master branch. Prior to a release, QA should be testing the full and complete code that is going to be deployed prior to it being deployed and you should be able to assert that whatever was tested by QA is exactly identical to what gets deployed to production. My preference would be that after a code freeze, a tag is applied to the release branch and QA would test that. Changes would be done in a develop branch, spot checked, and then tested again in a new tag on the release branch. These tags on the release branch would correspond to release candidates. An approved release candidate would be merged into master and then identified as the released version.

I am making a few assumptions here. First, you have somewhat decent developer-based test coverage. Ideally, this would be automated unit and integration tests that developers run and do so before sending any code on any branch to QA. Developers may also want to do some exploratory testing around the UI to make sure that things look right before QA testing. Second, there is good coordination between development and QA to plan the changes being incorporated to ensure sufficient QA time based on features.

Related Topic