Requirements management

Responsible, high-quality development of software requirements requires a management process of its own.

Requirement identification

A unique requirement identifier is used to refer to a requirement, when creating dependencies, or when exporting and printing documents. By default, ALM itself assigns requirements identifiers of the form R-NNN, where NNN is a number. This identification runs through all documentation entered in the system. It guarantees that the identifier is unique and lets you refer to a requirement unambiguously.

You can define your own scheme for identifying artifacts, different from the one used in the system by default. To do this, open the settings of the "UID" attribute and set a formula there for calculating the default value.


As the formula for calculating the Requirement identifier, write an expression following the example from the description. Here are several variants of custom identification of Requirements:

  • {PageType.ShortCaption,R}.{Id} - the Requirement ID starts with the short name of its type, for example, SR.123
  • {PageType.ShortCaption,R}-{IdProject} - the "IdProject" field value is filled by an automatic counter within the project. In each project the counter starts at 1. This way you can get identifiers such as: BR-1, SR-2, and so on.
  • {PageType.ShortCaption,R}-{IdType} - the "IdType" field value is filled by a counter for each Requirement type. This way you can get identifiers such as: BR-1, SR-1, and so on.
  • {PageType.ShortCaption,R}-{IdHierarchy} - the "IdHierarchy" field value is filled by a counter within the hierarchy (document), that is, the counter increases for each next child element inside the document.
  • {PageType.ShortCaption,R}-{IdParent} - the "IdParent" field value is filled by a counter within the parent section, that is, the counter increases for each next child element inside one section.

You can form an identifier using leading zeros; for example, given the expression {Id,6}, the system forms the identifier as 000001, 000002, and so on.


Requirement types

It is convenient to mark requirements that have different purposes with different types. In the application, use filters or grouping to work on different requirement types. Each requirement type can be associated with a default template. When a requirement is created, that template is used as a blank to be filled in.

Option Purpose
Requirements are implemented Used in the "Requirements-driven development" scheme. Development tasks (Enhancements) are not created from business requirements. Enhancements are created from functional or system requirements. To avoid misleading users, set the value of this option correctly for different requirement types.
Requirements are tested By analogy with implementing requirements, not every kind of requirement takes part in testing. Set this option for those requirements for which the percentage of test coverage should be calculated.
Can be derived Cause-and-effect links can be established between requirements. Set this option to distinguish which requirement types can be sources (for example, business requirements) and which can be derived (for example, functional requirements).
Requirement identification is not used Some sections of requirement documents are not requirements in substance, but they form important context needed to understand the other requirements. Such sections may be mandatory from the standpoint of the rules for preparing documentation. In the built-in processes, the "General information" type is intended for such requirements. Identification of such requirements is not needed. For example, when exporting to external formats, a requirement ID is not added to these document sections.
Is a document heading

This setting controls how the requirement name is visualized inside a document, and also when exporting to external formats. Requirements of this type are not numbered and are not highlighted with heading styles. In effect, a list of requirements is formed.

Child types You can limit the list of requirement types that can be children of this requirement type.
Derived types You can limit the list of requirement types that can be derived from this requirement type.


Each requirement type can have its own set of custom attributes.

Lifecycle

A requirement, as a project decision (in the business domain or in the technical implementation), passes through several stages of evolution: it is developed (documented), clarified (with designers and testers involved), agreed with the customer, and then implemented in program code.


The lifecycle can differ in different projects or for different requirement types. The project team configures the requirement lifecycle for its project itself. In the "Requirements-driven development" process we have already configured several useful rules, for example:

  • Prohibition on editing the requirement text after approval. To edit the text, the requirement must be returned to the "In progress" stage, and the source of the change must be specified — the source Issue, or a business requirement that has changed.
  • Marking derived artifacts as outdated. So that every change (down to a missing comma) does not make the test documentation (or other derived artifacts) outdated, this operation is performed only when the requirement is moved to the "Done" state. In this way, when restoring the integrity of the project documentation, we work with batches of changes at once.

Synchronous (cascading) changes to the states of parent or child requirements can be used to speed up status management. For example, when approving a document it is enough to approve the root section (the document title) for all of its subsections to be marked as approved as well. Such synchronous operations are configured in the requirement lifecycle using the corresponding system actions. Because this is a bulk operation, the user may get an unexpected result. To warn the user that such operations will run, select the checkbox when adding the system action:

Before a transition is performed or the status is changed, the system warns the user that this system action will be executed.

Requirements and primary requirements also have useful attributes related to the lifecycle:

