  Backward slicing has been used extensively in program understanding,
debugging and scaling up of program analysis. For large programs, the size of
the conventional backward slice is about 25% of the program size. This may be
too large to be useful. Our investigations reveal that in general, the size of
a slice is influenced more by computations governing the control flow reaching
the slicing criterion than by the computations governing the values relevant to
the slicing criterion. We distinguish between the two by defining data slices
and control slices both of which are smaller than the conventional slices which
can be obtained by combining the two. This is useful because for many
applications, the individual data or control slices are sufficient.
  Our experiments show that for more than 50% of cases, the data slice is
smaller than 10% of the program in size. Besides, the time to compute data or
control slice is comparable to that for computing the conventional slice.
