Software Engineering
1. Definition
Software engineering is the systematic application of engineering principles,
methods, and tools to the development and maintenance of high-quality software
systems.
2. Purpose
To produce:
Reliable software that meets user needs
Efficient software that optimizes resource use
Maintainable software that can be easily updated
Cost-effective software that fits budget constraints
3. Programs vs Software Products
3.1 Program
Characteristics:
Developed for personal use or a limited audience
Focused mainly on functionality, with little or no documentation
Example: A student writing a calculator app for their own use
3.2 Software Product
Characteristics:
Developed for commercial or organizational use by multiple users
Includes documentation, support, and maintenance
Must meet quality standards and work across environments
Example: MS Word, billing software for a company
Characteristics of Software Product
1. Correctness: The software must perform as specified without errors.
2. Reliability: The ability to operate without failure under specified conditions.
3. Efficiency: Optimal use of system resources such as CPU time and memory.
4. Integrity: Protection from unauthorized access or modification.
5. Usability: Ease of use for end-users.
6. Maintainability: Ease of modification to fix defects or improve performance.
7. Testability: Extent to which the software can be tested for defects.
8. Portability: Ability to run on different platforms with minimal changes.
9. Reusability: Degree to which parts can be used in other applications.
10. Interoperability: Capability to interact with other systems or products.
Aspect Program Software Product
A small, single-purpose set of A comprehensive solution built via all SDLC stages
Definition
instructions (GeeksforGeeks)
Much longer (months to years) (Bench Partner,
Development Speed Very quick (minutes to a day)
Shiksha)
Minimal, often just code Extensive: user manuals, design docs, training
Documentation
comments materials (Ahir Labs, Shiksha)
Systematic, planned, follows SDLC (Ahir Labs,
Development Approach Ad-hoc, unstructured
GeeksforGeeks)
Single developer or very small Experienced team with roles for design, QA,
Developer Team
team documentation (Ahir Labs, GeeksforGeeks)
Usually the developer Multiple end users, clients, or public (Ahir Labs,
User Base
themselves Bench Partner)
Limited testing, Thorough testing & QA ensure reliability (Ahir
Reliability & Testing
ad-hoc reliability Labs, Bench Partner)
Rich, multi-featured, complex features (Ahir Labs,
Features & Complexity Simple, limited functionality
Shiksha)
Full GUI or CLI with polished design (Ahir Labs,
User Interface Often no UI or very basic
Shiksha)
Large (MB to GB), many integrated components
Size & Scope Small (KB to few MB)
(Ahir Labs, Shiksha)
Address broader problems, packaged for
Purpose Solve a specific task
distribution (GeeksforGeeks, Wikipedia)
Ongoing support, updates, maintenance cycles
Maintenance Minimal or one-time use
(GeeksforGeeks, Wikipedia)
Software Crisis
1. Definition
Software crisis refers to problems faced during software development and
maintenance, especially as systems become larger and more complex.
2. Causes
Key causes include:
Rapid increase in demand for complex software systems
Inadequate project management and planning
Lack of standardized development methods
Poor communication between stakeholders and developers
Underestimation of complexity and resources needed
Difficulty in managing changing requirements
3. Symptoms
Common symptoms include:
Software delivered late or over budget
Software that fails to meet user requirements
Low reliability and frequent failures
High maintenance costs
Incomplete or missing documentation
Difficulty in adapting software to new needs
4. Impact
Negative impacts include:
Loss of customer trust and market reputation
Increased costs for maintenance and bug fixes
Wastage of development resources
Reduced productivity of development teams
5. Solution Approaches
Effective solutions include:
Adoption of systematic software engineering practices
Use of structured analysis and design methods
Better project management techniques
Improved requirement gathering and validation
Emphasis on documentation and quality assurance
Use of modern tools, techniques, and frameworks
Software Development Life Cycle (SDLC)
1. Definition
SDLC is a structured sequence of stages that defines how software is:
Planned, developed, tested, deployed, and maintained.
Ensured that software is delivered systematically, with quality and efficiency.
2. Objectives
Deliver high-quality software that meets or exceeds customer expectations.
Complete projects within time and budget constraints.
Ensure maintainability, scalability, and reliability of the product.
3. Phases of SDLC
Requirement Analysis
o Identify and gather user needs.
o Document functional and non-functional requirements.
System Design
o Convert requirements into architecture and design specifications.
o Prepare data flow diagrams, ER diagrams, and interface designs.
Implementation (Coding)
o Translate design into source code.
o Follow coding standards and documentation practices.
Testing
o Verify that the system meets requirements.
o Identify and fix defects through unit testing, integration testing, and
system testing.
Deployment
o Install and configure the software in the target environment.
o Provide user training and documentation.
Maintenance
o Perform bug fixes, updates, and enhancements after release.
o Adapt software to new requirements and environments.
4. Importance of SDLC
Provides a clear project roadmap.
Reduces the risk of project failure.
Improves software quality and maintainability.
SDLC Process Models
1. Linear Sequential Model (Waterfall Model)
Definition: The oldest and most traditional software process model. Development
proceeds in a fixed sequence where each phase must be completed before the next
starts.
Phases:
Requirements
Design
Coding
Testing
Deployment
Maintenance
Advantages:
Simple and easy to understand
Well-suited for small projects with clearly defined and stable requirements
Each phase has specific deliverables and review processes
Disadvantages:
Inflexible to changes after the process starts
No working software is available until late in the project
High risk and uncertainty for complex projects
2. Prototyping Model
Definition: A prototype (early working version) of the software is built quickly to
understand requirements and get user feedback. The prototype is refined until it meets
user expectations.
Steps:
Requirements gathering
Quick design
Build prototype
User evaluation
Refinement
Final product
Advantages:
Early user involvement and feedback
Reduces risk of misunderstanding requirements
Helps in identifying missing or confusing functionalities early
Disadvantages:
Can lead to scope creep if users keep requesting changes
Prototype might be mistaken for the final system
May lead to poor design if quick fixes dominate
3. Incremental Model
Definition: The software is developed in multiple small increments, each delivering
part of the total functionality. Each increment builds upon the previous one.
Steps:
Requirement analysis
Design for first increment
Development
Testing
Delivery
Repeat for next increment
Advantages:
Working software is available early
Easier to test and debug smaller parts
Flexible to changes between increments
Disadvantages:
Requires detailed planning and design for the entire system
Integration between increments can be complex
May increase total cost if too many increments are used
4. Spiral Model
Definition: Combines iterative development with risk analysis at every stage. The
process is represented as a spiral with repeated cycles of planning, risk assessment,
engineering, and evaluation.
Phases in each loop:
Planning
Risk Analysis
Engineering
Evaluation
Advantages:
Effective for large, complex, and high-risk projects
Incorporates risk management in every phase
Allows changes at later stages without heavy impact
Disadvantages:
Expensive to implement
Requires expertise in risk management
Complex to manage compared to simpler models
5. Evolutionary Model
Definition: The system evolves over time through continuous refinement based on
user feedback. Similar to prototyping but focused on gradual enhancement of a
working system.
Approach:
Start with minimal functionality
Deploy