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
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.
- The quality of the product
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)