List of software development philosophies
Encyclopedia
This is a list of approaches, styles, and philosophies in software development. It contains also software development processes
, software development methodologies
and single practices, principles and laws.
Software development process
A software development process, also known as a software development life cycle , is a structure imposed on the development of a software product. Similar terms include software life cycle and software process. It is often considered a subset of systems development life cycle...
, software development methodologies
Software development methodology
A software development methodology or system development methodology in software engineering is a framework that is used to structure, plan, and control the process of developing an information system.- History :...
and single practices, principles and laws.
- Agent-oriented programmingAgent-oriented programmingAgent-oriented programming is a programming paradigm introduced by Yoav Shoham in 1990 . In contrast to object-oriented programming paradigms where objects have many methods with variable parameters to them, agent-oriented objects typically have just one method, with a single parameter...
- Agile software developmentAgile software developmentAgile software development is a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams...
- Agile Unified ProcessAgile Unified ProcessAgile Unified Process is a simplified version of the IBM Rational Unified Process developed by Scott Ambler. It describes a simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP...
(AUP) - Aspect-oriented ProgrammingAspect-oriented programmingIn computing, aspect-oriented programming is a programming paradigm which aims to increase modularity by allowing the separation of cross-cutting concerns...
(AOP) - Behavior Driven DevelopmentBehavior driven developmentBehavior-driven development is an agile software development technique that encourages collaboration between developers, QA and non-technical or business participants in a software project...
(BDD) - Big Design Up FrontBig Design Up FrontBig Design Up Front is a term for any software development approach in which the program's design is to be completed and perfected before that program's implementation is started...
(BDUF) - Blind Men And Elephant ApproachBlind Men and an ElephantThe story of the blind men and an elephant originated in India from where it is widely diffused. It has been used to illustrate a range of truths and fallacies...
(BMAEA) - Brooks's law
- Cathedral and the BazaarThe Cathedral and the BazaarThe Cathedral and the Bazaar is an essay by Eric S. Raymond on software engineering methods, based on his observations of the Linux kernel development process and his experiences managing an open source project, fetchmail. It examines the struggle between top-down and bottom-up design...
(see also Release early, release oftenRelease early, release oftenRelease early, release often is a software development philosophy that emphasizes the importance of early and frequent releases in creating a tight feedback loop between developers and testers or users...
(RERO)) - Code and fix
- Cone of UncertaintyCone of UncertaintyIn project management, the Cone of Uncertainty describes the evolution of the amount of uncertainty during a project. At the beginning of a project, comparatively little is known about the product or work results, and so estimates are subject to large uncertainty...
- Constructionist design methodologyConstructionist design methodologyThe Constructionist Design Methodology was developed by artificial intelligence researcher Kristinn R. Thórisson and his students at Columbia University and Reykjavik University for use in the development of cognitive robotics, communicative humanoids and broad AI systems...
(CDM) - Continuous integrationContinuous integrationIn software engineering, continuous integration implements continuous processes of applying quality control — small pieces of effort, applied frequently...
- Control tableControl tableControl tables are tables that control the program flow or play a major part in program control. There are no rigid rules concerning the structure or content of a control table - its only qualifying attribute is its ability to direct program flow in some way through its 'execution' by an associated...
s - Convention over configurationConvention over ConfigurationConvention over configuration is a software design paradigm which seeks to decrease the number of decisions that developers need to make, gaining simplicity, but not necessarily losing flexibility....
- Conway's LawConway's LawConway's Law is an adage named after computer programmer Melvin Conway, who introduced the idea in 1968:...organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations....
- Cowboy codingCowboy codingCowboy coding is a term used to describe software development where programmers have autonomy over the development process. This includes control of the project's schedule, languages, algorithms, tools, frameworks and coding style....
- Crystal ClearCrystal Clear (software development)Crystal Clear is a member of the Crystal family of methodologies as described by Alistair Cockburn and is considered an example of an agile or lightweight methodology....
- Dependency injectionDependency injectionDependency injection is a design pattern in object-oriented computer programming whose purpose is to improve testability of, and simplify deployment of components in very large software systems....
- Design-driven developmentDesign-driven developmentDesign Driven Development is an agile-based process for creating innovative requirements to build better solutions. It works closely with SCRUM and Extreme Programming for managing and implementing those requirements...
(D3) - Design Driven Testing (DDT)
- Domain-Driven DesignDomain-driven designDomain-driven design is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts...
(DDD) - Don't Make Me ThinkDon't Make Me ThinkDon'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 possible...
(book by Steve Krug about human computer interaction and web usabilityWeb usabilityWeb usability is the application of usability in those domains where web browsing can be considered as a general paradigm for constructing a GUI.-General:...
) - Don't repeat yourselfDon't repeat yourselfIn software engineering, Don't Repeat Yourself is a principle of software development aimed at reducing repetition of information of all kinds, especially useful in multi-tier architectures...
(DRY) or Duplication is Evil (DIE) or Once and Only Once (OAOO), Single Point of Truth (SPoT), Single Source Of TruthSingle Source of TruthIn Information Systems design and theory, as instantiated at the Enterprise Level, Single Source Of Truth refers to the practice of structuring information models and associated schemata such that every data element is stored exactly once...
(SSOT) - Dynamic Systems Development MethodDynamic Systems Development MethodDynamic systems development method is an agile project delivery framework, primarily used as a software development method. DSDM was originally based upon the rapid application development method. In 2007 DSDM became a generic approach to project management and solution delivery...
(DSDM) - Easier to Ask Forgiveness than Permission (EAFP)
- Evolutionary prototyping
- Extreme ProgrammingExtreme ProgrammingExtreme programming is a software development methodology which is intended to improve software quality and responsiveness to changing customer requirements...
(XP) - Feature Driven DevelopmentFeature Driven DevelopmentFeature-driven development is an iterative and incremental software development process. It is one of a number of Agile methods for developing software and forms part of the Agile Alliance. FDD blends a number of industry-recognized best practices into a cohesive whole. These practices are all...
- Free software license
- Good Enough For Now (GEFN)
- General Responsibility Assignment Software Patterns (GRASP)
- Hollywood PrincipleHollywood PrincipleIn computer programming, the Hollywood principle is stated as "don't call us, we'll call you." It has applications in software engineering; see also implicit invocation for a related architectural principle.-Overview:...
- Inversion of controlInversion of ControlIn software engineering, Inversion of Control is an abstract principle describing an aspect of some software architecture designs in which the flow of control of a system is inverted in comparison to procedural programming....
- Iterative and incremental developmentIterative and incremental developmentIterative and Incremental development is at the liver of a cyclic software development process developed in response to the weaknesses of the waterfall model...
- Joint application designJoint application designJoint application design is a process used in the prototyping life cycle area of the Dynamic Systems Development Method to collect business requirements while developing new information systems for a company...
, aka JAD or "Joint Application Development" - KaizenKaizen, Japanese for "improvement", or "change for the better" refers to philosophy or practices that focus upon continuous improvement of processes in manufacturing, engineering, game development, and business management. It has been applied in healthcare, psychotherapy, life-coaching, government,...
- KanbanKanban (development)Kanban is a method for developing products with an emphasis on just-in-time delivery while not overloading the developers. It emphasizes that developers pull work from a queue, and the process, from definition of a task to its delivery to the customer, is displayed for participants to see.Kanban...
- KISS principleKISS principleKISS is an acronym for the design principle Keep it simple, Stupid!. Other variations include "keep it simple and stupid", "keep it short and simple", "keep it simple sir", "keep it simple or be stupid" or "keep it simple and straightforward"...
original (Keep It Simple and Stupid), derogatory (Keep It Simple, Stupid!) - Law of DemeterLaw of DemeterThe Law of Demeter or Principle of Least Knowledge is a design guideline for developing software, particularly object-oriented programs. In its general form, the LoD is a specific case of loose coupling...
(LoD) - Lean IntegrationLean IntegrationLean Integration is a management system that emphasizes creating value for customers, continuous improvement, and eliminating waste as a sustainable data integration and system integration practice. Lean Integration has parallels with other lean disciplines such as Lean Manufacturing, Lean IT, and...
- Lean software developmentLean software developmentLean software development is a translation of Lean manufacturing and Lean IT principles and practices to the software development domain. Adapted from the Toyota Production System, a pro-lean subculture is emerging from within the Agile community....
- Literate ProgrammingLiterate programmingLiterate programming is an approach to programming introduced by Donald Knuth as an alternative to the structured programming paradigm of the 1970s....
- Microsoft Solutions FrameworkMicrosoft Solutions FrameworkMicrosoft Solutions Framework is a set of principles, models, disciplines, concepts, and guidelines for delivering information technology solutions from Microsoft. MSF is not limited to developing applications only, it is also applicable to other IT projects like deployment, networking or...
(MSF) - Model-driven architectureModel-driven architectureModel-driven architecture is a software design approach for the development of software systems. It provides a set of guidelines for the structuring of specifications, which are expressed as models. Model-driven architecture is a kind of domain engineering, and supports model-driven engineering of...
(MDA) - MoSCoW MethodMoSCoW MethodMoSCoW is a prioritisation technique used in business analysis and software development to reach a common understanding with stakeholders on the importance they place on the delivery of each requirement - also known as MoSCoW prioritisation or MoSCoW analysis.According to A Guide to the Business...
- Open sourceOpen sourceThe term open source describes practices in production and development that promote access to the end product's source materials. Some consider open source a philosophy, others consider it a pragmatic methodology...
- Open Unified ProcessOpenUPThe Open Unified Process is a part of the Eclipse Process Framework , an open source process framework developed within the Eclipse Foundation...
- Principle of least astonishmentPrinciple of least astonishmentThe principle of least astonishment applies to user interface design, software design, and ergonomics. It is alternatively referred to as the rule or law of least astonishment, or the rule or principle of least surprise .The POLA states that, when two elements of an interface conflict, or are...
(POLA/PLA) - Principle of good enoughPrinciple of good enoughThe principle of good enough is a rule for software and systems design. It favours quick-and-simple designs over elaborate systems designed by committees. Once the quick-and-simple design is deployed, it can then evolve as needed, driven by user requirements...
(POGE) - Quick-and-dirtyQuick-and-dirtyQuick-and-dirty is a term used in reference to anything that is an easy way to implement a workaround or "kludge". Its usage is popular among programmers, who use it to describe a crude solution or programming implementation that is imperfect, inelegant, or otherwise inadequate, but which solves or...
- Rapid application developmentRapid application developmentRapid application development is a software development methodology that uses minimal planning in favor of rapid prototyping. The "planning" of software developed using RAD is interleaved with writing the software itself...
(RAD) - Rational Unified ProcessIBM Rational Unified ProcessThe Rational Unified Process is an iterative software development process framework created by the Rational Software Corporation, a division of IBM since 2003...
(RUP) - Release early, release oftenRelease early, release oftenRelease early, release often is a software development philosophy that emphasizes the importance of early and frequent releases in creating a tight feedback loop between developers and testers or users...
(RERO) - see also The Cathedral and the BazaarThe Cathedral and the BazaarThe Cathedral and the Bazaar is an essay by Eric S. Raymond on software engineering methods, based on his observations of the Linux kernel development process and his experiences managing an open source project, fetchmail. It examines the struggle between top-down and bottom-up design... - Responsibility-driven designResponsibility-driven designResponsibility-driven design is a design technique in Object-oriented programming. It was proposed by Rebecca Wirfs-Brock and Brian Wilkerson who defined it as follows:Responsibility-driven design is inspired by the client/server model...
(RDD) - ScrumScrum (development)Scrum is an iterative, incremental framework for project management often seen in agile software development, a type of software engineering....
- Separation of concernsSeparation of concernsIn computer science, separation of concerns is the process of separating a computer program into distinct features that overlap in functionality as little as possible. A concern is any piece of interest or focus in a program. Typically, concerns are synonymous with features or behaviors...
(SoC) - Service-oriented modelingService-oriented modelingService-oriented modeling is the discipline of modeling business and software systems, for the purpose of designing and specifying service-oriented business systems within a variety of architectural styles, such as enterprise architecture, application architecture, service-oriented architecture,...
- Software craftsmanshipSoftware CraftsmanshipSoftware craftsmanship is an approach to software development that emphasizes the coding skills of the software developers themselves. It is a response by software developers to the perceived ills of the mainstream software industry, including the prioritization of financial concerns over developer...
- Software System SafetySoftware System SafetyIn software engineering, software system safety optimizes system safety in the design, development, use, and maintenance of software systems and their integration with safety-critical hardware systems in an operational environment.-Overview:...
- SOLID (object-oriented design)
- Spiral modelSpiral modelThe spiral model is a software development process combining elements of both design and prototyping-in-stages, in an effort to combine advantages of top-down and bottom-up concepts. Also known as the spiral lifecycle model , it is a systems development method used in information technology...
- Structured Systems Analysis and Design MethodStructured Systems Analysis and Design MethodStructured systems analysis and design method is a systems approach to the analysis and design of information systems. SSADM was produced for the Central Computer and Telecommunications Agency , a UK government office concerned with the use of technology in government, from 1980 onwards.- Overview...
(SSADM) - SUMMIT Ascendant (now IBM Rational SUMMIT Ascendant)
- Team Software ProcessTeam Software ProcessIn combination with the Personal Software Process , the Team Software Process provides a defined operational process framework that is designed to help teams of managers and engineers organize projects and produce software products that range in size of sizes beyond from small projects of several...
(TSP) - Test-driven developmentTest-driven developmentTest-driven development is a software development process that relies on the repetition of a very short development cycle: first the developer writes a failing automated test case that defines a desired improvement or new function, then produces code to pass that test and finally refactors the new...
(TDD) - Two Tracks Unified Process (2TUP)
- Ubuntu philosophy
- Unified ProcessUnified ProcessThe Unified Software Development Process or Unified Process is a popular iterative and incremental software development process framework. The best-known and extensively documented refinement of the Unified Process is the Rational Unified Process ....
(UP) - Unix philosophyUnix philosophyThe Unix philosophy is a set of cultural norms and philosophical approaches to developing software based on the experience of leading developers of the Unix operating system.-McIlroy: A Quarter Century of Unix:...
- V-ModelV-Model (software development)The V-model represents a software development process which may be considered an extension of the waterfall model. Instead of moving down in a linear way, the process steps are bent upwards after the coding phase, to form the typical V shape...
- Waterfall modelWaterfall modelThe waterfall model is a sequential design process, often used in software development processes, in which progress is seen as flowing steadily downwards through the phases of Conception, Initiation, Analysis, Design, Construction, Testing, Production/Implementation and Maintenance.The waterfall...
- Wheel and spoke modelWheel and spoke modelThe Wheel And Spoke Model is a sequentially parallel software development model. It is essentially a modification of the spiral model that is designed to work with smaller initial teams, which then scale upwards and build value faster. It is best used during the design and prototyping stages of...
- When it's ready http://blog.mozilla.com/ftr/2008/02/11/when-its-ready/
- Win-Win Model
- Worse is betterWorse is betterWorse is better, also called the New Jersey style, was conceived by Richard P. Gabriel to describe the dynamics of software acceptance, but it has broader application. The idea is that quality does not necessarily increase with functionality. There is a point where less functionality is a...
(New Jersey style, as contrasted with the MIT approach) - You Ain't Gonna Need ItYou Ain't Gonna Need It"You ain't gonna need it" is the principle in extreme programming that programmers should not add functionality until it is necessary...
(YAGNI)
See also
- Anti-patternAnti-patternIn software engineering, an anti-pattern is a pattern that may be commonly used but is ineffective and/or counterproductive in practice.The term was coined in 1995 by Andrew Koenig,...
- Design patternDesign pattern (computer science)In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that...
- Programming paradigmProgramming paradigmA programming paradigm is a fundamental style of computer programming. Paradigms differ in the concepts and abstractions used to represent the elements of a program and the steps that compose a computation A programming paradigm is a fundamental style of computer programming. (Compare with a...
- Software development methodologySoftware development methodologyA software development methodology or system development methodology in software engineering is a framework that is used to structure, plan, and control the process of developing an information system.- History :...
- Software development processSoftware development processA software development process, also known as a software development life cycle , is a structure imposed on the development of a software product. Similar terms include software life cycle and software process. It is often considered a subset of systems development life cycle...