
Martin Fowler's paper on Continuous Integration - mshafrir
http://martinfowler.com/articles/continuousIntegration.html
======
culix
It's interesting that he considers testing to be a normal part of CI - "Once
I'm done I carry out an automated build on my development machine. Only if it
all builds and tests without errors is the overall build considered to be
good." I have worked on projects of 30+ programmers where the dev process was
called "continuous integration", but what that meant was "check in your code
as often as possible, regardless of if it works". There were no automated
tests to check your code beforehand, and most programmers didn't even bother
to see if their code compiled before adding changes to source control.

I have also worked on projects where we had a "preflight" process. This meant
that all potential changes were uploaded to a build machine and tested with
the head branch to see if they compiled. Only if they successfully compiled
were the changes actually added to source control. This sounds a lot like what
they call 'pending head' - <http://martinfowler.com/bliki/PendingHead.html> .
It's interesting that Fowler doesn't consider pending head/preflight a
necessary part of CI or of good development; IME it dramatically cuts down on
broken builds because it keeps developers honest. Didn't check to see if your
code compiles? Too bad for you, it's not going in.

Fowler mentions several problems with CI builds still breaking. "One reason is
discipline, people not doing an update and build before they commit". So maybe
he would agree that preflight/pending head is beneficial. It also helps
because you can go home on time - you don't have to stick around and babysit a
build process if you commit code late in the day. That saves dev time _and_
makes things progress faster.

Very good article; thanks for posting.

