Search based software engineering: challenges, opportunities and recent applications