Very little software is actually written from scratch. Instead, software projects usually rely on existing libraries, frameworks, and components. Such building blocks must be carefully integrated to ensure that the resulting applications are robust and maintainable. The necessity to integrate, reuse, and maintain large collections of software components has led to important challenges for computer scientists and engineers which, in turn, resulted in the elaboration of various component models and integration mechanisms..Aims:To equip students with issues of large-scale software development usually referred to as ”software architecture”, including architectural design and documentation, component models and technolo- gies, software product lines, frameworks, and aspect-oriented programming