Table of Contents


VNF Requirements Project Overview


The intent of the VNF Requirement and Guidelines project is to inform VNF providers of the standards, specifications, and guidlines to which they should adhere when targeting the ONAP platform.  These requirements and guidelines will support the ONAP Architecture Principles, and ensure a consistent experience for VNF providers across the VNF lifecycle.  See the VNF Requirements Charter for more information.

Objectives of This Guide

This guide targets people that may want to contribute content to the project or have a better understanding of the standards that apply to the requirements.  These standards will attempt to address the following concerns:

  • Ensure the content is appropriate for inclusion within the project deliverables
  • Guide contributors on the proper sub-project the provided content should target (e.g. guidelines, requirements, etc.)
  • Establish a consistent format for all content
  • Standardize the metadata collected for each requirement

Requirement Structure and Repositories

The VNF Requirements Project comprises of several different document repositories (i.e. sub-projects) that provide guidance to VNF Providers from various perspectives.  The following table outlines the repository where the content is stored, the location of the latest published version of the content on the official ONAP documentation site, the description of the content.  When contributing content, please familiarize yourself with the various projects and target the content to the appropriate repository.

Table 1: Repositories
RepoDescriptionDeliverable document Title(s) 
/guidelinesThis includes objectives and motivations for the VNF Requirements work as well as forward looking, narrative text for use in prototype RFP text.
/requirementsThis includes formalized, uniquely numbered requirements that outline the requirements and specifications to which a VNF provider should adhere. Requirements will strive to be discrete and testable where possible, and will follow the guidance of RFC 2119 of requirement key words (e.g. SHOULD, MAY, etc.) for all numbered requirements.
/usecasesDocuments VNF specific use cases in support of ONAP E2E use cases illustrating behavior, sequences of operation, variants, error conditions, etc. Not every Use Case supported by ONAP will be documented in this section. Instead, key Use Cases that require specific coordination with the VNF can be added here to better describe the VNF's responsibilities as a participant in the Use Case.
/testcasesThis expands the use case template structure to supply the additional fields necessary to describe a test scenario. There may be multiple test case descriptions associated with a single use case

General Standards

The following standards apply to all sub-projects within the VNF Requirements Project. 

  • As VNF Requirements project is an ONAP project, all content must adhere to the general documentation standards defined in Creating Documentation section of the ONAP Developer Guide.
  • All content must be written in reStructuredText (RST) with all warnings and errors resolved.
  • Wherever possible, let RST handle numbering of content.  This includes ordered lists, section numbers, footnotes, etc.  This ensure content can be re-arranged easily with less likelihood of breaking numbering conventions.

Guideline Standards

The VNF and PNF Guidelines are the highest level guidance provided by the VNF Requirements project.  This section is best suited to include content that may provide context or forward-looking statements instead of concrete, verifiable requirements to which a VNF Provider should adhere.This text is strictly narrative in format, and does not include enumerated requirement and associated metadata as is the case in the VNF and PNF Requirements section of the document.

If a substantial change is to be proposed in this area of the requirements, then it should be initiated as a proposal with a corresponding JIRA ticket.  Refer to VNFRQTS How to Contribute for more details.

Requirement Standards

VNF Requirements are the foundation of the project and as such have the most stringent content standards.   The requirements form the basis of the specifications that a VNF provider must adhere to in order to successfully onboard, deploy, and operate a VNF on ONAP.  The goal of this section is to provide independent, enumerated, and generally verifiable requirements to which a VNF should adhere to be managed on ONAP and meet ONAP's architectural principles.

As these are requirements, they should follow general expectations for what constitutes a good requirement:

  • Unambiguous - It should have a single, objective interpretation.  It should avoid subjective terms that would be open for misinterpretation.  It should also include sufficient text or references to ensure how it should comply with a directive where applicable.
  • Concise - An individual requirement should be specific about a single aspect, and strive to be as short as possible without sacrificing clarity.  In general, a requirement should strive to be a single sentence where possible.
  • Verifiable - Compliance with the requirement should be possible with some form of test, inspection, or demonstration.
  • Consistent - Requirements must not introduce conflicting or contradictory guidance
  • Feasible - The requirement must be reasonably implementable by existing technology and practices.  Forward looking guidance and aspirational goals are best suited for the Guidelines section of the document.
  • Observable - The requirement should lend itself to externally, observable behavior where ever possible.  Guidance on internal implementation of meeting specific non-functional requirements should likely be included in guidance or as supplementary text.

