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:
| Subcategory | Examples |
|---|---|
| Consensus Operations | Block proposal, attestation, finalization |
| State Management | Account model, storage trie, state root computation |
| Transaction Processing | Validation, execution, receipt generation |
| P2P Networking | Peer discovery, message propagation, sync protocols |
| Cryptographic Primitives | Hash 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 logsExecutable 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 Document | What It Derives |
|---|---|
| Test Fixtures | Test cases for each functional requirement |
| API Documentation | Endpoints exposing functional capabilities |
| SDK Guides | Methods wrapping functional operations |
| Developer Guides | How to use functional features |
| Conformance Tests | Verification 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