Software Engineering I
Session 1
Introduction to Software Engineering
Engineering
• Engineering is the utilisation of processes, methods, techniques and
tools to design, build, and maintain objects.
• An engineer is a professional who applies processes, methods
techniques and tools to solve problems within a specific domain (e.g.
chemical engineering, aeronautical engineering, software
engineering, etc.).
Software
• Software is a set of instructions for a computer to perform a specific
task or tasks.
• Software is variously referred to as a program, a script or an
application.
• There are many different classes of software including:
• Operating systems
• Embedded control systems
• Batch processing systems
• Entertainment systems
• Interactive transaction based applications
Software Engineering
• Software engineering is the engineering discipline that is concerned
with all aspects of software production, from system inception
through to system use and maintenance.
• It is the aggregation of processes, methodologies, techniques and
tools that have evolved in the field of software development over the
past forty years.
• Software engineering is distinct from systems engineering. Systems
engineering includes hardware and network engineering in addition
to software engineering.
Software Engineer
• A software engineer is a professional who is concerned with all or most
aspects of software development, including designing, building, testing
and maintaining software.
• The software engineer role is considered a generalist role rather than a
specialist role like a systems analyst, a programmer, or a software tester.
• In practice, the specificities of the software engineering role tend to
differ from organisation to organisation. In some organisations, for
example, there is little distinction between programmers and software
engineers, while in other organisations the distinction is clearer.
Software Engineering and
Project Management
• Software engineering as a discipline is concerned with both the
technical and project management aspects of software development.
• The technical aspect of software engineering is focused on individual
technical skills, such as system modelling and programming.
• The project management aspect of software engineering is focused
on activities with project wide scope, such as planning, risk
management, people management, budget control, etc.
Importance of Software Engineering
• Software helps us confront many of the challenges facing us as a
species (e.g. climate change mitigation, disease prevention, food
production, etc.). We need to be able to build more effective
software to meet these challenges.
• Software permeates and controls almost every aspect of our daily
lives. The software we use needs to be reliable, secure, and safe.
Good software engineering practices help to ensure reliability,
security and safety.
Challenges of Software Engineering
Diversity How to deal with the growing number of application types, devices and
platforms.
Complexity How to effectively produce larger and more complex systems.
Interoperability How to make diverse, distributed, systems flexible enough to work
together.
Legacy Systems How to update, replace or maintain ageing systems.
Business demands How to produce software quickly and in a cost effective manner.
Ethics How to meet the evolving ethical challenges posed by the prevalence of
digital technologies.
• Software engineers face significant challenges in the quest to design
and build successful software. These include:
Software Engineering Diversity
• There is no single software engineering approach that is applicable to all
systems.
• The software engineering approach used will depend on:
• The type of application being developed.
• Software controlling a jumbo jet.
• An interactive game app for IOS devices.
• An accounts management system for a mobile phone company.
• The specific requirements of the customer.
• The size and scope of the system being developed.
• The expertise of the development team.
• The procurement approach being employed (e.g. COTS, software reuse, bespoke,
software as a service).
Software Engineering Processes
• A software process is an abstract representation of the activities needed for
the development of a software product.
• There are several distinct software process models in software engineering
(e.g. waterfall, incremental, iterative etc.).
• Four fundamental phases are common to all software process models.
Software specification Defining the software and specifying constraints on its use.
Software development Designing and building the software.
Software validation Testing the software to ensure it meets requirements, and is
safe, secure, dependable and reliable.
Software evolution Modifying the software to meet changes in the business or
organisational context.
Software Engineering Methodologies
• A software engineering methodology is a detailed set of guidelines
for developing software.
• A software engineering methodology specifies elements such as:
• The required inputs and outputs of the software process phases.
• The documents that need to be produced during the development process.
• The techniques to be used for performing individual tasks.
• The tools to be used for completing tasks.
• Team roles and responsibilities in the development process.
• Examples of software engineering methodologies include Scrum,
Unified Process, and Extreme Programming.
Software Engineering Techniques
• In software engineering, a technique refers to a set of detailed
guidelines for how an individual task should be performed.
Task Technique
Requirements Specification FURPS, Use Cases
Data Modelling Entity Relationship Modelling, UML Class Diagram
Process Modelling Data Flow Diagram, UML Activity Diagram
User Interface Modelling UX Design, Scenarios
Software Engineering Tools
• Software engineering tools are computer programs intended to assist
the software development process.
• Tools can be applied at any stage of the development process (e.g.
specification, development, etc.).
• Tools allow repetitive, well-defined actions to be automated, thus
reducing the cognitive load on the software engineer.
• Commercially available tools range in size and complexity from simple
code editors to complex integrated development environments (IDEs),
capable of supporting an entire software project.
Characteristics of Successful Software
• Successful software will display the following characteristics:
Maintainability Software should be sufficiently flexible so that it can adapt to a rapidly changing
organisational context.
Reliability Software should perform to expectations. It should be fault free.
Safety Software should not pose a threat to the physical or mental well-being of users.
Security Software should be resilient to malicious attacks.
Efficiency Software should not waste system resources such as memory and processor
cycles.
Acceptability Software must be acceptable to users. It must be understandable, usable and
compatible with other systems in the same class.
Software Failure
• There are countless examples of successful software projects. But
there are also MANY examples of failures.
• Heathrow Terminal 5 Baggage System
• Nissan Airbags
• Ariane 5
• RBS
• NHS Patient Record System
• The failure rate for software projects is significantly higher than in
other engineering disciplines.
Impact of Software Failure
• Software failure can have diverse and significant impacts:
• Loss of life
• Injury
• Loss of investment
• Loss of revenue
• Loss of customer confidence
• Erosion of reputation/brand image
Reasons for Software Project Failure
• Software failure almost always stems from inadequacies in software
engineering practices.
• Examples of inadequate software engineering practice that contribute to
failure include:
• Poorly defined system requirements
• Poor communication among customers, developers, and users
• Inadequate testing
• Unmanaged risks
• Unrealistic project goals
• Poor development practices
• Poor project management
Measuring Software Performance
• Some software projects are obviously and unquestionably failures.
• However, the success or failure of the majority of software systems is more difficult
to ascertain.
• To ascertain success or failure we use a range of software metrics.
• Example software metrics include:
• User satisfaction
• The extent to which a program meets pre-stated success criteria
• Cost effectiveness
• Application crash rate
• Code complexity
• Number of reported bugs
• Mean time between failures (MTBF)
The Context of Software Engineering
• Software engineering involves wider responsibilities than simply the
application of technical skills.
• Software engineers have a responsibility to operate within existing
legal, ethical and social frameworks.
The Legal Context of Software Engineering
• Software professionals have a responsibility to be aware of and to abide by
the legislation which affects their practice.
• Significant pieces of legislation that relates to the development and use of
software are:
• Failure to abide by legislation can lead to stiff penalties for organisations and
individuals.
Act of Parliament Year Focus
Data Protection Act 1998 Privacy
The Computer Misuse Act 1990 Hacking, phishing, etc.
The Digital Economy Act 2010 Copyright, piracy, etc.
The Protection from Harassment Act 1997 Cyberstalking
The Ethical Context of Software Engineering
• Software professionals should also be aware of their ethical
responsibilities and avoid unethical behaviours. For example:
• Making false promises to customers
• Overstating qualifications and experience
• Charging for work not done
• Knowingly presenting substandard work.
• Ethical expectations for software engineers are set out in the
codes of conduct of relevant professional bodies:
• British Computer Society.
• ACM/IEEE

