Tenta (fundamentala delar) Flashcards
Klara tentan :)
How would you define software architecture?
Software architecture refers to the fundamental structures of a software system. The architecture is concerned with the major components, their relationships, and how they interact with each other.
What is the role of a software architect?
A software architect designs and oversees the high-level structure of software systems, making key decisions on frameworks and technologies based on the project’s needs. They ensure the system’s scalability, performance, and security, guide development teams, manage risks, and maintain communication with stakeholders to align technical solutions with business objectives.
How are UML diagrams used within software architecture?
UML diagrams are tools used to communicate architecture, they can provide a visual representation of quality attributes, component interactions, design decisions, and more (these come from software architecture).
Mentioned benefits of Software Architecture?
Clarity and Common Vision: Architecture provides a shared understanding of the system’s structure, behavior, and design decisions. It helps developers align their work towards a common goal.
Quality Attributes: Architecture addresses non-functional requirements like performance, scalability, security, and maintainability. These aspects are essential for building a robust and successful system.
Risk Mitigation: An architectural approach identifies potential risks early and allows proactive risk management. This minimizes the chances of costly issues arising later in the development process.
Adaptation and Evolution: An architectural foundation allows the system to adapt to changing requirements and technology trends. It supports incremental development while ensuring consistency.
Communication: Architecture documentation serves as a communication tool for developers, stakeholders, and non-technical parties. It helps everyone understand the system’s structure and design choices.
Decision Support: A software architect provides guidance on making design decisions that align with the project’s goals and long-term vision. This doesn’t constrain developers but helps them make informed choices.
Scalability: Architecture plans for scalability, ensuring that the system can handle increased loads and data volumes as the user base grows.
Time and Cost Savings: Clear architecture reduces rework by providing a well-thought-out structure. It streamlines development and prevents ad-hoc changes that could lead to technical debt.
Maintainability: A well-designed architecture makes the system easier to maintain over its lifecycle. It ensures that changes or enhancements can be made without disrupting the entire codebase.
Alignment with Business Goals: Architecture aligns technical decisions with business objectives, ensuring that the software supports the organization’s needs.
Does experienced teams need a software architect?
Experience is valuable, but even experienced developers can benefit from a coherent architectural vision. A software architect helps align decisions with overall goals, ensures consistency, and identifies potential risks or trade-offs. They don’t dictate every detail but provide guidance to create a well-structured and maintainable system.
What are some strengths of UML diagrams?
UML diagrams are great tools to describe the software architecture, by describing relationships between classes. This way we better know the structure of the code and all dependencies.
What are some weaknesses of UML diagrams?
They don’t show important architectural decisions, and are not to be used as a alternative to software architecture. UML diagrams also represent static behavior in its diagram, not dynamic behavior, which is vital to understanding architecture.
What are some key aspects of BDUF (Big Design up-front)?
BDUF is a traditional approach to software development where the entire software architecture is designed and planned upfront before any coding begins.
- Entire software architecture is designed and planned upfront before any coding changes.
- BDUF Delays feedback until a later stage
- BDUF often leads to a rigid architecture that might not accommodate changes easily.
- BDUF can lead to long planning and design phases, delaying the actual delivery of software to end-users.
What are some key aspects of Agile?
Agile software development is characterized by its iterative and incremental approach, focusing on delivering working software in short cycles while allowing for flexibility and adaptation.
- In Agile, the understanding is that requirements evolve over time as users provide feedback and the market changes.
- Agile emphasizes the ability to adapt to changing requirements and priorities.
- Agile encourages continuous feedback through iterative cycles.
- Agile focuses on delivering small, functional increments quickly.
How does BDUF’s core ideas clash with the ones of Agile software development
BDUF assumes that all requirements are known and planned before development begins, and after this, that plan will be followed. Agile on the other hand emphasizes its ability to change, as customers and markets give feedback for the change.
BDUF often leads to long planning and design phases, which potentially can delay the delivery of software/product to end-users. Whilst Agile focuses on delivering small, functional increments quickly.
How does Big-Design-Up-Front (BDUF) clash with agile software development principles?
BDUF assumes that the entire design should be completed and perfected before implementation starts, which conflicts with agile’s iterative and incremental approach. Agile promotes adaptive planning and evolutionary development, emphasizing flexibility in response to changes, contrary to BDUF’s rigid structure.
What are the impacts of introducing caching and concurrency on security, availability, and maintainability?
Caching can improve performance but may introduce stale data issues affecting data integrity and security. Concurrency improves responsiveness but can lead to complex issues like race conditions, affecting both security and maintainability. Both need careful handling to balance performance with other quality attributes.
What does S stand for in SOLID? And what does it say?
Single Responsibility Principle (SRP): Every class or module should have one, and only one, reason to change. This means it should have only one job or responsibility. By adhering to this principle, each component or class can be understood and modified independently without affecting other parts of the system.
What does O stand for in SOLID? And what does it say?
Open/Closed Principle (OCP): Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification. This means you should be able to change a component’s behavior without altering its source code, typically by using interfaces or abstract classes. This facilitates adding new functionality without endangering existing functionality.
What does L stand for in SOLID? And what does it say?
Liskov Substitution Principle (LSP): Objects of a superclass should be replaceable with objects of its subclasses without affecting the correctness of the program. This principle ensures that a subclass can stand in for its superclass without errors or unexpected behavior, promoting reliability and reusability of code.
What does I stand for in SOLID? And what does it say?
Interface Segregation Principle (ISP): No client should be forced to depend on methods it does not use. This principle advocates for creating smaller, more specific interfaces rather than a large, general-purpose interface. This way, implementing classes only need to be concerned with the methods that are applicable to them.
What does D stand for in SOLID? And what does it say?
Dependency Inversion Principle (DIP): High-level modules should not depend on low-level modules; both should depend on abstractions. Additionally, abstractions should not depend upon details; details should depend upon abstractions. This principle reduces the direct coupling between high-level and low-level components, making the system easier to modify and scale.
How can you manage service availability challenges in a distributed system with third-party dependencies?
To handle potential unavailability or latency in third-party services, implement fallback mechanisms such as caching previous responses, using circuit breakers to detect failures, and providing default responses to ensure continuity. This ensures the system remains robust and minimizes user impact.
What is Continuous Architecture?
CA is an architectural approach that gives six principles guiding how to architect a software system, no matter if it is rapid delivery cycles (agile) or more traditional methods (BDUF).
What are Information Systems?
Interrelated components working together to support the processes in an organization. These components are hardware, software, data and people which interact and communicate.
What are Microservices?
Microservices is an architectural style in which a large application is built as a suite of small, independent services, each running in its own process and communicating with lightweight mechanisms.
This approach allows for greater flexibility, scalability, and easier maintenance compared to traditional monolithic architectures.
Is it true that Software Architecture is about fundamental software structures AND about making fundamental design decisions?
Yes.
What are the three categories of Requirements?
Functional requirements: What is the system supposed to do?
Quality attribute requirements: How well is the system supposed to do these things?
Constraints: What will be some inevitable, non-negotiable requirements?
What are some quality attributes? Name five:
Performance
Reliability
Security
Modifiability
Scalability
What method is used to achieve the desired quality attributes?
We use Architectural tactics, design decisions that influence how a system (or a part of it) addresses a certain quality attribute.
What are faults, errors and failures?
A fault is a abnormal condition of a part of the system, might cause the system to behave unexpectedly
A failure is an observable deviation from the expected behavior of a system
An error is an intermediate state of the system between a faults occurrence and it becoming visible as a fault