Software Engineering Overview
What is Software?
Software is composed of computer programs and associated documentation. This includes:
Requirements
Design models
User manuals
Software products can be developed for specific customers (bespoke software) or for the general market (generic software).
Generic Software: Example includes commonly used applications like Microsoft Excel or Word.
Bespoke Software: Tailored specifically for an individual customer as per their specifications.
New software can emerge through:
Developing new programs
Configuring existing generic software systems
Reusing existing software.
Variety of Software Products
Examples of different software types:
Real-time systems: Air traffic control
Embedded systems: Digital cameras, GPS devices
Data processing applications: Telephone billing systems, pension calculations
Information systems: Websites, digital libraries
Sensor applications: Weather data collection tools
System software: Operating systems (e.g., Windows), compilers
Communications software: Routers, mobile phones
Office applications: Word processing software, video conferencing tools
Scientific software: Weather forecasting systems, simulations
Graphical software: Film making tools, design software.
Categories of Software Products
How software products are categorized:
Generic Software: (e.g., Microsoft Excel)
Packages: (e.g., Mathematica)
Customized versions of Generic Packages: (e.g., UTeM's payroll system)
Bespoke (Custom) Software: (e.g., IRS internal systems)
Other types: Demonstration software, prototypes, research-related software.
What is Software Engineering?
Software engineering is the discipline focused on all aspects of software production.
Software engineers employ systematic and organized approaches with appropriate tools and methods based on the project challenges and resources available.
Differences between Software Engineering and Computer Science
**Focus: **
Computer Science: centers on theoretical foundations and principles.
Software Engineering: focuses on practical aspects of software development and delivery.
Gaps exist in computer science theories when applied to software engineering, unlike established fields such as physics.
Differences between Software Engineering and System Engineering
System Engineering: concerns the overall development of computer-based systems, which includes hardware, software, and process engineering.
Software Engineering: is a subset of system engineering, specifically targeting software components like applications and databases.
Responsibilities of system engineers include:
System specification
Architectural design
Integration
Deployment.
What is a Software Process?
It refers to a series of activities aimed at software development or evolution.
Core activities in all software processes include:
Specification: The requirements and constraints of the system.
Development: Creation of the software system.
Validation: Ensuring the software meets customer expectations.
Evolution: Modifying the software based on changing requirements.
What is a Software Process Model?
A simplified view of a software process from specific perspectives:
Workflow Perspective: The order of activities.
Data-flow Perspective: Information movement within the process.
Role/action Perspective: Outlines responsibilities and actions taken.
Common process models include:
Waterfall Model
Iterative Development Model
Component-based Software Engineering.
Human Error and Faults
Human Error: Can result in faults in the software.
Fault: A defect that may lead to failures in the software functionality.
Software Costs
Software typically constitutes a major part of the total computer system costs, often exceeding the hardware costs.
Maintenance costs for software frequently outweigh initial development costs, especially in long-lived systems.
Software engineering aims for cost-effective development solutions.
Costs of Software Engineering
Cost distribution roughly includes:
60% Development costs
40% Testing costs
For custom software, evolution costs can surpass the development costs.
Cost structure varies based on:
System type being developed
Required system attributes (performance, reliability).
What is CASE (Computer-Aided Software Engineering)?
Refers to software tools that provide automation support for various software process activities.
Types include:
Upper-CASE: Tools aiding in early activities like requirements gathering and design.
Lower-CASE: Tools for support during programming, debugging, and testing phases.
Attributes of Good Software
Good software must provide:
Functionality and performance meeting user needs
Maintainability: Ability to adapt to changing requirements
Dependability: Trustworthy performance and stability
Efficiency: Optimal use of system resources
Acceptability: Must be user-friendly, understandable, and compatible with other systems.
Key Challenges in Software Engineering
Major challenges include:
Heterogeneity: Creating software compatible across different platforms.
Delivery: Accelerating the software delivery process.
Trust: Developing techniques to assure users of software reliability and security.