I’m researching engineering approaches to software development based on the type of software, for example:
- Custom one-off software (e.g. space shuttle software)
- Whitebox application requiring customised (e.g. Apache Ofbiz ERP – source code is usually downloaded and customized for each implementation)
- Blackbox application without extension points
- Blackbox application with extension points for customisation (e.g. MS Word, SAP)
- …
Is there an established taxonomy of different types of software based on how the software is implemented?
3
It isn’t really a taxonomy: it’s a set of orthogonal properties. Some of the most important ones are:
- Open source vs. proprietary
- Publicly available vs. in-house only
- Extensible API or not?
- Plugin support?
- Platform (i.e. what infrastructure does it depend upon)
- Extent of specific customisation for user / company
- Scriptability (i.e. embeds own programming language for users)
- Client type (web vs. desktop GUI vs. console app vs. REST API etc.)
- Monolithic structure vs. composable components?
- Support for distribution (clustering, redundancy failover etc.)
- Stable vs. experimental (in development)
You can have pretty much any combination of the above…. so trying to build it into a tree structure would be fairly pointless as all the branches would need to be duplicated.
3
This is ancient but still useful:
http://www.joelonsoftware.com/articles/FiveWorlds.html
I think there are five worlds here, sometimes intersecting, often not.
The five are:
- Shrinkwrap
- Internal
- Embedded
- Games
- Throwaway
When you read the latest book about Extreme Programming, or one of
Steve McConnell’s excellent books, or Joel on Software, or Software
Development magazine, you see a lot of claims about how to do software
development, but you hardly ever see any mention of what kind of
development they’re talking about, which is unfortunate, because
sometimes you need to do things differently in different worlds.
There isn’t a widely accepted taxonomy used in industry, but there are some academic attempts to create one. One example is by Forward and Lethbridge (ACM subscription required). Some software repositories, such as Sourceforge, provide a categorization scheme for the projects stored within them. At the very least, these schemes may provide a starting point.
Most software taxonomies tend to focus on the end user rather than developer interested in implementation aspects.
I compiled a list of those I am aware of in descending order based on how developer v. end-user oriented is the taxonomy.
Free software taxonomies
- Software taxonomy on Unilexicon, based on PyPI – collaborative editing welcome
- Python package index (PyPI) taxonomy
- Software branch of the DMOZ taxonomy
- Google Products Taxonomy has a software branch
Paid taxonomies
- A taxonomy of software types to facilitate search and evidence-based software engineering
- WAND Information Technology Taxonomy