List of software development philosophies
This is a list of approaches, styles, methodologies, and philosophies in software development and engineering. It also contains programming paradigms, software development methodologies, software development processes, and single practices, principles, and laws.
| Part of a series on | 
| Software development | 
|---|
Some of the mentioned methods are more relevant to a specific field than another, such as automotive or aerospace.[1][2] The trend towards agile methods in software engineering is noticeable,[3] however the need for improved studies on the subject is also paramount.[4][5] 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.[6][7][8][9]
Software development methodologies, guidelines, strategies
    
    Large-scale programming styles
    
- Behavior-driven development
 - Design-driven development
 - Domain-driven design
 - Secure by design
 - Test-driven development
 - Data-driven development
 - Data-oriented design
 
Specification-related paradigms
    
- Iterative and incremental development
 - Waterfall model
 - Formal methods
 
Comprehensive systems
    
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[10] by Mickey W. Mantle, Ron Lichty)
 - ACID
 - Big ball of mud
 - Brooks's law
 - C++ Core Guidelines[11] (Stroustrup/Sutter) P1 - P13 Philosophy rules
 - CAP theorem
 - Code reuse
 - Command–query separation (CQS)
 - Conway's law
 - Cowboy coding
 - Do what I mean (DWIM)
 - Don't repeat yourself (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, also known as Tesler's Law
 - Lehman's laws of software evolution
 - Loose coupling
 - Minimalism (computing)
 - Ninety–ninety rule
 - Open–closed principle
 - Package principles
 - Pareto principle
 - Parkinson's law
 - Principle of least astonishment (POLA)
 - Release early, release often
 - Robustness principle, also known as Postel's law
 - Rule of least power
 - SEMAT
 - Separation of concerns
 - Separation of mechanism and policy
 - Single source of truth (SSOT)
 - Single version of the truth (SVOT)
 - SOLID (object-oriented design)
 - There's more than one way to do it
 - Uniform access principle
 - Unix philosophy
 - Worse is better
 - You aren't gonna need it (YAGNI)
 
Other
    
- Davis 201 Principles of Software Development[12]
 - Don't Make Me Think (Principles of intuitive navigation and information design)[13]
 - The Art of Computer Programming (general computer-science masterpiece by Donald E. Knuth)
 - The Cathedral and the Bazaar - book comparing top-down vs. bottom-up open-source software
 - The Philosophy of Computer Science[14]
 - Where's the Theory for Software Engineering?[15]
 - The Yo-yo problem
 
Programming paradigms
    
- Agent-oriented programming
 - Aspect-oriented programming (AOP)
 - Convention over configuration
 - Component-based software engineering
 - Functional programming (FP)
 - Hierarchical object-oriented design (HOOD)[16]
 - Literate programming
 - Logic programming
 - Modular programming
 - Object-oriented programming (OOP)
 - Procedural programming
 - Reactive programming
 
Software development methodologies
    
- Agile Unified Process (AUP)
 - Constructionist design methodology (CDM)
 - Dynamic systems development method (DSDM)
 - Extreme programming (XP)
 - Iterative and incremental development
 - Kanban
 - Lean software development
 - Model-based system engineering (MBSE)
 - Open Unified Process
 - Pair programming
 - Mob programming
 - Rapid application development (RAD)
 - Rational Unified Process (RUP)
 - Rubber duck debugging
 - Scrum
 - Structured systems analysis and design method (SSADM)
 - Unified Process (UP)
 
Software development processes
    
- Active-Admin-driven development (AADD)
 - Behavior-driven development (BDD)
 - Bug-driven development (BgDD)
 - Configuration-driven development (CDD)
 - Readme-driven development (RDD)
 - Design-driven development (D3)
 - Domain-driven design (DDD)
 - Feature-driven development (FDD)
 - Test-driven development (TDD)
 - User-centered design (UCD) (User-Driven Development (UDD))
 - Value-driven design (VDD)
 - Software review
 - Software quality assurance
 
See also
    
- Anti-pattern
 - Coding conventions
 - Design pattern
 - Programming paradigm
 - Software development methodology
 - Software development process
 - Outline of computer science
 - Outline of software engineering
 - Outline of computer engineering
 - Outline of computer programming
 - Outline of software development
 - Outline of web design and web development
 - Outline of computers
 - Category: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[17]
 
Other materials, books, articles, etc.
    
- Don't Make Me Think (book by Steve Krug about human computer interaction and web usability)
 
References
    
