Engineering Adaptable Systems: State of The Art