Modularity Flashcards

3rd Exam

1
Q

is a software design principle that involves breaking a program into smaller, self-contained units or modules. Each module is designed to perform a specific function and can be developed, tested, and maintained independently from other modules.

A

Modularity

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

is a term used in software architecture to describe a system that lacks a clear and organized structure, resulting in a tangled, messy codebase.

A

Big Ball of Mud

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

often refers to an individual item or member of a collection or structure, such as an array, list, or set. It represents a discrete, identifiable unit within a collection.

A
  • Element
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

refer to the hierarchical organization of modules in a system, where each layer represents a distinct level of abstraction or functionality.

A

Layers

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

is a software design approach that focuses on separating cross-cutting concerns from the main business logic of a program. Cross-cutting concerns are functionalities that affect multiple parts of a system but don’t fit neatly into the primary modules or classes.

A

Aspect Oriented Programming

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

is a software design approach that focuses on dividing a system into modules or components based on the real-world domains or business areas the system represents.

A

Domain Based Decomposition

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

is a key consideration in the context of software quality attributes, especially when balancing speed of delivery with other qualities like performance, maintainability, and reliability.

A

Time-to-start

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

refers to an approach in software development where a system or product is built and delivered in small, manageable parts (or increments) over time, rather than as a single, large, complete package. Each increment is a small piece of the overall system, typically fully functional or delivering a subset of features, and can be tested, evaluated, and improved upon as the project progresses

A

Incremental Piecemeal

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

When the system becomes a Big Ball of Mud it is very difficult to convert it to another thing
A few prestigious developers know where to touch Clean developers run away from these systems

A

Inertia

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

You need an immediate fix for a small problem, a quick prototype or proof of concept When it is good enough, you ship it

A

Throwaway Code

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Growth in each deliver

A

Piecemeal growth

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Bad code reproduces in lots of places

A

Cut/Paste reuse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Not following clean code/architecture, Bad smell

A
  • Anti-pattern and technical debts
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

refers to a self-contained, independent unit of code that performs a specific function or set of functions within a larger system.

A
  • Module
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

in software development is a contract or a blueprint that defines a set of methods that a class must implement, without providing the actual implementation of those methods.

A

Interface

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

refers to the implementation details or the internal workings of a module.

A

Body

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

is a software engineering approach that involves breaking down a complex system into smaller, manageable, and self-contained modules.

A

Modular decomposition

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Modular systems allow teams to work on different modules simultaneously, increasing productivity.

A

Communication

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

A module only exposes an interface- less complexity

A

Simplicity

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Modules can be reused in different programs or projects without modification

A

Reusability

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Modules can be developed by different teams

A

Independence

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

refers to a poor division of a system’s components, modules, or functionalities, leading to problems in design, maintainability, performance, or flexibility.

A

Bad Decomposition

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Managing dependencies between modules can become complex, particularly as the number of modules increases.

A

Dependency Management

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Modules decomposition affects team organization

A

Team Organization

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

refer to pre-built, ready-made software components, applications, or products that are developed by third-party vendors and available for purchase or licensing.

A

COTS

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

are pre-built software components or entire applications that are freely available for anyone to use, modify, and distribute.

A

FOSS

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

COTS/FOSS modules

A

Decision: Develop vs Buy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

refers to how closely related and focused the responsibilities of a module or class are. In software design, cohesion measures the degree to which the elements inside a module or class belong together, working toward a single, well-defined purpose. High cohesion within a class or module means that its components are strongly related, making the software easier to understand, maintain, and modify.

A

Cohesion

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

refers to the degree of direct dependency or interaction between different modules, classes, or components in a software system.

A

Coupling

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

in software engineering refers to the ability of a system, application, or component to handle unexpected conditions, inputs, or situations gracefully without crashing or producing incorrect results.

A

Robustness

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

is a design guideline for computer software, particularly in networking and communication protocols.

A

Postel’s Law

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

is a design guideline for developing software systems with low coupling. It promotes the idea that a given object should have limited knowledge about the internal details of other objects and should only communicate with its immediate “friends” or closely related components.

A

Demeter’s Law

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

refer to a design approach in software development where the interactions with a system or API are designed to be intuitive, flexible, and adaptable.

A

Fluid Interfaces

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

means that each module should have one reason to change. For instance, a module responsible for user authentication should not also manage user preferences, as this would add unnecessary complexity.

A

