Holarch

Behavior

Functional Analysis

Derive functions from requirements, arrange them into a functional flow, draw the FFBD, check coverage, and produce the requirements and functions tables and a Word report.

How to use it →

On this page
  1. Concepts
    1. Functions and the function tree
    2. Requirement types
    3. The flow
    4. FFBD notation
  2. How to use it
    1. When and why
    2. Derive functions from a requirements document
    3. Arrange the flow
    4. Write the flow as text
    5. Draw and export the FFBD
    6. Produce the tables and the report
    7. Check coverage
    8. Worked example: CubeSat EO-1
    9. Tips and good practice
    10. Common mistakes
    11. How it connects
  3. The Functional Analysis page
    1. Top bar
    2. View bar
    3. Functions tab
    4. The function preview
    5. Flow & FFBD tab
    6. Tables tab
    7. Coverage tab
  4. The FFBD diagram
    1. Toolbar
    2. On the canvas
    3. Loop panel
    4. Display options
  5. AI assists
  6. Shortcuts and gestures
  7. Messages
  8. Limits
  9. Related

Functional Analysis turns a set of requirements into the functions a system must perform. It creates the functions as numbered Actions under a top-level function, links each requirement to the function that satisfies it, lets you arrange the functions into a flow with parallel, alternative and repeated paths, draws that flow as a Functional Flow Block Diagram (FFBD), and produces the tables and Word report that document the analysis.

Open it from Behavior → Functional Analysis in the navigation rail, or from a requirements document with More ▾ → Functional Analysis (functions, FFBD, tables)….

Concepts

Functions and the function tree

  • A function is an Action. Functional Analysis numbers functions with a prefix (default F): F1, F2, … for top-level functions and F3.1, F3.2, … for sub-functions.
  • All functions sit under one top-level function, an Action that is decomposed by each of them. Sub-functions are decomposed from their parent function. Together they form the function tree.
  • Each requirement is linked to its function with satisfied by (the function satisfies the requirement).
  • The top-level function is stored per scope: each requirements document, and the scope All requirements in project, has its own top-level function, ID prefix, table captions and Subsystem setting.

Requirement types

The page sorts the requirements in the scope into three types:

TypeRule
FunctionalLabeled Functional Requirement; or, without a type label, a requirement whose parent is not a requirement, or that has child requirements
PerformanceLabeled Performance Requirement; or, without a type label, a requirement that sits under another requirement and has no child requirements
StatementA Statement that is not a requirement (headings, notes). It is never allocated

The flow

The flow of the top-level function is the same data the Action Diagram edits and the Simulator runs. Functional Analysis edits it with FFBD terms:

FFBD termFlow elementAction Diagram equivalent
SequenceFunctions joined by arrowsSerial actions
ANDAll branches run in parallel; the flow continues when all finishParallel
ORExactly one branch runsOR
LOOPThe body repeats; an entry gate (LP or IT) and an exit OR gateLOOP
EXITLeaves the enclosing loopEXIT

A loop can represent a function: the function is then drawn as a dashed frame around the loop, labeled with its number and name, instead of as a block. Use this when a requirement sets a rate or repetition, for example "repeat each orbit for the mission life".

FFBD notation

  • Function blocks show the function number above the name.
  • Circle gates mark AND and OR forks and joins. OR branch labels appear in italics on the branch line.
  • A loop starts at an entry circle, LP (loop) or IT (iterate), and ends at an OR exit circle. The return arrow runs above the body from the exit back to the entry and can carry text, such as "next orbit".
  • Start and End are text labels (rotated in left-to-right layouts) or reference blocks marked Ref.

How to use it

When and why

Do functional analysis after the requirements are written and reviewed, and before you allocate functions to physical elements. It answers:

  • What must the system do to meet these requirements?
  • Is every requirement covered by a function, and does every function trace to a requirement?
  • In what order do the functions run, which run in parallel, which are alternatives, and which repeat?

The output feeds allocation (functions performed by assets), interface analysis (I/Os between functions) and simulation of the flow.

