Unit I

Introduction to Software Engineering

Understanding the discipline of software engineering — its evolution, principles, and foundational design approaches that guide modern software development.

🔬 What is Software Engineering?

Software Engineering is the systematic application of engineering principles to the development, operation, and maintenance of software. It bridges computer science theory and practical software construction.

IEEE Definition: The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software — that is, the application of engineering to software.

Why is it a Discipline?

⚖️ Program vs Software

Program

  • Written by a single person
  • No formal documentation
  • Not designed for reuse
  • No quality guarantee
  • No maintenance plan
  • Small scope

Software

  • Developed by a team
  • Full documentation required
  • Designed for reuse & extension
  • Quality assured via testing
  • Maintained post-deployment
  • Large scale, complex

📈 Evolution & Impact of SE

The field emerged in the late 1960s during the "Software Crisis" — a period when large software projects frequently failed, went over budget, or delivered poor quality.

Timeline of Software Engineering Evolution
1960s Software Crisis 1970s Structured Programming 1980s OOP & CASE Tools 1990s Internet & UML 2000s+ Agile & DevOps

Impact of Software Engineering

🏗️ Design Approaches

As SE evolved, different design approaches emerged to address the growing complexity of systems. Each focuses on a different abstraction model.

1. Control-Based Design

Focuses on the flow of control in a program — how execution moves from one statement to another. Uses structured programming constructs: sequence, selection (if/else), and iteration (loops).

2. Data Structure–Oriented Design (DSOD)

Structures the program design around the data structures it processes. Jackson Structured Programming (JSP) is a classic example — program structure mirrors input/output data structure.

3. Data Flow–Oriented Design (DFOD)

Models a system as a set of processes that transform data. Uses Data Flow Diagrams (DFDs) to show how data moves through the system.

4. Object-Oriented Design (OOD)

Models the system as a collection of interacting objects — each combining data and behavior. Foundation of modern software engineering.
OOP Core Concepts
Encapsulation Bundle data & methods together Abstraction Hide complexity, show essentials Inheritance Reuse parent class properties Polymorphism Same interface, different behavior
ApproachFocusKey Tool
Control-BasedExecution flowFlowcharts
Data Structure-OrientedData structuresJackson Diagrams
Data Flow-OrientedData transformationDFDs
Object-OrientedObjects & interactionsUML