  Software quality estimation is a challenging and time-consuming activity, and
models are crucial to face the complexity of such activity on modern software
applications.
  One main challenge is that the improvement of distinctive quality attributes
may require contrasting refactoring actions on an application, as for trade-off
between performance and reliability. In such cases, multi-objective
optimization can provide the designer with a wider view on these trade-offs
and, consequently, can lead to identify suitable actions that take into account
independent or even competing objectives.
  In this paper, we present an approach that exploits the NSGA-II
multi-objective evolutionary algorithm to search optimal Pareto solution
frontiers for software refactoring while considering as objectives: i)
performance variation, ii) reliability, iii) amount of performance
antipatterns, and iv) architectural distance. The algorithm combines randomly
generated refactoring actions into solutions (i.e., sequences of actions) and
compares them according to the objectives.
  We have applied our approach on a train ticket booking service case study,
and we have focused the analysis on the impact of performance antipatterns on
the quality of solutions. Indeed, we observe that the approach finds better
solutions when antipatterns enter the multi-objective optimization. In
particular, performance antipatterns objective leads to solutions improving the
performance by up to 15% with respect to the case where antipatterns are not
considered, without affecting the solution quality on other objectives.
