Software Engineering Personal Notes
Software Engineering Personal Notes
Key Concepts:
Managing Complexity: Modern software systems are large and complex. A structured
engineering approach helps in managing this complexity by breaking the system into
smaller, manageable modules.
Reducing Development Costs: By using systematic approaches, software engineering
helps to avoid costly mistakes or rework, thus reducing overall project costs.
Improving Product Quality: Engineering principles ensure that the software is reliable,
secure, and meets customer expectations.
Facilitating Team Collaboration: Clear processes, documentation, and well-defined
roles facilitate better teamwork and coordination across diverse project teams.
1. Waterfall Model:
o Sequential Phases: The Waterfall model is a linear approach where each phase
(Requirements → Design → Implementation → Testing → Deployment →
Maintenance) must be completed before moving to the next one.
o Advantages: Easy to understand and manage. It’s good for small projects with
well-understood requirements.
o Disadvantages: It is inflexible because once a phase is completed, it’s difficult to
go back and make changes. This can cause problems if requirements change later
in the project.
2. Agile Model:
o Iterative Development: Agile is a flexible, iterative approach where
development is divided into small cycles (called sprints). Each sprint delivers a
potentially shippable product increment.
o Advantages: Agile allows for continuous customer feedback and adaptability to
changing requirements. Teams can deliver working software quickly.
o Disadvantages: Agile requires constant customer involvement and less emphasis
on comprehensive documentation. It might not suit projects where requirements
are well-defined at the beginning.
3. Spiral Model:
o Iterative with Risk Analysis: Combines iterative development with risk
management. The process goes through multiple cycles (spirals), each focusing on
refinement and risk reduction.
o Advantages: Excellent for large, high-risk projects, as it allows for risk
assessment and mitigation throughout development.
o Disadvantages: It’s complex, expensive, and requires significant management
expertise.
4. V-Model:
o Testing Focused: The V-Model is an extension of the Waterfall model. For every
development stage, there is a corresponding testing phase, creating a “V” shape in
the process diagram.
o Advantages: Focuses on early testing at each stage of development.
o Disadvantages: Inflexible and rigid, similar to the Waterfall model, making it
difficult to adapt to changes in requirements.
5. DevOps:
o Development and Operations Integration: DevOps promotes collaboration
between development and operations teams through automation of tasks like
integration, testing, and deployment.
o Advantages: Continuous delivery of software, faster updates, and reliable,
frequent releases. DevOps helps bridge the gap between coding and deployment,
reducing delays.
Requirement Types:
Functional Requirements: These specify the actions or functions the software must
perform. For example, if you are building an e-commerce website, a functional
requirement could be "The system shall allow users to add items to a shopping cart."
These requirements focus on what the system should do.
Non-functional Requirements: These specify constraints on the system, such as
performance, security, or usability. For example, "The system must handle 10,000
concurrent users without performance degradation" or "The system should be available
99.9% of the time."
4. Software Design
Key Concepts:
Architectural Design: This is the high-level design of the software, where major
components and their interactions are defined. For example, defining the client-server
architecture or deciding on whether to use microservices. The focus is on how the system
will be structured to meet functional and non-functional requirements.
Modular Design: The practice of breaking down the software into independent modules,
each responsible for a specific functionality. This promotes code reusability, easier
testing, and maintenance.
Design Patterns:
5. Software Testing
Testing Levels:
Types of Testing:
Manual Testing: Performed by human testers who execute test cases manually without
automation tools.
Automated Testing: Testing is performed using tools like Selenium, JUnit, or others.
Automation helps in repetitive testing and running tests faster.
Regression Testing: This ensures that new changes or enhancements haven’t affected
the existing functionality of the system.
6. Software Maintenance
Types of Maintenance:
Corrective Maintenance: Fixing bugs and errors discovered in the software post-
deployment.
Adaptive Maintenance: Updating the software to ensure it works in new environments,
such as adapting to a new operating system.
Perfective Maintenance: Involves adding new features or improving performance based
on user feedback.
Preventive Maintenance: Making changes to prevent future problems, like refactoring
the code to improve readability or efficiency.
7. Software Project Management
Key Aspects:
Planning: Establishing the project scope, defining goals, setting a timeline, and outlining
deliverables. A clear plan helps manage time, budget, and resources effectively.
Risk Management: Identifying potential risks (e.g., changing requirements, technical
difficulties) and developing strategies to mitigate them.
Quality Assurance: Ensuring the software meets the quality standards and customer
requirements through continuous testing and refinement.
JIRA, Trello: These are tools that help in tracking tasks, bugs, and project progress,
especially in Agile development environments.
Version Control Systems (e.g., Git): Help in tracking changes in the codebase,
facilitating collaboration among developers, and managing different versions of the
software.
Continuous Integration (CI) Tools: Tools like Jenkins or GitLab CI automate the
process of testing and integrating code changes, ensuring that new changes do not break
the build.
8. Software Metrics
Types of Metrics:
Process Metrics: These metrics assess the development process itself, such as the time
taken to fix bugs or the velocity of completing tasks in Agile projects.
Product Metrics: These metrics focus on the software product, such as measuring code
complexity, reliability, and maintainability.
Project Metrics: These metrics assess the efficiency of project management, such as
cost, time, and resources spent on developing the software.
Ethical Concerns: