Modern software systems are getting more complex. This is partly justified by the heterogeneity of technologies embedded to deliver services to the end client, the large-scale distribution of software pieces that intervene within a single application, or the requirements for adaptive software systems. In addition, the need for reducing the maintenance costs of software systems has led to the emergence of new paradigms to cope with the complexity of these software. Autonomic computing is a relatively new paradigm for building software systems which aims at reducing the maintenance cost of software by building autonomic software systems which are able to manage themselves with a minimal intervention of a human operator. However, building autonomic software raises many scientific and technological challenges. For example, the lack of visibility of the control system architecture in autonomic systems makes them difficult to maintain. Similarly, the lack of verification tools is a limitation for building reliable autonomic systems. The flexible management of non-functional-properties, or the traceability between the design and the implementation are other challenges that need to be addressed for building flexible autonomic systems. The main contribution of this thesis is CORONA. CORONA is a framework which aims at helping software engineers for building flexible autonomic systems. To achieve that goal, CORONA relies on an architectural description language which reifies the structure of the control system architecture. CORONA enables the flexible integration of non-functional-properties during the design of autonomic systems. It also provides tools for conflicts checking in autonomic systems architecture. Finally, the traceability between the design and the runtime implementation is carried out through the code generation of skeletons from architectural descriptions of control systems. These properties of the CORONA framework are exemplified through three case-studies.