In order to reach our goal, to make the slicing information as precise as possible, we tried to split the program in even smaller pieces than other program slicing tools.
There are slicers which perform program slicing only at a procedure level which can only give very approximate results and is not what we intended.
Other program slicers consider statements of the programs for inclusion into the slice. The drawback is that statements can still be very complex and that every variable that is used or defined by the statement makes it necessary to include all reaching definitions of this variable into the slice too. This process propagates backwards and results into quite big slices.
The next step would be to use "expressions" of the program as the smallest entities. We decided to break the program constructs down even further to the smallest possible pieces, the nodes of the abstract syntax tree.
This seems to be the state of the art in program slicing and yields appropriate slices.