Unit 1
Unit 1
WHAT IS A SOFTWARE?
◼ Custom-Built Nature:
1. Most software is specially designed to meet specific needs.
2. It’s often not just a combination of pre-existing components but
requires unique coding and design.
◼ Intangibility of Software:
1. Software can’t be touched or handled physically.
2. It exists as code and functions within computers or digital devices.
MAJOR PROBLEMS IN SOFTWARE DEVELOPMENT
◼ Inadequate Requirements Gathering:
1. Ambiguous or incomplete requirements
2. Lack of communication between stakeholders
◼ Poor Project Management:
1. Inadequate planning, monitoring, and control
2. Lack of risk assessment and mitigation
3. Multiplicity of software development life cycles
4. Selection of wrong technology or tool for development
◼ Insufficient Time and Budget:
1. Unrealistic deadlines and resource constraints
2. Inefficient resource allocation and prioritization
◼ Lack of Skilled Personnel:
1. Inadequate expertise in the development team
2. High turnover rates and loss of experienced staff
◼ Resistance to Change:
1. Difficulty in adapting to new technologies or processes
2. Reluctance to modify established practices or mindsets
3. Rapid technology advancement
SIMILARITIES AND DIFFERENCE BETWEEN SOFTWARE ENGINEERING
AND CONVENTIONAL ENGINEERING
◼ Nature of the Product
• Similarity: Both aim to create high-quality, reliable products.
• Difference:
• Conventional engineering deals with physical systems (e.g.,
mechanical, electrical).
• Software engineering focuses on intangible software systems
(e.g., programs, applications).
◼ Design Flexibility and Iteration
• Similarity: Both involve iterative design and prototyping.
• Difference:
• Software engineering allows for greater flexibility and easier
modification because software is non-physical.
• Conventional engineering involves physical components, making
changes more complex and costly.
◼ Quality Assurance and Testing
• Similarity: Both emphasize testing and quality assurance to ensure
performance and reliability.
• Difference:
• Conventional engineering involves physical testing on
prototypes.
• Software engineering relies on various types of software testing,
such as unit testing, integration testing, and system testing.
◼ Project Management and Collaboration
• Similarity: Both require effective project management, teamwork,
and communication among stakeholders.
• Difference:
• Conventional engineering relies on physical collaboration in
workplaces like factories or offices.
• Software engineering often involves distributed teams and
heavily depends on digital collaboration tools like Slack, Jira, and
GitHub.
◼ Maintenance and Evolution
• Similarity: Both involve maintenance and support activities to
ensure the ongoing performance and reliability of the product.
• Difference:
• Conventional engineering: Maintenance is less frequent, with
scheduled check-ups and repairs.
• Software engineering: Requires frequent updates, patches, and
continuous evolution due to rapidly changing technology and
user requirements.
Hardware Failure (Bathtub Curve)
•Follows a bathtub-shaped curve:
• Burn-in Phase: High initial failure rate due to
manufacturing defects.
• Useful Life: Stable failure rate during the normal operation
period.
• Wear-out Phase: Failures increase due to aging and
degradation.
Software Failure (Early Failure Curve)
•No physical wear-out like hardware.
•Follows a steep decreasing curve:
• High failure rate initially (due to bugs and errors in early
releases).
• Failure rate decreases over time as patches and updates
improve stability.
KEY SOFTWARE QUALITY ATTRIBUTES
1. Correctness – The ability of the software to perform its intended tasks
effectively and meet user requirements.
2. Usability – The ease with which users can learn, operate, and navigate the
software.
3. Reliability – The software’s consistency in producing accurate results and
maintaining performance over time.
4. Efficiency – The optimal use of system resources, such as memory and
processing power, to achieve desired outcomes.
5. Maintainability – The ease of updating, modifying, and fixing the software to
accommodate changing requirements or fix issues.
6. Portability – The ability of the software to operate on different platforms or
environments without significant modification.
7. Scalability – The software’s capacity to handle increased workloads or users
without compromising performance.
8. Security – The software’s ability to protect against unauthorized access, cyber
threats, and other potential risks.
9. Modularity – The degree to which the software's components are organized into
separate, manageable units that can be independently developed or updated.
10. Reusability – The potential for the software's components to be used in other
applications or contexts, reducing development time and costs.
11. Testability – The ease with which the software can be tested to ensure it meets
its requirements and performs as expected.
SOFTWARE PROCESSES
◼ Feasibility Study
◼ Evaluating whether the proposed software project is practical and viable.
◼ Key Aspects:
• Problem Definition: Understanding the abstract problem the software aims to
solve.
• Financial & Technical Feasibility: Checking cost, budget, and technical resources.
• Resource Availability: Assessing infrastructure and human resource needs.
• Alternative Solutions: Exploring different approaches to solving the problem.
◼ Requirement Analysis and Specification
◼ Understanding and documenting the exact requirements of the customer.
◼ Key Steps:
• Understanding Requirements: Gather and analyze all data related to the project.
• Requirement Documentation: Create a Software Requirement Specification
(SRS) document.
• SRS Document Contents:
• What the system will do (not how it will do it).
• Critical Phase: Errors here can impact later development stages significantly
◼ Software Design
◼ Transforming requirements into a structured format suitable for coding.
◼ Key Steps:
• System Architecture & Algorithmic Strategy:
• Define high-level architecture (e.g., layers, modules).
• Choose algorithmic strategies
• Software Design Description (SDD):
• A document describing how the system will function.
• Helps developers implement the system efficiently.
◼ Coding or implementation
◼ Convert the system design into an executable program using a programming
language.
◼ Key Aspects:
• Maintainability: Write clean, modular, and readable code.
• Efficiency: Optimize code for performance and resource usage.
• Testing & Debugging: Ensure the code functions correctly and is easy to
modify.
• Best Practices: Follow coding standards, documentation, and version control.
◼ Software Testing
◼ 🔹 Purpose: Identify and fix bugs/errors before deployment.
🔹 Key Aspects:
• Bug Detection: Finding faults caused by human errors.
• Failure Prevention: Ensuring software runs correctly under different
conditions.
• Types of Testing:
• Unit Testing: Testing individual components.
• Integration Testing: Ensuring modules work together.
• System Testing: Validating the complete system.
• Acceptance Testing: Checking if software meets user requirements.
◼ Deployment Phase
◼ Deploy the software to the user environment.
🔹 Key Steps:
• Installation: Software is set up on user systems.
• Configuration: Ensuring compatibility with hardware and existing
systems.
• User Training: Teaching users how to operate the software
efficiently.
• Initial Testing: Verifying that the software runs correctly
post-installation.
◼ Software Maintenance
◼ 🔹 Definition: Any change made to software after its release.
🔹 Types of Maintenance:
• Adaptive: Updating software to work with new environments or
platforms.
• Corrective: Fixing bugs or errors reported by users.
• Perfective: Improving performance, adding new features, or
enhancing usability.
Software Development Life Cycle (SDLC)
1. Planning & Requirement Analysis (Stage 1 - Green)
This phase ensures the project is feasible and aligns with business needs.
Sub-Steps:
✅ Planning – Identify objectives, budget, and resources.
✅ Define Project Scope – Determine what the software will and will not do.
✅ Set Objectives and Goals – Define what success looks like.
✅ Resource Planning – Assign developers, testers, and tools.
2. Defining Requirements (Stage 2 - Yellow-Green)
This step formalizes software needs into documents.
Sub-Steps:
✅ Defining – Write down what the software must do.
✅ Functional Requirement – Specify system behavior (e.g., login, transactions).
✅ Technical Requirement – Define technology stack (e.g., database, server, APIs).
✅ Requirement Reviews & Approval – Validate and finalize requirements.
High Level Low Level
Design Design
3. Design (Stage 3 - Red)
Sub-Steps:
Sub-Steps:
Sub-Steps:
Sub-Steps:
◼ Waterfall Model
◼ Prototype Model
◼ Spiral Model
◼ V Model
◼ Agile Model
◼ Evolutionary Development Model
◼ Iterative enhancement model
Waterfall
Model
Waterfall Model in Software Development
Advantages
◼ Easy to Understand Disadvantages
◼ Step-by-Step Process ◼ No Feedback Path
◼ Well-Defined Stages ◼ Difficult to Accommodate
◼ Clear Goals Change Requests
◼ Good Documentation ◼ No Overlapping of Phases
◼ Encourages Best ◼ Limited Flexibility
Practices ◼ Limited Stakeholder
◼ Works for Simple Involvement
Projects ◼ Late Defect Detection
◼ Lengthy Development Cycle
Agile Model in Software Development 🚀
● The team discusses requirements and breaks them into small, manageable tasks.
● Work is planned in short development cycles called Sprints (typically 1-4 weeks).
Advantages Disadvantages
◼ Phase Containment of Errors ◼ Difficult to Incorporate
◼ Collaboration Change Requests
◼ Flexibility ◼ Incremental Delivery Not
◼ Testing and Feedback Supported
◼ Faster Time to Market ◼ No Overlapping of Phases
◼ Risk Reduction ◼ Risk Handling Not Supported
◼ Limited Customer Interactions
Spiral Model
Spiral Model in Software Development 🔄
The Spiral Model is a risk-driven, iterative software development model that
combines elements of the Waterfall Model and Prototyping. It is best suited for
large, complex, and high-risk projects where frequent changes are expected.
How the Spiral Model Works?
The Spiral Model consists of four phases, which are repeated in a spiral form until the
project is completed. Each loop (or iteration) of the spiral represents one phase of
development.
✅ The process continues in multiple spirals until the final product is ready!
WHY IS THE SPIRAL MODEL CALLED A META-MODEL?
Advantages
◼ Risk Handling Disadvantages
◼ Good for Large Projects ◼ Complex
◼ Flexibility in Requirements ◼ Expensive
◼ Customer Satisfaction ◼ High Dependence on Risk
◼ Iterative and Incremental Analysis
Approach ◼ Difficulty in Time
◼ Emphasis on Risk Management Management
◼ Improved Communication ◼ Time-Consuming
◼ Improved Quality ◼ Resource Intensive
V MODEL
V-Model (Verification and Validation Model) in Software
Development ✅🔄
The V-Model (Validation and Verification Model) is a structured software development
methodology that follows a sequential process, similar to the Waterfall Model, but with a strong
focus on testing at every stage.
It is called the V-Model because its process forms a “V” shape, where the left side represents
development stages (Verification) and the right side represents testing stages (Validation).
🛠 Phases of the V-Model
🔹 Left Side (Verification - Development Phases)
Verification ensures that each phase is correctly executed before moving forward.
System Design 🏗
Requirements Analysis 📝
● Gather software & system requirements
● Create high-level architecture of the
from stakeholders. system.
● Clearly define what the system should ● Define modules, data flow, interfaces,
do. and communication.
Unit Testing 🧪
Integration Testing 🔄
● Tests individual components/modules of
● Tests interactions between multiple
the system. modules.
Develops a working
prototype and gradually
improves and refined that
until it evolves into the
final product over time
INCREMENTAL PROTOTYPING
● Module by Module working
● Customer Interaction Maximum
● Large Projects
● Chances of error are very less
● Early Release Product demand
THROWAWAY PROTOTYPING
Also known as Rapid or exploratory prototyping, involves creating a temporar, simplified version of the
software to validate the feasibility of specific features, test ideas, or gain user feedback on the initial design.
The throwaway prototype is not intended to be used in the final product; instead , it is discarded once it has
served the purpose.
Model When to Use?
Waterfall Model When requirements are well-defined, stable, and unlikely to change. Suitable
for small projects with clear scope.
Prototype Model When requirements are unclear or evolving. Useful for UI/UX-intensive
applications.
Spiral Model When high-risk projects need frequent evaluation. Suitable for large, complex
projects with changing requirements.
V-Model (Validation & Verification When high reliability and rigorous testing are required, such as in healthcare,
Model) aerospace, or safety-critical systems.
Agile Model When rapid development is needed, and requirements change frequently. Ideal
for startups and dynamic projects.
Evolutionary Development Model When requirements are unclear and need progressive refinement over multiple
releases.