MIDTERM (Lec 1 - 8) Flashcards
(37 cards)
How has the software development process evolved from the 1960s to today, and what are some of the key challenges developers face today compared to the early days of software development?
Early focus: basic functionalities and maintenance challenges.
Modern focus: scalability, complexity management, and security.
Challenges today: integrating new technologies, handling large-scale systems, ensuring reliability and performance
What is the role of software architecture in software development, and how does it impact long-term cost and quality?
- Impacts long-term cost and quality by influencing modifications and helps with managing complexity, especially with bigger systems
What is the difference between functional and non-functional requirements? Give an example of each in a real-world application.
Functional: Describes specific tasks that must be PERFORMED (e.g., “Users can log in”).
Non-functional: Describes qualities like performance, security (e.g., “System must handle 10,000 users”, usability).
What are design decisions in software architecture, and how do principal and temporal decisions influence system development? Give an example of each from a real-world application.
- Choices made during the creation / planning phase
Principal: important choices that changes overall architecture, or behavior (Different language used, different architecture)
Temporal: choices made overtime (Changing the interface, etc)
What is the difference between user stories and use cases? Provide an example of the same feature described using both a user story and a use case.
User stories: informal description of features of a software.
Use cases: a list of actions or event steps thru the UML
Example:
Feature: Being able to send messages
User story: As a person, I want to send messages so that I can interact with my contacts.
Use Case: 1. From home screen press option message
2. select a contact
3. Write the message and press send
4. Receive confirmation status
What is UML, and why is it important in software architecture?
UML: Unified Modeling Language
standardized way to visualize the design of a system.
Helps to understand, document and show the structure and behavior of the system.
What is a Requirements Traceability Matrix (RTM), and how does it help in software development? List three key components of an RTM.
Maps relationship between requirements, architecture, and work.
Helps keep the requirements in check and provides a record and proof.
Components: Requirement ID, Description, Source, Status, Design Reference, Test Cases
What is the role of class diagrams in software architecture?
Visual representation of key components in a system.
Makes it easier to manage the complexity of a system by organizing it into logical units.
What is decomposition in software architecture? How does it improve modularity and maintainability?
Breaking down larger entities into smaller, specialized ones
Modularity: separates functionality into specialized classes/units
Maintainability: small changes doesn’t affect the entire system
Explain the difference between tight coupling and loose coupling. Which one is preferred in software architecture?
Tight: classes are highly dependent on each other
Loose: classes are not that dependent
Loose is preferred, for more flexibility and modularity of classes
What is cohesion in software design? As a software architect, should you prioritize high or low cohesion? Explain why.
Closeness and unity within a class.
High cohesion is preferred to improve readability, ensuring each class has a clear specific task.
How do coupling and cohesion relate to each other?
High Cohesion ←→ Low Coupling
Low Cohesion ←→ High Coupling
What is the difference between scalability and elasticity in software architecture? How do they relate to system performance under varying workloads?
Scalability: Handle increased work by adding resources (servers)
Elasticity: Dynamically ADAPTING and adjusting resources based on demand in real time
How do modularity and maintainability complement each other in software architecture?
Modularity: Dividing a system into smaller components
Maintainability: Easier to update a small component without disturbing the entire system.
Compare testability, fault tolerance, and reliability.
Testability: How easily a system can be tested
Fault Tolerance: Continue functioning despite bugs / failures
Reliability: CONSISTENT performance under certain conditions
What is the relationship between security and interoperability?
Security: Protects systems from unauthorized access
Interoperability: Ensure different systems can communicate together.
Finding the right balance between them is important, without sacrificing one or the other.
How do simplicity and reusability contribute to efficient software development?
Simplicity: reduce complexity, easier code to read
Reusability: allows code to be reused, to save time.
They reduce effort needed, take away redundancy, and improve maintainability
Layered architecture is known for its modularity. What are some key characteristics of this architecture style?
Simplicity, Modularity, Maintainability, Scalability, Reusability, Testability, Interoperability, Flexibility
Pipeline architecture processes data in stages. What are the defining characteristics of this architecture style?
Modularity, Scalability, Reusability, Flexibility, Testability
How do the characteristics of different architecture styles (monolithic, layered, pipeline) impact deployment and testing? Provide specific examples.
MONOLITHIC:
Testing → Easier to test as everything is within one codebase, but harder to isolate issues in large systems
Deployment → Changes require redeploying the entire app
LAYERED
Testing → Each layer can be tested independently or together
Deployment → Can deploy as a whole or separately in layers
PIPELINE
Testing → Each stage can be tested separately
Deployment → Components deployed as separate processes or services
Compare microkernel and microservices architectures. How do they differ in terms of component independence, communication, and deployment?
COMPONENT INDEPENDENCE
Kernel → microkernel handles essential tasks. additional features run as plug-ins
Service → each microservice is self-contained unit and deployed independently
COMMUNICATION
Kernel → Plug-ins communicate or message passing
Service →communicate through APIs like REST
DEPLOYMENT
Kernel → deployed as a single system
Service → each service deployed independently
What are the key characteristics of microservices architecture? How does this style improve scalability and fault tolerance?
Scalability, Flexibility, Deployability, Testability, Fault Tolerance, Performance
Each service can be tested / deployed independently.
One service having errors won’t crash the entire system.
How does event-driven architecture work, and what are some real-world applications where it is beneficial?
Components REACT to events (sensor, user, messages).
Examples: Ecommerce (order processing, payment, inventory, etc)
List and explain at least three key factors that software architects should consider when selecting an architecture style for a system. Provide an example where these factors influenced an architecture choice.
3 Key factors:
Design: Style must align with the requirements of the system.
Cost: Microservices might be chosen for large-scale systems
Schedule: Consider time constraints. (Monolithic for smaller projects and tight deadlines)