Studying and Characterizing Aspect-Oriented Programming Languages and Aspect Mining Techniques