A Runtime Verification and Validation Framework for Self-Adaptive Software