The Software Artifact Ontology (SwAO) aims at establishing a common conceptualization regarding Software Artifacts, including software products and related components.
SwAO captures that software products have a complex artifactual nature, being constituted of software artifacts of different nature, including software systems, programs and code. Artifacts are objects consumed or produced during the software process. They can present different nature and composition. Possible types of Artifacts are (not limited to): Software Product (e.g. Eclipse IDE), Software Item (e.g. a database schema), Information Item (e.g. a bug reported), Model (e.g. a UML class model) and Document (e.g. a requirements specification). Documents can depict other Artifacts, as it is the case of a Design Specification describing a Software Architecture. The concepts Artifact Type, Document Type and Software Product Type define the possible specializations of Artifact, Software Product and Document (respectively).
An Artifact can be composite or simple. A Composite Artifact is composed of two or more other Artifacts (e.g. a Project Plan composed of artifacts as a WBS diagram and a Risk Plan). A Simple Artifact is not decomposable. Artifacts can also depend on other Artifacts to be produced or updated, such as a Test Case depending on the Code it was designed to test.
Networked ontologies used by SwAO:
| Ontology | Relation | Integration Level |
| UFO - Unified Foundational Ontology | The SwO concepts are derived from UFO (mostly social entities from UFO-C). | High |
Figure 1 presents the conceptual model of the Software Artifact Ontology.

