Introduction to Software
Engineering
• Engineering approach to software
development
• Programs vs Software Products
• Evolution of Software Engineering
• Life Cycle Models Overview
Software Engineering Basics
• Uses past experience, techniques,
methodologies
• Cost-effective and systematic development
Problems with Exploratory Style
• Works only for small programs
• Exponential effort & cost growth
• Leads to unmaintainable code
Human Cognition Limits
• Short-term memory limit (~7 items)
• Chunking helps manage complexity
• Large programs exceed cognitive limits
Principles to Overcome Limits
• Abstraction – hide unnecessary details
• Decomposition – break problems into smaller
parts
Why Study Software Engineering?
• Handle large software projects
• Higher productivity & quality
• Learn specification, design, testing,
management
Software Crisis
• Systems fail to meet requirements
• Expensive, buggy, late delivery
• Poor maintainability
Programs vs Software Products
• Small vs large size
• One user vs many users
• Ad hoc vs systematic development
Evolution of SE Techniques
• Control-flow based design (1960s)
• Data structure-based design (1970s)
• Data flow-based design (late 1970s)
• Object-oriented design (1980s)
Structured Programming
• Sequence, selection, iteration
• Avoid GOTO statements
• Produces readable, maintainable code
Modern Development Practices
• Use of life cycle models
• Error prevention over correction
• Systematic testing and documentation
• Project planning & metrics
Software Life Cycle Models
• Feasibility → Requirements → Design →
Coding → Testing → Maintenance
• Waterfall, Iterative, Evolutionary, Prototyping,
Spiral