Integration tests
are the tests we use to validate that 2 or more software modules work
together.
Let me give an
example by analogy. Suppose you have a
car engine and you know it works (for whatever definition of "work"
you want to use). I have a muffler, and
it also works, again, using whatever definition of "works" you want
to use.
Now suppose you are
asked "Will the engine you make work with my muffler?"
Each component
works, but how can we tell if they will work together?
Integration testing
is the key here. We know that each
component works by itself, but there are no guarantees that they will work
together.
For instance, one
test case will be that the size of the hole for the exhaust from the engine is
the same size as the muffler pipe (to speak broadly). If the engine has a 5 inch exhaust and the
muffler is only 3 inches wide, we have a mismatch and they won't work together.
A second case,
assuming the first passes, is connecting the 2 components. Even if the size of the exhaust is correct,
if you use metric bolts and I don't, we are in a failing state again.
In fact, there will
be many more test cases for this.
Materials construction (some metals don't interact well with others),
weight considerations, stress cases (handling backfiring, for instance) and
many, many more.
The same mentality
applies to software testing and I will go deeper into that next time.
Until then,
questions, comments, concerns and criticisms always welcome,
John