Models, methods and tools for software architecture management and utilization, extracting high-level architecture models directly from the code, support for manual and automatic architecture analysis, synchronization with enterprise information repositories.
Software engineering is an engineering discipline whose focus is the cost-effective development of high-quality software systems. Software architecture takes a central part in software engineering. As an abstraction of a software system it is the main artifact that is used for reasoning about central system qualities like like performance, security, and scalability, to name a few. Early design decisions are usually long lasting and expensive to change later in the development. For developers architecture is a blueprint of the system that guides and constrains its implementation. For stakeholders, software architecture is an important means for communication and documentation.
Architecture-related engineering activities like software architecture evaluation require an extensive amount time and human resources and thus lack the cost-effectiveness as one of the main goals of software engineering. Formalization and tool support contribute to more cost effectiveness, but formalized approaches for architecture description and analysis, like Architecture Description Languages (ADLs) often lack tool support and are not aligned well enough with system implementation. Also formalized approaches often lack multiple views on a software architecture, require specialized knowledge hindering their adoption, and are too rigid to be used for communication.