Aspect-Oriented Software Development (AOSD) aims at solving the problem of encapsulating crosscutting concerns, which orthogonally crosscut the components of a system, in units called aspects. This encapsulation improves the modularization of a system and in consequence its maintenance and evolution. In this work, the authors propose a systematic process for the migration of object-oriented systems to aspect-oriented ones. This migration is achieved in two main phases: crosscutting concern identification (aspect mining) and code transformation (aspect refactoring). The aspect mining phase is based on dynamic analysis and association rules to identify potential crosscutting concerns. The aspect refactoring phase, on the other hand, uses inference rules to identify the refactoring that can be applied. The whole process is described and its application on a real system is assessed.