[Development] Usage of forcesuccess and qt.tests.insignificant in CI branches
Anttila Janne
Janne.Anttila at digia.com
Mon Dec 17 13:17:55 CET 2012
Hi,
I had some concerns related to change that was introduced lately to
CI testconfigs:
https://codereview.qt-project.org/42954
https://codereview.qt-project.org/42955
In short the question is whether we should have forcesuccess and
qt.tests.insignificant configured on CI branch basis (dev, stable, release)
or on CI repo basis?
Sergio wants them on branch basis, and I can understand reasons/rationales
he made. As far as I see the main benefit in this approach is that it
is easy to remove these properties branch by branch, and make sure CI in
any branch won't be blocked due to "incorrect" testconfig configuration.
An example about "incorrect" testconfig would be something like:
tst_bad is fixed in release branch and CI config where it was broken was
made enforcing for whole repository. Now if that fix is not yet taken into
stable or dev branch, the CI in those branches would fail.
I completely understand this and rationales that we don't want to block
"good change-sets" integrating to dev/stable before fix from release branch
is propagated to stable and dev. However, from QA point of view I see this
also as a main problem of branch based CI properties.
Let me explain my QA viewpoint:
1. One reason for introducing branches was to make Qt stabilization easier:
For me this also means that bug fixes (and thus also fixes to broken
Auto tests), should be *primarily* introduced in most stable branch i.e.
release. Of course there can be situations when fix can be made let's say
only in dev due to commit policy, but that should be quite rare situation.
2. If something is working in stable, I see no reason why it would
be allowed to fail in release branch.
Due to the argument that we want to stabilize Qt for release, I would not
like to allow different, especially less strict configuration in release
branch CI.
But from QA point of view I think that this should be true also to other
direction i.e. release -> stable. Why? If we allow less strict CI in stable
branch compared to release branch it can happen that some bug is fixed in
release branch and before it reaches stable branch, a new regression is
introduced which makes recently fixed auto test to fail again in stable
and dev. This means we need to fix the problem again for next release.
To avoid this I would like to have such CI policy that if something
has been made enforcing in release, it is enforcing also in stable and
preferably also in dev. This means that once something is fixed in release,
someone needs to merge the fix also to stable and dev or otherwise CI is
likely to block new changes since fixed test is failing due enforcing CI
config. If some test still fails in stable/dev branch after merge, regression
compared to release branch has been introduced and it need to be fixed.
I understand that this kind of CI policy will cause some unnecessary
CI failures but on the other hand I see it as an only way to increase Qt
quality in long run.
3. Something is fixed only dev branch due to commit policy
In this case I'm ready to make exception and allow more strict CI policy
only for dev branch.
Summary:
I would like to have forcesuccess and qt.tests.insignificant properties
identical for all branches on CI repo level, with the cost of possibly
delayed integration of "good change-set" to dev and stable branches,
and with the benefit that no auto test covered regressions will exist
in subsequent releases. Now someone will probably suggest that
we don't need to make development in dev and stable branches harder
with this kind of CI policy since we can fix the regressions introduced
during development of dev and stable branch when we are making
release (CI config for release branch is not made less strict between
releases). While this would work in theory, I don't believe it is will
work in practice. Bugs should be detected always as early as possible.
Comments?
PS: There is already 126 'forcesuccess' flags in CI properties
(meaning 126 CI stages in all CI projects are essentially meaningless).
And there is 157 qt.tests.insignificant flags in, meaning that auto tests
are essentially meaningless in 157 CI stages. Purpose of this mail was
to suggest some concrete way for reducing these numbers in long run.
--
Janne Anttila
Senior Architect - Digia, Qt
Visit us on: http://qt.digia.com
More information about the Development
mailing list