Figure 1. Software Artifact Ontology conceptual model.
In the context of the software domain, Artifacts are objects intentionally made to serve a given purpose in the context of a Software Project or Organization. They can be composed of other artifacts (Composite Artifact) or not (Simple Artifact). An artifact is an instance of an Artifact Type (a second order type). Artifact Type partitions the generalization set of Artifacts according to their nature, giving rise to a taxonomy of artifacts. More specific taxonomies can be established for specific types of artifacts, such as documents (established by instances of Document Type) and Software Product (Software Product Type), among others.
The following table shows the definitions for SwAO concepts.
| Concept | Definition |
| Artifact
|
Object intentionally made to serve a given purpose in the context of a software Project or Organization.
Ex.: a document, a model, a library, an e-mail, a bug. |
| Artifact Type
|
Object Kind which is the powertype of Artifact, classifying its specializations.
Ex.: Document, Model, Software Product, Information Item, Software Item. |
| CASE Tool
|
|
| Code
|
Software Item representing a set of computer instructions and data definitions expressed in a programming language or in a form output by an assembler, compiler, or other translator (SEVOCAB).
|
| Composite Artifact
|
Artifact composed of other Artifacts.
|
| Document
|
Any written or pictorial, uniquely identified, information related to the software development, usually presented in a predefined format.
Ex.: a Requirements Document, a specification, a report. |
| Document Type
|
Artifact Type which is the powertype of Document, classifying its specializations.
Ex.: Requirements Document, Design Specification, Project Plan. |
| Information Item
|
Relevant information for human use, produced or used by Performed Activity.
Ex.: a documented requirement, a bug reported, an agreement e-mail, a component description. |
| Machine Code
|
Computer instructions and data definitions expressed in a form output by an assembler, compiler, or other translator, which can be recognized by the processing unit of a computer machine.
|
| Model
|
A representation (abstraction) of a process or system from a particular perspective.
Ex.: a use case model, a class model, a component model. |
| Program
|
Software Item which aims at producing a certain result through execution on a computer, in a particular way, given by the Program Specification. A Program is constituted by code, but it is not identical to code. Code can be changed without altering the identity of its program, which is anchored to the program's essential property: its intended specification (Program Specification).
|
| Program Specification
|
A document that describes the purpose (structure and functions) of a program in sufficient detail to permit coding and to facilitate maintenance.
|
| Programming Language
|
A language used to express computer programs.
|
| Simple Artifact
|
Artifact that is not decomposed into other Artifacts.
|
| Software Item
|
Piece of software, produced during the software process, not considered a complete Software Product, but an intermediary result.
Ex.: a component, database schema, a script. |
| Software Product
|
One or more computer programs together with any accompanying auxiliary items, such as documentation, delivered under a single name, ready for use.
Ex.: Astah modeling tool, Microsoft Word, Eclipse IDE. |
| Software Product Type
|
Artifact Type which is the powertype of Software Product, classifying its specializations.
Ex.: Modeling Tool, Text Editor, IDE, Compiler. |
| Software System
|
Software Item that aims at satisfying a specification (System Specification), concerning a desired change in a data structure inside a computer, abstracting away from the behavior.
|
| Source Code
|
A well-formed sequence of computer instructions and data definitions expressed in a programming language, in a form suitable for input to an assembler, compiler, or other translator. |
| System Specification
|
|
<<category>>Artifact |
Artifact (0..*) instanceOf (1..1) Artifact Type
Artifact (0..*) depends on (0..*) Artifact <<material>>
Artifact Participation (0..*) participation of (1..1) Artifact
Document (0..*) depicts (0..*) Artifact
Stakeholder (0..*) responsible for (0..*) Artifact <<material>>
Performed Activity (0..1) creates (0..*) Artifact <<material>>
Performed Activity (0..*) changes (0..*) Artifact <<material>>
Performed Activity (0..*) uses (0..*) Artifact <<material>>
Composite Artifact (0..*) <>-- (2..*) Artifact <<componentOf>>
<<2ndOT>>Artifact Type |
Standard Activity (0..*) uses (0..*) Artifact Type
Standard Activity (0..*) changes (0..*) Artifact Type
Standard Activity (0..*) creates (0..*) Artifact Type
Artifact (0..*) instanceOf (1..1) Artifact Type
Intended Activity (0..*) creates (0..*) Artifact Type
Intended Activity (0..*) changes (0..*) Artifact Type
Intended Activity (0..*) uses (0..*) Artifact Type
<<subkind>>CASE Tool |
<<subkind>>Code |
Code (0..*) implements (1..1) Program Specification
Code Development creates Code
Code Review uses Code
Program (0..1) constituted of (1..*) Code
Code Documentation changes Code
<<category>>Composite Artifact |
Composite Artifact (0..*) <>-- (2..*) Artifact <<componentOf>>
<<kind>>Document |
Document (0..*) depicts (0..*) Artifact
Document (0..*) instance of (1..1) Document Type
<<2ndOT>>Document Type |
Document (0..*) instance of (1..1) Document Type
Document Template (0..*) applies to (1..1) Document Type
<<kind>>Information Item |
<<subkind>>Machine Code |
Machine Code (0..*) generated from (1..1) Source Code
<<kind>>Model |
<<subkind>>Program |
Program (0..1) constituted of (1..*) Code
Program (0..1) intends to implement (1..1) Program Specification
Program (0..*) implements (1..*) Software Function Universal
Program (0..*) \intends to satisfy (1..*) Requirement Artifact
Software System (0..*) constituted of (1..*) Program
Loaded Program Copy (0..*) materialization of (1..1) Program
<<subkind>>Program Specification |
Program Specification (0..*) intends to satisfy (1..1) System Specification
Program Specification (0..*) intends to satisfy (1..*) Requirement Artifact
Program Specification (0..*) describes (1..*) Software Function Universal
Code (0..*) implements (1..1) Program Specification
Program (0..1) intends to implement (1..1) Program Specification
<<kind>>Programming Language |
Source Code (0..*) written in (1..*) Programming Language
<<category>>Simple Artifact |
<<kind>>Software Item |
<<kind>>Software Product |
Software Product (0..*) instance of (1..1) Software Product Type
Software Product (0..1) constituted of (1..*) Software System
<<2ndOT>>Software Product Type |
Standard Activity (0..*) requires (0..*) Software Product Type
Software Product (0..*) instance of (1..1) Software Product Type
Intended Activity (0..*) requires (0..*) Software Product Type
<<subkind>>Software System |
Software System (0..*) constituted of (1..*) Program
Software System (0..1) intends to implement (1..1) System Specification
Software Product (0..1) constituted of (1..*) Software System
<<subkind>>Source Code |
Source Code (0..*) written in (1..*) Programming Language
Machine Code (0..*) generated from (1..1) Source Code
<<subkind>>System Specification |
Software System (0..1) intends to implement (1..1) System Specification
Program Specification (0..*) intends to satisfy (1..1) System Specification