Software Engineering - Unit III Notes
Software Engineering - Unit III Notes
Software architecture plays a vital role in software engineering, serving as the foundation for the
successful design, development, and maintenance of complex software systems. It addresses both
technical and non-technical aspects, shaping the system's structure and guiding its evolution.
Here’s a detailed explanation of its key roles:
Software architecture acts as a high-level blueprint that outlines the organization of the system's
components and their interactions. It provides a roadmap for developers, ensuring consistency in
design and implementation, and sets the stage for coding, testing, and maintenance activities.
Without a clear architecture, systems can become chaotic and difficult to manage.
2. Managing Complexity
Large software systems are inherently complex, involving many interacting parts. Software
architecture helps manage this complexity by breaking the system down into manageable
components, modules, or services, each with defined responsibilities. It defines the relationships
between these elements, making it easier to understand, modify, and maintain the system over
time.
Performance
Scalability
Security
Maintainability
Reliability
Decisions made at the architectural level can significantly impact these attributes. For example,
choosing an event-driven architecture can enhance scalability, while a layered architecture may
improve maintainability and separation of concerns.
4. Facilitating Communication
Architecture serves as a common language for various stakeholders (e.g., developers, business
analysts, project managers) to discuss system structure and functionality. It helps bridge the gap
between technical and non-technical perspectives, ensuring that everyone involved has a shared
understanding of the system's design, goals, and constraints.
6. Supporting Reuse
Architecture promotes the reuse of components, modules, and patterns across different parts of the
system or even across different projects. By creating well-defined, modular components with clear
interfaces, developers can reuse existing functionality, speeding up development and ensuring
consistency across systems.
7. Risk Mitigation
By defining key architectural decisions early in the software development lifecycle, architects can
identify and mitigate potential risks such as performance bottlenecks, security vulnerabilities, or
scalability issues. This proactive approach helps avoid costly mistakes later in the development
process.
8. Guiding Decision-Making
Finally, software architecture aligns technical decisions with business objectives. By addressing
key concerns such as scalability, cost-effectiveness, and time-to-market, architecture ensures that
the software solution not only meets technical requirements but also contributes to the overall
success of the business.
Conclusion
Software architecture is the backbone of successful software engineering. It defines the structure
of the system, ensures that quality attributes are met, and provides a foundation for long-term
maintenance and scalability. Its role extends beyond technical concerns, serving as a
communication tool, a risk management strategy, and a guide for decision-making throughout the
software development process.
The C&C View focuses on the dynamic relationships and runtime interactions of the system. It
shows how components (such as software objects, services, or databases) interact with each other
via connectors (like communication protocols, message passing, or function calls). The focus is on
the behavior of the system.
Components:
Connectors:
Types of Connectors: Pipes, HTTP requests, RESTful APIs, remote procedure calls (RPC), message
queues, etc.
In this example:
2. Module View
The Module View describes the static structure of the system. It shows how the system is divided
into modules (logical groups of code), and how these modules are related to each other.
Modules: Represent logical groupings of code such as classes, libraries, packages, etc.
Dependencies: Show relationships between modules, such as how one module relies on another.
In this example:
Key Differences:
C&C View focuses on runtime behavior and interactions between the components.
Module View focuses on the static organization of the code and its logical structure
Here’s an overview of various software architecture styles and processes, including Pipe-and-
Filter, Shared Data, Client-Server, as well as the concepts of Documenting Architecture
Design and Evaluating Architecture in terms of Software Engineering:
1. Pipe-and-Filter Architecture
Example:
Drawbacks:
The system may become slow due to data transfer between filters.
Not suitable for systems requiring a lot of shared state or interaction between filters.
The Shared Data style (also known as the Repository architecture) consists of a central data store
(repository) that is accessed and updated by various components.
Example:
In a database-centric application, all subsystems share and manipulate the data stored in a
common database. For example, multiple services in a banking system (like balance inquiry,
transaction history, loan status) access and update a shared database.
Benefits:
Drawbacks:
If the central data repository fails, the entire system may go down.
Communication overhead increases as components must frequently interact with the repository.
3. Client-Server Architecture
In a web application, the client is the user’s browser, and the server is a web server that processes
requests and serves data.
Benefits:
Drawbacks:
Best Practices:
Evaluating software architecture is critical to ensure that the system meets its quality attributes
such as performance, security, and maintainability. Key criteria include:
1. Performance:
Scalability: How well the system handles increasing loads (e.g., more users, more data).
Latency: The time delay experienced by users or components while interacting with the system.
2. Maintainability:
3. Security:
4. Reliability:
Fault Tolerance: Can the system continue to operate even if some components fail?
Redundancy: Are there backup systems or processes in case of failure?
5. Testability:
Can the system be easily modified to meet new requirements or to scale with growing data or
user demands?
1. Understand the Importance of Planning: Recognize how a detailed plan impacts project success.
2. Establish Clear Goals: Define measurable project objectives and deliverables.
3. Estimate Effort Accurately: Predict the time and resources needed for project completion.
4. Develop an Execution Strategy: Plan the work breakdown, scheduling, resource allocation, and
risk management.
5. Monitor and Adjust Plans: Use metrics and tools to track progress and update the plan as needed.
Effort Estimation:-
Effort estimation is the process of predicting how much time, effort, and resources will be required
to complete a project or task. Accurate estimates are crucial for:
Complexity of tasks.
Skills and experience of the team.
Use of tools and technology.
Historical data from similar projects.
The top-down estimation approach starts by evaluating the project as a whole and then breaking
it down into smaller components.
Characteristics:
1. High-Level Estimation: Begins with an overall estimate based on project size, scope, and historical
data.
2. Simplistic and Quick: Useful during the early phases of the project when detailed information is
unavailable.
3. Based on Analogies: Often uses experience or comparisons with similar past projects.
Advantages:
Limitations:
The bottom-up estimation approach starts by estimating individual tasks and then summing them
up to derive the overall project estimate.
Characteristics:
1. Task-Level Estimation: Breaks the project into smaller components, such as tasks or deliverables.
2. Detailed and Comprehensive: Requires in-depth knowledge of the project and its requirements.
3. Collaborative Process: Often involves input from team members responsible for specific tasks.
Advantages:
Limitations:
Project Schedule:
The project schedule defines the timeline of activities, milestones, and deliverables to complete
the project.
Staffing:
Involves allocating team members to tasks based on their skills, experience, and availability.
Key Considerations:
o Skill Matching: Assign tasks to team members with the necessary expertise.
o Team Size: Balance team size to avoid overcrowding or resource shortages.
o Effort Distribution: Avoid overburdening team members.
2. Quality Planning:-
Quality planning ensures that the project meets defined quality standards.
Steps:
1. Identify quality standards based on user requirements (e.g., ISO, Agile principles).
2. Define measurable quality goals (e.g., fewer than X defects per module).
3. Develop quality assurance (QA) and quality control (QC) processes (e.g., code reviews,
testing).
4. Plan for tools and resources needed for quality management.
Key Outputs:
o Test plans
o Review checklists
o Quality metrics
Risk management identifies, assesses, and mitigates potential risks that could impact the project.
1. Risk Identification:
o Use brainstorming, checklists, and historical data to list potential risks.
o Example risks: resource shortages, changing requirements, technical issues.
2. Risk Assessment:
o Likelihood: Determine the probability of each risk.
o Impact: Assess the potential severity of each risk.
o Risk Matrix: Combine likelihood and impact to prioritize risks.
3. Risk Control:
o Mitigation: Develop strategies to reduce the impact or likelihood of risks.
o Contingency: Plan actions to take if the risk materializes.
The project monitoring plan ensures progress aligns with the schedule and objectives.
Components:
1. Define measurable metrics (e.g., task completion percentage, defect rate).
2. Set regular intervals for status reporting (e.g., weekly updates).
3. Use tools like dashboards, reports, and Kanban boards for tracking.
5. Measurement:-
Monitoring and tracking ensure the project stays on course and deviations are addressed
promptly.
Steps:
1. Compare actual progress with the plan.
2. Identify deviations (e.g., delays, cost overruns).
3. Take corrective actions to address issues.
Tools:
o Agile boards (e.g., Jira)
o Earned Value Management (EVM)
o Burn-down and burn-up charts
7. Detailed Scheduling
Steps:
1. Break tasks into smaller sub-tasks.
2. Define task dependencies and resource requirements.
3. Assign team members to each task.
4. Create a timeline for each sub-task.
5. Continuously update the schedule based on progress and changes.
Output: A granular, step-by-step execution plan.