Software Adaptation in an Open Environment: A Software Architecture Perspective