What is an artifact in software development?
An artifact is a byproduct of software development that helps describe the architecture, design and function of software. Artifacts are like roadmaps that software developers can use to trace the entire software development process.
Artifacts might be databases, data models, printed documents or scripts. Artifacts aid in the maintenance and updating of software, as developers can use them as reference material to help resolve issues. Artifacts are documented and stored in a repository so they can be retrieved by software developers upon demand.
Software artifacts are typically created during the software development process and can refer to specific methods or processes in the software's development. For example, a software build contains the developer's code as well as a range of different artifacts. Some of these artifacts explain how the software works, while others enable the software to run. For example, the code's artifacts might include dependencies, project source code or a list of resources. These artifacts are stored in a repository, so they can be kept organized and retrieved upon demand.
Examples of artifact uses in software development
Artifacts can include the following:
- Diagrams. These help developers map out the structure of the software.
- Images. These design or reference images help develop the software.
- Meeting notes. These are design choices and aspects written down as full or partial transcripts from meetings.
- Software documentation. These documents describe the characteristics and attributes of the software.
- Source code. This is the designed and fundamental system that enables code to work.
- Prototypes. This fully functioning version of the software helps developers build a basic functioning version of their project.
- Risk assessments. These include the potential risks and downfalls of a piece of software, which can help new developers determine potential risks and resolutions to issues at a glance.
Artifacts can also include things like case studies, data models, design documents, scripts, Unified Modeling Languages and work products.
Why are software artifacts important?
Once created, artifacts are important throughout the software development process. Software artifacts help make the process of developing software less difficult over time. If an artifact that describes a software's architecture, design and function is missing, this may leave developers in the dark when something goes wrong. Keeping relevant artifacts in a repository enables developers to access artifacts at any time, from one location.
Artifacts define a software's behavior and functionalities, such as with control sequences or database requests. With artifacts, developers can understand how software works without needing to see the complexities in the coding behind it. This is also useful for newly onboarded developers, as the artifacts help them understand the thought process of previous developers.
Being able to look at artifacts that quickly explain how the software works helps aid in the operation, maintenance and updating of the software.
Types of software artifacts
Artifacts can fall under the following three main categories:
- Code-related artifacts. This code acts as the foundation for the software and enables the developer to test the software before launching it. Code artifacts can include compiled code, setup scripts, test suites, generated objects and logs generated during testing and quality assurance.
- Project management artifacts. These artifacts are created after code is developed to test its functionality. Artifacts here include minimum required standards, benchmarks, project vision statements, roadmaps, change logs, scope management plans and quality plans.
- Documentation artifacts. These artifacts keep track of relevant documents, including diagrams, end-user agreements, internal documentation or written guides.
Best practices for managing software artifacts
Best practices surrounding software artifacts include using a repository to store software artifacts, as well as properly managing and maintaining it.
Repositories can be local, remote or virtual. Local repositories are in-house storage facilities that are easily accessible. Remote repositories enable users to access and store artifacts remotely and generally use third-party servers. Virtual repositories are designed to accommodate remote and local artifacts in the same target repository.
An artifact repository manager should be in charge of moving, copying and deleting artifacts to keep repositories consistent. When an artifact is moved, copied or deleted, the corresponding metadata descriptors should also be changed. It is also important to find alternative backups to store software artifacts for documentation and continuity.
Developers should also be allowed to select their own tools, which should also lessen the friction of delivering artifacts to production.
Learn more about artifact code repositories, along with nine other essential DevOps tools.