itnp23: foundations of information technology · • identify the standard phases in a project •...

9
ITNP23: Foundations of Information Technology Software Engineering Introduction Define software engineering and motivations Determine some of the difficulties associated with developing and maintaining large software projects Examine common methods and tools associated with software engineering Identify the standard phases in a project Compare and contrast heavyweight and lightweight models of SE Computer Science: An Overview, J. G. Brookshear, Chapter 7 2 Software Engineering (Autumn, 2013) Software Disasters To err is human, but to really foul things up you need a computer.-- Paul Ehrlich System Year Disaster Effect/cause Ariane 5 unmanned rocket 1996 Destruction of rocket and cargo Overflow error converting a velocity reading from 64-bits to 16-bits Wall Street 1987 Market crashed costing $500 billion in a single day Computer trading programs flooded the market with sell orders Therac-25 radiation therapy machine 1985 A race condition lead it to deliver lethal radiation doses to its patients. The root cause: poor software engineering practices Three people killed and three others were critically injured 3 Software Engineering (Autumn, 2013) Software Engineering The discipline concerned with all aspects of developing software products that can be sold to customers Software products may consist of a number of programs, documentation, configuration data, and contextual systems such as product websites and services to download patches Software engineers attempt to use theories, methods and tools to develop software products and solve problems within organisational and financial constraints They are involved in all aspects of development (technical ones as well as others such as project management) 4 Software Engineering (Autumn, 2013)

Upload: others

