Software entropy
   HOME

TheInfoList




Software entropy is the idea that software eventually rots as it is changed if sufficient care isn't taken to maintain coherence with product design and established design principles. The common usage is only tangentially related to
entropy Entropy is a scientific concept as well as a measurable physical property that is most commonly associated with a state of disorder, randomness, or uncertainty. The term and the concept are used in diverse fields, from classical thermodynamic ...

entropy
as defined in
classical thermodynamics Thermodynamics is a branch of physics that deals with heat, Work (thermodynamics), work, and temperature, and their relation to energy, entropy, and the physical properties of matter and radiation. The behavior of these quantities is governed b ...
and
statistical physics Statistical physics is a branch of physics Physics is the natural science that studies matter, its Elementary particle, fundamental constituents, its Motion (physics), motion and behavior through Spacetime, space and time, and the related ...
. Another aspect can be found in what is perceived to be a decay in the quality of otherwise static software that is the result of the inevitable changes to its environment, that often occur as operating systems and other components are upgraded or retired. Ignoring the effects of cosmic rays and heat on storage media, this may be the closest we get to the
classical thermodynamics Thermodynamics is a branch of physics that deals with heat, Work (thermodynamics), work, and temperature, and their relation to energy, entropy, and the physical properties of matter and radiation. The behavior of these quantities is governed b ...
idea of
entropy Entropy is a scientific concept as well as a measurable physical property that is most commonly associated with a state of disorder, randomness, or uncertainty. The term and the concept are used in diverse fields, from classical thermodynamic ...

entropy
.


History

A work on
software engineering Software engineering is the systematic application of engineering Engineering is the use of scientific principles to design and build machines, structures, and other items, including bridges, tunnels, roads, vehicles, and buildings. The d ...
by
Ivar Jacobson Ivar Hjalmar Jacobson (born 1939) is a Swedish Swedish or ' may refer to: * Anything from or related to Sweden, a country in Northern Europe * Swedish language, a North Germanic language spoken primarily in Sweden and Finland * Swedish alphabe ...
et al, in 1992 describes software entropy as follows: :The
second law of thermodynamics The second law of thermodynamics establishes the concept of entropy Entropy is a scientific concept, as well as a measurable physical property that is most commonly associated with a state of disorder, randomness, or uncertainty. The term an ...
, in principle, states that a
closed system A closed system is a physical system A physical system is a collection of physical objects. In physics, it is a portion of the physical universe chosen for analysis. Everything outside the system is known as the environment (systems), environm ...
's disorder cannot be reduced, it can only remain unchanged or increase. A measure of this disorder is
entropy Entropy is a scientific concept as well as a measurable physical property that is most commonly associated with a state of disorder, randomness, or uncertainty. The term and the concept are used in diverse fields, from classical thermodynamic ...

entropy
. This law also seems plausible for
software system A software system is a system A system is a group of Interaction, interacting or interrelated elements that act according to a set of rules to form a unified whole. A system, surrounded and influenced by its environment, is described by its ...
s; as a system is modified, its disorder, or entropy, tends to increase. This is known as software entropy. :Within
software development Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications Application may refer to: Mathematics and computing * Application ...
, there are similar theories; see Lehman (1985), who suggested a number of laws, of which two were, basically, as follows: :# A
computer program In imperative programming, a computer program is a sequence of instructions in a programming language that a computer can execute or interpret. In declarative programming, a ''computer program'' is a Set (mathematics), set of instructions. A comp ...
that is used will be modified :# When a program is modified, its
complexity Complexity characterises the behaviour of a system A system is a group of Interaction, interacting or interrelated elements that act according to a set of rules to form a unified whole. A system, surrounded and influenced by its environme ...
will increase, provided that one does not actively work against this. In 1999, Andrew Hunt and David Thomas use
fixing broken windows Fixing may refer to: * The present participle of the verb "to fix", an action meaning maintenance, repair, and operations * "fixing someone up" in the context of arranging or finding a social date for someone * "Fixing", craving an addictive drug, ...
as a metaphor for avoiding software entropy in software development.


Relation to information theory


Software source code is information

The purpose of writing software is to
encode The Encyclopedia of DNA Elements (ENCODE) is a public research project which aims to identify functional elements in the human genome The human genome is a complete set of nucleic acid sequences for humans, encoded as DNA within the 23 chromosom ...

encode
domain Domain may refer to: Mathematics *Domain of a function In mathematics, the domain of a Function (mathematics), function is the Set (mathematics), set of inputs accepted by the function. It is sometimes denoted by \operatorname(f), where is th ...
and
design A design is a plan or specification for the construction of an object or system or for the implementation of an activity or process, or the result of that plan or specification in the form of a prototype A prototype is an early sample, mode ...
knowledge, in source form(s) that can be translated to executable destination format(s). As such, to the extent that the source is a coherent, noise free encoding of the relevant knowledge sets, its entropy may be considered to be low. After initial development and acceptance, the code enters the maintenance phase of the
software lifecycle In software engineering, a software development process is the process of dividing software development Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved ...

software lifecycle
, where it may be allowed to accumulate defects (noise), represented by divergence from those knowledge sets (domain and software design principles), and thereby increase the entropy of the software.


Relation to complexity

While there are known correlations (see software complexity), there is no direct relationship between software complexity and software entropy. Any two pieces of software, with equivalent complexity levels, can exist at different levels of entropy or rot. Even a very simple program, can suffer high levels of entropy as it passes through the hands of multiple developers.


Avoidance

The process of
code refactoring In computer programming Computer programming is the process of designing and building an executable computer program to accomplish a specific computing result or to perform a particular task. Programming involves tasks such as analysis, gen ...
can result in stepwise reductions in software entropy.


See also

*
Feature creep Feature creep is the excessive ongoing expansion or addition of new features Feature may refer to: Computing * Feature (CAD), could be a hole, pocket, or notch * Feature (computer vision), could be an edge, corner or blob * Feature (soft ...
*
Software bloat Software bloat is a process whereby successive versions of a computer program In imperative programming, a computer program is a sequence of instructions in a programming language that a computer can execute or interpret. In declarative programm ...
*
Software brittleness In computer programming Computer programming is the process of designing and building an executable computer program to accomplish a specific computing result or to perform a particular task. Programming involves tasks such as analysis, genera ...
* Software rot * Fail-fast programming pattern to reduce software entropy * Algorithmic information theory


References

Metaphors Software metrics Software quality Software engineering terminology Software maintenance {{software-eng-stub