1/227
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai |
|---|
No study sessions yet.
Define Software Architecture
It is the process to design and define the functional structure of a software system by identifying the different components, elements and subsystems composing the whole software, and defining the behaviour of the software components in addition to their interfaces
What is the focus of Software Architecture
It is a process focused on the structure not on the code and implementation details
What role does Software Architecture play between project phases
It is the link between the requirements engineering phase and design phase where specifications are analysed and turned into a document designing the high-level structuring and behaviour of the system in order to produce low-level designs including UI, database, class diagram
What does Software Architecture comprise according to the fundamental definition
Software elements, relations among them, and properties of both
What is the main difference between Architecture and Design
Architecture focuses more on high-level structure of a software system and significant design decisions that if you have to change them result in high cost. All architecture is design but not all design is architecture
What is the scope shift in Software Architecture compared to detailed design
The focus shifts from small units like classes to larger and more relevant units such as packages, modules, subsystems, layers, and services
Can we develop a To-Do App without Architectural Design
Yes, we can start developing directly or using some framework and conduct some UML modeling for class, use case, sequence diagrams, but this is not architectural design
What are the costs of developing without proper Software Architecture for the To-Do App
Problems with scalability to support large number of users, difficulties changing database engine to Oracle or NoSQL, challenges integrating native mobile applications, issues integrating other authentication services including Google OAuth
Why is Software Architecture important regarding communication
It provides a representation that facilitates communication and explanation among all stakeholders including developers of how requirements would be implemented
Why is Software Architecture important regarding design decisions
It highlights early design decisions that will have a profound impact on all software engineering work that follows
Why is Software Architecture important regarding system modeling
It constitutes a relatively small model, blueprint, or prototype of how the system components are structured and work together
What is the critical importance of good architectural decisions
Making good decisions while defining the software architecture is critical to the success of a software product
Who is a Software Architect
A professional who designs a functional system with the qualities of being Fast, Secure, Reliable and Maintainable by selecting the optimal technology platforms and architectural patterns to achieve such goals
What must a Software Architect be familiar with
Must be familiar with technological tools and concepts, have a good understanding of specification requirements, and must have coding or programming skills
Why must a Software Architect have coding or programming skills
Because they can envision whether particular architecture is feasible to implement, not wait for the developers to tell and humiliate the architect after months of implementation that the architecture is not feasible to implement
How to become a Software Architect
You need to start your career as a Software Developer, have a lot of experience in developing different types of software products estimated no less than 5 years
What is Step 1 of the Software Architecture Process
Understand the Functional Requirements by defining the system goals and listing the functional use cases and what the system should do
What is Step 2 of the Software Architecture Process
Understand the Non-Functional Requirements by defining technical and service level attributes including number of users, performance requirements, volume of data, network capability
Are Non-Functional Requirements always known to business analysts or clients
No, they are not always known to the business analyst or client
Why are Non-Functional Requirements more important to architects than Functional Requirements
Non-functional requirements are more important to the architect than functional requirements as they impact heavily the structure of the software
What is Step 3 of the Software Architecture Process
Map the Components by defining the components, modules or subsystems that would constitute the software system and explaining the goal, tasks and functionality of each component
What is Step 4 of the Software Architecture Process
Select the Technological Stack where software architects with developers would select what platform, programming frameworks, programming language the system will be based including backends, front-ends, data stores and communication, and tools software, APIs, external services
Why is selecting the Technological Stack super important
First, it is irreversible where a change in a technology framework or platform may require a complete re-implementation of the software plus substantial delay plus going over budget. Second, it is emotional where developers usually prefer to stick to some technologies they subjectively prefer even though it is inferior in terms of performance
What factors should be considered when choosing technology regarding capability
Can it perform the task: Does it run on Mobile devices, Does it run across different platforms, Does it offer a library for GUIs, Does it offer AI libraries to process data, Does it support storage of large data, Does it have libraries for specific hardware
What factors should be considered regarding community when choosing technology
Large Active Community and Support by checking StackOverflow, seeing recentness of questions, number of questions from the tags. If you get stuck at least there is an active community to assist you or find solution to most common problems
What factors should be considered regarding popularity when choosing technology
Popularity, even though it is superficial, is important as it can give better insights on performance, portability and richness of features. Google Trend can be used
What other factors should be considered when choosing technology
Licensing and Cost, Maintenance and future upgrades, Documentation, Legal Issues and Regulations
What is Backend Technology
The part of the software product that can be utilized by the system administrators or product owners or staff or other external systems to operate, manage and communicate with the software product. It is not meant to be accessed by the end-user
What can we develop as backend components
Web Applications, Web APIs, Console-Based System, Services
What is Frontend Technology
The front-end component is the user interface with which the human end-user interacts
What can we develop Front-end components for
Web Applications, Desktop Applications, Mobile Applications
What technologies are used for Web Applications frontend
HTML, CSS, JavaScript. There are many frameworks to facilitate the development such as React, Angular, Bootstrap, Tailwind, JQuery
What should you look for when selecting Desktop Application frontend technology
Always look for a rich UI Toolkit such as Tkinter, Electron, Swing, JavaFX, QT, WinForms, WPF, UWP, wxWidget
What should be considered for Data Storage Technology requirements
Types of transactions and need for ACID, Size and type of the data, Reliability requirement, Number of users accessing at the same time, Types of operation read vs write, Number of operations per minute, Privacy Issue
What are the characteristics of Relational SQL-Based DBMS
Very mature and enforces a relational schema, but storing large amount of data can impact the performance. Examples include MySQL, PostgreSQL, ClickHouse, Oracle, SQLite, HSQLDB
What are the characteristics of NoSQL databases
Stored as JSON, great emphasis on scale and performance. But mostly schema-less, no support for transactions and querying can be frustrating. Example is MongoDB
What is XML File as a data storage option
Semi-structured text that can be queried using xPath or xQuery
What are file storage technology options
Local File System, Cloud Storage like S3 from Amazon AWS, Azure, Google Cloud, Digital Ocean Spaces, Database, CDN, Distributed Servers
What is Communication Technology in Software Architecture
How objects, components, services or subsystems communicate and what data format being used for the transfer of data such as RPC, RMI, CORBA, REST, SOAP, Message-Queue like Kafka or Redis
What is Step 5 of the Software Architecture Process
Design the Architecture based on the functional requirements, non-functional requirements, and technological stack where architects would creatively propose a blueprint describing the structure and behavior of the components
What is Step 6 of the Software Architecture Process
Write the Architecture Document where architects produce an architectural document describing the high-level process to implement the software. A good document is relevant for all levels in the organization including CEO, CTO and the development team
What is Step 7 of the Software Architecture Process
Support the Development Team where the architect needs to make sure they are implementing according to the architecture and solve any dilemmas and re-adapt the architecture due to non-anticipated problems and issues
What are Quality Attributes in Software Architecture
Technical capabilities that should be used in order to implement and fulfill the non-functional requirements. They are closely tied to non-functional requirements and are also called ilities
Give an example of how a non-functional requirement maps to a quality attribute
Non-functional requirement: The to-do App must be implemented to work under heavy load due to many users accessing at the same time. Quality Attribute or Technical capability: Scalability
How do different non-functional requirements lead to different architectures
The to-do App must work under heavy load due to many users vs The to-do App must work under heavy load and not waste money on unused resources leads to totally different architectures
Define Scalability as a quality attribute
The system capacity to handle heavy load due to an increase of number of users, size of the data, or running or deployed instances
What is Scale Up or Vertical Scaling
Add more processors, RAM, Hard-drives to existing machines
What is Scale Out or Horizontal Scaling
Add more Machines or VMs to the pool of servers
Define Modularity as a quality attribute
Modular system is built from smaller building blocks that can be changed or replaced or integrated without affecting the whole system
What is the problem with non-modular systems when API changes
It requires modifying and testing the full system plus full and long deployment
Define Extensibility as a quality attribute
The capability of a system where its functionality can be extended to add new features without modifying its existing code
Give an example of Extensibility from the lecture
We have a Backend API service to generate XML and JSON formats. We need to add CSV format. The system should be able to add this without modifying existing code, using design patterns
What is the incorrect way to achieve Extensibility
Modifying the existing code directly to add new features instead of using design patterns to extend functionality
Define Manageability as a quality attribute
The ability to know what's going on with the software application at any given time in order to take actions to improve its performance. Self-reporting can help to automate the system to be manageable and improve recovery from failure or fault tolerance
What is fault tolerance in the context of Manageability
The ability to respond to failure and continue functioning normally
List other quality attributes mentioned in the lecture
Adaptability, deployability, upgradability, recoverability
What is an Architectural Style
A reusable solution, pattern or template to a commonly occurring problem in software architecture within a given context. It facilitates the structuring of components by using a well-tested solution
What is the difference between Architecture Pattern and Architecture Style
Architecture Pattern describes reusable structural building blocks. Architecture Style describes the overall system consisting of architectural patterns
Give an example of an Architecture Style
Microservice
Give an example of an Architecture Pattern
CQRS which stands for Command Query Responsibility Segregation
What is a Design Pattern in relation to Architectural Pattern
Low-level architectural design, not to be confused with architectural pattern
What are Monolithic Architectures
Single deployment Unit architectures
What are the good points of Monolithic Architectures
Much easier to design and implement, Inexpensive, Deployed more quickly
What are the weak points of Monolithic Architectures
Scalability issues with only Vertical scaling or adding more resources, Fault tolerance problems
What are Distributed Architectures
Multiple deployment Units architectures
What are the good points of Distributed Architectures
Scalability both Up or Out, Performance, Fault Tolerance
What are the weak points of Distributed Architectures
Expensive, Maintenance challenges, Complexity
What are the 8 fallacies of distributed computing
First: The network is reliable. Second: Latency is zero. Third: Bandwidth is infinite. Fourth: The network is secure. Fifth: Topology doesn't change. Sixth: There is one administrator. Seventh: Transport cost is zero. Eighth: The network is homogeneous
What are the two types of Architecture Partitioning
Technical Partitioning and Domain Partitioning
Describe Data-Centred or Repository Architecture Style
A data store such as a file or database resides at the center of this architecture and is accessed frequently by other components that update, add, delete, or otherwise modify data within the store. A component is not aware of the data or states of other components
Describe Pipe and Filter or Data-Flow Architecture Style
Has a set of components called filters connected by pipes that transmit data from one component to the next. Each filter works independently of other components. A Filter expects data from previous Filter, does some process and produces data in a form suitable for the next filter
What are the three components of Model-View-Controller MVC Architecture Style
Model which contains all application-specific content and processing logic including access to the database. View which contains all interface-specific functions and enables the presentation of content and processing logic required by the end user. Controller which manages access to the model and the view and coordinates the flow of data between them
What was MVC initially introduced for and where did it become popular
Introduced initially for Desktop-GUI Applications but became popular among web applications where many MVC-oriented frameworks are developed
What is Layered Architecture Style also known as
Also known as the n-tier architecture, though this is debatable
What does Layered Architecture Style contain
Contains a number of layers where each layer has a specific role and responsibility within the application
Give examples of layers in Layered Architecture
Presentation layer for rendering the user interface, Business Logic layer for computing and processing requests, Persistence layer for loading, searching and saving to the database, Database layer for storing data into the actual DBMS
What is a closed layer in Layered Architecture
Architecture by default is closed layer to enforce the layers of isolation. Only layer adjacent to each other can communicate, which is opposite of open Layered architecture
What does layers of isolation mean
A change made in one layer doesn't impact or affect component on other layers
What is the benefit of separating or decoupling modules in Layered Architecture
If you change the data access layer, you won't need to change the Business Logic or User Interface
What is important about the direction of arrows in Layered Architecture diagrams
Pay a lot of attention to the direction of the arrows showing who is calling who
When should you use Layered Architecture Style
When there are time or budget constraints as it is simple and mostly monolithic style with no complexity involved. Most developers are familiar with this style making it easier to implement. When changes are mostly isolated to specific layer such as changing the business rules only or changing the user interface
When should you not use Layered Architecture Style
For smaller projects, When layers are tightly coupled, Consider Performance vs Scalability trade-offs
What is Microkernel Architecture Style also named as
Also named plug-in architecture style
Describe Microkernel Architecture Style
A flexible and extensible architecture that allows a developer or end user to easily add additional functionality and features to an existing software system in the form of extensions or plug-ins
Give examples of Microkernel Architecture
Operating System, Chrome or Firefox browsers, Eclipse IDE
When should you use Microkernel Architecture Style
For product-based application that will have heavily planned extensions, Software systems with multiple and or custom configurations such as storing to different services like cloud or file system or the possibility to work with different services
When should you not use Microkernel Architecture Style
Not scalable as core system acts the main bottleneck. If there will be a change in the core system it will mess all plugins
What is Event-Driven Architecture Style
Relies on asynchronous processing using highly decoupled event processors that trigger events and correspondingly respond to events happening in the system
Define Microservice Architecture Style
A microservice is defined as a single-purpose, separately deployed unit of software that does one thing really really well
What was the Linus-Tanenbaum Debate about
A 1992 debate about whether Linux's monolithic architecture was obsolete compared to microkernel architecture
What was Tanenbaum's argument in the debate
Linux has a monolithic architecture where the entire OS is a single executable file including process management, memory, file system. Microkernel architecture is better where kernel contains only essential services and other services run as independent processes
What was Linus's reply to Tanenbaum
In theory microkernel architecture is superior, however other criteria have to be considered. For example Linux is a working reality not just a promise
What did Tanenbaum say about designing monolithic kernels in 1991
I still maintain the point that designing a monolithic kernel in 1991 is a fundamental error. Be thankful you are not my student. You would not get a high grade for such a design
What did Ken Thompson say about microkernels and monolithic kernels
I would generally agree that microkernels are probably the wave of the future. However it is in my opinion easier to implement a monolithic kernel. It is also easier for it to turn into a mess in a hurry as it is modified
What did Torvalds state 17 years later in 2009
We are definitely not the streamlined, small, hyper-efficient kernel that I envisioned 15 years ago. The kernel is huge and bloated and whenever we add a new feature it only gets worse
What is the key takeaway from the Linus-Tanenbaum debate
The costs of architectural decisions may take years to become apparent
What is the job of the architect after the architecture document is done
The job for the architect is not done once the software architectural document is done. The architect needs to support the team to make sure they are implementing according to the architecture and solve any dilemmas and re-adapt the architecture due to non-anticipated problems and issues
Why is Architecture considered high-level design
Architecture equals high-level design because the focus shifts from small units like classes to larger and more relevant units such as packages, modules, subsystems, layers, and services
What comprises the fundamental structures of a system in Software Architecture
Software elements, relations among them, and properties of both
What type of questions reveal the need for Software Architecture in the To-Do App
Can it Scale to support a large number of users, What happens if we change the database engine to Oracle or NoSQL, Can we integrate a native mobile application, Can we integrate other authentication-services including Google OAuth