Empirical research in software architecture: Opportunities, challenges, and approaches