Derive functions from a requirements document

  1. Open the requirements document and choose More ▾ → Functional Analysis (functions, FFBD, tables)…. The page opens with that document as the scope. (From Behavior → Functional Analysis, choose the document in the scope list.)
  2. On the Functions tab, read the count line, for example "32 requirements in this set: 13 functional, 19 performance (5 statements)." If the counts look wrong, fix the Functional Requirement and Performance Requirement labels first.
  3. Click Rule-Based Extraction…, or choose ✦ AI ▾ → Extract Functions with AI… in the top bar.
  4. In the preview, edit the proposal:
    • Type a new name in the Function column. Use verb-noun names such as "Capture Images".
    • Reassign requirements by typing their numbers in Requirements, separated by commas.
    • Choose a Parent to make a sub-function, or — top level.
    • Tick two or more rows and click Merge ticked to combine them.
    • Click Split to move a row's last requirement to a new function after it.
    • Use ↑ and ↓ to reorder; the IDs follow the row order.
    • Click × to drop a row, or + Function to add one.
    • Set Top-level function (its name) and ID prefix.
  5. Check the summary under the table: "n functions · k of m requirements allocated" and any "Not allocated: …" list.
  6. Click Apply. The toast reads "Functions applied: n new, m updated". Each function is now a numbered Action under the top-level function, and each requirement is satisfied by its function. All changes are one undo step.

Arrange the flow

  1. Open the Flow & FFBD tab. A new flow lists the functions in number order (F1 → F2 → …).
  2. Click a function to select it; Shift+click to add neighbors.
  3. Use ◀ and ▶ to move the selection earlier or later, or drag chips and groups to a new place.
  4. Select adjacent elements and click Wrap in AND (parallel), Wrap in OR (alternatives) or Wrap in LOOP (repeat). Each selected element becomes its own branch; a single element gets a second, empty branch.
  5. In an AND or OR group, click + Branch to add a branch, and drag functions into it. × removes an empty branch when there are more than two.
  6. In a LOOP group, choose the function the loop represents (or no function), the entry label (LP or IT) and the return arrow text.
  7. To undo a structure, select the group and click Unwrap: its contents return to the sequence.
  8. The FFBD card under the editor redraws after each change. Set Start, End and the orientation there.

Write the flow as text

Click Edit as Text… for the Edit Flow as Text dialog. Type the flow in this notation and watch the live FFBD preview:

