Program slicing is a technique to identify statements that mayinfluence the computations in other statements. Despite the ongoingresearch of almost 25 years, program slicing still has problems thatprevent a widespread use: Sometimes, slices are too big to understandand too expensive and complicated to be computed for real-lifeprograms. This book presents solutions to these problems: Itcontains various approaches which help the user to understand a slicemore easily by making it more focused on the user's problem. The underlying data structures used for slicing are program dependencegraphs. They can also be used for different purposes: A new approachto clone detection based on identifying similar subgraphs in programdependence graphs is presented; it is able to detect modified clonesbetter than other tools.In the theoretical part, this book presents a high-precisionapproach to slice concurrent procedural programs despite that optimalslicing is known to be undecidable. It is the first approach to sliceconcurrent programs that does not rely on inlining of calledprocedures.