SRP (Single Responsibility Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

You should be able to extend the functionality of a class or module without changing its existing code. This can be achieved by using inheritance, interfaces, or abstract classes.

A

OCP (Open-Closed Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Objects of a superclass should be replaceable with objects of a subclass without affecting the correctness of the program.

A

LSP (Liskov Substitution Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

A client should not be forced to implement an interface it doesn’t use. Instead of one large interface, break it down into smaller, more specific interfaces.

A

ISP (Interface Segregation Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g., interfaces). Also, abstractions should not depend on details; details should depend on abstractions.

A

DIP (Dependency Injection Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

is a concept in software design and cohesion principles that emphasizes the relationship between the reuse of software components and their release as independent modules or units. it can be reused in different applications:

A

REP (Reuse/Release Equivalence Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

It emphasizes the importance of grouping related classes or components that are likely to change together into a single module.

A

CCP (Common Closure Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

It focuses on how classes or components should be grouped in a way that maximizes their potential for reuse while minimizing unnecessary dependencies.

A

CRP (Common Reuse Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

represents the balance and trade-offs involved in maintaining cohesion between software components or modules while ensuring the system remains flexible and easy to maintain.

A

Tension Diagram Between Component Cohesion

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

refers to the degree of direct dependency or interaction between different modules, classes, or components in a software system. In other words, it describes how closely one module is connected or dependent on another.

A

Coupling

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

It is primarily concerned with ensuring that dependencies do not form cycles, which can lead to various problems such as increased complexity, difficulty in maintenance, and challenges in testing.

A

ADP(Acyclic Dependencies Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q

is a principle in software design that focuses on managing dependencies between modules in a way that promotes stability and reduces the risk of ripple effects when changes are made.

A

SDP (Stable Dependencies Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

It emphasizes the relationship between abstractions (such as interfaces or abstract classes) and their stability within a system. By adhering to the Stable Abstraction Principle, developers can create more robust and maintainable systems.

A

SAP (Stable Abstraction Principle)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
47
Q

is a fundamental concept in software development that involves hiding the complex details of a system and exposing only the necessary parts.

A

Abstraction

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

measures the relationships between software components and helps determine how likely it is that a change in one part will necessitate changes in another part.

A

Connascene

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
49
Q

refers to relationships or dependencies that can be determined and evaluated during coding

A

Static Connascene

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
50
Q

refers to relationships or dependencies that can be determined and evaluated at compile time or during runtime execution

A

Dynamic Connascene

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
51
Q

refers to the number of components that are involved in the connascence relationship. It measures how widespread the dependency is within the system.

A

Degree

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
52
Q

refers to the distance between the components that are connascene. It measures how close or far apart the dependent components are in the system.

A

Locality

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
53
Q

refers to how strongly components are tied together by the dependency. It measures the impact that changing one component will have on the others.

A

Strength

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
54
Q

is a design pattern that enables code to be written in a more readable, expressive, and chainable manner. It allows developers to call methods in a way that forms a “flow” or chain of operations, often resembling natural language.

A

Fluent API’s

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
55
Q
  • Grasp principle
A

General Responsibility Assignments Software Patterns

56
Q

Intent is declared in one place

A

DRY Principle

56
Q

you ain’t gonna need it

57
Q

KISS Principle

A

Keep it Simple Stupid

58
Q

emphasizes the importance of robustness

A

Postel’s Law

59
Q

system can tolerate a wide range of issues—such as errors, faults, or misuse—without failing, ensuring that it behaves reliably under various circumstances.

A

Robustness Principle

60
Q

A network protocol should ensure that the data it sends conforms strictly to the defined protocol standard. This reduces the chance of errors or miscommunication between systems.

A

Application of Networking

61
Q

better user experience, by tolerant with errors, user-friendly (search)

A

Software Development Impact

62
Q

initiative on the developers towards the client

A

Challenges to implementation

63
Q

It deals with runtime interactions and execution order

A

Dynamic Connascene

64
Q

Multiple Components must reference the same identity

A

Connascene of Identity

65
Q

It suggest that developers should not add functionality until its necessary

66
Q

The Principle encourages developers to avoid unnecessary complexity and to strive for simple, straightforward solutions.

A

KISS Principle

67
Q

Represents real world concepts and business logic

A

Domain Model

68
Q

External Operations

69
Q

It promotes efficiency and prevents feature bloats in software Projects

70
Q

In a system that interacts with databases, many methods might need to start or commit transactions

A

Transaction Management

71
Q

A programming technique that is based on concept of an aspect that encapsulates cross-cutting concern

A

AOP (Aspect Oriented Programming)

72
Q

Contain attributes but no identity

A

Value Objects

73
Q

The distance between the elements

74
Q

It focuses on understanding and modelling the core business logic of a system

75
Q

Only few components depend on each other

A

Low Degree

76
Q

The knowledge or logic in a system should have a single, unambiguous, and authoritative representation

A

DRY Principle

77
Q

Describe key objects, relationship and behavior

A

Domain models

78
Q

Organize system modules by technical capabilities

A

Technical Partitioning

79
Q

More components depend on each other

A

High Degree / Tight Coupling

80
Q

It emphasizes the simplicity should be a key goal in design

A

KISS Principle

81
Q

The number of elements affected by connascene

82
Q

Known as the Ports and Adaptors Architecture creating adaptable system by separating core business logic like database, user interface

A

Hexagonal Style

83
Q

The interface for registering

A

Ports Driving

84
Q

Interface for processing payments

A

Driven Ports

85
Q

Archi-pattern exposing domain objects to user

A

Naked Objects

86
Q

Separate between components domain and business node/rules

A

Clean Code

87
Q

Provides a framework that priorities data as the core of the system

A

Data Centered

88
Q

repetitive code like logging or security that tends to duplication. Functionality or feature of code that needed through multiple parts.

A

Cross-Cutting Concerns

89
Q

Can be detected with analysis or during coding

A

Static Connascene

90
Q

issues in term of deployment

A

Monolithic Application

91
Q

Request flow through layers without processing

A

Skinkhole anti-pattern

92
Q

Objects with identity

93
Q

Collection of objects bound together by some root entities

A

Aggregates

94
Q

Creates Objects

95
Q

Storage Service

A

Repositories

96
Q

Specifies Boundaries of domain

A

Bounded Context

97
Q

Proposed by Eric Evans, focuses on understanding & modeling the lose business logic

A

Domain Driven Design

98
Q

Module separated from other module

A

Domain models

99
Q

Describes key objects, relationship and behaviour

A

Domain Models

100
Q

Organize how data is stored structured and organize in database

A

Data Models

101
Q

Organize modules by domain, categorize

A

Domain Partitioning

102
Q

Encapsulate cross-cutting concern to be reuse, reduce code duplication

A

Reusable Code

103
Q

developer can focus writing core business without worrying cross-cutting/ less error prone

A

Quick Development Progress

104
Q

Born and Grow Together

A

Connascene

105
Q

Combines coupling and cohesion

A

Connascene

106
Q

looks at how components are coupled, source code interaction

A

Static Connascene

107
Q

5 types of Static Connascene

A

Name, Type, Meaning, Identity, Algorithm

108
Q

4 Types of Dynamic Connascene

A

Execution, Timing, Values, Identity

109
Q

Improve readability & reusability

A

Fluent API’s

110
Q

Principle of less knowledge

A

Demeter’s Law

111
Q

Units should have limited knowledge, Each units should only talk to its friends, and Symptoms of bad design

A

Demeter’s Law

112
Q

Don’t talk to Strangers

A

Demeter’s Law

113
Q

Module can function independently, minimal dependencies

A

Loose Coupling

114
Q

Modules are highly dependent on each other; changes in one module after others

A

Tight Coupling

115
Q

Degree of interdependence between software modules; how closely connected different parts of a system

A

Coupling Principle

116
Q

Set of functionalities exposed through an interface at a Level N

117
Q

Divide software module in layers, ordered

118
Q

Consumers services

119
Q

Provide services to the consumers

120
Q

2 variants of layers

A

Strict and Lax

121
Q

tolerable and resilient systems, maintains functionality even faced with errors

A

Application of networking

122
Q

more user friendly & reliable, satisfaction and reducing support cose

A

Software development Impact

123
Q

Developers must strike right balance of accepting input while maintaining security

A

Challenges to Implementation

124
Q

Piece of software that offers a set of resposibilities

125
Q

Describe what is a module

126
Q

How it is implemented

127
Q

A module only exposes interfaces / less compexity

A

Simplicity

128
Q

facilitates changes and extensions

A

Maintainability

129
Q

communicate the general aspect of the system

A

Communication

130
Q

decomposing the project in modules at development time

A

Modularity

131
Q

module can be develop independently

A

Modularity

132
Q

Quality Attributes of Modularity

A
  1. Time-to-market
  2. Cost
133
Q

possible to start w/out defining an architecture

A

Quick Start

134
Q

Cheap solution for short term projects

135
Q

you need a immediate fix on a small problem

A

Throw-away code

136
Q

when the systems becomes a big ball of mud, very difficult to convert in to another thing.