The size and difficulty of business potential software systems are continually rising. This means that the task of supervision of a large software project is becoming even more demanding, particularly in light of high turnover of skilled human resources. Software clustering approaches can help with the task of understanding large, complicated software systems by automatically decomposing them into smaller, easier-to-manage subsystems. In this paper we recognize significant study instructions in the area of software clustering that require further attention in order to develop more effective and efficient clustering methodologies for software engineering. To that end, we first there the state of the art in software clustering research. We consider the methods of clustering that have received the most attention from the research community and outline their strengths and weaknesses. Our paper defines every stages of a clustering algorithm separately. We also present the most important approaches for evaluating the value of software clustering.