Software engineering for self-adaptive systems: research challenges in the provision of assurances