Software Development and Software Engineering

Lecture 13 - February 3rd, 2017

Software Development and Software Engineering

Why does it matter?

  • Software is being integrated into everythnig we own
    • coffee makers
    • refrigerators
    • cars
    • airplanes

The high cost of software bugs

  • "The cost to fix an error found after product release was four to five times as much as one uncovered during design, and up to 100 times more than one identified in the maintenance phase."

    • If a bug is found in the requirements-gathering phase, the cost could be $100.
    • If the product owner doesn't
  • A 2003 study commisioned by the Department of Commerce's National Institure of Standards and Technology found that software bugs cost the US economy $59.5 billion annually.

    • AND that was almost 15 years ago!

Software Bugs

  • NASA Mars Polar Lander
  • Spacecrart Mars Climate Orbiter
  • NASA Mariner 1
  • FORTRAN Software
  • Therac-25
  • Knight Capital Group
  • Bank of Queensland

What is software?

  • Source Code, Executables and Documentation
  • It's invisible/intagible
  • Conceptual Complexity
  • "Softness"

Desired qualities of software?

  • Correctness
  • Reliability
  • Safety
  • Usability
  • Efficiency
  • Interoperability
  • Maintainability
  • Portability
  • Customizability
  • Extensibility
  • Reusability
  • Others?

What is software engineering?

  • Software Engineering is...
    • Discipline that applies theories, methods, and tools to solve problems related to software production and maintance
    • Software engineers strive to deliver high- quality software that satisfies users’ needs, on time and within budget

Why is software engineering an important discipline?

What are some of the main challenges in developing software?

Laws of evolution...

  • Software that remains useful over time, will
    • continually change...
    • become more complex
    • increase in size
    • decrease in quality

Free Puppy = Free Software

History of Software Engineering

  • Term coined in 1968 due to The Software Crisis!
    • "The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem.” Edsger Dijkstra, 1972
  • Still debated a bit what the term "software engineering" means!

No Silver Bullet

  • "there is no single development, in either technology or management technique, which by itself promises even one order of magnitude [tenfold] improvement within a decade in productivity, in reliability, in simplicity.“ Fred Brooks, 1986

  • Difference between essential complexity

Fred Books

  • Brook's Law: "adding manpower to a late software project makes it later."
  • Watch for the "second system effect."
  • The tendency towards irreductible number of errors
  • Question:
    • How does a large sofware project get to be one year late?
    • One day at a time!
  • Always design a system to throw away
  • "good" programmer are generally five to ten times as productive as mediocre ones.

Software process (1)

  • A software process is a set of activities are:
    • Specifications:
      • Defines what the software should do, and its operational constraints
    • Design and Implementation:
      • Designs the solutions, and produces the source code to meet the specification
    • Validation:
      • Checks that the software produced is what the customer wants
    • Evolution:
      • Changes made to the software that meet user's changing needs

More fin grained steps

Why follow a given process?

  • Repeatability
  • Manageability
  • Measurability

  • Interim work products

  • Activities are less likely to be forgotten

What kind of process...

Flowchart from Slide

Waterfall Model

Water model in practice

Agile development and extreme programming

  • Approach to software development that is: humanistic and lightweight
  • Relies heavily on feedback and communication

Characteristics:

  • Pair programming
  • Test-first design
  • Refactoring
  • Continous integration
  • Collective ownership
  • Coding standards
  • 40 hour week
  • Customer on team

Continuous Integration

  • Every programmers has their own version of the code, which they work on on their own computer.
  • Changes are synchronized with a version control program like git
  • Programmers integrate code changes often, even several times a day

  • Communication is facilitated through:

    • source code
    • test cases
    • system structure
    • use case scenarios
    • task estimation
  • Pair Programming:

    • Two programmers work together at one computer
      • Observer/Navigator
        • strategize over direction
        • think of improvements
        • see likely future problems to address
        • bigger picture
      • Driver
        • actually writes the code
        • more details oriented
      • Switch roles often to prevent fatigue, leep interest
      • More man power BUT less code defects
      • Great learning experience
      • Better for complex task
  • Software Testing:

    • Every line of code is tested (in practice, impossible)
    • Test -> while coding, before coding
  • Ethics...

    • ACM/IEEE Software Engineering Code of Ethics and Professional Practice
    • Eight Priniciples

Ethical Dilemmas?

  • Your employers acts unethical
  • You participate in the development of military weapons or nuclear systems
  • Produce Malware
  • Others?

Open Source:

  • Sort of like a bazaar (Production Code like a cathedral)

Things to think about:

  • How is software engineering different from other kinds of engineering (e.g. civil, mechanical, electrical etc)?
  • How is software engineering different from computer science?

Summary

  • Software engineering is an exciting field!
  • Combines elements of engineering, computer science, social sciences, business, management....
  • Can be interdisciplinary
  • Is an important profession! Software engineers are in high demand!