As a software system evolves, its design structure often degrades and accumulates technical debt. The emergence of code smells, such as a God Class, is a well-known symptom of such problems. Although several tools exist for detecting code smells, the number of smells returned by current tools generally exceeds the number of problems developers can deal with. This is particularly evident when a team should focus on customer-visible features, and thus the time available for system restructuring is limited. Furthermore, not all smells require urgent attention, as they might not be related to architectural problems or business goals. In this context, having a tool that can prioritize critical smells is of great help for architects and developers.
To this end, we developed JSpIRIT (Java Smart Identification of Refactoring opportunITies) as a recommender system for ranking code smells according to multiple criteria. JSpIRIT performs a scanning of the system code, but its analysis is flexible enough to include information from past system versions, modifiability scenarios, and architectural components, among other assets. In the past few years, we have applied JSpIRIT to several Java projects with satisfactory results. Consequently, we have continued to improve the tool with more features. For instance, since smells often appear interrelated in the code, JSpIRIT provides insights to the developer about smell groupings. In addition, it offers visualizations for different smell configurations. We will present the key tool features and discuss project experiences in which JSpIRIT was useful for diagnosing the system “health” and planning for refactorings.