Software means computer programs and associated documentation.
Software engineering is an engineering discipline concerned with theories, practical methods, and tools for professional software development.
Software engineering is important because society relies on large, complex software systems that need to be dependable and trustworthy.
Good Software
Should provide required functionality to the user. Should be maintainable (easy to modify and evolve), usable, reliable, efficient (on resources) and secure.
Software Costs
Software costs usually exceed hardware costs over a system’s lifetime.
- Software often costs more than the hardware it runs on.
- Maintenance cost > development cost for long-life systems.
- Maintenance may be several times initial development cost.
Software engineering focuses on cost-effective development and maintenance.
Software Products
Specifications define what the software should do.
Generic Products
Stand-alone systems sold to the general market.
Examples:
- Graphics software
- Project management tools
- CAD software
- Appointment systems
Specifications are owned by the developer. Developer decides on changes.
Customized Products
Software built for a specific customer’s needs.
Examples:
- Embedded control systems
- Air traffic control systems
- Traffic monitoring systems
Specifications are owned by the customer. Customer decides on changes
Software Process Activities
- Software specification
Defining what the system should do - Software development
Designing and programming the system - Software validation
Checking that the system meets the requirements - Software evolution
Modifying the system to meet changing needs
General Issues in Software Engineering
Heterogeneity
Systems run across:
- Networks
- Different hardware
- Mobile and distributed devices
Business and Social Change
- Rapid market and technology changes
- Software must evolve quickly
Security and Trust
- Software affects all aspects of life
- Trustworthiness is essential
Software Engineering Diversity
Influencing factors:
- Application type
- Customer requirements
- Team skills and experience
Application Types
- Stand-alone applications
Not dependent on other systems. Usually runs on a single computer. - Interactive transaction-based systems
- Embedded control systems
- Batch processing systems
- Entertainment systems
Intended for individual users. - Modeling and simulation systems
- Data collection systems
- Systems of systems
Software Engineering Fundamentals
Universal principles
- Use a managed development process
- Dependability and performance matter
- Requirements must be well understood
- Software reuse is encouraged
Software Engineering Ethics
Software engineers have responsibilities beyond technical skills.
Ethical behaviour
- Honesty
- Professional responsibility
- Moral principles beyond law
Professional Responsibility Issues
- Confidentiality
Respect employer and client information - Competence
Do not accept work beyond skill level - Intellectual Property
Respect copyrights and patents - Computer Misuse
Do not misuse systems or skills
ACM/IEEE Code of Ethics
Defines professional ethical standards.
Applies to:
- Engineers
- Managers
- Educators
- Students
Contains 8 principles:
- Public interest
- Client and employer
- Product quality
- Professional judgment
- Ethical management
- Profession integrity
- Colleagues
- Lifelong learning
Ethical Dilemmas
- Disagreement with management policies
- Releasing untested safety-critical software
- Working on military or nuclear systems
Case Studies
Insulin Pump Control System
- Type: Safety-critical embedded system
- Functions:
- Read blood sugar
- Compute insulin dose
- Control pump delivery
- Risks:
- Low sugar -> coma/death
- High sugar -> long-term damage
Mental Health Care Patient Management System (MHC-PMS)
- Purpose: Maintain patient and treatment records.
- Key features:
- Central database
- Offline local access
- Management reporting
- Major concerns:
- Privacy
- Safety
- Availability
Wilderness Weather Station
- Type: Data collection system
- Key functions:
- Collect weather data
- Transmit to central system
- Monitor hardware health
- Additional features
- Fault reporting
- Power management
- Dynamic reconfiguration