The first session of a software engineering module Presentation.pptx

  • 1.
    Software Engineering I Session1 Introduction to Software Engineering
  • 2.
    Engineering • Engineering isthe utilisation of processes, methods, techniques and tools to design, build, and maintain objects. • An engineer is a professional who applies processes, methods techniques and tools to solve problems within a specific domain (e.g. chemical engineering, aeronautical engineering, software engineering, etc.).
  • 3.
    Software • Software isa set of instructions for a computer to perform a specific task or tasks. • Software is variously referred to as a program, a script or an application. • There are many different classes of software including: • Operating systems • Embedded control systems • Batch processing systems • Entertainment systems • Interactive transaction based applications
  • 4.
    Software Engineering • Softwareengineering is the engineering discipline that is concerned with all aspects of software production, from system inception through to system use and maintenance. • It is the aggregation of processes, methodologies, techniques and tools that have evolved in the field of software development over the past forty years. • Software engineering is distinct from systems engineering. Systems engineering includes hardware and network engineering in addition to software engineering.
  • 5.
    Software Engineer • Asoftware engineer is a professional who is concerned with all or most aspects of software development, including designing, building, testing and maintaining software. • The software engineer role is considered a generalist role rather than a specialist role like a systems analyst, a programmer, or a software tester. • In practice, the specificities of the software engineering role tend to differ from organisation to organisation. In some organisations, for example, there is little distinction between programmers and software engineers, while in other organisations the distinction is clearer.
  • 6.
    Software Engineering and ProjectManagement • Software engineering as a discipline is concerned with both the technical and project management aspects of software development. • The technical aspect of software engineering is focused on individual technical skills, such as system modelling and programming. • The project management aspect of software engineering is focused on activities with project wide scope, such as planning, risk management, people management, budget control, etc.
  • 7.
    Importance of SoftwareEngineering • Software helps us confront many of the challenges facing us as a species (e.g. climate change mitigation, disease prevention, food production, etc.). We need to be able to build more effective software to meet these challenges. • Software permeates and controls almost every aspect of our daily lives. The software we use needs to be reliable, secure, and safe. Good software engineering practices help to ensure reliability, security and safety.
  • 8.
    Challenges of SoftwareEngineering Diversity How to deal with the growing number of application types, devices and platforms. Complexity How to effectively produce larger and more complex systems. Interoperability How to make diverse, distributed, systems flexible enough to work together. Legacy Systems How to update, replace or maintain ageing systems. Business demands How to produce software quickly and in a cost effective manner. Ethics How to meet the evolving ethical challenges posed by the prevalence of digital technologies. • Software engineers face significant challenges in the quest to design and build successful software. These include:
  • 9.
    Software Engineering Diversity •There is no single software engineering approach that is applicable to all systems. • The software engineering approach used will depend on: • The type of application being developed. • Software controlling a jumbo jet. • An interactive game app for IOS devices. • An accounts management system for a mobile phone company. • The specific requirements of the customer. • The size and scope of the system being developed. • The expertise of the development team. • The procurement approach being employed (e.g. COTS, software reuse, bespoke, software as a service).
  • 10.
    Software Engineering Processes •A software process is an abstract representation of the activities needed for the development of a software product. • There are several distinct software process models in software engineering (e.g. waterfall, incremental, iterative etc.). • Four fundamental phases are common to all software process models. Software specification Defining the software and specifying constraints on its use. Software development Designing and building the software. Software validation Testing the software to ensure it meets requirements, and is safe, secure, dependable and reliable. Software evolution Modifying the software to meet changes in the business or organisational context.
  • 11.
    Software Engineering Methodologies •A software engineering methodology is a detailed set of guidelines for developing software. • A software engineering methodology specifies elements such as: • The required inputs and outputs of the software process phases. • The documents that need to be produced during the development process. • The techniques to be used for performing individual tasks. • The tools to be used for completing tasks. • Team roles and responsibilities in the development process. • Examples of software engineering methodologies include Scrum, Unified Process, and Extreme Programming.
  • 12.
    Software Engineering Techniques •In software engineering, a technique refers to a set of detailed guidelines for how an individual task should be performed. Task Technique Requirements Specification FURPS, Use Cases Data Modelling Entity Relationship Modelling, UML Class Diagram Process Modelling Data Flow Diagram, UML Activity Diagram User Interface Modelling UX Design, Scenarios
  • 13.
    Software Engineering Tools •Software engineering tools are computer programs intended to assist the software development process. • Tools can be applied at any stage of the development process (e.g. specification, development, etc.). • Tools allow repetitive, well-defined actions to be automated, thus reducing the cognitive load on the software engineer. • Commercially available tools range in size and complexity from simple code editors to complex integrated development environments (IDEs), capable of supporting an entire software project.
  • 14.
    Characteristics of SuccessfulSoftware • Successful software will display the following characteristics: Maintainability Software should be sufficiently flexible so that it can adapt to a rapidly changing organisational context. Reliability Software should perform to expectations. It should be fault free. Safety Software should not pose a threat to the physical or mental well-being of users. Security Software should be resilient to malicious attacks. Efficiency Software should not waste system resources such as memory and processor cycles. Acceptability Software must be acceptable to users. It must be understandable, usable and compatible with other systems in the same class.
  • 15.
    Software Failure • Thereare countless examples of successful software projects. But there are also MANY examples of failures. • Heathrow Terminal 5 Baggage System • Nissan Airbags • Ariane 5 • RBS • NHS Patient Record System • The failure rate for software projects is significantly higher than in other engineering disciplines.
  • 16.
    Impact of SoftwareFailure • Software failure can have diverse and significant impacts: • Loss of life • Injury • Loss of investment • Loss of revenue • Loss of customer confidence • Erosion of reputation/brand image
  • 17.
    Reasons for SoftwareProject Failure • Software failure almost always stems from inadequacies in software engineering practices. • Examples of inadequate software engineering practice that contribute to failure include: • Poorly defined system requirements • Poor communication among customers, developers, and users • Inadequate testing • Unmanaged risks • Unrealistic project goals • Poor development practices • Poor project management
  • 18.
    Measuring Software Performance •Some software projects are obviously and unquestionably failures. • However, the success or failure of the majority of software systems is more difficult to ascertain. • To ascertain success or failure we use a range of software metrics. • Example software metrics include: • User satisfaction • The extent to which a program meets pre-stated success criteria • Cost effectiveness • Application crash rate • Code complexity • Number of reported bugs • Mean time between failures (MTBF)
  • 19.
    The Context ofSoftware Engineering • Software engineering involves wider responsibilities than simply the application of technical skills. • Software engineers have a responsibility to operate within existing legal, ethical and social frameworks.
  • 20.
    The Legal Contextof Software Engineering • Software professionals have a responsibility to be aware of and to abide by the legislation which affects their practice. • Significant pieces of legislation that relates to the development and use of software are: • Failure to abide by legislation can lead to stiff penalties for organisations and individuals. Act of Parliament Year Focus Data Protection Act 1998 Privacy The Computer Misuse Act 1990 Hacking, phishing, etc. The Digital Economy Act 2010 Copyright, piracy, etc. The Protection from Harassment Act 1997 Cyberstalking
  • 21.
    The Ethical Contextof Software Engineering • Software professionals should also be aware of their ethical responsibilities and avoid unethical behaviours. For example: • Making false promises to customers • Overstating qualifications and experience • Charging for work not done • Knowingly presenting substandard work. • Ethical expectations for software engineers are set out in the codes of conduct of relevant professional bodies: • British Computer Society. • ACM/IEEE