Requirements that meet these criteria will have a specific format within the requirements document which will consist of a requirement statement and the metadata.

Requirement Statement Standards

Here is an example requirement statement:

R-18725 - The VNF MUST handle the restart of a single VNFC instance without requiring all VNFC instances to be restarted.

Here are the additional standards the requirement must adhere to in the context of this project:

  • The requirement must be uniquely numbered (ex R-XXXXX).  Please refer to VNFRQTS How to Contribute for more information on how requirement numbers are assigned.
  • The requirement must use RFC 2119 keywords (MUST | MUST NOT | SHOULD | SHOULD NOT | MAY), and these keywords must be in uppercase and in bold.  In RST, bold is achieved by wrapping the text in double asterisks (ex: **MUST**)
  • The requirement should generally start off with the subject of the requirement and refer to one of the following, and then further refine from there
    • VNF 

    • PNF

    • VNF or PNF
    • VNF Provider
    • PNF Provider
    • VNF or PNF Provider
    • VNF Heat Package
    • VNF CSAR Package
    • PNF CSAR Package
    • VNF or PNF Package
    • VNF Documentation Package
    • PNF Documentation Package
    • VNF or PNF Documentation Package
    • Example:  The VNF Heat Package's base module **MUST** contain...
  • The requirement should apply only to a single aspect of its intended requirements target, and not combine multiple independent statements into a single requirement.

Requirement Metadata Standards

In addition to the statement itself, this project captures assorted metadata about the requirement about the requirement for a variety of purposes:

  • Supporting use cases such as dependency tracking, searching, filtering, and reporting.
  • Exporting requirements in a machine-readable format for use by other projects such as the VNF Validation Project.
  • Generating different formats and outputs without duplicating requirement content (ex: appendices, tables, CSV files, etc.)
  • Providing traceability within the document between requirements, test cases, and other items within the documents.

This project makes use of an Sphinx extension called sphinxcontrib-needs project to in support of these objectives.  Requirements will still be maintained in the reStructuredText file, but they will be formatted according to work with the sphinxcontrib-needs extension.

Here is an example of a requirement that adheres to the standards.

You may use the VNFRQTS Requirement Generation Tool to generate properly RST formatted requirements with unique ID numbers.


Requirement Example

.. req::
    :id: R-01334
    :keyword: MUST
    :target: VNF
    :links: R-01335
 
 
    The VNF **MUST** conform to the NETCONF RFC 5717, Partial Lock Remote Procedure Call


The following table outlines the proposed standard metadata elements that will be associated with the requirements. This list may change over time.


Table 2: Requirement Metadata

Field Name

Required

vs. Optional

Data Type

Valid Values/Format

Notes

idRequiredStringR-#####

The unique requirement ID for this requirement. See VNFRQTS How to Contribute for more details.

On a new requirement, this attribute can be left off and the tox -e docs or check.py script generate and ID and populate this field.

targetRequiredString

VNF
PNF
VNF or PNF
VNF DOCUMENTATION PACKAGE
PNF DOCUMENTATION PACKAGE
VNF or PNF DOCUMENTATION PACKAGE
VNF PROVIDER
PNF PROVIDER
VNF or PNF PROVIDER
VNF CSAR PACKAGE
PNF CSAR PACKAGE",
VNF or PNF CSAR PACKAGE",
VNF HEAT PACKAGE

The component to which the requirement applies.
keywordRequiredString

MUST

MUST NOT

SHOULD

SHOULD NOT

MAY

The RFC 2119 keyword for the requirement
introducedOptionalStringlower case release name (ex: bejing, casablanca)

The release the requirement was initially introduced. New requirements should always have this.

When adding a new requirement, this can be left off and  the tox -e docs or check.py script will add this for you.

updatedOptionalStringlower case release nameThe release the requirement was last modified. Any updated requirements going forward should have this.
impactsOptionalList of StringComma separated list of ONAP components (ex: so, sdc)The various ONAP components that need to be aware of any changes to the requirement
validation_modeOptionalStringstatic, stand_alone, in_service

How the requirement is validated:

static - validated by statically inspecting the VNF package data

stand_alone - validated by running tests against the VNF itself

in_service - validated in the context of a full or partial ONAP deployment

validated_byOptionalList of String

Comma separated list:

vvp, vnfsdk, sdc

Projects that implement validations of this requirement.


Use Case Standards

The use case section of the document affords a way to provide a VNF Provider a VNF-centric view of certain  use cases.  It is not required that every use case supported by ONAP be documented in this section.  Instead, key use cases that require discrete actions and coordination with the VNF can be described here to provide a clearer understanding of potentially multi-step complex interactions.   

