... therefore the software development process must accomodate and reconcile the imperfections of humanity. Until they have been vetted, programs will have defects; we must expect that. The idea is to catch the defects sooner rather than later, and to have a system in place for fixing the defects whenever they're caught.
Any non-trivial IT operation needs corporate level change control surrounding all changes. Corporate "change control" is a process by which each party who could possibly be affected by a change gets a chance to examine the consequences of that change, and either grant or withhold approval for the timing of that change. The "Change Control Board" is a nexus for communication; it's primary responsibility is to assess and control risk to the system. (Every change carries risk.)
To maintain accountability, software passes through a release management process before it gets inserted into production or distributed to clients This process provides answers to the questions "what is it" and "is it good?" Quality assurance (or "QA") testing determines what the defects are, so that the product won't be released until the known defects are acceptably minor, thus answering the question "is it good?" Release management stamps a version number on the product; the version number is associated with particular revisions of source code, which provides the answer to the question "what is it."
The most basic condition for release is that quality assurance has been performed on the product. "Quality Assurance" (or "QA") does at least the following: It reports how many of the expected functional changes are actually delivered, it checks that the new functionalities work as expected, and it makes sure that old functionalities are not broken.
To make sure that bugs are noted and not forgotten, defect tracking systems are employed. "Defect Tracking" is the process of cataloging defects, prioritizing them, and tracking progress through to resolution. Sometimes the defect tracking system used for bugs is also used for "feature requests;" this can work when the system designed for bug-fix requests is adaptable to other kinds of code-change requests.
Because source code is constantly being revised, version numbers are used to identify what is being tested or released. A "version number" identifies a particular state within a source code control systems A "source code control system" is a repository and, among other things, it is the official handoff mechanism for programs that are to be tested or released. Source control allows software to continue evolving even as various participants in the process need access to different stages of that evolution.