ABSTRACT The complexity of current software systems and the fact that their non-functional requirements have become very relevant for the end-user are challenges to be faced in software development. In the last few years, these properties have increased the time and the staff required for the development and maintenance processes of software. As a result, there is greater interest in reducing the costs of these processes in complex software systems. In order to deal with these challenges, to achieve the milestones of software products, and to overcome the competitiveness of the market, this thesis presents a novel approach for developing complex software systems. This approach is called PRISMA. PRISMA is supported by a framework that consists of a model, a language, a methodology and a Computer-Aided Software Engineering (CASE) tool prototype. The PRISMA model combines two approaches to define software architectures: the Component-Based Software Development (CBSD) and the Aspect-Oriented Software Development (AOSD). The main contributions of the model are the way that it combains both approaches to take their advantages, and its formal language. PRISMA takes into account non-functional requirements from the early stages of the software life cycle and improves the reusability and maintenance of software by decomposing software systems using two different concepts: aspects and architectural elements (components and connectors). PRISMA provides a formal Aspect-Oriented Architecture Description Language (AOADL) for specifying aspect-oriented software architectures. Its AOADL is independent of technology and is based on formal languages and formalisms to preserve non-ambiguity in order to apply code generation techniques. The methodology that PRISMA proposes for developing software systems follows the Paradigm of Automatic Programming by applying the Model-Driven Development (MDD) approach. As a result, PRISMA provides traceability from the analysis and design stages of the software life cycle to the implementation stage, and provides mechanisms to improve the time and cost invested in the development and maintenance processes. The PRISMA model and its methodology are supported by a CASE tool prototype called PRISMA CASE. This tool allows the specification of PRISMA architectures using its AOADL in a textual and a graphical way, the verification of PRISMA software architectures, and the automatic C# code generation thanks to the middleware and the code generation patterns that the CASE tool prototype integrates. Finally, PRISMA CASE provides a generic Graphical User Interface to execute PRISMA applications over .NET platform and to validate them.