Attribute name Description
Lead time (LeadTime) The time the artifact has been in existence from the moment it was created until the current day, or until work on it is completed.
Resolution time (LifecycleDuration) - for primary requirements — Stories, Enhancements, Requests) The time interval spent working on this artifact. This is controlled by the state setting Exclude time spent in this state from the resolution time. If the checkbox is selected, time in this state is not counted in the resolution time. Accordingly, if the checkbox is cleared, time in this state is counted in the resolution time.


Traces

Traces between requirements are formed by cause-and-effect links and by coverage. Traces are formed while you work on project artifacts. Traces can be created and edited manually on the "Traces" tab.

Traces are used for the following tasks:

Completeness control

A tabular view of dependencies between different types of requirements, for example business and system requirements, is called a traceability matrix. This tool lets you:

  • Control the integrity of the product being developed, and detect discrepancies between what is required and what is implemented.
  • Substantially reduce the time spent analyzing the changes that follow a new Request from users.
  • Keep derived requirements up to date.

The traceability matrix lets you get instant answers to questions such as:

  • exactly how the source Issues were taken into account, and when they will be implemented;
  • whether we have taken all important Issues into account in the next version of the business requirements or in the product version;
  • where a business requirement came from, and what its importance is;
  • how business requirements will be implemented, by studying the system requirements;
  • whether all the necessary business requirements are reflected in the system requirements, and so on.

To configure requirement filtering in the Source requirements or Derived requirements columns, use the button with dots.

End-to-end traceability

To assess end-to-end traceability of requirements down and up the requirement levels, use these modules:

  • Forward traceability matrix (by type) — the columns contain requirement types, and the cells contain the requirements of a specific type that are linked to the current one. The matrix can be used to check that traceability from the upper requirement level to the lower one is complete.
  • Forward traceability matrix (by document) — the columns contain requirement documents, and the cells contain the requirements of a document that are linked to the current one. The matrix can be used to check that traceability from the upper requirement level to the lower one is complete from the point of view of documents: regulations, legislative requirements, constraints, safety requirements, and so on.
  • Backward traceability matrix (by type) — the columns contain requirement types, and the cells contain the requirements of a specific type that are linked to the current one. The matrix can be used to check that traceability from the lower requirement level to the upper one is complete.
  • Backward traceability matrix (by document) — the columns contain requirement documents, and the cells contain the requirements of a document that are linked to the current one. The matrix can be used to check that traceability from the lower requirement level to the upper one is complete from the point of view of documents: regulations, legislative requirements, constraints, safety requirements, and so on.

There can be many requirement types and documents, which makes the forward and backward traceability matrices harder to use. To configure the matrices, use the view settings button:

View settings:

  • Query for columns — lets you set an expression that limits which columns are selected for this view. For example, you can list only the requirement types that matter for assessing traceability.
  • Expression for the cell — lets you set the cell display format. By default, a link to the traced requirement is shown. Here you can set an expression that displays the attribute you need, for example {UID}, to show only the requirement identifier.

Auto-traces

For example, a new Issue can be linked (traced) to a previously implemented Requirement and thus potentially change it. Or a test scenario (test case) can cover (be traceable to) a functional Requirement.

Traces are created automatically while working on project artifacts, for example during the lifecycle of an Enhancement (or a user story). Or traces are set manually.

In the early stages of a project, creating traces manually, for example between Requirements of different levels (types), requires a large amount of manual labor. On the other hand, project documentation changes continuously, which also leads to the need to add or change traces. To save time and reduce the number of errors in this process, ALM implements an automatic tracing mechanism (auto-traces).

Based on the results of the RAG mechanism, ALM performs automatic selection of traces between project artifacts along the key references: Requirements of Issues, test and operational documentation, and so on.

An auto-trace is not set automatically; it requires validation by the user.

When you click the "add" link, the system displays suggestions for creating auto-traces.

In the modules for working with the main project artifacts, the useful modules "Auto-trace for..." are available, where you can see the full picture of ALM's suggestions for auto-traces:


Budget management

The "Effort by requirements" report shows planned effort and actual effort, so you can assess budget overrun or, conversely, free capacity. Planned effort (Estimate) is specified for each atomic requirement that will be implemented. Actual effort is calculated by the application from development tasks, testing tasks, and other tasks.

Values on a red background mean the budget has been exceeded; values on a green background mean free capacity is available. Use the report to decide whether requirements can be changed without renegotiating the budget.

You can break planned expenses down by requirement by decomposing requirements into tasks or Enhancements. In that case, the report shows a breakdown of planned effort by type of work.

When you use the "Project finance and budget management" module, you can see this information in terms of the cost of the time planned or spent by a project Participant. Use the "Expenses by requirements" module for this.

When a Baseline is created, the system stores the values of the estimate, the effort, and the cost, so in comparison mode you can see the changes (in parentheses) in these indicators between different versions of the document.