Architectural Designs Flashcards
What is architectural design?
Architectural design is the critical link between design and requirements engineering, as it identifies the main structural components in a system and the relationships between them. The output of the architectural design process is an architectural model that describes how the system is organized as a set of communicating components.
Is it common to reuse architectural designs?
You will often hear “Our requirements are unique” - this is rarely, if ever, true! Most often we will in part, or in full, reuse existing architectural designs. Systems in the same domain often have similar architectures that reflect domain concepts. Application product lines are built around a core architecture with variants that satisfy particular customer requirements.
What are the five fundamental questions that should be addressed in architectural design
Architectural design is a creative process so the process differs depending on the type of system being developed. However, a number of common decisions span all design processes and these decisions affect the non-functional characteristics of the system.
- Is there a common generic solution to this type of system? A template or pattern.
- How will the system be distributed across the hardware?
- How will the design be decomposed into sub-systems?
- How should the architecture be documented?
- Do the non-functional requirements suggest (or dictate) a particular architectural solution?
What is software architecture?
Software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both. Architectural details can be traced back to failure risks
What are the advantages of explicitly designing and documenting a software architecture?
Stakeholder communication - Architecture may be used as a focus of discussion by system stakeholders. System analysis - Means that analysis of whether the system can meet its non-functional requirements is possible. Large-scale reuse - The architecture may be reusable across a range of systems Product-line architectures may be developed. Mitigate risks
What are the types of requirements for requirements gathering?
- A user-level facility description
- A detailed specification of expected system behaviour
- A general system property
- A specific constraint on the system
- Information on how to carry out some computation
- A constraint on the development system
What are functional and non-functional requirements
Functional requirements - defines a function or feature of the system, something that the system should do Non-functional requirements - defines some observable characteristics or quality of the system
What are domain requirements?
Domain requirements - derived from the characteristics of the application domain or rules and regulations that apply in that domain
What is requirements engineering?
Requirements engineering covers all of the activities involved in discovering, documenting and maintaining a set of requirements for a computer-based system. Requirements engineering is difficult and can lead to many issues within the project
What are architectural patterns?
Patterns are a means of representing, sharing and reusing knowledge. An architectural pattern is a stylized description of good design practice, which has been tried and tested in different environments. Patterns should include information about when they are and when the are not useful. Patterns may be represented using tabular and graphical descriptions.
What is the MVC pattern?
What is the layered architecture pattern?
Used to model the interfacing of sub-systems. Organises the system into a set of layers (or abstract machines) each of which provide a set of services. Supports the incremental development of sub-systems in different layers. When a layer interface changes, only the adjacent layer is affected. However, often artificial to structure systems in this way.
What is the repository pattern?
Sub-systems must exchange data. This may be done in two ways: - Shared data is held in a central database or repository and may be accessed by all sub-systems; - Each sub-system maintains its own database and passes data explicitly to other sub-systems. When large amounts of data are to be shared, the repository model of sharing is most commonly used a this is an efficient data sharing mechanism.
What is the client-server pattern?
What is an example of MVC pattern?