Functionality

FURPS+ Requirements Category — What the system does


Definition

Functionality requirements define the core capabilities, features, and operations a system must provide. In the FURPS+ model, this category captures what the system does—its feature set, security mechanisms, and operational capabilities.

Role in the Framework

Functionality sits at the top of the requirements hierarchy. It answers the fundamental question: “What must this system be capable of doing?”

Functionality Requirements
    ↓
Prose Specification ← documents required capabilities
    ↓
Executable Specification ← implements exact behavior
    ↓
All downstream documentation ← derives from functional definition

Core Subcategories

Feature Set

The primary capabilities the system provides:

  • Protocol operations (send message, validate block, execute transaction)
  • State transitions (account updates, storage modifications)
  • Query capabilities (read state, retrieve history)

Security Mechanisms

How the system protects itself and users:

  • Authentication (identity verification)
  • Authorization (permission enforcement)
  • Cryptographic operations (signing, verification, encryption)
  • Input validation (malformed data rejection)

Audit & Compliance

Capabilities supporting verification:

  • Event logging
  • State proof generation
  • Historical data access

Blockchain-Specific Functionality

For decentralized systems, functionality requirements expand to include:

SubcategoryExamples
Consensus OperationsBlock proposal, attestation, finalization
State ManagementAccount model, storage trie, state root computation
Transaction ProcessingValidation, execution, receipt generation
P2P NetworkingPeer discovery, message propagation, sync protocols
Cryptographic PrimitivesHash functions, signature schemes, commitment schemes

Relationship to Specifications

Prose Specification

The prose spec documents functionality requirements in structured, human-readable form:

## FUNC-3.2: Transaction Execution
 
The system SHALL execute transactions according to the following rules:
- FUNC-3.2.1: Validate sender signature using secp256k1 or ed25519
- FUNC-3.2.2: Verify nonce matches sender's current nonce
- FUNC-3.2.3: Deduct gas cost from sender balance before execution
- FUNC-3.2.4: Execute transaction payload per EVM specification
- FUNC-3.2.5: Refund unused gas to sender
- FUNC-3.2.6: Generate transaction receipt with status and logs

Executable Specification

The executable spec implements these requirements as runnable code:

def execute_transaction(state: State, tx: Transaction) -> Receipt:
    """
    Implements FUNC-3.2: Transaction Execution
    """
    # FUNC-3.2.1: Validate signature
    sender = recover_sender(tx)
    
    # FUNC-3.2.2: Verify nonce
    if tx.nonce != get_nonce(state, sender):
        raise InvalidNonce()
    
    # FUNC-3.2.3: Deduct gas cost
    max_cost = tx.gas_limit * tx.gas_price
    deduct_balance(state, sender, max_cost)
    
    # FUNC-3.2.4: Execute payload
    result = execute_payload(state, tx)
    
    # FUNC-3.2.5: Refund unused gas
    refund = (tx.gas_limit - result.gas_used) * tx.gas_price
    credit_balance(state, sender, refund)
    
    # FUNC-3.2.6: Generate receipt
    return Receipt(
        status=result.success,
        gas_used=result.gas_used,
        logs=result.logs
    )

Downstream Dependencies

Functionality requirements cascade through the documentation framework:

Downstream DocumentWhat It Derives
Test FixturesTest cases for each functional requirement
API DocumentationEndpoints exposing functional capabilities
SDK GuidesMethods wrapping functional operations
Developer GuidesHow to use functional features
Conformance TestsVerification of functional compliance

Quality Criteria for Functionality Requirements

  • Complete: All required capabilities are specified
  • Unambiguous: Each requirement has one interpretation
  • Testable: Every requirement can be verified
  • Traceable: Requirements link to business needs and downstream artifacts
  • Consistent: No contradictions between requirements

Best Practices

  • Use RFC 2119 keywords (MUST, SHALL, SHOULD, MAY) for clarity
  • Assign unique identifiers (FUNC-X.Y.Z) for traceability
  • Group related functionality into coherent subsections
  • Distinguish mandatory features from optional extensions
  • Ensure every functional requirement appears in the executable spec