Software Engineering: A Comprehensive Overview

What is Software?

Software refers to computer programs and their associated documentation. Software products can be developed for specific customers or for a general market.

Attributes of Good Software

Good software should possess the following attributes:

  • Deliver the required functionality and performance to the user.
  • Be maintainable, allowing for updates and modifications.
  • Be dependable, ensuring reliability and stability.
  • Be usable, providing a user-friendly experience.

What is Software Engineering?

Software engineering is an engineering discipline that encompasses all aspects of software production. This includes the initial stages of system specification to maintaining the system after its deployment. The definition highlights two key phrases:

  1. Engineering discipline: Software engineering applies systematic and quantifiable approaches to software development.
  2. All aspects of software production: It covers the entire software lifecycle, from conception to maintenance.

Fundamental Software Engineering Activities

The fundamental activities in software engineering are:

  1. Software specification: Defining the requirements and constraints of the software.
  2. Software development: Designing, coding, and testing the software.
  3. Software validation: Ensuring that the software meets the specified requirements.
  4. Software evolution: Modifying and enhancing the software to meet changing needs.

Software Engineering vs. Computer Science

While both fields are related to software, they have distinct focuses:

  • Computer science: Concentrates on the theoretical foundations and principles of computing.
  • Software engineering: Emphasizes the practical aspects of developing and delivering functional software.

Software Engineering vs. System Engineering

System engineering takes a broader perspective:

  • System engineering: Deals with all aspects of computer-based systems development, including hardware, software, and process engineering.
  • Software engineering: Forms a part of this larger system engineering process, focusing specifically on the software components.

Key Challenges in Software Engineering

Software engineering faces several challenges:

  • Increasing diversity: Software needs to run on various platforms and devices.
  • Demands for reduced delivery times: The industry requires faster software development cycles.
  • Developing trustworthy software: Ensuring software reliability, security, and safety is crucial.

Types of Software Products

There are two main categories of software products:

  1. Generic: Standalone software developed and sold to the open market.
  2. Customized: Software tailored to meet the specific requirements of a particular company or organization.

Non-Functional Requirements

Non-functional requirements describe how a system operates rather than its specific functionalities. Examples include:

  • System responsiveness to user queries.
  • Understandability of the program code.

Software Product Characteristics

Desirable characteristics of software products include:

  • Maintainability: The software should be adaptable to changing user needs.
  • Dependability and security: The software should be reliable, safe, and secure, minimizing harmful effects during downtime.
  • Efficiency: The software should utilize system resources effectively.
  • Acceptability: The software should be user-friendly, understandable, and compatible with other systems.

Software System Process Activities

Four primary activities are involved in the software system process:

  1. Specification: Defining the software’s requirements.
  2. Development: Designing, coding, and testing the software.
  3. Validation: Ensuring the software meets the specified requirements.
  4. Evolution: Modifying and enhancing the software over time.

System Engineering Process

The system engineering process often follows a waterfall model, which includes:

  1. Requirement specification
  2. Design
  3. Development
  4. Integration

What is a System?

A system is a collection of interrelated components that work together to achieve a common objective.

Emergent Properties

Emergent properties are characteristics of the system as a whole that cannot be derived from its individual components. Examples include:

  • Overall system weight
  • System reliability
  • System usability

Functional Properties

Functional properties describe the system’s intended actions when all components work together. For example, an automated attendance system for students.

Non-Functional Properties

Non-functional properties address aspects like reliability, performance, safety, and security.

System Failures

System failures often arise from unforeseen interactions between system components.

Influences on Reliability

Factors affecting system reliability include:

  • The operating environment
  • Hardware reliability
  • Software reliability
  • Operator reliability

“Shall Not” Properties

These properties specify undesirable system behaviors, such as:

  • Safety: The system should not operate in an unsafe manner.
  • Security: The system should not grant access to unauthorized individuals.

These properties are often harder to measure compared to reliability and performance.

Human and Organizational Factors

Human and organizational changes can impact a system, including:

  • Job changes
  • Process changes
  • Organizational changes

System Architecture Modeling

System architecture modeling provides an abstract representation of the subsystems within a system.

Functional System Components

Common functional components of a system include:

  • Sensor: Collects information from the system’s environment.
  • Actuator: Triggers changes in the system’s environment.
  • Computation: Performs calculations on input and output data.
  • Coordination: Manages interactions with other system components.
  • Communication: Enables communication between system components.
  • Interface: Facilitates interactions with other system components.

System Engineering Process Diagram

(Please refer to the notes for the system engineering process diagram.)

System Requirement Definition

Key aspects of system requirement definition include:

  • Abstract functional requirements
  • System properties (non-functional requirements)
  • Undesirable characteristics

Organizational objectives should also be considered during requirement definition.

System Design Process

The system design process involves:

  1. Partitioning requirements
  2. Identifying subsystems
  3. Assigning requirements to subsystems
  4. Specifying subsystem functionality
  5. Defining subsystem interfaces

System Procurement Process


off the shelf system available
survey market for existing systems- adapt requirements-choose system-issue request for bid- choose supplier.


bespoke
survey market for existing systems -issue request to tender – select tender- negotiate contract- let contract for development