An engineering discipline concerned with theories, practical methods, and tools for professional software development.
Society relies on large, complex software systems that must be dependable and trustworthy.
Good Software
- Provides required functionality
- Maintainable
Easy to modify and evolve. - Usable
- Reliable
- Efficient on resources
- Secure
Software Costs
Usually exceed hardware costs over a system’s lifetime.
- Software often costs more than the hardware it runs on.
- Maintenance cost exceeds development cost for long-life systems.
- Maintenance may be several times the initial development cost.
Software Product
Generic Product
Pre-built, stand-alone system sold to the open market. Also called COTS (Commercial Off-The-Shelf). Acquired and configured to meet requirements rather than built from scratch.
Specifications are owned by the developer. Developer decides on changes.
Examples:
- Graphics software
- Project management tools
- CAD software
- Appointment systems
Customized Product
Software built for a specific customer’s needs.
Specifications are owned by the customer. Customer decides on changes.
Examples:
- Embedded control systems
- Air traffic control systems
- Traffic monitoring systems
General Issues
Heterogeneity
Systems run across networks, different hardware, and mobile or distributed devices.
Business and Social Change
Rapid market and technology changes require software to evolve quickly.
Security and Trust
Software affects all aspects of life. Trustworthiness is essential.
Software Engineering Diversity
Varies by application type, customer requirements, and team skills.
Application Types
- Stand-alone applications
Not dependent on other systems. 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
Fundamentals
- 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
- 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 for engineers, managers, educators, and students.
8 principles:
- Public
Act consistently with the public interest. - Client and Employer
Act in the best interests of client and employer, consistent with the public interest. - Product
Ensure products and modifications meet the highest professional standards possible. - Judgment
Maintain integrity and independence in professional judgment. - Management
Promote an ethical approach to management of software development and maintenance. - Profession
Advance the integrity and reputation of the profession, consistent with the public interest. - Colleagues
Be fair to and supportive of colleagues. - Self
Participate in lifelong learning and promote an ethical approach to the practice of the profession.
Ethical Dilemmas
- Disagreement with management policies
- Releasing untested safety-critical software
- Working on military or nuclear systems
Case Studies
Insulin Pump Control System
Safety-critical embedded system.
Functions:
- Read blood sugar
- Compute insulin dose
- Control pump delivery
Risks:
- Low blood sugar: coma or death
- High blood sugar: long-term damage
Mental Health Care Patient Management System
Maintains patient and treatment records.
Features:
- Central database
- Offline local access
- Management reporting
Concerns:
- Privacy
- Safety
- Availability
Wilderness Weather Station
Data collection system.
Functions:
- Collect weather data
- Transmit to central system
- Monitor hardware health
Additional features:
- Fault reporting
- Power management
- Dynamic reconfiguration