Post on 19-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

  • ITNP23: Foundations of Information Technology

    Software Engineering

    Introduction

    •  Define software engineering and motivations •  Determine some of the difficulties associated with developing and maintaining

    large software projects •  Examine common methods and tools associated with software engineering •  Identify the standard phases in a project

    •  Compare and contrast heavyweight and lightweight models of SE

    Computer Science: An Overview, J. G. Brookshear, Chapter 7

    2 Software Engineering (Autumn, 2013)

    Software Disasters “To err is human, but to really foul things up you need a computer.”

    -- Paul Ehrlich

    System Year Disaster Effect/cause

    Ariane 5 unmanned rocket

    1996 Destruction of rocket and cargo Overflow error converting a velocity reading from 64-bits to 16-bits

    Wall Street 1987 Market crashed costing $500 billion in a single day

    Computer trading programs flooded the market with sell orders

    Therac-25 radiation therapy machine

    1985 A race condition lead it to deliver lethal radiation doses to its patients. The root cause: poor software engineering practices

    Three people killed and three others were critically injured

    3 Software Engineering (Autumn, 2013)

    Software Engineering   The discipline concerned with all aspects of developing software products that can

    be sold to customers

      Software products may consist of a number of programs, documentation, configuration data, and contextual systems such as product websites and services to download patches

      Software engineers attempt to use theories, methods and tools to develop software products and solve problems within organisational and financial constraints

      They are involved in all aspects of development (technical ones as well as others such as project management)

    4 Software Engineering (Autumn, 2013)

  • Some Software Development Difficulties

      Complexity   A large number of components tend to be used in software systems.   Each component may be in one of many states.   The components tend to interact non-linearly, and they run in digital computers

    which are themselves highly complex.

      Intangibility and Modifiability   Software is not physical and does not lead well to visualisation   Software is easily modifiable but it is notoriously difficult to determine the effects of

    change

      Human resource management   Software may be developed by a large group of people   Challenges to do with communication, ability, perspective, assumptions, goals, etc.   We revisit this in just a moment

    5 Software Engineering (Autumn, 2013)

      Lack of standards and reliable metrics   Mechanical engineers have tried and tested procedures and can measure the wear and

    tear of the components they work with; but no such luxury is afforded the software engineer

      The business of software   Rapid technological changes lead to ever greater expectations and scope   Ever shortening deadlines of delivery   Software engineering techniques take time to learn and apply

    6

    Some Software Development Difficulties

    Software Engineering (Autumn, 2013)

    7

    But is it “Engineering” ?   Two definitions of Software Engineering quoted by Pressman

      “the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines”

      “the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software”

      These definitions seem to rely too much on the word engineering   a discipline ensuring that structures won’t fall down …

      So for example - “Engineering” doesn’t prevent the cost of a project escalating by factors of ten

      The management dominates …

    7 Software Engineering (Autumn, 2013) 8

    People   These points make it clear that the central problem is the coordination of

    people   so it’s not “engineering” in the slide-rule sense: it’s “management”

      Brooks’ rule of thumb: only about one-sixth of software development is coding   but he was his own customer

      When we add (as is usual) an external customer, the management challenge becomes much greater   we are no longer managing downwards   we are co-ordinating with superiors (because they’re paying)   with people whose backgrounds and assumption differ from ours in ways

    that are hard to predict

    8 Software Engineering (Autumn, 2013)

  • 9

    Scaling up: early experiences   A software product is not just a big program:

      we cannot just scale up from figures about the numbers of statements that a programmer can produce in a day

      Brooks’ project, OS/360   “at the peak over 1000 people were working on it … from 1963 through

    1966 probably 5000 man-years went into its design, construction and documentation”

      Programmers are not bees   they don’t automatically know what to do

      Brooks’ most famous chapter: “The Mythical Man-Month”   Brooks’ Law: Adding manpower to a late software project makes it later

    9 Software Engineering (Autumn, 2013)

    SE Methods and Tools   Project phases   Modelling

      Documentation

      Development

      ...

      Tools   Computer-Aided Software Engineering (CASE) tools

      Modelling packages, model checkers, test suites, debuggers   Integrated Development Environments (IDE)

      Development Approaches   Grouping the phases   Organising the people doing the work

    10 Software Engineering (Autumn, 2013)

    Project Phases   Each phase

      Is defined, documented and agreed   Treated as a milestone with deliverables   Different methodologies identify different stages

      Phases (popular Waterfall model):

    1.  Analysis 2.  Design 3.  Implement 4.  Test 5.  Maintenance 6.  ...

    Brooks’ timings rules of thumb 1/3 of the development schedule 1/6 of the development schedule 1/2 of the development schedule

    11 Software Engineering (Autumn, 2013)

    1. Analysis Phase   Determines:

      What the system should do   Who is the product being sold to?

      The market   A client

      Who will use the software?

      Activities a)  Problem definition b)  Feasibility study c)  Requirements elicitation

    12 Software Engineering (Autumn, 2013)

  • 1.a Problem definition   Input: Initial description of client s current situation/problem

      Purpose:   Determine the objectives of new system   Define the scope of project and the key stakeholders involved   Sketch out possible preliminary solutions

      Outcome:   Report for the next stage (Feasibility Study)

    13 Software Engineering (Autumn, 2013)

    1.b Feasibility study

      Input: The problem definition, the business case, and an outline of the system

      Purpose:   Determine whether a working system (in the client environment)

    be produced given cost, schedule and technological constraints   Decide whether or not the development

    should go ahead   If so, define what changes to the scope, schedule, and budget are

    necessary

      Outcome:   Report for the next stage (Requirements Elicitation/Engineering)

    14 Software Engineering (Autumn, 2013)

      Terminology: often referred to as Requirements Engineering

      Input: The problem definition report and the feasibility study

      Purpose: Work with stakeholders to specify:   the current physical model: what they do now, physically   the current logical model: what they do now, conceptually   The required logical model: requirements of the new system

      Outcome:   A specification

    1.c Requirements Elicitation

    15 Software Engineering (Autumn, 2013)

    2. Design Phase

      How the system will accomplish its goals (large task/issue!)

      Produce a project for your system suitable to drive actual implementation and other phases

      Alternative designs may be considered (and presented to clients at different prices)

      The design can impact:   Scope   Performance   Safety and security   Maintainability

    16 Software Engineering (Autumn, 2013)

  • 3. Implementation

      Actually code programs (finally!)

      Procure hardware

      Develop databases and harvest data

      Other specialised tasks such as train neural nets

      Write unit tests

      Put the system together

      Write administration and user documentation

    17 Software Engineering (Autumn, 2013)

    4. Testing

      Unit tests

      Integration tests

      Debugging, fixing and patching

      Release testing   Alpha and beta versions

      Performance testing

      Interface testing

      Acceptance testing

    18 Software Engineering (Autumn, 2013)

    5. Maintenance

      System maintenance is inevitable

      Environmental changes bring about new requirements and expose invalid assumptions

      Bugs may be discovered that were missed during testing and need to be fixed

      Software systems evolve

      They tend to get even more complex

    19 Software Engineering (Autumn, 2013)

    Summary so far   Software engineering involves all aspects of developing software products   Software is complex, abstract, intangible, evolving...

      Software engineers use common methods and tools to help produce quality products

      Standard phases are used in projects, although the ordering of these may differ (as we ll see in the next lecture)

    20 Software Engineering (Autumn, 2013)

  • SE approaches

      We looked at general SE procedures and phases

      Now: SE approaches to managing these, including:

      Heavyweight   Lightweight (agile)   Cowboy coding   Open Source

    21 Software Engineering (Autumn, 2013)

    Heavyweight Approaches   Traditional approaches to SE, such

      Managerial and contractual benefits   Inflexible - do not adapt (easily) to changes

      Each of the phases is clearly established and completed before moving on to the next one   Heavily reliant on documentation

      Examples   Waterfall   Prototyping   Incremental   Spiral

    22

      These perhaps come from the “engineering” metaphor   where design is cheap (and well understood) (10% of a

    bridge’s cost?)   but construction is dear (and can be routine)   … so getting the design (almost) exactly right is both

    possible and highly desirable.

    Software Engineering (Autumn, 2013)

    The Waterfall Approach   The earliest published approach (1970)   Attempts to limit variance and risk in large projects by “cascading” from one

    completed phase to the next

      Documents are approved before the subsequent phases can begin

      Fits well with other forms of engineering, especially when the requirements are well-known, but it is inflexible to change

    Analysis

    Design

    Implementation

    Testing

    Operation and Maintenance

    23 Software Engineering (Autumn, 2013)

    Prototyping   Develop an experimental (prototypal) system   The system is used to help the customer and engineers understand and validate the

    requirements; not meant for customer delivery

      Throw-away prototyping: System is intended to be thrown away, so performance and reliability are of little concern

      Evolutionary prototyping: The prototype evolves into the delivered product

      Issues   Customers may not understand the prototype limitations (why should they

    bother spending more time and money if they have a working version?)   Shortcuts made in prototype get built-in to final system

    24 Software Engineering (Autumn, 2013)

  • Incremental Approach   The Incremental model is a combination of the classic model and iteration   A number of staggered passes through the classic cycle are planned

      Each pass delivers a defined increment of the system

      Prioritise features

      Customers can start to use the system after the delivery of the first increment

      Lower risk of complete failure

      Problems with component reuse and integration

    25

    Analysis Design Code Test

    Analysis Design Code Test

    Analysis Design Code Test

    Simple

    Feature rich

    Software Engineering (Autumn, 2013)

    The Spiral Model

    26

      This approach explicitly identifies and attempts to reduce risk

      Each phase is represented as a loop in a spiral

      The inner loop is feasibility study for instance

      Different approaches may be used for each loop

      Each loop is split into four sectors:

      Objective setting and risk analysis

      Risk reduction

      Development

      Project review

    Development

    Risk Reduction

    Review and planning

    Objectives

    Software Engineering (Autumn, 2013)

    Agile Approaches

      Business is global and change reigns supreme   Software exists everywhere in business environments   Rapid delivery and adaptation is critical

      Heavyweight approaches   Agile approaches attempt to meet these demands

      Manifesto for Agile Software Development (http://agilemanifesto.org/)

      Individuals and interactions over processes and tools   Working software over comprehensive documentation   Customer collaboration over contract negotiation   Responding to change over following a plan Examples

    27

      But with software - design is hard and expensive, but construction is cheap

      So perhaps we don’t need to aim for a precise design, to be constructed in a separate phase

      And perhaps we can’t anyhow   “the requirements keep changing”

    Agile Issues

    28

      Customers need to be willing to spend time with the development team and need to represent the various stakeholders

      They also have to accept that they cannot have a fixed product at a fixed price

      The development team members need to be able to “play nicely together”

      Different stakeholder have different priorities, so how do you prioritise changes?

      Elegant solutions take time, understanding and focus

    Software Engineering (Autumn, 2013)

  • eXtreme Programming (XP)   The most famous agile approach to SE (but there are others such as Scrum)

    http://www.extremeprogramming.org/

      Requirements are expressed by the customers as (short) user stories

      Time estimation (1-3 weeks of ideal dev time)

      Acceptance test

      Pair programming

      Unit tests are written before the code

      Continuous integration with all unit tests passing

      The code is collectively owned

      Stand up meetings at the beginning of each day

      Heavy emphasis on refactoring to simplify designs

    29 Software Engineering (Autumn, 2013)

    Other Approaches

      Heavyweight and agile approaches presume engineering within a business environment

      Software systems can, however, be engineered using less controlled approaches

      Examples:   Cowboy Coding   Free Software/Open Source

    30 Software Engineering (Autumn, 2013)

    Cowboy Coding

      The SE anti-pattern

      Programmers do as they please   Can be lone wolf or a pack

      Limited interference from management and clients

      Reliance on the quick and dirty

      Lack of analysis

      Can be useful for small projects and sometimes these payoff.

    31

    Some projects that started out Cowboy

    32

      Adobe Photoshop   Apache HTTP Server

      Facebook

      Google

      Linux   MySQL

      Most student projects

    Software Engineering (Autumn, 2013)

  • Free Software: Open Source Development   Free as in freedom

      The software can be used, studied, modified and redistributed without restriction

      The source code is made available with the distribution on the software

      The software evolves by the users, for the users

      Cooperative development undertaken voluntarily

      Examples   Linux   Apache HTTP Server   Eclipse IDE   Mozilla Firefox

    33 Software Engineering (Autumn, 2013)

    Summary   There are a number of approaches to SE including:

      Heavyweight   Lightweight (agile)   Cowboy coding   Open Source

      They each have strength and weaknesses

      Influencing factors include

      Size of project   Knowledge of requirements   Delivery environment   Philosophy

    34 Software Engineering (Autumn, 2013)