Software is different from hardware

Software is different from hardware

Author: From The General Principles of Software Validation, explained by

While software shares many of the same engineering tasks as hardware, it has some very important differences.
For example:

The vast majority of software problems are traceable to errors made during the design and development process. While the quality of a hardware product is highly dependent on design. Development and manufacture, the quality of a software product is dependent primarily on design and development with a minimum concern for software manufacture. Software manufacturing consists of reproduction that can be easily verified. It is not difficult to manufacture thousands of program copies that function exactly the same as the original.

One of the most significant features of software branching, i.e the ability to execute alternative series of commands, based on different inputs. This feature is a major contributing factor for another characteristic of software its complexity, even short programs can be difficult to understand.
Typically, testing is not enough to verify that software is complete and correct. In addition to testing other verification techniques and a structured and documented development process should be combined to ensure a comprehensive validation approach.

Unlike hardware, software is not a physical entity and does not wear out. In fact, software may improve with age as errors and glitches are removed. However as software is constantly updated and changed, such improvements are sometimes countered by new defects introduced into the software during the change.

Unlike some hardware failures, software failures occur without advanced warnings. The software branching that allows it to follow different paths during execution, may hide some latent defects until long after a software product has been introduced into the market place.

Another related characteristic of software is the speed and ease with which it can be changed. This factor can cause both software ad non-software professionals to believe that software problems can be corrected easily. Combined with a lack of understanding of software, it can lead managers to believe that that tightly controlled engineering is not needed as much for software as it is for hardware. In fact the opposite is true, because of it’s complexity, the development process for software should be even more tightly controlled than for hardware, in order to prevent problems that cannot be easily detected later in the development process.

Seemingly insignificant changes in software code can create unexpected and very significant problems elsewhere in the software program. The software development process should be sufficiently well planned, controlled, and documented to detect and correct unexpected results from software changes.
Given the high demand for software professional and the highly mobile workforce, the software personnel who make maintenance changes to software may not have been involved in the original software development. Therefore accurate and through documentation is essential.
For these and other reasons, software engineering needs an even greater level of managerial scrutiny and control than does hardware engineering.