< Software Design

Complexity is a software, interface, and code quality characterizing the number of different states and the number and the non-regularity of interactions (relations, transitions) between the states of the software (states of the abstraction behind the interface, elements of code). This notion corresponds to Wikipedia's definition of programming complexity.

Alternatively, according to Rich Hickey, complexity (or, framed in the opposite direction, simplicity) is the quality characterized by intertwining of multiple roles, tasks, concepts, dimensions, or concerns in one entity (such as code construct, interface, or software).[1]

Difference with the definition from A Philosophy of Software Design

The definition of complexity used in the Software Design project differs from the John Ousterhout's definition from A Philosophy of Software Design: "complexity is anything related to the structure of a software system that makes it hard to understand and modify the system."[2] In other words, the Software Design project's complexity is a primary quality, whereas Ousterhout's complexity is a high-level quality derived from the Software Design project's complexity, but also from many other primary qualities:

See Software Design § Primary vs. high-level qualities.

Relevant practices

References

  1. Hickey, Rich (October 20, 2011). "Simple Made Easy".
  2. Ousterhout, John (2018). A Philosophy of Software Design. ISBN 978-1732102200. Chapter 2.1 "Complexity defined"
This article is issued from Wikiversity. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.