Editor's Notes

  • #2 When did engineering start? Neolithic (e.g. Henges)? Egyptians? Romans? Industrial Revolution (e.g. Fordism)? Can you think of anything we use in our lives that is not the result of engineering? In engineering terms, what exactly is a process? What exactly is a method? What exactly is a technique? What exactly is a tool? Can you think of any other branches of engineering apart from those listed in the slide? In his text on engineering, Discussion of the Method, Billy Vaughn Koen states that it is more important to study how engineers build things rather than the things they build. What do you think he means by this?
  • #3 Can you add any more types of software to the list? Give specific examples of the different types of software you have listed.
  • #4 How do you think software engineering differs from other branches of engineering (e.g. civil engineering)? In what way do you think the theories, methods and tools used if software engineering are different from, or similar to other, more established, branches of engineering? In what ways is software engineering distinct from computer science?
  • #5 Is being a software engineer the same as being an engineer in other disciplines, e.g. civil engineering? Is the term engineer correctly applied to those working as software engineers?
  • #6 1. In professional practice, is it possible to be a project manager without first being a software engineer?
  • #7 Point 1 in the slide appears to suggest that software is inherently a force for good. Is this true? Can you think of aspects of our lives that are not now controlled or affected by software? In software terms, what is meant by reliability, security and safety?
  • #8 Can you think of any other challenges facing software engineering? Why do you think software is becoming larger and more complex? Why is interoperability such a challenge for software engineers? Can you think of any approaches to software engineering that promote interoperability? What ethical challenges are posed by the prevalence of digital technologies in our lives. Why are these challenges a matter for software engineers?
  • #9 Why would the different approaches to SE be needed for: The software controlling a jumbo jet? An simple interactive game app for IOS devices? An accounts management system for a mobile phone company?
  • #10 At which stages in the software development process (e.g. specification, development, etc.) are software engineers involved? Are there any stages they are not involved in? Are the generic process activities of specification, development, validation and evolution applicable to other forms of engineering (e.g. civil engineering)? Or is a different set of activities required for engineering different types of product? Why might the evolution stage of the development process be more important in software engineering that civil engineering?
  • #11 What do you think are the advantages of following a software engineering methodology when developing software? Might there be any disadvantages in following a software engineering methodology?
  • #12 1. In what way is a software engineering technique different from a software engineering methodology?
  • #13 What software tools do you use in your professional or personal life to help you to solve problems and complete tasks? Give examples of tools used in software engineering.
  • #14 Can you think of any additional attributes of successful software? Are there any attributes of successful software that are more important than others? For a software system to be successful must it display ALL of the attributes listed? If one attribute is missing or impaired, does this mean the software is ‘unsuccessful’?
  • #15 How high do think the failure rate is for software projects? Why is failure more tolerated in the software industry than other industries? Can you think of any other notable IT system failures? Can you think of any spectacular successes? The Heathrow Terminal 5 Baggage System was eventually fixed. Can it, therefore, be classed as a failure like the NHS Patient Record System, which was never fixed.
  • #16 Can you think of any other potential impacts of software project failure?
  • #17 Can you add any other reasons why software project fail? How do we determine whether a software project is a success or a failure? How can success and failure be measured?
  • #18 Can you think of any additional metrics that can be used to measure software performance? If a system has high user satisfaction and is cost effective, but has a high number of reported bugs, is it a success or a failure? (e.g. MS Windows).
  • #19 1. Give examples of legal, ethical and social constraints that places limits on software engineering activities.
  • #20 What specifics of privacy do you think are covered by the DPA? What penalties are available to authorities under the DPA? How does the DPA affect your own personal and professional activity?
  • #21 Are any of the unethical behaviours listed in the slide also illegal? Are the BCS and ACM/IEEE codes of conduct enforceable in reality?