- Gruszczynski, B. (May 2006). "An overview of the current state of software engineering in embedded automotive electronics". 2006 IEEE International Conference on Electro/Information Technology. pp. 377–381. doi:10.1109/EIT.2006.252190. ISBN 0-7803-9592-1. S2CID 34164454.
 - Patel, B. K.; Litchfield, V.; Tamanaha, D.; Davis, A. (February 1991). "Real time systems/Software methodologies for large aerospace systems". 1991 IEEE Aerospace Applications Conference Digest. pp. 2/1–2/9. doi:10.1109/AERO.1991.154537. ISBN 0-87942-686-1. S2CID 151614328.
 - Yau, Stephen S; Jia, Xiaoping; Bae, Doo-Hwan (1992-05-01). "Software design methods for distributed computing systems". Computer Communications. Software aspects of future trends in distributed systems. 15 (4): 213–224. doi:10.1016/0140-3664(92)90104-M. ISSN 0140-3664.
 - Stavru, Stavros (2014-08-01). "A critical examination of recent industrial surveys on agile method usage". Journal of Systems and Software. 94: 87–97. doi:10.1016/j.jss.2014.03.041. ISSN 0164-1212.
 - Dybå, Tore; Dingsøyr, Torgeir (2008-08-01). "Empirical studies of agile software development: A systematic review". Information and Software Technology. 50 (9): 833–859. doi:10.1016/j.infsof.2008.01.006. ISSN 0950-5849. S2CID 2244031.
 - Taylor, P. (November 2011). "Designerly thinking: What software methodology can learn from design theory". Proceedings International Conference on Software Methods and Tools. SMT 2000. pp. 107–116. doi:10.1109/SWMT.2000.890426. ISBN 978-0-7695-0903-7. S2CID 110041968.
 - Yau, Stephen S; Jia, Xiaoping; Bae, Doo-Hwan (1992-05-01). "Software design methods for distributed computing systems". Computer Communications. Software aspects of future trends in distributed systems. 15 (4): 213–224. doi:10.1016/0140-3664(92)90104-M. ISSN 0140-3664.
 - Gomaa, Hassan (1994-05-01). "Software design methods for the design of large-scale real-time systems". Journal of Systems and Software. 25 (2): 127–146. doi:10.1016/0164-1212(94)90002-7. ISSN 0164-1212.
 - Budgen, David (July 1995). "'Design models' from software design methods". Design Studies. 16 (3): 293–325. doi:10.1016/0142-694X(95)00001-8. ISSN 0142-694X.
 -  Mantle, Mickey W. (2020). Managing the unmanageable : rules, tools, and insights for managing software people and teams. Ron Lichty (2nd ed.). Boston. ISBN 978-0-13-566763-7. OCLC 1137802633.
{{cite book}}: CS1 maint: location missing publisher (link) - "C++ Core Guidelines". isocpp.github.io. Retrieved 2021-04-11.
 - Davis, Alan Mark. (1995). 201 principles of software development. New York: McGraw-Hill. ISBN 0-07-015840-1. OCLC 31814837.
 -  Krug, Steve (2014). Don't make me think, revisited : a common sense approach to Web usability. Bayle, Elisabeth,, Straiger, Aren,, Matcho, Mark (Third ed.). [San Francisco, California]. ISBN 978-0-321-96551-6. OCLC 859556499.
{{cite book}}: CS1 maint: location missing publisher (link) - Turner, Raymond; Angius, Nicola (2020), "The Philosophy of Computer Science", in Zalta, Edward N. (ed.), The Stanford Encyclopedia of Philosophy (Spring 2020 ed.), Metaphysics Research Lab, Stanford University, retrieved 2020-09-01
 - Johnson, Pontus; Ekstedt, Mathias; Jacobson, Ivar (2012). "Where's the Theory for Software Engineering?". IEEE Software. 29 (5): 96. doi:10.1109/MS.2012.127. ISSN 0740-7459. S2CID 38239662.
 - Aslett, M. J. (December 1991). "An overview of the HOOD method". 1991 IEE Colloquium on an Introduction to Software Design Methodologies (Ref. No: 1991/181): 5/1–5/4.
 - ISO/IEC/IEEE International Standard - Systems and software engineering — Developing information for users in an agile environment. Iso/Iec/IEEE 26515:2018(E). December 2018. pp. 1–32. doi:10.1109/IEEESTD.2018.8584455. ISBN 978-1-5044-5297-7.
 
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.