Introduction to Software Engineering

What is Software?

Software is a set of instructions, data structures, and associated documentation that directs a computer to perform specific tasks or operations.

Key components include:

  1. Computer programs containing instructions that provide desired functionality when executed
  2. Data structures enabling programs to adequately store and manipulate information
  3. Documentation describing how to use the software

Software is developed or engineered rather than manufactured. It doesn't wear out but can deteriorate over time due to changing requirements and environments. Most software is custom-built, although there is a trend toward component-based development.

What is Software Engineering?

IEEE Definition

  1. "The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software."
  2. "The study of approaches as in (1)."

Software engineering is a systematic, disciplined approach to developing software. It applies engineering principles and methods to create high-quality, reliable, and maintainable software solutions in a cost-effective manner.

Software Development Life Cycle (SDLC)

The SDLC includes the following phases:

  1. Requirements gathering and analysis
  2. Design
  3. Implementation
  4. Testing
  5. Deployment
  6. Maintenance

Software Process Models

A software process model is an abstraction of the actual process used to develop software. It defines activities, actions, tasks, milestones, and work products required to engineer high-quality software.

Processes, Tasks and Frameworks

  • Process: Collection of activities, actions, and tasks
  • Task: Well-defined objective producing tangible outcome
  • Framework: Establishes required activities while allowing flexibility

Umbrella Activities

Supporting tasks occurring throughout the software process:

  • Project tracking and control
  • Risk management
  • Quality assurance
  • Configuration management
  • Technical reviews

Layers of the Software Engineering Process

  1. Process Layer: Establishes context and baseline practices
  2. Methods Layer: Technical how-to's for each phase
  3. Tools Layer: Automated support for process and methods

Evolution of Software Process Models

Historical Progression

  • Waterfall Model: Linear, sequential approach
  • Incremental/Iterative Models: Breaking development into cycles
  • Agile Models: Lightweight, collaborative approaches

Agile Practices

  • Short iterations (sprints)
  • Daily stand-ups
  • Regular demos
  • Continuous integration
  • Retrospectives