  Software module clustering is an unsupervised learning method used to cluster
software entities (e.g., classes, modules, or files) with similar features. The
obtained clusters may be used to study, analyze, and understand the software
entities' structure and behavior. Implementing software module clustering with
optimal results is challenging. Accordingly, researchers have addressed many
aspects of software module clustering in the past decade. Thus, it is essential
to present the research evidence that has been published in this area. In this
study, 143 research papers from well-known literature databases that examined
software module clustering were reviewed to extract useful data. The obtained
data were then used to answer several research questions regarding
state-of-the-art clustering approaches, applications of clustering in software
engineering, clustering processes, clustering algorithms, and evaluation
methods. Several research gaps and challenges in software module clustering are
discussed in this paper to provide a useful reference for researchers in this
field.
