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.