F1 -> F2 -> AND(F3 | F4) -> LOOP[F5, entry=IT, return="next orbit"](F6 -> F7 -> F8 -> OR(F9 | F10)) -> F11
  • Join elements with -> (also → or ,).
  • AND( a | b ) runs branches in parallel (PAR( and SYNC( also work); OR( a | b ) takes one branch. A branch can be a sequence: AND(F3 -> F4 | F5).
  • LOOP( … ) repeats its body. Options in brackets: a function ID (the function the loop represents; also fn=F5), entry=IT (default LP), return="text" and count=n. IT( … ) is a loop with an IT entry.
  • EXIT leaves the enclosing loop.
  • Refer to functions by number or, in quotes, by name. Each function may appear once.
  • Functions left out are listed as "Not in the text (appended at the end): …" and are added after the last element.

Click Apply to replace the flow. The toast reads "Flow updated".

Draw and export the FFBD

  1. Click Open FFBD in the top bar (or on the FFBD card). The FFBD opens in the diagram editor.
  2. Choose Left to right or Top down, and Start/end: text or Start/end: reference blocks. Edit the Start and End text.
  3. Click a loop's LP/IT or exit gate to set the loop's function, entry label and return text in the inspector.
  4. Use Export ▾ for PNG, SVG, HTML or DOCX (see Diagrams), or PNG on the FFBD card of the Flow & FFBD tab.

Produce the tables and the report

  1. Open the Tables tab.
  2. Click Run Quality Check on the requirements table to fill the Score column.
  3. Edit the captions in place: Table 1 - Top-Level Requirements and Quality Scores, Figure 1 - Top-Level Functional Flow Block Diagram (FFBD) and Table 2 - Requirements Allocated to Functions by default.
  4. Use Copy (paste into Word or Excel), CSV, XLSX or DOCX on each table.
  5. To add the performing assets to the functions table, tick Subsystem on the Functions tab.
  6. Click Assignment Report (DOCX) in the top bar. The Word file holds the requirements table, the FFBD figure and the functions table, each with its caption.

Check coverage

Open the Coverage tab:

  • Requirements not allocated to a function (n of m) lists requirements no function in the tree satisfies.
  • Functions with no requirement (n of m) lists functions that satisfy nothing.

Each entry links to the item. Fix gaps on the Functions tab (rerun the extraction or reassign numbers) or by relating the items in the inspector.

Worked example: CubeSat EO-1

The demo project (Manage Projects → Project Files ▾ → Create Demo Project) already contains a finished analysis of the EO-1 System Requirements Specification (SRS-001):

  • Top-level function F0 Perform EO-1 Mission with eleven functions: F1 Separate and Detumble (2.3), F2 Deploy Solar Arrays (3.6), F3 Generate and Store Power (3.1–3.4), F4 Determine and Control Attitude (2.1, 2.2, 2.4), F5 Operate Imaging Orbits (1.6, 1.7), F6 Receive Commands (5.2, 4.2), F7 Capture Images (1.2–1.5), F8 Store Payload Data (4.1), F9 Transmit Payload Data (5.1, 5.3, 5.4), F10 Enter Safe Mode (4.3) and F11 Process and Deliver Images (6.1–6.3).
  • Sub-functions F3.1 to F3.3 (power) and F4.1 to F4.4 (attitude), each performed by a part.
  • The flow F1 -> F2 -> AND(F3 | F4) -> LOOP[F5, return="next orbit"](F6 -> F7 -> F8 -> OR(F9 | F10)) -> F11: power and attitude run in parallel; the imaging cycle repeats each orbit and is framed as F5; the OR Health OK? takes Nominal (90%) to F9 or Fault (10%) to F10.

Try these steps on it:

  1. Open Behavior → Functional Analysis and choose Document: EO-1 System Requirements Specification.
  2. On Functions, click Rule-Based Extraction…. The banner reads "This set already has n functions. Matching functions keep their names; tick Rename on a row to use the proposed name." Rows show Updates F7 … where a requirement already links to F7, and New for requirements with no function yet. Click Cancel to keep the demo's analysis.
  3. On Flow & FFBD, find the LOOP group framed as F5 and the OR group inside it with F9 and F10 on separate branches. Click Edit as Text… to see the flow above in text form, then Cancel.
  4. Click Open FFBD. Double-click F3 Generate and Store Power: it has sub-functions, so its own FFBD opens. Click ▲ Parent to return.
  5. Click the LP gate. The inspector shows Function shown as this loop = F5 Operate Imaging Orbits, Loop entry label = LP (loop) and Text on the return arrow = next orbit. Change the entry to IT (iterate) and the gate relabels.
  6. On Tables, with Subsystem ticked, Table 2 lists each function with its requirements and performing asset (for example F7 Capture Images, 1.2, 1.3, 1.4, 1.5, Payload Camera).
  7. Click Assignment Report (DOCX) to download "EO-1 System Requirements Specification Functional Analysis.docx".

Tips and good practice

  • Label requirements Functional Requirement or Performance Requirement before extracting; the rule-based extraction relies on them.
  • Group performance requirements under the functional requirement they constrain in the document outline; the extraction then puts them in the same function.
  • Name functions with a verb and a noun, and keep them solution-neutral ("Store Payload Data", not "Write to SSD").
  • Rerun the extraction after the requirements change. Existing functions are matched by their satisfied by links first, then by name, so they are updated, not duplicated, and keep their names unless you tick Rename.
  • Model the flow at one level at a time. Give a function sub-functions (set Parent in the preview), then build its own flow in its FFBD or Action Diagram.
  • Use the loop's function only when the function is the repetition; otherwise leave the loop plain and keep the function as a block.

Common mistakes

ProblemFix
Every requirement becomes its own functionThe requirements have no type labels and sit flat under headings. Label the performance requirements, or merge rows in the preview
A requirement shows "Shared with another function"The same number is typed in two rows. Remove it from one; a requirement is linked to the first function listed
"Not in this requirements set: …"A typed number is not in the scope; check the scope list and the numbering
A function appears twice after applyingIt was renamed outside Functional Analysis and its satisfied by links were removed. Delete the duplicate or relink it
The FFBD shows a function you removed from the flow at the endEvery child function stays in the flow; remove the decomposed by link or delete the function to drop it
The Score column shows —Click Run Quality Check

How it connects

  • Fed by: requirements documents and the requirement labels; Requirements Quality scores.
  • Feeds: the Action Diagram of the top-level function (the same flow), the Simulator, traceability (satisfied by in the RVTM, matrices and spider diagrams), allocation (performed by shown in the Subsystem column), and review packages through the DOCX report.

The Functional Analysis page

Top bar

  • Assignment Report (DOCX): the Word report (below).
  • Open FFBD: the FFBD of the top-level function (shown when one exists).
  • ✦ AI ▾: Extract Functions with AI… and Suggest Flow with AI… (enabled when a top-level function exists).

View bar

  • Scope: All requirements in project or Document: <name>. The choice is remembered for the project in this browser.
  • Top-level function: a link to the current one, or "none yet", and Choose… to pick an existing Action in the Top-Level Function dialog.
  • The page address accepts ?doc=<document id> and &tab=functions, flow, tables or coverage.

Functions tab

  • Derive functions from requirements: the count line, Rule-Based Extraction…, a pointer to the AI tool and a summary of both methods.
  • The functions table (Table 2) with its caption, the Subsystem checkbox, Copy, CSV, XLSX and DOCX.
  • "No functions yet — run an extraction above, or choose an existing top-level Action." when there is no top-level function.

The function preview

The preview opens from both extraction methods (titled Rule-Based Function Extraction, or ✦ Functions Proposed by AI). Nothing changes until you click Apply.

Column or controlUse
CheckboxTicks rows for Merge ticked
IDThe number the row will get, from the prefix and the row order
FunctionThe name. On a row that matches an existing function with another name, the existing name is kept and the proposal shows below with a Rename checkbox ("Proposed: …" or "Renames …")
RequirementsThe requirement numbers, comma-separated
Parent— top level or another row
StatusNew, or Updates F7 (with → F8 when the number changes), plus "Keeps its name" or "Name: old → new"
↑ ↓Move the row (renumbers)
SplitMoves the last requirement to a new function "<name> (2)" after this row
×Removes the row from the proposal; its children move to its parent
Top-level functionName of the top-level Action (created when missing, renamed when changed)
ID prefixThe number prefix (default F)
Merge tickedCombines the ticked rows into the first one
+ FunctionAdds a row named "New Function"
Rename all to the proposed namesShown when the scope already has functions; ticks Rename on every row

Apply creates missing functions, renames and renumbers matched ones, sets the decomposed by links (moving functions to their new parent), links each requirement satisfied by its function (removing links to other functions of this tree), and starts a flow in number order for any parent that has none.

Flow & FFBD tab

  • Functional flow card: Edit as Text… and the structured editor.
    • Toolbar: ◀ (Move earlier), ▶ (Move later), Wrap in AND, Wrap in OR, Wrap in LOOP, Unwrap, and the hint "Click to select, Shift-click to add, drag to move."
    • Function chips show number and name; groups show AND, OR or LOOP in their header. Drag a chip or a group header and drop it on another chip (left or right half), a group header or the end zone of a sequence ("empty — drop here" in an empty branch).
    • AND and OR headers: + Branch. LOOP headers: the represented function ("no function"), the entry label (LP, IT) and the return arrow text ("return arrow text").
    • Click the background to clear the selection.
  • FFBD card: Start, End, Left to right / Top down, PNG (downloads "FFBD - <name>.png") and Open FFBD, then a preview of the diagram.
  • With no top-level function: "No top-level function" / "Derive functions from requirements first (Functions tab)."

New loops made with Wrap in LOOP or text repeat twice and new ORs split the probability evenly; set the simulation conditions in the Action Diagram.

Tables tab

TableColumnsDefault caption
RequirementsNo., Name, Requirement (the text), Type (Functional, Performance, Statement), Score (quality score %, "N/A" for statements, "—" when not scored)Table 1 - Top-Level Requirements and Quality Scores
FunctionsID, Function, Requirements (numbers of the requirements it satisfies), Subsystem (performing assets, when ticked)Table 2 - Requirements Allocated to Functions
  • The functions table lists the whole function tree in number order, sub-functions after their parent.
  • Run Quality Check scores every requirement in the scope; the toast reads "Quality scores updated".
  • The figure card holds the editable FFBD caption, Open FFBD and the note "Figure caption used in the assignment report; the FFBD image is rendered from the current flow."
  • Copy puts the table on the clipboard as a table and as tab-separated text. CSV, XLSX (header row frozen) and DOCX download files named after the caption. In CSV files and copied text, values that start like spreadsheet formulas are neutralized.
  • Captions are saved per scope.

Coverage tab

Two cards, each with a count and a linked list: Requirements not allocated to a function ("✔ Every requirement is satisfied by a function." when none) and Functions with no requirement ("✔ Every function satisfies at least one requirement.", or "No functions yet.").

The FFBD diagram

The FFBD diagram type (category LML) applies to any Action and draws its flow. Open it with Open FFBD, from Behavior → FFBD, from an Action's Open ▾ → FFBD, or with the diagram type selector. It uses the shared diagram editor (Diagrams): pan and zoom, Search diagram, annotations, Export ▾ and the inspector.

Toolbar

ControlEffect
Left to right / Top downOrientation
Start/end: text / Start/end: reference blocksStart and end as bold text or as Ref blocks
Start, EndThe start and end text (default Start and End)
Edit Flow…Opens the Flow & FFBD tab of Functional Analysis for this flow
Action DiagramOpens the same flow as an Action Diagram

⚙ adds two options, checked by default: Rotate start/end labels (left to right) and Frame loops that represent a function. Layout Diagram fits the view. The FFBD has no Auto Number; number functions in the preview or the entity.

On the canvas

GestureEffect
Click a function blockSelects it; the inspector shows the entity (name, number, description, attributes, relationships)
Double-click a function block that has child functionsOpens that function's FFBD
Click an LP/IT entry gate or a loop's exit OR gateOpens the Loop panel in the inspector
Click an AND or OR gateHighlights the gate pair
Double-click the start or endEdits its text (Start Label / End Label)
Click a function frameSelects the function the loop represents

Loop panel

  • Function shown as this loop: — none (plain loop) or a child function. Choosing a function removes its block from the flow and frames the loop with its number and name; clearing it puts the function back at the end of the flow.
  • Loop entry label: LP (loop) or IT (iterate).
  • Text on the return arrow: for example "next sortie".

Display options

The FFBD options are saved with the top-level function: orientation, start and end text, start/end style, rotation and framing. The flow itself is edited in Functional Analysis or the Action Diagram; the FFBD redraws from it.

AI assists

Both tools are in ✦ AI ▾ on the Functional Analysis page and use the AI provider configured for your account. Proposals are always previewed and applied as one undo step.

  • Extract Functions with AI… sends the requirements in the scope (number, type, name and text) and asks for verb-noun functions in title case, duplicates merged, every requirement allocated by number, an operational order, parents only for clear sub-functions, and a rationale per function. The preview (✦ Functions Proposed by AI) shows the AI input banner and the rationales. Two opt-ins protect existing work: Remove n existing links… (unticked: new links are added and the old ones kept) and Change n Approved, baselined or locked functions… (unticked: their names and numbers stay as they are).
  • Suggest Flow with AI… sends the top-level function and its child functions (number, name, description and the requirements they satisfy) and asks for a flow in the text notation, start and end labels and a two-sentence rationale. The ✦ Flow Suggested by AI dialog shows the changes against the current flow, the rationale and the live preview. If the top-level function is approved, baselined or locked, tick the box to replace its flow.

Shortcuts and gestures

Key or gestureWhereEffect
ClickFlow editorSelect an element
Shift+clickFlow editorAdd or remove an element in the same sequence
DragFlow editorMove a chip or group
Double-clickFFBDOpen a function's FFBD or edit start/end text
⌘Z / ⇧⌘ZEverywhereUndo / redo the last apply, wrap, move or option change

Messages

MessageMeaning and fix
"No requirements in this set."The scope has no requirements; choose another scope
"Functions applied: n new, m updated"The preview was applied
"No functions to apply."The preview has no rows
"Tick two or more functions to merge."Merge ticked needs at least two ticked rows
"Not in this requirements set: …"A typed requirement number is not in the scope
"Shared with another function"The same requirement is listed in two rows
"Not allocated: …"Requirements no row lists
"The AI model returned no functions. Run it again or extract rule-based."The AI reply was empty
"Add functions first (at least two)."Suggest Flow with AI… needs two or more functions
"The AI model returned no flow. Run it again or edit the flow by hand."The AI reply had no flow
"Select one or more elements first (Shift-click to add)."Wrap or move needs a selection
"Select elements that are next to each other."Wrap needs adjacent elements in one sequence
"Select one AND / OR / LOOP to unwrap." / "Select an AND, OR or LOOP to unwrap."Unwrap needs one group
"You cannot insert a vertex inside itself!"A group was dropped inside itself
"Unknown function "x" (not a child of the top-level function)"The text names a function outside this tree
"F4 Determine and Control Attitude appears more than once"Each function may appear once in the text
"Expected ")" but found the end", "Missing element after an arrow", "Expected "->" before "x"", "Unexpected "x"", "Missing "]"", "Unknown loop option "k""Syntax errors in the flow text
"Not in the text (appended at the end): …"Functions the text leaves out
"Tick the box to replace the flow of this item."The AI flow would replace a protected flow
"Flow updated"The text or AI flow was applied
"Quality scores updated"Run Quality Check finished
"Table copied — paste into Word or Excel" / "The browser blocked the copy; use CSV, XLSX or DOCX instead."Result of Copy
"Building report…"The DOCX report is being assembled
"View only: ask an owner for edit access."Viewers can read the analysis and export tables but cannot apply changes

Limits

  • One top-level function per scope; functions are its descendants.
  • Sub-function numbering goes up to 20 levels deep.
  • An AI proposal is capped at 150 functions.
  • The report figure is at most 6.5 inches wide.

Last updated October 7, 2026