Introduction to Software Engineering
University of Sheffield: Systems Design and Security Lecture Notes
Introduction
Instructor: Prof Emma Norling
Email: e.j.norling@sheffield.ac.uk
Course Details: Information on systems design and security
Attendance Codes: Available in each lecture
Module Outline
This lecture encompasses several critical themes related to software engineering for Autumn 2025, including:
Module outline
Information on assessment
What is software engineering?
Ethics in software engineering
Software process models
Course Content Overview
The following key topics will be addressed throughout the module:
Software engineering and security
Working in teams and with a client, particularly in security engineering contexts
System modeling utilizing the UML (Unified Modeling Language)
Database design principles
Query processing and SQL (Structured Query Language)
Control flow design, focusing on state-based designs
Verification, validation, and testing methodologies
Architectural design and formal systems design
Human-centered system design approaches
Service-oriented software engineering principles
Feedback from Previous Experiences
You Said, We Did
Feedback from students regarding previous modules led to improvements:
Lab Content Delays: Streamlined and condensed lab content allows for a more focused start on group projects without excessive preliminary learning.
Need for Project Development Structure: Increased guidance and support are being provided through labs to ensure teams have adequate help.
Repetition from COM1001: Adjustments have been made to lab structures and lectures to reduce unnecessary repetition, particularly for students transitioning from COM3008.
Assessment Structure
The assessment for this module comprises three components:
Team project: 40% of the final grade
Individual report: 10% of the final grade
Formal exam: 50% of the final grade
Details about the coursework have been provided on Blackboard, with full project task details available by the start of Week 4.
Defining Software Engineering
Ian Sommerville offers a definition of software engineering as follows:
"Software Engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use."
The distinction between computer science and software engineering is crucial: computer science focuses on theoretical underpinnings, while software engineering addresses practical problems in software production.
Importance of Software Engineering
The significance of software engineering continues to grow due to:
Societal Reliance on Software: As society increasingly depends on advanced software systems, the ability to produce reliable and trustworthy systems economically and quickly becomes essential.
Cost Efficiency: Employing software engineering methods is generally less expensive in the long run compared to treating software projects as personal programming endeavors. The majority of costs usually arise from modifying software post-deployment.
Historical Context
The Beginning of Software Engineering
The term "software engineering" was coined by Margaret Hamilton during the Apollo moon landing project to confer legitimacy on software as a distinct engineering discipline.
The first NATO Software Engineering Conference took place in 1968, marking a pivotal moment in the formalization of the discipline.
Attributes of Good Software
Essential attributes that characterize reliable software include:
Maintainability: Software must be designed to evolve alongside changing customer needs, which is vital in a dynamic business environment.
Dependability and Security: Dependable software encompasses reliability, security, and safety, ensuring no physical or economic damage occurs from failures or malicious attacks.
Efficiency: Software systems should optimize resources, ensuring minimal waste in processing and memory usage, factoring in responsiveness and processing time.
Acceptability: Software must be user-friendly, comprehensible, usable, and compatible with other systems utilized by its target audience.
Case Studies of Software Failures
When software engineering falls short, the consequences can be dire:
Therac-25 Incident (1985-1987): Patients were overexposed to radiation due to software errors resulting in six deaths from a device incorrectly indicating no dose had been administered.
UK Passport Office Project (2006): A project plagued by lack of testing and change control led to £12 million wasted and 500 disrupted holidays.
UK National Public Health Software System: Over £12 billion was invested by the UK government in an unsuccessful attempt to create an electronic health records system, ultimately deemed obsolete before completion.
Progress in Software Engineering
Advancements in the field have included:
Increased capability for developing complex software systems, emphasizing modular and component-based designs.
Development of effective methods for software specification, design, and implementation through formal models and code generation.
Improved understanding of human factors in software development, recognizing the significance of psychology and team dynamics.
Innovative engineering methodologies, including clean-room development, time-boxed prototyping, and test-driven design.
Standardization with tools like UML and CASE which promote systematic software engineering practices.
Ethical Considerations in Software Engineering
Volkswagen Emissions Scandal (2015)
Overview: Volkswagen faced major repercussions for fraudulently designed diesel engines that emitted 40 times the legal limit of fumes by utilizing software to cheat testing protocols. The impact of the scandal continues to unfold, with financial repercussions still being tallied.
Software Engineering Ethics
Ethical responsibilities go beyond technical skill application. Software engineers are expected to uphold honesty and moral principles, warranting profession-wide respect.
Ethical behavior transcends legal obligations and demands adherence to principles deemed morally correct.
Regulation of Ethical Practices
Various professional organizations play a role in enforcing ethical standards:
British Computer Society (BCS): Members are obligated to report breaches of the Code of Conduct.
Association for Computing Machinery (ACM): Members are encouraged to support ethical adherence within the computing profession and report violations.
IEEE: Does not enforce membership requirements but contributes to ethical discourse in the field.
The Software Process
Definition: A software process consists of a structured set of activities necessary for the development of a software system. Core activities include:
Specification: Defining system requirements.
Design and Implementation: Structuring and actual building of the software.
Validation: Ensuring the system meets customer expectations.
Evolution: Adapting the system to meet changing customer needs.
A software process model serves as an abstract representation of these activities, tailored to specific perspectives.
Software Process Models
The Waterfall Model
Described as the "traditional" model, the Waterfall Model reflects linear processes akin to other engineering disciplines. The drawback is the limited capacity to accommodate changing requirements once stages are complete.
Boehm’s Spiral Process Model
This model emphasizes risk management and recognizes that risk assessment is integral to software development.
Incremental Development
Structure: Involves breaking down development into smaller segments, allowing for parallel activities and customer feedback throughout the process.
Pros: Reduced implementation costs, enhanced customer input, and early deployment of functional software.
Cons: Challenges in progress assessment and potential degradation of system structure as new features are added.
Reuse-Oriented Software Engineering
Process: This methodology involves reusing existing components, which can significantly reduce costs and delivery times.
Pros: Decreases expenses and risks associated with new development.
Cons: May require compromises based on existing solutions, leading to reduced control over component evolution.
Agile Development
Focus: AGILE involves flexible and adaptive planning with frequent revisits and changes to requirements.
Pros: Fosters strong client relationships, prioritizes working software through iteration, and supports team reflection for continuous improvement.
Cons: May result in unpredictability and is less suitable for projects requiring stringent structure due to safety concerns.
Conclusion
Key Points from This Lecture
Understanding software engineering principles
Identifying characteristics of good software
The importance of ethics in software engineering
Overview of various software engineering approaches along with their advantages and disadvantages.