This document summarizes various techniques for program slicing that have been developed since it was first introduced in 1979. It discusses static slicing, dynamic slicing, backward slicing, forward slicing, inter-procedural slicing, and model-based slicing. It also reviews related work on slicing algorithms and techniques that have been proposed to compute slices more efficiently and effectively for software engineering tasks like debugging, testing and maintenance.