Software quality is of utmost importance for the correct functioning of modern systems. The quality of software projects is measured by different attributes, such as efficiency,security, or understandability, among others. Without a proper design, the code becomesprone to errors and unsatisfactory. In this doctoral thesis, we study the optimization of softwarequality. In particular, we focus on the optimization of software maintainability, whichis critical to the long-term success of software projects. The subject studied is known as theSoftware Module Clustering Problem, which is a well-known family of optimization problemsin the area of Search-Based Software Engineering. We study four of these problemsbased on different quality metrics used to evaluate software systems. Two of them, ModularizationQuality and Function of Complexity Balance, are studied as mono-objectiveproblems. The other two problems, Maximizing Cluster Approach and Equal-size ClusterApproach, consider multiple quality metrics and are studied as multi-objective optimizationproblems. Given the complexity of these problems, which have been proven to beNP-complete, exact methods are impractical for the size of real-world software projects.Therefore, this doctoral thesis focuses on approximate methods. In particular, the use ofthree metaheuristic procedures is proposed: a Greedy-Randomized Adaptive Search Procedurecombined with Variable Neighborhood Descent, a General Variable NeighborhoodSearch, and a Multi-Objective General Variable Neighborhood Search. To improve the efficiencyof the aforementioned methods, several novel strategies are introduced, and an exhaustivestudy of neighborhood structures and their exploration is performed. Finally, theproposed methods have been validated by favorably comparing their performance with thebest algorithms available in the related literature, on a dataset obtained from real softwareinstances. The significance of the results obtained is supported by statistical tests.