Improving Software Modularity Through Crosscutting Concern Extraction