software architecture

0.0(0)
studied byStudied by 0 people
0.0(0)
full-widthCall with Kai
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
GameKnowt Play
Card Sorting

1/227

encourage image

There's no tags or description

Looks like no tags are added yet.

Study Analytics
Name
Mastery
Learn
Test
Matching
Spaced
Call with Kai

No study sessions yet.

228 Terms

1
New cards

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

2
New cards

What is the focus of Software Architecture

It is a process focused on the structure not on the code and implementation details

3
New cards

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

4
New cards

What does Software Architecture comprise according to the fundamental definition

Software elements, relations among them, and properties of both

5
New cards

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

6
New cards

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

7
New cards

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

8
New cards

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

9
New cards

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

10
New cards

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

11
New cards

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

12
New cards

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

13
New cards

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

14
New cards

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

15
New cards

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

16
New cards

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

17
New cards

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

18
New cards

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

19
New cards

Are Non-Functional Requirements always known to business analysts or clients

No, they are not always known to the business analyst or client

20
New cards

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

21
New cards

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

22
New cards

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

23
New cards

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

24
New cards

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

25
New cards

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

26
New cards

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

27
New cards

What other factors should be considered when choosing technology

Licensing and Cost, Maintenance and future upgrades, Documentation, Legal Issues and Regulations

28
New cards

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

29
New cards

What can we develop as backend components

Web Applications, Web APIs, Console-Based System, Services

30
New cards

What is Frontend Technology

The front-end component is the user interface with which the human end-user interacts

31
New cards

What can we develop Front-end components for

Web Applications, Desktop Applications, Mobile Applications

32
New cards

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

33
New cards

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

34
New cards

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

35
New cards

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

36
New cards

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

37
New cards

What is XML File as a data storage option

Semi-structured text that can be queried using xPath or xQuery

38
New cards

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

39
New cards

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

40
New cards

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

41
New cards

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

42
New cards

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

43
New cards

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

44
New cards

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

45
New cards

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

46
New cards

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

47
New cards

What is Scale Up or Vertical Scaling

Add more processors, RAM, Hard-drives to existing machines

48
New cards

What is Scale Out or Horizontal Scaling

Add more Machines or VMs to the pool of servers

49
New cards

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

50
New cards

What is the problem with non-modular systems when API changes

It requires modifying and testing the full system plus full and long deployment

51
New cards

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

52
New cards

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

53
New cards

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

54
New cards

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

55
New cards

What is fault tolerance in the context of Manageability

The ability to respond to failure and continue functioning normally

56
New cards

List other quality attributes mentioned in the lecture

Adaptability, deployability, upgradability, recoverability

57
New cards

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

58
New cards

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

59
New cards

Give an example of an Architecture Style

Microservice

60
New cards

Give an example of an Architecture Pattern

CQRS which stands for Command Query Responsibility Segregation

61
New cards

What is a Design Pattern in relation to Architectural Pattern

Low-level architectural design, not to be confused with architectural pattern

62
New cards

What are Monolithic Architectures

Single deployment Unit architectures

63
New cards

What are the good points of Monolithic Architectures

Much easier to design and implement, Inexpensive, Deployed more quickly

64
New cards

What are the weak points of Monolithic Architectures

Scalability issues with only Vertical scaling or adding more resources, Fault tolerance problems

65
New cards

What are Distributed Architectures

Multiple deployment Units architectures

66
New cards

What are the good points of Distributed Architectures

Scalability both Up or Out, Performance, Fault Tolerance

67
New cards

What are the weak points of Distributed Architectures

Expensive, Maintenance challenges, Complexity

68
New cards

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

69
New cards

What are the two types of Architecture Partitioning

Technical Partitioning and Domain Partitioning

70
New cards

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

71
New cards

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

72
New cards

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

73
New cards

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

74
New cards

What is Layered Architecture Style also known as

Also known as the n-tier architecture, though this is debatable

75
New cards

What does Layered Architecture Style contain

Contains a number of layers where each layer has a specific role and responsibility within the application

76
New cards

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

77
New cards

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

78
New cards

What does layers of isolation mean

A change made in one layer doesn't impact or affect component on other layers

79
New cards

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

80
New cards

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

81
New cards

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

82
New cards

When should you not use Layered Architecture Style

For smaller projects, When layers are tightly coupled, Consider Performance vs Scalability trade-offs

83
New cards

What is Microkernel Architecture Style also named as

Also named plug-in architecture style

84
New cards

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

85
New cards

Give examples of Microkernel Architecture

Operating System, Chrome or Firefox browsers, Eclipse IDE

86
New cards

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

87
New cards

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

88
New cards

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

89
New cards

Define Microservice Architecture Style

A microservice is defined as a single-purpose, separately deployed unit of software that does one thing really really well

90
New cards

What was the Linus-Tanenbaum Debate about

A 1992 debate about whether Linux's monolithic architecture was obsolete compared to microkernel architecture

91
New cards

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

92
New cards

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

93
New cards

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

94
New cards

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

95
New cards

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

96
New cards

What is the key takeaway from the Linus-Tanenbaum debate

The costs of architectural decisions may take years to become apparent

97
New cards

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

98
New cards

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

99
New cards

What comprises the fundamental structures of a system in Software Architecture

Software elements, relations among them, and properties of both

100
New cards

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