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:
- Engineering discipline: Software engineering applies systematic and quantifiable approaches to software development.
- 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:
- Software specification: Defining the requirements and constraints of the software.
- Software development: Designing, coding, and testing the software.
- Software validation: Ensuring that the software meets the specified requirements.
- 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:
- Generic: Standalone software developed and sold to the open market.
- 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:
- Specification: Defining the software’s requirements.
- Development: Designing, coding, and testing the software.
- Validation: Ensuring the software meets the specified requirements.
- Evolution: Modifying and enhancing the software over time.
System Engineering Process
The system engineering process often follows a waterfall model, which includes:
- Requirement specification
- Design
- Development
- 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:
- Partitioning requirements
- Identifying subsystems
- Assigning requirements to subsystems
- Specifying subsystem functionality
- Defining subsystem interfaces
System Procurement Process