# Core Concepts
Projects are the highest level at which you can organize your work. Each project has its own dedicated dashboard and access control.
We recommend organizing your testing activity using Projects, e.g., one project per domain tested, or per independent application under test.
A goal is a testing scope within a project (i.e., a testing goal/objective). This can be part of an application to test, or the entire application.
A goal consists of a descriptive name, a starting URL and a set of optional testing configurations (e.g., screen resolution).
# Goal versions
Each goal's data is independently version-controlled. Each version contains information such as tests and insights, for each individual goal.
# Goal version control lifecycles
Versions provide functionality similar to version control systems such as Git. Like git, once a version has been committed, it cannot be changed (i.e., it is saved permanently in the history).
You can roll back a goal to an older version at any time, or fork the goal from a specific version (e.g., to continue working from that version). Forking a version makes a full copy of the existing version but allows modifications in isolation, preserving the original version.
Tests on Virtuoso take the form of journeys, representing an end-to-end journey that can be taken by a user on the application.
They are presented in natural language (e.g., plain English) and can be created manually, recorded, or automatically generated.
For each goal and at each version in its history, the tests are structured as follows:
- Steps (or Test Steps): a single action a user can take to interact with the application (e.g., navigating to a page, clicking on a link/button, filling an input) or to make a validation (e.g., checking if a certain element exists, or a certain condition holds).
- Checkpoint: a sequence of instructions for navigation from one state to another in the application.
- Journey: a collection of checkpoints that can be executed on the application under test leading to some application state.
Read more about Virtuoso tests →
Execution in Virtuoso represents a similar function as with any other test framework you are familiar with: executing an existing set of regression tests against the target application.
During this process, one or more journeys from a particular version of goal are executed.
Tests are executed in parallel
Virtuoso executes all journeys in parallel. This means that there should be no state dependency between the tests.
You can however configure the maximum level of parallelism (e.g., setting it to 1 would cause them to execute one at a time).