It works best when based on both. I'll concentrate on the code. I'll start with an example. In practice, they work pretty well. As a side benefit, such techniques will force every line of code to be executed, discovering the large class of faults that invariably fail.
Integration testing looks for plausible faults in function calls.
That's not necessarily the case. As written, the code searches for the first slash when it should search for the last. What I call integration test design searches for the first and third types. The search depends on an examination of the behaviors of the called function. Integration testing applies to variables as well as to functions.