HOME

TheInfoList



OR:

This is a list of approaches, styles, methodologies, philosophies in software development and engineering. It also contains
programming paradigm Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms. Some paradigms are concerned mainly with implications for the execution model of the language, suc ...
s, software development methodologies,
software development process In software engineering, a software development process is a process of dividing software development work into smaller, parallel, or sequential steps or sub-processes to improve design, product management. It is also known as a software deve ...
es, and single practices, principles and laws. Some of the mentioned methods are more relevant to a specific field than another, such as automotive or aerospace. The trend towards agile methods in software engineering is noticeable, however the need for improved studies on the subject is also paramount. Also note that some of the methods listed might be newer ''or'' older ''or'' still in use ''or'' out-dated, and the research on software design methods is not new and on-going.


Software development methodologies, guidelines, strategies


Large-scale programming styles

*
Behavior-driven development In software engineering, behavior-driven development (BDD) is an agile software development process that encourages collaboration among developers, quality assurance experts, and customer representatives in a software project. It encourages teams ...
* Design-driven development *
Domain-driven design Domain-driven design (DDD) is a major software design approach, focusing on modeling software to match a domain according to input from that domain's experts. Under domain-driven design, the structure and language of software code (class names ...
* Secure by design * Test-driven development **
Acceptance test-driven development Acceptance test–driven development (ATDD) is a development methodology based on communication between the business customers, the developers, and the testers. ATDD encompasses many of the same practices as specification by example (SBE), behavi ...
** Continuous test-driven development **
Specification by example Specification by example (SBE) is a collaborative approach to defining software requirement, requirements and business-oriented functional tests for software products based on capturing and illustrating requirements using realistic examples instea ...
* Data-driven development * Data-oriented design


Specification-related paradigms

*
Iterative and incremental development Iterative and incremental development is any combination of both iterative design or iterative method and incremental build model for development. Usage of the term began in software development, with a long-standing combination of the two terms ...
*
Waterfall model The waterfall model is a breakdown of project activities into linear sequential phases, meaning they are passed down onto each other, where each phase depends on the deliverables of the previous one and corresponds to a specialization of tasks. ...
*
Formal methods In computer science, formal methods are mathematically rigorous techniques for the specification, development, and verification of software and hardware systems. The use of formal methods for software and hardware design is motivated by the exp ...


Comprehensive systems

