List of software development philosophies
This is a list of approaches, styles, methodologies, 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
Specification-related paradigms
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)
- Conways 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
- 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.