Engineering Evolving and Self-Adaptive Systems: An Overview