1.1.B. Software Engineering Overview - Good Software

1.1. Software Engineering Overview

Part b: Good Software

How Successful Have We Been?

  • Enabled performing tasks quickly and effectively
    • Word processing, spreadsheets, e-mail
  • Support advances in medicine, agriculture, transportation, multimedia education, and most other industries
  • Many good stories
  • However, software is not without problems

Terminology for Describing Bugs

Pasted image 20220925164857.png

There is some specific terminology to this.

  • A fault is what exists in the software that can lead to a failure.
    • As software developers, we will be looking at faults within the source code, within the configuration, or within intergration issues with other applications.
    • This is how we will try to solve the faults.
  • Failure
    • This is what the user sees from using the application.
    • It is what is observable by running the program and running into problems.
  • Human error
    • This is what leads to a bug existing in the code and reflecting itself in the real world when the user tries to use the application.
    • Human error can lead to the fault, which then can lead to the failure in the application.

Not all faults lead to a failure because of the way that users use a particular program, there will likely be functionality that never ends up being used in the real-world.
To emphasise, human error can lead to fault, which can lead to a failure. These are classified as bugs or defects. The terminology (human error, fault or failure) will depend on the perspective of a developer, a tester or a user.

Examples of Software Failure

  • In the USA, IRS hired Sperry Corportation to build an automated federal income tax form processing process
    • An extra $90M was needed to enhance the original $103M product, losing $40.2M on interests + $22.3M in overtime wages because refunds were not returned on time.
  • Malfunctioning code in Therac-25 killed several people.
  • Reliability constraints have caused cancellation of many safety critical systems.
    • Safety-critical: something whose failure poses a threat to life or health -> should have a reliability of 10^9 (fail no more than once in 10^9 hours of operation)

What is Good Software?

  • Good software engineering must always include a strategy for producting quality software.

    • Part of the problem was not understanding the requirements correctly. (e.g: not understanding what was necessary for the IRS/Therac-25 which led to probems)
    • There are problems which are not necessarily mistakes made during the programming stage, but mistakes that preceded these which are the cause of these issues.
  • There are three main ways of considering quality.

    • The quality of the product
      • Is it reliable and robust, or is it bug-ridden?
    • The quality of the process
      • Is there a good process in place to develop the software that wuld lead it to be high quality?
      • Do we conduct tests early or do we leave them for later in the process?
    • The quality of the product in the context of the business environment
      • Software is there for a reason to solve a particular business matter, so we need to take this into account.
  • Quality of the product can mean performing well in many categories, such as:

    • Correctness
    • Reliability
    • Efficiency
    • Usability
    • Maintainability
    • Reusability

The Quality of the Process

  • Quality of the development and maintenance process is as important as the product quality.

    • Without a good process, there may be some mistakes that slip through until the end of development that may not be noticed until it is too late.
  • The development process needs to be modeled, to address questions such as:

    • Where to find a particular kind of fault
    • How to find faults early
    • How to build in fault tolerance
    • What are alternative activities
  • Models for process improvement

    • SEI's Capability Maturity Model (CMM)
    • ISO 9000
    • Software Process Improvement and Capability dEtermination (SPICE)

The Quality in the Context of the Business Environment

  • Business value is as important as technical value for the success of a product.
  • A common approach to quantify: return on investment (ROI)
    • ROI is interpreted in different terms: reducing costs, predicting savings, improving productivity, and costs (efforts and resources)