This document provides a comprehensive survey of both traditional and evolutionary clustering approaches, emphasizing the differences between clustering (an unsupervised learning technique) and classification (a supervised learning technique). It details various methods within these categories, including partitional, hierarchical, and density-based approaches, while also highlighting the applications of clustering in software engineering and the advantages of different techniques. The review concludes that while evolutionary approaches often perform better, each method has its own set of strengths and weaknesses depending on user needs.