Software Engineering
Software Engineering
SOFTWARE ENGINEERING
UNIT 1:
Chapter-2 Software Life Cycle Models: Basic concepts, Waterfall model and its
extensions, Rapid application development, Agile development model, Spiral model.
Introduction:
● Similar to other fields like iron-making and civil engineering, software engineering
transitioned through three stages:
1. Art: A few individuals possessed specialized knowledge, often kept as a
secret.
2. Craft: Knowledge was shared among apprentices and improved through
practice.
3. Engineering Discipline: Standardized principles and scientific methods
were applied for systematic development.
● This transition allowed for better predictability, efficiency, and maintainability in
software development.
→ This section discusses different types of software development projects and how
professional software differs from toy programs written by students or hobbyists.
Even though software engineering principles are primarily intended for professional
software, small programs can also benefit from them.
The type of projects a company takes on affects its profitability and business risk:
5
● This style does not offer any rules to start developing software . Bugs are fixed
whenever they raises
● The human brain has a limited short-term memory, which can hold around 7
± 2 items at a time.
8
● When problem size increases, the number of elements to track exceeds the
brain’s capacity, making it difficult to manage complexity.
● This explains why exploratory development leads to exponentially
increasing effort and time as software grows larger.
● Early commercial computers were slow and primitive, limiting the complexity of
programs.
● Programs were written in assembly languages, typically consisting of a few
hundred lines of monolithic code.
● Programmers followed an ad hoc, build-and-fix approach, writing code based on
intuition without planning or design.
● Issues:
○ Poor maintainability.
○ High effort required for debugging and modifications.
○ Limited program size and functionality.
● With the rise of integrated circuits (ICs) in the 1970s, software needed to handle
larger and more complex problems.
● Focus shifted from control flow to data structure-oriented design.
● Key idea: First design the data structures, then build program logic around them.
● Example methodology:
○ Jackson Structured Programming (JSP) – First design the data structure,
then derive the program logic.
● Benefits:
○ Allowed better organization of large software projects.
○ Facilitated code reuse and modularization.
● Limitations:
○ Still not suitable for large-scale software projects.
○ Lacked a systematic approach to manage complex data interactions.
● As computers became faster with VLSI (Very Large Scale Integration) circuits,
more sophisticated software was needed.
● Data flow-oriented design introduced the idea of tracking data movement instead
of just focusing on control flow.
● Key Concept:
○ Identify major data items and determine the processing required to
transform them into the desired output.
○ Represent data interactions using Data Flow Diagrams (DFDs).
● Example:
○ A car assembly plant can be modeled using a DFD, where each
workstation represents a process that modifies data (similar to a function
in software).
● Advantages of DFDs:
○ Simple and easy to understand.
○ Can be applied to both software and real-world processes.
○ Helps in breaking down complex systems into smaller modules.
● This approach laid the foundation for structured software design methodologies.
● Advantages of OOD:
○ Better modularity – Code is divided into independent objects.
○ Reusability – Objects and classes can be reused across projects.
○ Easier maintenance – Code modifications are localized to specific objects.
○ Faster development – Encourages code reuse and reduces redundancy.
● Languages like C++, Java, and Python popularized OOD and made it the
dominant paradigm for modern software development.
Hardware-Software Partitioning:
One key decision in systems engineering is determining which parts of a system should
be implemented in hardware and which in software. Several trade-offs are considered:
After both components are built, they are integrated and tested together. Project
management is crucial throughout the entire process to ensure efficient coordination
between hardware and software teams.
Summary of Chapter 1
This chapter introduced software engineering as a discipline and traced its evolution
from an intuitive art to a structured engineering approach.
Key Points: