Jump to content

Design predicates

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by 220.227.154.147 (talk) at 12:44, 2 September 2008 (Types of Calls). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Design predicates are a method, invented by Thomas McCabe, to quantify the complexity of the integration of two units of software. Each of the four types of design predicates have an associated integration complexity rating. For pieces of code that apply more than one design predicate, integration complexity ratings can be combined.

The sum of the integration complexity for a unit of code, plus one, is the maximum number of test cases necessary to exercise the integration fully. Though a test engineer can typically reduce this by covering as many previously uncovered design predicates as possible with each new test. Also, some combinations of design predicates might be logically impossible.


Combining Calls

Any particular integration can combine several types of calls. For example, unit A may or may not call unit B; and if it does, it can call it one or more times. This integration combines a conditional call, with its integration complexity of 1, and an iterative call, with its integration complexity of 1. The combined integration complexity totals 2.

unitA::functionA() {
   if (someNumber > 0) {
      for ( i = 0 ; i < someNumber ; i++ ) {
         unitB->functionB();
      }
   }
}

Since the number of necessary tests is the total integration complexity plus one, this integration would require 3 tests. In one, where someNumber isn't greater than 0, unit B isn't called. In another, where someNumber is 1, unit B is called once. And in the final, someNumber is greater than 1, unit B is called more than once.

See also