Formal requirements must not be defined in this section, but instead they should be defined in the appropriate requirements section of the document.  Those requirements should detail out the any specific management, monitoring, or other capabilities the VNF must provide to support a given use case.

The use case section can be referenced by the requirements to provide additional context and better illustrate the interactions.

At this stage the format for use cases is not rigid, but is should comprise of the following elements:

  • A sequence diagram that shows the API-level interactions between any users, ONAP components, and the VNF itself to effectively coordinate the use case.  Multiple diagrams can be provided if appropriate.
  • A description of the workflow
  • An enumerated list of VNF impacts that detail out the specific concerns for the VNF provider and provide references to key requirements


Test Case Standards

TODO

  • No labels

3 Comments

  1. See a few comments in Red Font on this page.  A few more general comments:

    1. Should "Id" be a field added to the table? What about "links_incoming"?
    2. Add Table Numbering so we can refer to specific tables
    3. The content below the second table seems a bit out of place.  Can it be intergrated into the content earlier in the document?
    4. We should not be linking to the discussion page if this will be the master page
    5. We should formalize the approach to defining conditional requirements. Would there be value in creating a new boolean metadata field "conditional"? What about a field for dependencies on other requirements (to handle cases of child requirements)?
    6. Should we add "PNF Provider" to valid values for target?
    7. The VNF Requirements Charter indicates requirements can be written against a Service Provider (ONAP Platform Operator), but this is not a valid value for the target. Should we update the Charter to remove SPs as targets of requirements?
    8. How about adding a section for Use Case Standards and Test Case Standards which formally defines a standard syntax/template/format for use cases and test cases, as was done for the Requirements Standards. For an example Test Case Standard definition, see my comment added to VNFRQTS-53 - Getting issue details... STATUS . See below for example use case template (also refer to VNF Requirements Use Cases).


    Figure 1 - Use Case Diagram


    Use Case FieldDescription
    Number<Identifier for the Use Case>

    Name

    <Textual Name for the Use Case>
    Description<A write-up of the high level description for the Use Case>
    Actors<A list of the actors participating in the Use Case>
    Pre-conditions<What pre-conditions must be met before starting the Use Case>
    Process Steps<List of the Use Case steps to complete the Use Case>
    Post-conditions<What are the conditions after the Use Case process steps are completed>
    Alternate Paths<Are there any alternative paths through the Use Case>
    Assumptions<List the assumptions made for the Use Case>
    Reference<If this Use Case is based on a Use Case from a different document, include a reference(s) to sources>
    1. Brian Hedstrom - I've updated the VNF Guidelines and Requirements section.  I have some open questions out on Use Cases and Test Cases.   Feel free to review again and let me know if you have additional feedback.   #5-7 need some additional discussion with Steven Wright, but once we're aligned I can update those.  At this time, I think what's here addresses the requirements we currently have.  If something is missing or is a blocker, then we can evolve the metadata as needed.

  2. Sorry, Brian.  This was a bit inflight, but I'll be updating this today.  Let me respond to your comments and questions...

    #1 - Yes, :id: will be added.  Originally the ID was on the title line, but now it will be on its own line.  We're using the sphinxcontrib-needs extension, and you can specify links between requirements using the links field: https://sphinxcontrib-needs.readthedocs.io/en/latest/directives/need.html#links  links_incoming and links_outgoing will be generated metadata based on those mappings.  I'll add some details around that.

    #2 - sure

    #3 - Yes, I had just copied it from another page to reformat it.  I'll clean it up.

    #4 - Agreed, I had just copied the material so I could organize the content from a few disparate places.

    #5 - For conditional, that might be a good idea.  We could have a boolean for conditional, but we'd need someone to do a full review to update all the metadata.  Is there a particular use case you have in mind where it would be helpful to filter on conditional?   As for linking, I agree and it is provided for as described in my answer to #1.

    #6 - I'm open to PNF provider as a target as we can always evolve the list of valid values.  Do we have any requirements that are specific to PNFs?  In areas where the requirement is applicable to both PNF and VNF we have used xNF.

    #7 - Steven Wright - Can you comment on this one?  I don't know the history on Service Provider requirements.  The metadata was based on requirements we currently have. Should the charter page be revised?

    #8 - yes, I can add that as well.

    I'll tag you in a comment once this page has been updated and ready for another review.  Thanks for the feedback.