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.