Internal Software Quality Evaluation of Self-adaptive Systems Using Metrics, Patterns, and Smells