Software Engineering Notes

Lecture 1: Introduction to Software Engineering

Participants in Software Development

  • Customer: Sponsors the system development.
  • User: Uses the system.
  • Developer: Builds the system. They have a contractual obligation to meet the needs of the customer and users.

Software Development Steps and Developer Roles

  • Software Development Steps:
    • System Design
    • Requirements Analysis and Definition
    • Program Design
    • Program Implementation
    • Unit Testing
    • Integration Testing
    • System Testing
    • System Delivery
    • Maintenance
  • Developer Roles:
    • Analyst
    • Designer
    • Programmer
    • Tester
    • Trainer

Changes in Software Engineering

  • Key Factors:
    • Time to market pressures
    • Shifts in economics
    • Desktop computing advancements
    • Networking capabilities
    • Object technology adoption
    • Problems encountered with the waterfall model.
    • User interface expectations

Objectives of Software Engineering Introduction

  • Introduce software engineering and explain its importance.
  • Set out answers to key questions about software engineering.

Importance of Software Engineering

  • The economies of developed nations are heavily dependent on software.
  • More and more systems are software controlled.
  • Software engineering provides the theories, methods, and tools for professional software development.

FAQs about Software Engineering

  • What is software?
  • What is software engineering?
  • What is the difference between software engineering and computer science?
  • What is the difference between software engineering and system engineering?
  • What is a software process?
  • What is a software process model?
  • What are the costs of software engineering?
  • What are software engineering methods?
  • What is CASE (Computer-Aided Software Engineering)?
  • What are the attributes of good software?
  • What are the key challenges facing software engineering?

What is Software?

  • Computer programs and associated documentation (requirements, design models, user manuals).
  • Software products:
    • Developed for a particular customer.
    • Developed for a general market.
  • Software product types:
    • Generic: Sold to a range of different customers (e.g., PC software like Excel or Word).
    • Bespoke (custom): Developed for a single customer according to their specification.
  • New software creation:
    • Developing new programs.
    • Configuring generic software systems.
    • Reusing existing software.

Variety of Software Products

Examples:
* Real time: air traffic control.
* Embedded systems: digital camera, GPS.
* Data processing: telephone billing, pensions.
* Information systems: web sites, digital libraries.
* Sensors: weather data.
* System software: operating systems, compilers.
* Communications: routers, mobile telephones.
* Offices: word processing, video conferences.
* Scientific: simulations, weather forecasting.
* Graphical: film making, design.

Categories of Software Product

  • Generic (e.g., Microsoft Excel)
  • Packages (e.g., Mathematica)
  • Customized versions of generic packages (e.g., UTeM's payroll system)
  • Bespoke (customized) (e.g., IRS internal system)
  • Demonstration, prototype, research

What is Software Engineering?

  • An engineering discipline concerned with all aspects of software production.
  • Software engineers adopt a systematic and organized approach, using appropriate tools and techniques based on the problem, constraints, and available resources.

Relationship Between Computer Science and Software Engineering

  • Computer Science: Theories
  • Computer Functions:
  • Software Engineering: Uses tools and techniques to solve problem

Difference Between Software Engineering and Computer Science

  • Computer science focuses on theory and fundamentals.
  • Software engineering focuses on the practicalities of developing and delivering useful software.
  • Computer science theories are insufficient to fully underpin software engineering (unlike physics and electrical engineering).

Difference Between Software Engineering and System Engineering

  • System engineering covers all aspects of computer-based systems development, including hardware, software, and process engineering.
  • Software engineering is a part of system engineering, concerned with developing software infrastructure, control, applications, and databases.
  • System engineers handle system specification, architectural design, integration, and deployment.

What is a Software Process?

  • A set of activities aimed at the development or evolution of software.
  • Generic activities:
    • Specification: Defining what the system should do and its constraints.
    • Development: Production of the software system.
    • Validation: Checking that the software meets customer requirements.
    • Evolution: Changing the software in response to evolving demands.

What is a Software Process Model?

  • A simplified representation of a software process from a specific perspective.
  • Examples of process perspectives:
    • Workflow perspective: Sequence of activities.
    • Data-flow perspective: Information flow.
    • Role/action perspective: Who does what.
  • Generic process models:
    • Waterfall
    • Iterative development
    • Component-based software engineering

Human Error Lead to Failure

  • Human Error -> Fault -> Failure

Software Costs

  • Software costs often dominate computer system costs, exceeding hardware costs.
  • Maintenance costs are greater than development costs, especially for long-life systems.
  • Software engineering aims to develop software in a cost-effective manner.

Breakdown of Software Engineering Costs

  • Approximately 60% are development costs, and 40% are testing costs.
  • Evolution costs often exceed development costs for custom software.
  • Costs vary based on the system type and requirements (e.g., performance, reliability).
  • Cost distribution depends on the development model used.

What is CASE (Computer-Aided Software Engineering)?

  • Software systems providing automated support for software process activities.
  • Often used for method support.
    • Upper-CASE: Tools supporting early activities (requirements and design).
    • Lower-CASE: Tools supporting later activities (programming, debugging, and testing).

Attributes of Good Software

  • The software should deliver the required functionality and performance and should be maintainable, dependable, efficient, and acceptable.
    • Maintainability: Software must evolve to meet changing needs.
    • Dependability: Software must be trustworthy.
    • Efficiency: Software should not waste system resources.
    • Acceptability: Software must be accepted by users, understandable, usable, and compatible with other systems.

Key Challenges Facing Software Engineering

  • Heterogeneity: Developing software that can cope with diverse platforms and environments.
  • Delivery: Developing techniques for faster software delivery.
  • Trust: Developing techniques to ensure users can trust the software.

Key Points

  • Software engineering is an engineering discipline concerned with all aspects of software production.
  • Software products include developed programs and associated documentation.
  • Essential product attributes are maintainability, dependability, efficiency, and usability.
  • The software process consists of activities involved in developing software products (specification, development, validation, and evolution).
  • Methods are organized ways of producing software, including process suggestions, notations, rules, and design guidelines.