*
Agile software development In software development, agile (sometimes written Agile) practices include requirements discovery and solutions improvement through the collaborative effort of self-organizing and cross-functional teams with their customer(s)/ end user(s), ...
** Lean software development * Lightweight methodology ** Adaptive software development ** Extreme programming ** Feature-driven development ** ICONIX * Kanban (development) *
Unified Process The Unified Software Development Process or Unified Process is an iterative and incremental software development process framework. The best-known and extensively documented refinement of the Unified Process is the Rational Unified Process (R ...
** Rational Unified Process ** OpenUP **
Agile Unified Process Agile Unified Process (AUP) is a simplified version of the Rational Unified Process (RUP) developed by Scott Ambler. It describes a simple, easy to understand approach to developing business application software using agile techniques and concept ...


Rules of thumb, laws, guidelines and principles


300 Rules of Thumb and Nuggets of Wisdom
(excerpt from ''Managing the Unmanageable - Rules, Tools, and Insights for Managing Software People and Teams'' by Mickey W. Mantle, Ron Lichty) *Karpov'
42 Ultimate Question of Programming, Refactoring, and Everything
* Big ball of mud * Brooks's law *C++ Core Guidelines (Stroustrup/Sutter) ''P1 - P13'' Philosophy rules * Code reuse * Command–query separation (CQS) * Cowboy coding * Do what I mean (DWIM) *
Don't repeat yourself "Don't repeat yourself" (DRY) is a principle of software development aimed at reducing repetition of software patterns, replacing it with abstractions or using data normalization to avoid redundancy. The DRY principle is stated as "Every piece of ...
(DRY) * Egoless programming * Fail-fast * Gall's law * General Responsibility Assignment Software Patterns (GRASP) * If it ain't broke, don't fix it * Inheritance (OOP) * KISS principle * Law of Demeter, also known as the ''principle of least knowledge'' *
Law of conservation of complexity The law of conservation of complexity, also known as Tesler's Law, or Waterbed Theory, is an adage in human–computer interaction stating that every application has an inherent amount of complexity that cannot be removed or hidden. Instead, it mu ...
, also known as Tesler's Law *
Lehman's laws of software evolution In software engineering, the laws of software evolution refer to a series of laws that Lehman and Belady formulated starting in 1974 with respect to software evolution. The laws describe a balance between forces driving new developments on one han ...
* Loose coupling * Minimalism (computing) * Ninety–ninety rule * Open–closed principle * Package principles *
Pareto principle The Pareto principle states that for many outcomes, roughly 80% of consequences come from 20% of causes (the "vital few"). Other names for this principle are the 80/20 rule, the law of the vital few, or the principle of factor sparsity. Manag ...
* Parkinson's law * Principle of least astonishment (POLA) * Release early, release often *
Robustness principle In computing, the robustness principle is a design guideline for software that states: "be conservative in what you do, be liberal in what you accept from others". It is often reworded as: "be conservative in what you send, be liberal in what you a ...
, also known as Postel's law * Rule of least power *
Separation of concerns In computer science, separation of concerns is a design principle for separating a computer program into distinct sections. Each section addresses a separate '' concern'', a set of information that affects the code of a computer program. A concern ...
* Separation of mechanism and policy *
Single source of truth In information science and information technology, single source of truth (SSOT) architecture, or single point of truth (SPOT) architecture, for information systems is the practice of structuring information models and associated data schemas ...
(SSOT) *
Single version of the truth In computerized business management, single version of the truth (SVOT), is a technical concept describing the data warehousing ideal of having either a single centralised database, or at least a distributed synchronised database, which stores all ...
(SVOT) *
SOLID Solid is one of the four fundamental states of matter (the others being liquid, gas, and plasma). The molecules in a solid are closely packed together and contain the least amount of kinetic energy. A solid is characterized by structur ...
(object-oriented design) * There's more than one way to do it * Uniform access principle *
Unix philosophy The Unix philosophy, originated by Ken Thompson, is a set of cultural norms and philosophical approaches to minimalist, modular software development. It is based on the experience of leading developers of the Unix operating system. Early Uni ...
*
Worse is better Worse is better (also called the New Jersey style) is a term conceived by Richard P. Gabriel in an essay of the same name to describe the dynamics of software acceptance. It refers to the argument that software quality does not necessarily increa ...
* You aren't gonna need it (YAGNI)


Other

* Davis 201 Principles of Software Development * ''Don't Make Me Think'' (Principles of intuitive navigation and information design) *
The Art of Computer Programming ''The Art of Computer Programming'' (''TAOCP'') is a comprehensive monograph written by the computer scientist Donald Knuth presenting programming algorithms and their analysis. Volumes 1–5 are intended to represent the central core of com ...
(general computer-science masterpiece by Donald E. Knuth) *
The Cathedral and the Bazaar ''The Cathedral and the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary'' (abbreviated ''CatB'') is an essay, and later a book, by Eric S. Raymond on software engineering methods, based on his observations of the Linux ...
- book comparing top-down vs. bottom-up open-source software *The Philosophy of Computer Science *Where's the Theory for Software Engineering?


Programming paradigms

* Agent-oriented programming * Aspect-oriented programming (AOP) * Convention over configuration *
Component-based software engineering Component-based software engineering (CBSE), also called component-based development (CBD), is a branch of software engineering that emphasizes the separation of concerns with respect to the wide-ranging functionality available throughout a giv ...
*
Functional programming In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions tha ...
(FP) * Hierarchical object-oriented design (HOOD) *
Literate programming Literate programming is a programming paradigm introduced in 1984 by Donald Knuth in which a computer program is given as an explanation of its logic in a natural language, such as English, interspersed (embedded) with snippets of macros an ...
*
Logic programming Logic programming is a programming paradigm which is largely based on formal logic. Any program written in a logic programming language is a set of sentences in logical form, expressing facts and rules about some problem domain. Major logic pro ...
*
Modular programming Modular programming is a software design technique that emphasizes separating the functionality of a Computer program, program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of th ...
*
Object-oriented programming Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code. The data is in the form of fields (often known as attributes or ''properties''), and the code is in the form of ...
(OOP) *
Procedural programming Procedural programming is a programming paradigm, derived from imperative programming, based on the concept of the '' procedure call''. Procedures (a type of routine or subroutine) simply contain a series of computational steps to be carrie ...
* Reactive programming


Software development methodologies

*
Agile Unified Process Agile Unified Process (AUP) is a simplified version of the Rational Unified Process (RUP) developed by Scott Ambler. It describes a simple, easy to understand approach to developing business application software using agile techniques and concept ...
(AUP) *
Constructionist design methodology {{short description, Aspect of system integration regarding artificial intelligence The core idea of Artificial Intelligence systems integration is making individual software components, such as speech synthesizers, interoperable with other compone ...
(CDM) *
Dynamic systems development method Dynamic systems development method (DSDM) is an agile project delivery framework, initially used as a software development method. First released in 1994, DSDM originally sought to provide some discipline to the rapid application development ( ...
(DSDM) * Extreme programming (XP) *
Iterative and incremental development Iterative and incremental development is any combination of both iterative design or iterative method and incremental build model for development. Usage of the term began in software development, with a long-standing combination of the two terms ...
* Kanban * Lean software development * Model-based system engineering (MBSE) * Open Unified Process * Pair programming *
Rapid application development Rapid application development (RAD), also called rapid application building (RAB), is both a general term for adaptive software development approaches, and the name for James Martin's method of rapid development. In general, RAD approaches to ...
(RAD) * Rational Unified Process (RUP) * Rubber duck debugging * Scrum * Structured systems analysis and design method (SSADM) *
Unified Process The Unified Software Development Process or Unified Process is an iterative and incremental software development process framework. The best-known and extensively documented refinement of the Unified Process is the Rational Unified Process (R ...
(UP)


Software development processes

* Active-Admin-driven development (AADD) *
Behavior-driven development In software engineering, behavior-driven development (BDD) is an agile software development process that encourages collaboration among developers, quality assurance experts, and customer representatives in a software project. It encourages teams ...
(BDD) * Bug-driven development (BgDD) * Configuration-driven development (CDD) * Readme-driven development (RDD) * Design-driven development (D3) *
Domain-driven design Domain-driven design (DDD) is a major software design approach, focusing on modeling software to match a domain according to input from that domain's experts. Under domain-driven design, the structure and language of software code (class names ...
(DDD) * Feature-driven development (FDD) * Test-driven development (TDD) *
User-centered design User-centered design (UCD) or user-driven development (UDD) is a framework of process (not restricted to interfaces or technologies) in which usability goals, user characteristics, environment, tasks and workflow of a product, service or proc ...
(UCD) ( User-Driven Development (UDD)) * Value-driven design (VDD) *
Software review A software review is "a process or meeting during which a software product is examined by a project personnel, managers, users, customers, user representatives, or other interested parties for comment or approval".IEEE Std . 1028-1997, "IEEE Standa ...
* Software quality assurance


See also

* Anti-pattern * Coding conventions * Design pattern *
Programming paradigm Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms. Some paradigms are concerned mainly with implications for the execution model of the language, suc ...
* Software development methodology *
Software development process In software engineering, a software development process is a process of dividing software development work into smaller, parallel, or sequential steps or sub-processes to improve design, product management. It is also known as a software deve ...
*
Outline of computer science Computer science (also called computing science) is the study of the theoretical foundations of information and computation and their implementation and application in computer systems. One well known subject classification system for computer s ...
* Outline of software engineering * Outline of computer engineering * Outline of computer programming * Outline of software development *
Outline of web design and web development The following outline is provided as an overview of and topical guide to web design and web development, two very related fields: Web design encompasses many different skills and disciplines in the production and maintenance of websites. The di ...
*
Outline of computers The following outline is provided as an overview of and topical guide to computers: Computers – programmable machines designed to automatically carry out sequences of arithmetic or logical operations. The sequences of operations can be ch ...
* :Programming principles


Further reading

* ISO/IEC/IEEE 26515:2018(E) - ISO/IEC/IEEE International Standard - Systems and software engineering — Developing information for users in an agile environment


Other materials, books, articles, etc.

* ''
Don't Make Me Think ''Don't Make Me Think'' is a book by Steve Krug about human–computer interaction and web usability. The book's premise is that a good software program or web site should let users accomplish their intended tasks as easily and directly as pos ...
'' (book by
Steve Krug Steve Krug is a UX (User Experience) professional based in Chestnut Hill, Massachusetts. He is best known for his book '' Don't Make Me Think'' about human-computer interaction and web usability Web usability of a website are broad goals of usab ...
about
human computer interaction Humans (''Homo sapiens'') are the most abundant and widespread species of primate, characterized by bipedalism and exceptional cognitive skills due to a large and complex brain. This has enabled the development of advanced tools, culture, ...
and
web usability Web usability of a website are broad goals of usability and presentation of information and choices in a clear and concise way, a lack of ambiguity and the placement of important items in appropriate areas as well as ensuring that the content wor ...
)


References

{{Software engineering Software development process Methodology
Computer science Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to Applied science, practical discipli ...