@documentation-robotics/cli 0.1.13 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -2
- package/dist/analysis/relationship-classifier.js +2 -9
- package/dist/analysis/relationship-classifier.js.map +2 -2
- package/dist/analyzers/call-graph-utils.js +2 -2
- package/dist/analyzers/call-graph-utils.js.map +2 -2
- package/dist/analyzers/cards/build.js +171 -0
- package/dist/analyzers/cards/build.js.map +7 -0
- package/dist/analyzers/cards/classify.js +42 -0
- package/dist/analyzers/cards/classify.js.map +7 -0
- package/dist/analyzers/cards/edge-index.js +44 -0
- package/dist/analyzers/cards/edge-index.js.map +7 -0
- package/dist/analyzers/cards/facts.js +46 -0
- package/dist/analyzers/cards/facts.js.map +7 -0
- package/dist/analyzers/cards/graph.js +42 -0
- package/dist/analyzers/cards/graph.js.map +7 -0
- package/dist/analyzers/cards/index.js +8 -0
- package/dist/analyzers/cards/index.js.map +7 -0
- package/dist/analyzers/cards/tier0.js +18 -0
- package/dist/analyzers/cards/tier0.js.map +7 -0
- package/dist/analyzers/cards/types.js +1 -0
- package/dist/analyzers/cards/types.js.map +7 -0
- package/dist/analyzers/cbm-analyzer.js +195 -171
- package/dist/analyzers/cbm-analyzer.js.map +2 -2
- package/dist/analyzers/cbm-responses.js +336 -0
- package/dist/analyzers/cbm-responses.js.map +7 -0
- package/dist/analyzers/edge-relationships.js +45 -0
- package/dist/analyzers/edge-relationships.js.map +7 -0
- package/dist/analyzers/mapping-loader.js +9 -0
- package/dist/analyzers/mapping-loader.js.map +2 -2
- package/dist/analyzers/tier0-rules.js +153 -0
- package/dist/analyzers/tier0-rules.js.map +7 -0
- package/dist/analyzers/types.js.map +1 -1
- package/dist/analyzers/verify-engine.js +22 -19
- package/dist/analyzers/verify-engine.js.map +2 -2
- package/dist/audit/relationships/ai/prompts.js +10 -10
- package/dist/audit/relationships/ai/prompts.js.map +2 -2
- package/dist/audit/relationships/analysis/layer-templates.js +52 -52
- package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
- package/dist/cli.js +112 -28
- package/dist/cli.js.map +3 -3
- package/dist/coding-agents/agents/claude-code.js +3 -1
- package/dist/coding-agents/agents/claude-code.js.map +2 -2
- package/dist/coding-agents/claude-code-client.js +2 -1
- package/dist/coding-agents/claude-code-client.js.map +2 -2
- package/dist/coding-agents/copilot-client.js +17 -12
- package/dist/coding-agents/copilot-client.js.map +2 -2
- package/dist/coding-agents/default-permissions.js +152 -0
- package/dist/coding-agents/default-permissions.js.map +7 -0
- package/dist/coding-agents/drbot-mcp.js +167 -0
- package/dist/coding-agents/drbot-mcp.js.map +7 -0
- package/dist/commands/add.js +12 -7
- package/dist/commands/add.js.map +2 -2
- package/dist/commands/analyzer.js +134 -23
- package/dist/commands/analyzer.js.map +2 -2
- package/dist/commands/audit.js +6 -6
- package/dist/commands/audit.js.map +2 -2
- package/dist/commands/changeset-verify.js +55 -0
- package/dist/commands/changeset-verify.js.map +7 -0
- package/dist/commands/changeset.js +261 -147
- package/dist/commands/changeset.js.map +2 -2
- package/dist/commands/delete.js +52 -19
- package/dist/commands/delete.js.map +3 -3
- package/dist/commands/element.js +3 -2
- package/dist/commands/element.js.map +2 -2
- package/dist/commands/farm.js +773 -0
- package/dist/commands/farm.js.map +7 -0
- package/dist/commands/init.js +11 -1
- package/dist/commands/init.js.map +2 -2
- package/dist/commands/mcp.js +122 -0
- package/dist/commands/mcp.js.map +7 -0
- package/dist/commands/relationship.js +251 -47
- package/dist/commands/relationship.js.map +2 -2
- package/dist/commands/reports.js +1 -1
- package/dist/commands/reports.js.map +2 -2
- package/dist/commands/update.js +56 -24
- package/dist/commands/update.js.map +2 -2
- package/dist/commands/upgrade.js +99 -11
- package/dist/commands/upgrade.js.map +3 -3
- package/dist/commands/validate.js +41 -3
- package/dist/commands/validate.js.map +2 -2
- package/dist/commands/version.js +2 -2
- package/dist/commands/version.js.map +2 -2
- package/dist/commands/visualize.js +4 -3
- package/dist/commands/visualize.js.map +2 -2
- package/dist/config.js +83 -0
- package/dist/config.js.map +7 -0
- package/dist/core/annotation-store.js +138 -0
- package/dist/core/annotation-store.js.map +7 -0
- package/dist/core/catalog-migration.js +33 -0
- package/dist/core/catalog-migration.js.map +7 -0
- package/dist/core/changeset-analysis.js +421 -0
- package/dist/core/changeset-analysis.js.map +7 -0
- package/dist/core/changeset-base-index.js +153 -0
- package/dist/core/changeset-base-index.js.map +7 -0
- package/dist/core/changeset-brief-delta.js +102 -0
- package/dist/core/changeset-brief-delta.js.map +7 -0
- package/dist/core/changeset-graph.js +281 -0
- package/dist/core/changeset-graph.js.map +7 -0
- package/dist/core/changeset-only-guard.js +32 -0
- package/dist/core/changeset-only-guard.js.map +7 -0
- package/dist/core/changeset-summary.js +68 -0
- package/dist/core/changeset-summary.js.map +7 -0
- package/dist/core/changeset-validator.js +66 -20
- package/dist/core/changeset-validator.js.map +2 -2
- package/dist/core/changeset-verify.js +518 -0
- package/dist/core/changeset-verify.js.map +7 -0
- package/dist/core/changeset.js +56 -9
- package/dist/core/changeset.js.map +2 -2
- package/dist/core/element-type-migration.js +145 -0
- package/dist/core/element-type-migration.js.map +7 -0
- package/dist/core/farm-manifest.js +140 -0
- package/dist/core/farm-manifest.js.map +7 -0
- package/dist/core/farm-sync-engine.js +346 -0
- package/dist/core/farm-sync-engine.js.map +7 -0
- package/dist/core/farm-sync-state.js +167 -0
- package/dist/core/farm-sync-state.js.map +7 -0
- package/dist/core/manifest.js +6 -3
- package/dist/core/manifest.js.map +2 -2
- package/dist/core/migration-registry.js +84 -1
- package/dist/core/migration-registry.js.map +2 -2
- package/dist/core/model-upgrade.js +102 -0
- package/dist/core/model-upgrade.js.map +7 -0
- package/dist/core/model.js +257 -44
- package/dist/core/model.js.map +3 -3
- package/dist/core/mutation-handler.js +71 -6
- package/dist/core/mutation-handler.js.map +2 -2
- package/dist/core/relationship-migration-table.js +6639 -0
- package/dist/core/relationship-migration-table.js.map +7 -0
- package/dist/core/relationship-migration.js +272 -0
- package/dist/core/relationship-migration.js.map +7 -0
- package/dist/core/relationship-prune.js +49 -0
- package/dist/core/relationship-prune.js.map +7 -0
- package/dist/core/relationship-staging.js +68 -0
- package/dist/core/relationship-staging.js.map +7 -0
- package/dist/core/relationships.js +26 -4
- package/dist/core/relationships.js.map +2 -2
- package/dist/core/report-data-model.js +7 -13
- package/dist/core/report-data-model.js.map +2 -2
- package/dist/core/staged-changeset-storage.js +64 -17
- package/dist/core/staged-changeset-storage.js.map +2 -2
- package/dist/core/staged-source-reference.js +28 -0
- package/dist/core/staged-source-reference.js.map +7 -0
- package/dist/core/staging-area.js +83 -18
- package/dist/core/staging-area.js.map +2 -2
- package/dist/core/virtual-projection.js +14 -5
- package/dist/core/virtual-projection.js.map +2 -2
- package/dist/export/archimate-exporter.js +1 -0
- package/dist/export/archimate-exporter.js.map +2 -2
- package/dist/generated/compiled-validators.js +2 -2
- package/dist/generated/compiled-validators.js.map +2 -2
- package/dist/generated/layer-registry.js +16 -16
- package/dist/generated/layer-registry.js.map +2 -2
- package/dist/generated/node-types.js +186 -168
- package/dist/generated/node-types.js.map +2 -2
- package/dist/generated/relationship-index.js +2209 -7727
- package/dist/generated/relationship-index.js.map +2 -2
- package/dist/integrations/claude_code/agents/dr-architect.md +16 -3
- package/dist/integrations/claude_code/agents/dr-extractor.md +1 -1
- package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
- package/dist/integrations/claude_code/commands/dr-map.md +13 -0
- package/dist/integrations/claude_code/commands/dr-plan.md +40 -0
- package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
- package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
- package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
- package/dist/integrations/claude_code/docs/MCP_SERVER.md +79 -0
- package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
- package/dist/integrations/claude_code/docs/README.md +52 -1
- package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
- package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
- package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
- package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
- package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
- package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
- package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
- package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
- package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
- package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
- package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
- package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
- package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +92 -15
- package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +119 -0
- package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +1 -1
- package/dist/integrations/github_copilot/agents/dr-architect.md +1 -1
- package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
- package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
- package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
- package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
- package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
- package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
- package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
- package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
- package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
- package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
- package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
- package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
- package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +222 -102
- package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +119 -0
- package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/hash-utils.js.map +2 -2
- package/dist/mcp/api-key-manager.js +111 -0
- package/dist/mcp/api-key-manager.js.map +7 -0
- package/dist/mcp/changeset-only.js +34 -0
- package/dist/mcp/changeset-only.js.map +7 -0
- package/dist/mcp/http-transport.js +176 -0
- package/dist/mcp/http-transport.js.map +7 -0
- package/dist/mcp/resource-registry.js +97 -0
- package/dist/mcp/resource-registry.js.map +7 -0
- package/dist/mcp/tool-registry.js +60 -0
- package/dist/mcp/tool-registry.js.map +7 -0
- package/dist/mcp/tools/annotation-create.js +39 -0
- package/dist/mcp/tools/annotation-create.js.map +7 -0
- package/dist/mcp/tools/annotation-delete.js +29 -0
- package/dist/mcp/tools/annotation-delete.js.map +7 -0
- package/dist/mcp/tools/annotation-get.js +29 -0
- package/dist/mcp/tools/annotation-get.js.map +7 -0
- package/dist/mcp/tools/annotation-list.js +24 -0
- package/dist/mcp/tools/annotation-list.js.map +7 -0
- package/dist/mcp/tools/annotation-reply.js +34 -0
- package/dist/mcp/tools/annotation-reply.js.map +7 -0
- package/dist/mcp/tools/annotation-shared.js +10 -0
- package/dist/mcp/tools/annotation-shared.js.map +7 -0
- package/dist/mcp/tools/annotation-update.js +39 -0
- package/dist/mcp/tools/annotation-update.js.map +7 -0
- package/dist/mcp/tools/changeset-analysis-tools.js +78 -0
- package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
- package/dist/mcp/tools/changeset-editing.js +184 -0
- package/dist/mcp/tools/changeset-editing.js.map +7 -0
- package/dist/mcp/tools/changeset-lifecycle.js +83 -0
- package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
- package/dist/mcp/tools/changeset-list.js +33 -0
- package/dist/mcp/tools/changeset-list.js.map +7 -0
- package/dist/mcp/tools/changeset-shared.js +31 -0
- package/dist/mcp/tools/changeset-shared.js.map +7 -0
- package/dist/mcp/tools/changeset-show.js +55 -0
- package/dist/mcp/tools/changeset-show.js.map +7 -0
- package/dist/mcp/tools/changeset-verify.js +43 -0
- package/dist/mcp/tools/changeset-verify.js.map +7 -0
- package/dist/mcp/tools/chat-launch.js +50 -0
- package/dist/mcp/tools/chat-launch.js.map +7 -0
- package/dist/mcp/tools/chat-status.js +26 -0
- package/dist/mcp/tools/chat-status.js.map +7 -0
- package/dist/mcp/tools/index.js +65 -0
- package/dist/mcp/tools/index.js.map +7 -0
- package/dist/mcp/tools/model-add.js +107 -0
- package/dist/mcp/tools/model-add.js.map +7 -0
- package/dist/mcp/tools/model-delete.js +99 -0
- package/dist/mcp/tools/model-delete.js.map +7 -0
- package/dist/mcp/tools/model-export.js +72 -0
- package/dist/mcp/tools/model-export.js.map +7 -0
- package/dist/mcp/tools/model-info.js +51 -0
- package/dist/mcp/tools/model-info.js.map +7 -0
- package/dist/mcp/tools/model-list.js +53 -0
- package/dist/mcp/tools/model-list.js.map +7 -0
- package/dist/mcp/tools/model-reload.js +34 -0
- package/dist/mcp/tools/model-reload.js.map +7 -0
- package/dist/mcp/tools/model-search.js +102 -0
- package/dist/mcp/tools/model-search.js.map +7 -0
- package/dist/mcp/tools/model-show.js +68 -0
- package/dist/mcp/tools/model-show.js.map +7 -0
- package/dist/mcp/tools/model-stats.js +22 -0
- package/dist/mcp/tools/model-stats.js.map +7 -0
- package/dist/mcp/tools/model-trace.js +118 -0
- package/dist/mcp/tools/model-trace.js.map +7 -0
- package/dist/mcp/tools/model-update.js +121 -0
- package/dist/mcp/tools/model-update.js.map +7 -0
- package/dist/mcp/tools/model-validate.js +78 -0
- package/dist/mcp/tools/model-validate.js.map +7 -0
- package/dist/mcp/tools/relationship-tools.js +98 -0
- package/dist/mcp/tools/relationship-tools.js.map +7 -0
- package/dist/mcp/tools/shared.js +126 -0
- package/dist/mcp/tools/shared.js.map +7 -0
- package/dist/mcp/tools/spec-type.js +90 -0
- package/dist/mcp/tools/spec-type.js.map +7 -0
- package/dist/reports/model-layer-report-generator.js +5 -3
- package/dist/reports/model-layer-report-generator.js.map +2 -2
- package/dist/reports/model-readme-generator.js +116 -0
- package/dist/reports/model-readme-generator.js.map +7 -0
- package/dist/reports/model-report-data.js +37 -1
- package/dist/reports/model-report-data.js.map +2 -2
- package/dist/reports/model-report-orchestrator.js +29 -6
- package/dist/reports/model-report-orchestrator.js.map +2 -2
- package/dist/reports/model-report-utils.js +9 -0
- package/dist/reports/model-report-utils.js.map +7 -0
- package/dist/schemas/bundled/analyzers/cbm.json +1186 -68
- package/dist/schemas/bundled/analyzers/manifest.json +2 -2
- package/dist/schemas/bundled/api.json +1029 -1658
- package/dist/schemas/bundled/apm.json +499 -734
- package/dist/schemas/bundled/application.json +745 -370
- package/dist/schemas/bundled/base.json +3 -220
- package/dist/schemas/bundled/business.json +452 -366
- package/dist/schemas/bundled/data-model.json +403 -383
- package/dist/schemas/bundled/data-store.json +334 -558
- package/dist/schemas/bundled/manifest.json +18 -18
- package/dist/schemas/bundled/motivation.json +349 -368
- package/dist/schemas/bundled/navigation.json +415 -731
- package/dist/schemas/bundled/product.json +325 -159
- package/dist/schemas/bundled/security.json +864 -1232
- package/dist/schemas/bundled/technology.json +574 -703
- package/dist/schemas/bundled/testing.json +718 -1643
- package/dist/schemas/bundled/ux.json +739 -1352
- package/dist/server/schemas.js +8 -0
- package/dist/server/schemas.js.map +2 -2
- package/dist/server/server.js +234 -31
- package/dist/server/server.js.map +2 -2
- package/dist/server-entry.js +2 -1
- package/dist/server-entry.js.map +2 -2
- package/dist/telemetry/config.js +2 -40
- package/dist/telemetry/config.js.map +2 -2
- package/dist/telemetry/index.js +1 -1
- package/dist/types/index.js.map +2 -2
- package/dist/utils/ansi-suppressor.js +23 -0
- package/dist/utils/ansi-suppressor.js.map +7 -0
- package/dist/utils/attribute-patch.js +41 -0
- package/dist/utils/attribute-patch.js.map +7 -0
- package/dist/utils/color-utils.js +34 -0
- package/dist/utils/color-utils.js.map +7 -0
- package/dist/utils/element-reference-shape.js +15 -1
- package/dist/utils/element-reference-shape.js.map +3 -3
- package/dist/utils/error-hints.js +29 -0
- package/dist/utils/error-hints.js.map +7 -0
- package/dist/utils/errors.js +75 -10
- package/dist/utils/errors.js.map +2 -2
- package/dist/utils/globals.js +17 -1
- package/dist/utils/globals.js.map +2 -2
- package/dist/utils/project-paths.js +50 -3
- package/dist/utils/project-paths.js.map +2 -2
- package/dist/utils/reference-path-parser.js +49 -0
- package/dist/utils/reference-path-parser.js.map +7 -0
- package/dist/utils/source-reference.js +17 -10
- package/dist/utils/source-reference.js.map +2 -2
- package/dist/utils/spec-version.js +10 -2
- package/dist/utils/spec-version.js.map +2 -2
- package/dist/validators/composed-reference-validator.js +240 -0
- package/dist/validators/composed-reference-validator.js.map +7 -0
- package/dist/validators/reference-validator.js +57 -13
- package/dist/validators/reference-validator.js.map +3 -3
- package/dist/validators/relationship-schema-validator.js +33 -5
- package/dist/validators/relationship-schema-validator.js.map +3 -3
- package/dist/validators/schema-validator.js +27 -9
- package/dist/validators/schema-validator.js.map +2 -2
- package/dist/validators/types.js.map +1 -1
- package/dist/viewer/README.md +6 -6
- package/dist/viewer/assets/main-CxzcuU_o.js +84 -0
- package/dist/viewer/assets/main-j-7ULYpm.css +1 -0
- package/dist/viewer/index.html +2 -2
- package/dist/viewer/manifest.json +10 -10
- package/dist/viewer/version.json +1 -1
- package/package.json +7 -3
- package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
- package/dist/viewer/assets/main-vdrFrG7q.css +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"specVersion": "0.
|
|
2
|
+
"specVersion": "0.11.0",
|
|
3
3
|
"layer": {
|
|
4
4
|
"id": "testing",
|
|
5
5
|
"number": 13,
|
|
6
6
|
"name": "Testing Layer",
|
|
7
|
-
"description": "
|
|
7
|
+
"description": "Describes how the system is verified: test strategies and plans, suites and cases, fixtures and test data, mocks and stubs, coverage targets and summaries, and the environments tests run in (IEEE 829-2008 test documentation). Test files, fixtures and test configuration are evidence for elements here; the production code under test belongs to the layer it implements. Modelling rules: each testing type has one composing parent. A test coverage model composes its coverage targets, input space partitions, context variations, environment factors, exclusions and coverage summary; a coverage target composes its target input fields, outcome categories, coverage requirements and test case sketches; a coverage requirement composes its input partition selections; a partition composes its values; a test case sketch composes its input selections. A test case sketch validates the one coverage requirement it exercises and references the context variation and outcome category it combines; each input selection references the partition value it picks. A coverage requirement references the context variations and outcome categories it needs, and reaches partition values only through its selections. A target input field references its partition and the field under test (an API parameter, schema property or UX component), so partitions stay reusable across fields; a selection references the values it picks, and a partition dependency references its trigger value and the partition it affects. Summaries report and never validate: a coverage summary aggregates the per-target summaries, a target coverage summary references its target, and both reference the gaps and exclusions they count. Gaps and exclusions reference the requirement or target they concern, and an exclusion references the gap it waives. Context variations reference the environment factors they fix, and environment factors reference only technology nodes and system software. A coverage target covers the production artifact it names; a test case sketch tests what it exercises, requires the software it runs on and accesses the stores holding its fixture data; the model covers only the application component, UX application or API document it is for. Requirements and summaries reach no other layer. The model carries the plan-level motivation links (it supports goals, satisfies principles, constraints and requirements, and measures outcomes), and test case sketches satisfy the requirements they verify.",
|
|
8
8
|
"inspired_by": {
|
|
9
9
|
"standard": "IEEE 829-2008",
|
|
10
10
|
"version": "2008",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"contextvariation": {
|
|
35
35
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
36
36
|
"title": "ContextVariation",
|
|
37
|
-
"description": "A
|
|
37
|
+
"description": "A named test-design condition, classified by test type (functional, load, security, regression, smoke, exploratory), under which a TestCoverageTarget is to be exercised, optionally bound to a set of EnvironmentFactors that fix the concrete environment for that condition. It names the whole execution context. It does not name a single environmental variable or an input value. Use EnvironmentFactor instead when the element is a single concrete environmental variable and its value (e.g. 'Ubuntu 22.04', 'en-US', 'latency < 100ms'), not a named test context that groups such variables. Use CoverageRequirement instead when the element states coverage criteria (pairwise, boundary-values, MC/DC) that must be met, possibly across several contexts, rather than defining one context. Use InputSpacePartition instead when the variation is in the data fed to the target (an input field's equivalence classes), not in the type of test or the execution environment. Use OutcomeCategory instead when the element classifies the expected result (success, timeout, validation-error), not the conditions under which the test runs.",
|
|
38
38
|
"allOf": [
|
|
39
39
|
{
|
|
40
40
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -54,7 +54,8 @@
|
|
|
54
54
|
"type": "object",
|
|
55
55
|
"properties": {
|
|
56
56
|
"description": {
|
|
57
|
-
"type": "string"
|
|
57
|
+
"type": "string",
|
|
58
|
+
"description": "Free-text explanation of the execution condition this variation represents: its purpose, scope and how it differs from other contexts applied to the same target, such as 'peak-load run at 500 rps against staging'. Set it whenever the contextType alone does not identify the context uniquely."
|
|
58
59
|
},
|
|
59
60
|
"contextType": {
|
|
60
61
|
"type": "string",
|
|
@@ -77,12 +78,24 @@
|
|
|
77
78
|
"additionalProperties": false
|
|
78
79
|
}
|
|
79
80
|
},
|
|
81
|
+
"x-dr-standard": "IEEE 829-2008 Test Design Specification – Approach refinements and Environmental needs (Clause 9 Level Test Plan: environmental needs)",
|
|
82
|
+
"x-dr-evidence": [
|
|
83
|
+
"Separate test suites or directories split by test type, such as tests/load, tests/security, tests/smoke, or pytest markers / JUnit @Tag('smoke'|'regression') used to select runs",
|
|
84
|
+
"CI pipeline jobs or matrix entries that run the same targets under named contexts, e.g. a 'load' job invoking k6/JMeter or a 'security' job invoking OWASP ZAP, each with its own environment variables",
|
|
85
|
+
"Test configuration profiles bundling environment settings per context, e.g. playwright.config projects, tox envs, or application-test-load.yml, that set OS, locale, network throttling or dependency versions"
|
|
86
|
+
],
|
|
87
|
+
"x-dr-distinguish": {
|
|
88
|
+
"testing.environmentfactor": "the element is a single concrete environmental variable and its value (e.g. 'Ubuntu 22.04', 'en-US', 'latency < 100ms'), not a named test context that groups such variables",
|
|
89
|
+
"testing.coveragerequirement": "the element states coverage criteria (pairwise, boundary-values, MC/DC) that must be met, possibly across several contexts, rather than defining one context",
|
|
90
|
+
"testing.inputspacepartition": "the variation is in the data fed to the target (an input field's equivalence classes), not in the type of test or the execution environment",
|
|
91
|
+
"testing.outcomecategory": "the element classifies the expected result (success, timeout, validation-error), not the conditions under which the test runs"
|
|
92
|
+
},
|
|
80
93
|
"$id": "urn:dr:spec:node:testing.contextvariation"
|
|
81
94
|
},
|
|
82
95
|
"coverageexclusion": {
|
|
83
96
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
84
97
|
"title": "CoverageExclusion",
|
|
85
|
-
"description": "A
|
|
98
|
+
"description": "A recorded governance decision that removes a specific coverage target or coverage requirement from the coverage that must be achieved. It names the excluded item, gives the rationale, states whether the residual risk is accepted, and identifies the accountable approver. It exists only once someone has explicitly decided and signed off on not testing the item, not merely when the item is observed to be untested. Use CoverageGap instead when the missing coverage has been detected (e.g. in a summary report) but no one has yet approved leaving it untested; a gap may later flow into an exclusion. Use InputPartitionSelection instead when specific partition values are carved out of a single requirement's selection as a test-design choice (excludeValues), without a formal waiver, approver or risk acceptance. Use CoverageRequirement instead when the element states coverage criteria that must be satisfied rather than a sanctioned decision not to satisfy them. Use TestCaseSketch instead when an individual designed test case is being retired (status deprecated) rather than an entire target or requirement being waived from coverage.",
|
|
86
99
|
"allOf": [
|
|
87
100
|
{
|
|
88
101
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -102,16 +115,20 @@
|
|
|
102
115
|
"type": "object",
|
|
103
116
|
"properties": {
|
|
104
117
|
"description": {
|
|
105
|
-
"type": "string"
|
|
118
|
+
"type": "string",
|
|
119
|
+
"description": "Free-text summary of what is excluded and the scope of the exclusion; set it when the reason alone does not make the boundary of the excluded item clear."
|
|
106
120
|
},
|
|
107
121
|
"reason": {
|
|
108
|
-
"type": "string"
|
|
122
|
+
"type": "string",
|
|
123
|
+
"description": "Plain-language justification for excluding the item from coverage (e.g. 'third-party code', 'deprecated endpoint scheduled for removal', 'not testable in CI environment'); always required."
|
|
109
124
|
},
|
|
110
125
|
"riskAccepted": {
|
|
111
|
-
"type": "boolean"
|
|
126
|
+
"type": "boolean",
|
|
127
|
+
"description": "True when the approver has explicitly accepted the residual risk of the item going untested. False when the exclusion rests on the item having no meaningful risk (e.g. dead or generated code)."
|
|
112
128
|
},
|
|
113
129
|
"approvedBy": {
|
|
114
|
-
"type": "string"
|
|
130
|
+
"type": "string",
|
|
131
|
+
"description": "Name, role or identity reference of the person or body accountable for authorising the exclusion (e.g. 'QA Lead', 'jane.doe', 'Change Advisory Board'); always required."
|
|
115
132
|
},
|
|
116
133
|
"affectedTargetRef": {
|
|
117
134
|
"type": "string",
|
|
@@ -127,12 +144,24 @@
|
|
|
127
144
|
"additionalProperties": false
|
|
128
145
|
}
|
|
129
146
|
},
|
|
147
|
+
"x-dr-standard": "IEEE 829-2008 Clause 9 Level Test Plan: features not to be tested (with risk justification under risks and contingencies)",
|
|
148
|
+
"x-dr-evidence": [
|
|
149
|
+
"A coverage-tool ignore entry with a justification comment that cites an approval or ticket, such as a `# pragma: no cover` or `/* istanbul ignore next */` line, `omit` in .coveragerc, or `coveragePathIgnorePatterns` in jest.config.",
|
|
150
|
+
"A test-waiver or exclusions file (YAML, JSON or Markdown) listing excluded endpoints, workflows or requirements with fields such as reason, approver and date.",
|
|
151
|
+
"A skipped or disabled test annotation that carries a reason and a waiver reference, such as `@pytest.mark.skip(reason=\"waived per QA-123, approved by J. Doe\")` or `@Disabled(\"Excluded: risk accepted, see ADR-12\")`."
|
|
152
|
+
],
|
|
153
|
+
"x-dr-distinguish": {
|
|
154
|
+
"testing.coveragegap": "the missing coverage has been detected (e.g. in a summary report) but no one has yet approved leaving it untested; a gap may later flow into an exclusion.",
|
|
155
|
+
"testing.inputpartitionselection": "specific partition values are carved out of a single requirement's selection as a test-design choice (excludeValues), without a formal waiver, approver or risk acceptance.",
|
|
156
|
+
"testing.coveragerequirement": "the element states coverage criteria that must be satisfied rather than a sanctioned decision not to satisfy them.",
|
|
157
|
+
"testing.testcasesketch": "an individual designed test case is being retired (status deprecated) rather than an entire target or requirement being waived from coverage."
|
|
158
|
+
},
|
|
130
159
|
"$id": "urn:dr:spec:node:testing.coverageexclusion"
|
|
131
160
|
},
|
|
132
161
|
"coveragegap": {
|
|
133
162
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
134
163
|
"title": "CoverageGap",
|
|
135
|
-
"description": "
|
|
164
|
+
"description": "A recorded finding that a specific coverage requirement or coverage target lacks the implemented or executed tests it needs. It names what is uncovered, how severe the gap is, and where it stands in remediation. It records a shortfall against required coverage, not a deliberate, approved scope decision and not an aggregate metric. Use CoverageExclusion instead when the uncovered item has been formally approved as out of scope, with a rationale, accepted risk and a named approver, rather than merely found to be missing coverage. Use TargetCoverageSummary instead when you are recording counts or percentages of sketches and implemented tests for a target, rather than a specific uncovered requirement that needs action. Use CoverageSummary instead when the artifact aggregates coverage totals across the whole model instead of describing one identified deficit. Use CoverageRequirement instead when you are specifying the criteria that must be met, rather than recording that those criteria are currently unmet.",
|
|
136
165
|
"allOf": [
|
|
137
166
|
{
|
|
138
167
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -152,7 +181,8 @@
|
|
|
152
181
|
"type": "object",
|
|
153
182
|
"properties": {
|
|
154
183
|
"description": {
|
|
155
|
-
"type": "string"
|
|
184
|
+
"type": "string",
|
|
185
|
+
"description": "Free-text explanation of what is not covered (for example, missing partitions, contexts or outcome categories) and how the gap was detected. Set it whenever the severity and affected requirement alone do not make the gap clear."
|
|
156
186
|
},
|
|
157
187
|
"severity": {
|
|
158
188
|
"type": "string",
|
|
@@ -177,12 +207,24 @@
|
|
|
177
207
|
"additionalProperties": false
|
|
178
208
|
}
|
|
179
209
|
},
|
|
210
|
+
"x-dr-standard": "IEEE 829-2008 Clause 16 Level Test Report / Clause 17 Master Test Report (the Test Summary Report in IEEE 829-1998): comprehensive assessment and variances, i.e. identification of features or combinations not sufficiently tested",
|
|
211
|
+
"x-dr-evidence": [
|
|
212
|
+
"Coverage tool output (e.g. lcov, JaCoCo, coverage.py) or a CI gate failure listing files or endpoints below a configured threshold such as `fail_under` or `coverageThreshold`.",
|
|
213
|
+
"Test files carrying skip or todo markers (`@pytest.mark.skip`, `it.todo`, `xit`, `@Disabled`) with a comment or ticket ID explaining that a requirement or partition is not yet tested.",
|
|
214
|
+
"Issue-tracker items or TEST_GAPS / test-report markdown entries labelled 'coverage gap' or 'missing tests', naming an endpoint or requirement ID and a severity."
|
|
215
|
+
],
|
|
216
|
+
"x-dr-distinguish": {
|
|
217
|
+
"testing.coverageexclusion": "the uncovered item has been formally approved as out of scope, with a rationale, accepted risk and a named approver, rather than merely found to be missing coverage",
|
|
218
|
+
"testing.targetcoveragesummary": "you are recording counts or percentages of sketches and implemented tests for a target, rather than a specific uncovered requirement that needs action",
|
|
219
|
+
"testing.coveragesummary": "the artifact aggregates coverage totals across the whole model instead of describing one identified deficit",
|
|
220
|
+
"testing.coveragerequirement": "you are specifying the criteria that must be met, rather than recording that those criteria are currently unmet"
|
|
221
|
+
},
|
|
180
222
|
"$id": "urn:dr:spec:node:testing.coveragegap"
|
|
181
223
|
},
|
|
182
224
|
"coveragerequirement": {
|
|
183
225
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
184
226
|
"title": "CoverageRequirement",
|
|
185
|
-
"description": "A
|
|
227
|
+
"description": "A test design rule attached to one TestCoverageTarget that names a combinatorial or structural coverage criterion (e.g. boundary-values, pairwise, MC/DC) which the target's test cases must satisfy across selected input partitions, context variations and outcome categories. It states what must be exercised. It is not a test case, not the target itself, and not a measured result. Use TestCoverageTarget instead when the element identifies the endpoint, workflow, component or job that needs testing, rather than the criterion its tests must meet. Use InputPartitionSelection instead when the element lists which specific values of one InputSpacePartition are included or excluded, rather than the overall coverage strategy that uses those selections. Use TestCaseSketch instead when the element is one designed or implemented test case choosing concrete partition values, rather than the rule that a set of such cases must satisfy. Use CoverageGap instead when the element records a measured shortfall against a requirement found during reporting, rather than the requirement itself.",
|
|
186
228
|
"allOf": [
|
|
187
229
|
{
|
|
188
230
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -202,7 +244,8 @@
|
|
|
202
244
|
"type": "object",
|
|
203
245
|
"properties": {
|
|
204
246
|
"description": {
|
|
205
|
-
"type": "string"
|
|
247
|
+
"type": "string",
|
|
248
|
+
"description": "Free-text statement of what this requirement demands for its target, naming the partitions, contexts or outcomes in scope and any rationale. Set it whenever the coverageCriteria value alone does not make the scope evident."
|
|
206
249
|
},
|
|
207
250
|
"coverageCriteria": {
|
|
208
251
|
"type": "string",
|
|
@@ -226,12 +269,24 @@
|
|
|
226
269
|
"additionalProperties": false
|
|
227
270
|
}
|
|
228
271
|
},
|
|
272
|
+
"x-dr-standard": "IEEE 829-2008 Clause 10 Level Test Design (test design specification: approach refinements and feature pass/fail criteria)",
|
|
273
|
+
"x-dr-evidence": [
|
|
274
|
+
"A combinatorial test model file, such as a PICT .txt model, an allpairs config or a hypothesis/fast-check strategy, scoped to one endpoint or function, that declares parameters and an order or strategy like pairwise.",
|
|
275
|
+
"A parametrized test table (pytest.mark.parametrize, test.each, JUnit @ParameterizedTest/@CsvSource) whose rows enumerate boundary and invalid classes for one target, with a comment or docstring naming the criterion (e.g. 'boundary values for quantity').",
|
|
276
|
+
"A test plan or test design Markdown/YAML entry that states, per feature or endpoint, a required criterion and priority (e.g. 'POST /orders: all-partitions over status × role, must cover validation-error and authorization-error outcomes')."
|
|
277
|
+
],
|
|
278
|
+
"x-dr-distinguish": {
|
|
279
|
+
"testing.testcoveragetarget": "the element identifies the endpoint, workflow, component or job that needs testing, rather than the criterion its tests must meet",
|
|
280
|
+
"testing.inputpartitionselection": "the element lists which specific values of one InputSpacePartition are included or excluded, rather than the overall coverage strategy that uses those selections",
|
|
281
|
+
"testing.testcasesketch": "the element is one designed or implemented test case choosing concrete partition values, rather than the rule that a set of such cases must satisfy",
|
|
282
|
+
"testing.coveragegap": "the element records a measured shortfall against a requirement found during reporting, rather than the requirement itself"
|
|
283
|
+
},
|
|
229
284
|
"$id": "urn:dr:spec:node:testing.coveragerequirement"
|
|
230
285
|
},
|
|
231
286
|
"coveragesummary": {
|
|
232
287
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
233
288
|
"title": "CoverageSummary",
|
|
234
|
-
"description": "
|
|
289
|
+
"description": "A model-wide test summary report record that totals the coverage targets, coverage requirements and test case sketches of exactly one TestCoverageModel at a point in time. Per-target figures are rolled up from the model's TargetCoverageSummary records. Use TargetCoverageSummary instead when the metrics (sketch, implemented and automated counts or a percentage) describe a single TestCoverageTarget rather than the whole model. Use CoverageGap instead when the artifact records one specific shortfall between required and achieved coverage, with a severity and a remediation status, rather than aggregate totals. Use TestCoverageModel instead when the artifact is the coverage specification itself, holding the targets, partitions and requirements, rather than a generated report about it. Use CoverageExclusion instead when the artifact is an approved decision to leave a target or requirement uncovered, rather than a count of what is covered.",
|
|
235
290
|
"allOf": [
|
|
236
291
|
{
|
|
237
292
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -255,28 +310,44 @@
|
|
|
255
310
|
"description": "ID of the testing.testcoveragemodel this summary aggregates"
|
|
256
311
|
},
|
|
257
312
|
"generatedAt": {
|
|
258
|
-
"type": "string"
|
|
313
|
+
"type": "string",
|
|
314
|
+
"description": "ISO 8601 date-time at which the summary was computed; set it every time the summary is regenerated so stale reports can be detected."
|
|
259
315
|
},
|
|
260
316
|
"totalTargets": {
|
|
261
|
-
"type": "integer"
|
|
317
|
+
"type": "integer",
|
|
318
|
+
"description": "Non-negative count of TestCoverageTarget nodes in the referenced model at generation time, including targets that have exclusions or gaps."
|
|
262
319
|
},
|
|
263
320
|
"totalRequirements": {
|
|
264
|
-
"type": "integer"
|
|
321
|
+
"type": "integer",
|
|
322
|
+
"description": "Non-negative count of CoverageRequirement nodes across all targets in the referenced model at generation time."
|
|
265
323
|
},
|
|
266
324
|
"totalSketches": {
|
|
267
|
-
"type": "integer"
|
|
325
|
+
"type": "integer",
|
|
326
|
+
"description": "Non-negative count of TestCaseSketch nodes across all targets in the model regardless of status; this equals the sum of sketchCount over the model's TargetCoverageSummary records."
|
|
268
327
|
}
|
|
269
328
|
},
|
|
270
329
|
"required": ["totalTargets", "totalRequirements", "totalSketches"],
|
|
271
330
|
"additionalProperties": false
|
|
272
331
|
}
|
|
273
332
|
},
|
|
333
|
+
"x-dr-standard": "IEEE 829-2008 Clause 17 Master Test Report / Clause 16 Level Test Report (overview and summary of results; the Test Summary Report in IEEE 829-1998)",
|
|
334
|
+
"x-dr-evidence": [
|
|
335
|
+
"A script or CI job that loads the test coverage model (YAML or JSON) and emits totals of targets, requirements and test cases with a generation timestamp.",
|
|
336
|
+
"A generated report artifact (e.g. coverage-model-summary.json or a Markdown table in docs/testing) that lists overall counts per model and links to per-target summaries.",
|
|
337
|
+
"A test-reporting dashboard or README section that publishes model-level totals of covered features, requirements and designed test cases for a named application."
|
|
338
|
+
],
|
|
339
|
+
"x-dr-distinguish": {
|
|
340
|
+
"testing.targetcoveragesummary": "the metrics (sketch, implemented and automated counts or a percentage) describe a single TestCoverageTarget rather than the whole model.",
|
|
341
|
+
"testing.coveragegap": "the artifact records one specific shortfall between required and achieved coverage, with a severity and a remediation status, rather than aggregate totals.",
|
|
342
|
+
"testing.testcoveragemodel": "the artifact is the coverage specification itself, holding the targets, partitions and requirements, rather than a generated report about it.",
|
|
343
|
+
"testing.coverageexclusion": "the artifact is an approved decision to leave a target or requirement uncovered, rather than a count of what is covered."
|
|
344
|
+
},
|
|
274
345
|
"$id": "urn:dr:spec:node:testing.coveragesummary"
|
|
275
346
|
},
|
|
276
347
|
"environmentfactor": {
|
|
277
348
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
278
349
|
"title": "EnvironmentFactor",
|
|
279
|
-
"description": "A
|
|
350
|
+
"description": "A single named environmental condition of a test run (operating system, network characteristic, locale, hardware configuration or dependency version) pinned to a concrete value or constraint and recorded because it changes how tests behave. It describes one factor of the execution environment, not the test type that bundles factors together nor any input supplied to the system under test. Use ContextVariation instead when the thing being modelled is a named test context (functional, load, security, regression, smoke, exploratory) that groups several environmental constraints, rather than one variable with one value. Use PartitionValue instead when the value is an equivalence class of an input field passed to the system under test (request parameter, form field, data property), not a property of the runtime environment. Use InputSpacePartition instead when an input dimension is being divided into equivalence classes. Do this even if that dimension is a locale or OS selector. A single fixed environmental setting is not a partition.",
|
|
280
351
|
"allOf": [
|
|
281
352
|
{
|
|
282
353
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -319,19 +390,31 @@
|
|
|
319
390
|
"description": "Description of how variations in this factor are expected to affect test behavior or outcomes."
|
|
320
391
|
},
|
|
321
392
|
"description": {
|
|
322
|
-
"type": "string"
|
|
393
|
+
"type": "string",
|
|
394
|
+
"description": "Free-text explanation of what this environmental factor is and why it is pinned for testing, for example 'Server-side timezone forced to UTC to make date-boundary tests deterministic'. Set it whenever the factorType and value alone do not make the factor's purpose clear."
|
|
323
395
|
}
|
|
324
396
|
},
|
|
325
397
|
"required": ["factorType", "value"],
|
|
326
398
|
"additionalProperties": false
|
|
327
399
|
}
|
|
328
400
|
},
|
|
401
|
+
"x-dr-standard": "IEEE 829-2008 Test Design Specification / Test Plan §'Environmental needs' (hardware, software, communications and tool characteristics of the test environment)",
|
|
402
|
+
"x-dr-evidence": [
|
|
403
|
+
"A CI matrix entry pinning an environment axis, such as a GitHub Actions `strategy.matrix` with `os: [ubuntu-22.04, windows-2022]` or `node-version: [18.x, 20.x]`, or a tox/nox env list over Python versions.",
|
|
404
|
+
"Test setup that forces an environmental condition, such as setting `TZ`/`LANG`/`LC_ALL` environment variables, network-throttling or latency-injection config (toxiproxy, tc netem, Playwright `emulateNetworkConditions`), or a docker-compose test service pinned to a specific image tag.",
|
|
405
|
+
"Conditional test guards keyed on the environment, such as `@pytest.mark.skipif(sys.platform == 'win32')`, Jest `testEnvironment`, or an engines/`.nvmrc`/`.tool-versions` file referenced by test configuration."
|
|
406
|
+
],
|
|
407
|
+
"x-dr-distinguish": {
|
|
408
|
+
"testing.contextvariation": "the thing being modelled is a named test context (functional, load, security, regression, smoke, exploratory) that groups several environmental constraints, rather than one variable with one value.",
|
|
409
|
+
"testing.partitionvalue": "the value is an equivalence class of an input field passed to the system under test (request parameter, form field, data property), not a property of the runtime environment.",
|
|
410
|
+
"testing.inputspacepartition": "an input dimension is being divided into equivalence classes. Do this even if that dimension is a locale or OS selector. A single fixed environmental setting is not a partition."
|
|
411
|
+
},
|
|
329
412
|
"$id": "urn:dr:spec:node:testing.environmentfactor"
|
|
330
413
|
},
|
|
331
414
|
"inputpartitionselection": {
|
|
332
415
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
333
416
|
"title": "InputPartitionSelection",
|
|
334
|
-
"description": "A
|
|
417
|
+
"description": "A coverage-scope rule within a CoverageRequirement that names exactly one InputSpacePartition and declares which of its PartitionValues must be exercised. The rule takes one of two forms: an explicit include list, or all values minus an exclude list. It selects equivalence classes and never binds concrete test data. Use InputSelection instead when a single partition value is bound to a concrete test datum for one specific TestCaseSketch, rather than a set of classes being declared in scope for a requirement. Use PartitionValue instead when you are defining the equivalence class itself (its label, constraint and representative value), not choosing which classes to cover. Use PartitionDependency instead when the inclusion or exclusion of values in one field is conditional on a value chosen in another field. Use CoverageRequirement instead when you are stating the overall criterion (pairwise, boundary-values, MC/DC) and priority, rather than the per-partition value subset it draws on.",
|
|
335
418
|
"allOf": [
|
|
336
419
|
{
|
|
337
420
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -376,12 +459,24 @@
|
|
|
376
459
|
"additionalProperties": false
|
|
377
460
|
}
|
|
378
461
|
},
|
|
462
|
+
"x-dr-standard": "IEEE 829-2008 Level Test Design Specification (Clause 10), approach refinements: selection of equivalence classes to be exercised",
|
|
463
|
+
"x-dr-evidence": [
|
|
464
|
+
"A combinatorial test model file (e.g. a PICT .txt or ACTS model) that lists one parameter with only a subset of its defined value classes.",
|
|
465
|
+
"A test-design YAML/JSON block keyed by an input field or partition name, with include/exclude lists or an 'all: true, except: [...]' form.",
|
|
466
|
+
"A parametrized test (pytest.mark.parametrize, it.each, @EnumSource(mode = EXCLUDE)) iterating over one field's enum or equivalence classes, with specific classes deliberately omitted or excluded."
|
|
467
|
+
],
|
|
468
|
+
"x-dr-distinguish": {
|
|
469
|
+
"testing.inputselection": "a single partition value is bound to a concrete test datum for one specific TestCaseSketch, rather than a set of classes being declared in scope for a requirement.",
|
|
470
|
+
"testing.partitionvalue": "you are defining the equivalence class itself (its label, constraint and representative value), not choosing which classes to cover.",
|
|
471
|
+
"testing.partitiondependency": "the inclusion or exclusion of values in one field is conditional on a value chosen in another field.",
|
|
472
|
+
"testing.coveragerequirement": "you are stating the overall criterion (pairwise, boundary-values, MC/DC) and priority, rather than the per-partition value subset it draws on."
|
|
473
|
+
},
|
|
379
474
|
"$id": "urn:dr:spec:node:testing.inputpartitionselection"
|
|
380
475
|
},
|
|
381
476
|
"inputselection": {
|
|
382
477
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
383
478
|
"title": "InputSelection",
|
|
384
|
-
"description": "A
|
|
479
|
+
"description": "A single input binding inside one TestCaseSketch that assigns, for one partitioned input field, the chosen equivalence class (a PartitionValue) and the exact datum the test will submit for it. It is owned by exactly one test case, so it records the data that one test actually uses rather than a coverage obligation. Use InputPartitionSelection instead when the element states which partition values a CoverageRequirement obliges tests to exercise (cover/exclude lists), without fixing a concrete datum for any particular test case. Use PartitionValue instead when the element defines an equivalence class itself (label, constraint, category, representative value) independent of any test case that uses it. Use TestCaseSketch instead when the element is the whole test case design (status, implementation format, source) that groups several input bindings. Use TargetInputField instead when the element only associates an input field of the target with its InputSpacePartition, without choosing a value for a specific test.",
|
|
385
480
|
"allOf": [
|
|
386
481
|
{
|
|
387
482
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -401,13 +496,16 @@
|
|
|
401
496
|
"type": "object",
|
|
402
497
|
"properties": {
|
|
403
498
|
"partitionRef": {
|
|
404
|
-
"type": "string"
|
|
499
|
+
"type": "string",
|
|
500
|
+
"description": "ID of the testing.inputspacepartition whose input field this binding supplies a value for; set it on every selection so the concrete value can be traced to its input dimension."
|
|
405
501
|
},
|
|
406
502
|
"selectedValue": {
|
|
407
|
-
"type": "string"
|
|
503
|
+
"type": "string",
|
|
504
|
+
"description": "Label or ID of the testing.partitionvalue (equivalence class) chosen from that partition for this test case, e.g. 'boundary-max' or 'null-empty'."
|
|
408
505
|
},
|
|
409
506
|
"concreteValue": {
|
|
410
|
-
"type": "string"
|
|
507
|
+
"type": "string",
|
|
508
|
+
"description": "The exact datum the test submits for the field, serialized as a string (literal, JSON fragment, or fixture key), e.g. '255', '\"\"', or 'fixtures/user_admin.json'."
|
|
411
509
|
},
|
|
412
510
|
"valueSource": {
|
|
413
511
|
"type": "string",
|
|
@@ -424,12 +522,24 @@
|
|
|
424
522
|
"additionalProperties": false
|
|
425
523
|
}
|
|
426
524
|
},
|
|
525
|
+
"x-dr-standard": "IEEE 829-2008 Clause 11 Level Test Case: inputs",
|
|
526
|
+
"x-dr-evidence": [
|
|
527
|
+
"A row in a parametrized test table (e.g. pytest.mark.parametrize, JUnit @CsvSource, Jest test.each) that supplies a specific literal for one argument, often named or commented after its class, such as 'age=-1 # invalid: negative'",
|
|
528
|
+
"A test-data file (CSV/JSON/YAML) with one column per input field and one row per test case, consumed by a data-driven runner",
|
|
529
|
+
"A fixture or factory call inside a single test that builds a specific value for a request field, e.g. build_user(email='a@b') or a Faker/hypothesis strategy pinned to a boundary such as max length 255"
|
|
530
|
+
],
|
|
531
|
+
"x-dr-distinguish": {
|
|
532
|
+
"testing.inputpartitionselection": "the element states which partition values a CoverageRequirement obliges tests to exercise (cover/exclude lists), without fixing a concrete datum for any particular test case",
|
|
533
|
+
"testing.partitionvalue": "the element defines an equivalence class itself (label, constraint, category, representative value) independent of any test case that uses it",
|
|
534
|
+
"testing.testcasesketch": "the element is the whole test case design (status, implementation format, source) that groups several input bindings",
|
|
535
|
+
"testing.targetinputfield": "the element only associates an input field of the target with its InputSpacePartition, without choosing a value for a specific test"
|
|
536
|
+
},
|
|
427
537
|
"$id": "urn:dr:spec:node:testing.inputselection"
|
|
428
538
|
},
|
|
429
539
|
"inputspacepartition": {
|
|
430
540
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
431
541
|
"title": "InputSpacePartition",
|
|
432
|
-
"description": "
|
|
542
|
+
"description": "A test-design artifact that divides the domain of a single input field (an API parameter, schema property, or stored collection attribute) into a named set of equivalence classes (PartitionValues), each grouping values expected to produce the same behaviour under test. It also states whether that field must be present in test inputs. Use PartitionValue instead when the element is one individual equivalence class (label, constraint, representative value) rather than the whole set of classes for a field. Use InputPartitionSelection instead when the element chooses which classes of an existing partition a CoverageRequirement must exercise, rather than defining the classes themselves. Use TargetInputField instead when the element only binds a field of a specific TestCoverageTarget to a partition and records its relevance, without enumerating classes. Use PartitionDependency instead when the element expresses a constraint linking a class in one field's partition to the allowed classes of another field.",
|
|
433
543
|
"allOf": [
|
|
434
544
|
{
|
|
435
545
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -449,10 +559,12 @@
|
|
|
449
559
|
"type": "object",
|
|
450
560
|
"properties": {
|
|
451
561
|
"description": {
|
|
452
|
-
"type": "string"
|
|
562
|
+
"type": "string",
|
|
563
|
+
"description": "Free-text explanation of the input dimension being partitioned and the basis on which its equivalence classes were derived (e.g. specification rule, data type limits); set whenever the partitioning rationale is not obvious from the field name."
|
|
453
564
|
},
|
|
454
565
|
"fieldRef": {
|
|
455
|
-
"type": "string"
|
|
566
|
+
"type": "string",
|
|
567
|
+
"description": "Cross-layer ID of the input field this partition divides, typically an api.parameter, data-model.schemaproperty, data-model.jsonschema or data-store.collection element; always set to the single field whose value domain is being partitioned."
|
|
456
568
|
},
|
|
457
569
|
"presenceRule": {
|
|
458
570
|
"type": "string",
|
|
@@ -470,12 +582,24 @@
|
|
|
470
582
|
"additionalProperties": false
|
|
471
583
|
}
|
|
472
584
|
},
|
|
585
|
+
"x-dr-standard": "IEEE 829-2008 Level Test Design Specification (test approach refinements / features to be tested); equivalence partitioning technique as defined in ISO/IEC/IEEE 29119-4 §5.2.1",
|
|
586
|
+
"x-dr-evidence": [
|
|
587
|
+
"a parametrized test table (e.g. pytest.mark.parametrize, JUnit @ParameterizedTest with @MethodSource, Jest test.each) for one input field whose cases carry class ids such as 'valid', 'empty', 'too_long', 'negative'",
|
|
588
|
+
"a test-data module, enum or factory that enumerates named valid/invalid/boundary value groups for a single request parameter or schema property (e.g. EMAIL_CASES = {valid: [...], malformed: [...], null: [...]})",
|
|
589
|
+
"a property-based generator per field built from named sub-strategies (e.g. hypothesis st.one_of(valid_emails(), malformed_emails())), or a test-design document table listing equivalence classes per parameter"
|
|
590
|
+
],
|
|
591
|
+
"x-dr-distinguish": {
|
|
592
|
+
"testing.partitionvalue": "the element is one individual equivalence class (label, constraint, representative value) rather than the whole set of classes for a field",
|
|
593
|
+
"testing.inputpartitionselection": "the element chooses which classes of an existing partition a CoverageRequirement must exercise, rather than defining the classes themselves",
|
|
594
|
+
"testing.targetinputfield": "the element only binds a field of a specific TestCoverageTarget to a partition and records its relevance, without enumerating classes",
|
|
595
|
+
"testing.partitiondependency": "the element expresses a constraint linking a class in one field's partition to the allowed classes of another field"
|
|
596
|
+
},
|
|
473
597
|
"$id": "urn:dr:spec:node:testing.inputspacepartition"
|
|
474
598
|
},
|
|
475
599
|
"outcomecategory": {
|
|
476
600
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
477
601
|
"title": "OutcomeCategory",
|
|
478
|
-
"description": "
|
|
602
|
+
"description": "A test-design classification of the observable result a TestCoverageTarget can produce (success, validation error, authorization error, not-found, server error, exception, timeout), stated at the level of result class rather than exact expected value. Coverage requirements must exercise it, and test case sketches are grouped under it. Use PartitionValue instead when the category classifies an input value (e.g. an invalid or null-empty equivalence class) rather than the result the target returns. Use ContextVariation instead when the category describes the test type or execution condition (functional, load, security, regression) under which the target is exercised, not what it returns. Use TestCaseSketch instead when the element specifies a particular case with concrete inputs and a specific expected value or assertion, rather than a class of outcomes. Use EnvironmentFactor instead when the element is the environmental condition (e.g. network latency) that provokes an outcome such as a timeout, rather than the outcome itself.",
|
|
479
603
|
"allOf": [
|
|
480
604
|
{
|
|
481
605
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -495,7 +619,8 @@
|
|
|
495
619
|
"type": "object",
|
|
496
620
|
"properties": {
|
|
497
621
|
"description": {
|
|
498
|
-
"type": "string"
|
|
622
|
+
"type": "string",
|
|
623
|
+
"description": "Free-text explanation of what observable behaviour qualifies as this outcome for the target, e.g. 'HTTP 422 with field-level error list'. Set it whenever the outcomeType alone does not identify the signal tests should check."
|
|
499
624
|
},
|
|
500
625
|
"outcomeType": {
|
|
501
626
|
"type": "string",
|
|
@@ -515,12 +640,24 @@
|
|
|
515
640
|
"additionalProperties": false
|
|
516
641
|
}
|
|
517
642
|
},
|
|
643
|
+
"x-dr-standard": "IEEE 829-2008 Level Test Design Specification (feature pass/fail criteria) and Level Test Case Specification (outputs specification)",
|
|
644
|
+
"x-dr-evidence": [
|
|
645
|
+
"test describe/context blocks or test names grouped by result class, e.g. 'returns 404 when resource missing', 'rejects unauthorized caller with 403', 'times out after 5s'",
|
|
646
|
+
"parameterized test tables or fixtures with an expected-outcome column (expected_status, expected_error, expectedOutcome) whose values are status classes or error types rather than exact payloads",
|
|
647
|
+
"assertions that check outcome class rather than exact value, e.g. expect(res.status).toBe(400), pytest.raises(ValidationError), assertThrows(AccessDeniedException), or OpenAPI response codes enumerated per operation in test plans"
|
|
648
|
+
],
|
|
649
|
+
"x-dr-distinguish": {
|
|
650
|
+
"testing.partitionvalue": "the category classifies an input value (e.g. an invalid or null-empty equivalence class) rather than the result the target returns",
|
|
651
|
+
"testing.contextvariation": "the category describes the test type or execution condition (functional, load, security, regression) under which the target is exercised, not what it returns",
|
|
652
|
+
"testing.testcasesketch": "the element specifies a particular case with concrete inputs and a specific expected value or assertion, rather than a class of outcomes",
|
|
653
|
+
"testing.environmentfactor": "the element is the environmental condition (e.g. network latency) that provokes an outcome such as a timeout, rather than the outcome itself"
|
|
654
|
+
},
|
|
518
655
|
"$id": "urn:dr:spec:node:testing.outcomecategory"
|
|
519
656
|
},
|
|
520
657
|
"partitiondependency": {
|
|
521
658
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
522
659
|
"title": "PartitionDependency",
|
|
523
|
-
"description": "A constraint
|
|
660
|
+
"description": "A cross-field constraint in combinatorial test design stating that when a specific partition value (the trigger) is selected in one InputSpacePartition, the availability of named partition values in another input field is excluded, required, restricted, or re-ranged, so that generated combinations omit invalid inputs. Use PartitionValue instead when the condition bounds a single field's own equivalence class (its constraintExpression) and does not depend on the value chosen for any other field. Use InputPartitionSelection instead when the restriction is a per-CoverageRequirement choice of which values of one partition to cover or exclude (coverValues/excludeValues), not a rule that applies whenever another field takes a given value. Use InputSpacePartition instead when you are describing the input dimension itself and its presenceRule (including a plain 'conditional' flag), rather than the specific trigger value and affected values that make it conditional. Use CoverageExclusion instead when a target or requirement is deliberately removed from coverage with an approver and accepted risk, rather than a combination being logically invalid.",
|
|
524
661
|
"allOf": [
|
|
525
662
|
{
|
|
526
663
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -562,7 +699,8 @@
|
|
|
562
699
|
"description": "Comma-separated labels or IDs of the partition values in the dependent field whose availability is modified by this dependency (e.g., values that are excluded, required, or restricted when the trigger value is selected)."
|
|
563
700
|
},
|
|
564
701
|
"description": {
|
|
565
|
-
"type": "string"
|
|
702
|
+
"type": "string",
|
|
703
|
+
"description": "Free-text explanation of the business or technical reason the trigger value constrains the affected values (e.g. 'guest accounts cannot hold admin role'); set whenever the rule is not self-evident from effect and affectedValues."
|
|
566
704
|
}
|
|
567
705
|
},
|
|
568
706
|
"required": [
|
|
@@ -574,12 +712,24 @@
|
|
|
574
712
|
"additionalProperties": false
|
|
575
713
|
}
|
|
576
714
|
},
|
|
715
|
+
"x-dr-standard": "IEEE 829-2008 Level Test Design Specification (test design refinements: feature/input combinations to be tested); conceptually the category-partition method's selector constraints (Ostrand & Balcer)",
|
|
716
|
+
"x-dr-evidence": [
|
|
717
|
+
"A constraint line in a combinatorial test model file, e.g. a PICT/ACTS model containing 'IF [PaymentMethod] = \"invoice\" THEN [Country] IN {\"DE\",\"AT\"};'",
|
|
718
|
+
"A parametrized test generator (e.g. pytest_generate_tests, JUnit ArgumentsProvider, itertools.product filter) that drops or skips tuples when one parameter has a specific value and another has a listed value",
|
|
719
|
+
"A property-based test calling assume()/filter() that ties one generated argument's allowed values to another argument's value, e.g. 'assume(not (account_type == \"guest\" and role == \"admin\"))'"
|
|
720
|
+
],
|
|
721
|
+
"x-dr-distinguish": {
|
|
722
|
+
"testing.partitionvalue": "the condition bounds a single field's own equivalence class (its constraintExpression) and does not depend on the value chosen for any other field.",
|
|
723
|
+
"testing.inputpartitionselection": "the restriction is a per-CoverageRequirement choice of which values of one partition to cover or exclude (coverValues/excludeValues), not a rule that applies whenever another field takes a given value.",
|
|
724
|
+
"testing.inputspacepartition": "you are describing the input dimension itself and its presenceRule (including a plain 'conditional' flag), rather than the specific trigger value and affected values that make it conditional.",
|
|
725
|
+
"testing.coverageexclusion": "a target or requirement is deliberately removed from coverage with an approver and accepted risk, rather than a combination being logically invalid."
|
|
726
|
+
},
|
|
577
727
|
"$id": "urn:dr:spec:node:testing.partitiondependency"
|
|
578
728
|
},
|
|
579
729
|
"partitionvalue": {
|
|
580
730
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
581
731
|
"title": "PartitionValue",
|
|
582
|
-
"description": "
|
|
732
|
+
"description": "A single equivalence class or boundary class of one input dimension, owned by exactly one InputSpacePartition. It is defined by a boundary condition and by a representative value that stands for every value in the class during test design. Use InputSpacePartition instead when you are modelling the whole input field or dimension and its complete set of classes, rather than one class within it. Use InputSelection instead when you are binding a specific concrete test datum, used by a particular TestCaseSketch, to one of the partition's classes. Use InputPartitionSelection instead when you are stating which classes of a partition a CoverageRequirement must or must not exercise. Use OutcomeCategory instead when the category classifies expected results (success, validation error, timeout) rather than input values.",
|
|
583
733
|
"allOf": [
|
|
584
734
|
{
|
|
585
735
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -599,10 +749,12 @@
|
|
|
599
749
|
"type": "object",
|
|
600
750
|
"properties": {
|
|
601
751
|
"label": {
|
|
602
|
-
"type": "string"
|
|
752
|
+
"type": "string",
|
|
753
|
+
"description": "Short identifier for the class, unique within its parent partition (e.g. 'empty-string', 'above-max'); other nodes cite it in coverValues, excludeValues and affectedValues, so it is always set."
|
|
603
754
|
},
|
|
604
755
|
"description": {
|
|
605
|
-
"type": "string"
|
|
756
|
+
"type": "string",
|
|
757
|
+
"description": "Optional free-text explanation of why values in this class are expected to behave alike and what behaviour they probe; set it when the label and constraint alone do not make the intent clear."
|
|
606
758
|
},
|
|
607
759
|
"constraint": {
|
|
608
760
|
"type": "string",
|
|
@@ -625,7 +777,8 @@
|
|
|
625
777
|
"description": "Equivalence partition category for this value"
|
|
626
778
|
},
|
|
627
779
|
"representativeValue": {
|
|
628
|
-
"type": "string"
|
|
780
|
+
"type": "string",
|
|
781
|
+
"description": "One abstract value, written as a string, that stands for the whole class in test design (e.g. '101' for above-max, '' for null-empty); it is distinct from the concrete datum later bound in InputSelection.concreteValue."
|
|
629
782
|
}
|
|
630
783
|
},
|
|
631
784
|
"required": [
|
|
@@ -638,12 +791,24 @@
|
|
|
638
791
|
"additionalProperties": false
|
|
639
792
|
}
|
|
640
793
|
},
|
|
794
|
+
"x-dr-standard": "IEEE 829-2008 Level Test Design Specification, features and input specification refinement; equivalence partitioning and boundary value analysis per ISO/IEC/IEEE 29119-4 §5.2.1 and §5.2.3",
|
|
795
|
+
"x-dr-evidence": [
|
|
796
|
+
"A parametrized test table for a single argument whose case ids name input classes, e.g. @pytest.mark.parametrize ids=['valid','empty','too_long','negative'] or a JUnit @ValueSource/@CsvSource grouped by class.",
|
|
797
|
+
"Test data constants or builder functions named after a class of one field and mirroring a schema constraint, e.g. MAX_LEN_BOUNDARY = 255, invalid_email(), or a 'min - 1' value derived from a minimum declared in the OpenAPI or JSON Schema.",
|
|
798
|
+
"A property-based generator restricted to one class of an input, e.g. a Hypothesis strategy such as st.integers(min_value=0, max_value=100) or a fast-check arbitrary filtered by a regex predicate."
|
|
799
|
+
],
|
|
800
|
+
"x-dr-distinguish": {
|
|
801
|
+
"testing.inputspacepartition": "you are modelling the whole input field or dimension and its complete set of classes, rather than one class within it.",
|
|
802
|
+
"testing.inputselection": "you are binding a specific concrete test datum, used by a particular TestCaseSketch, to one of the partition's classes.",
|
|
803
|
+
"testing.inputpartitionselection": "you are stating which classes of a partition a CoverageRequirement must or must not exercise.",
|
|
804
|
+
"testing.outcomecategory": "the category classifies expected results (success, validation error, timeout) rather than input values."
|
|
805
|
+
},
|
|
641
806
|
"$id": "urn:dr:spec:node:testing.partitionvalue"
|
|
642
807
|
},
|
|
643
808
|
"targetcoveragesummary": {
|
|
644
809
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
645
810
|
"title": "TargetCoverageSummary",
|
|
646
|
-
"description": "
|
|
811
|
+
"description": "A per-target coverage report record that states, for exactly one TestCoverageTarget, the counts of designed, implemented and automated test case sketches and the share of that target's coverage requirements exercised by at least one implemented test. It reports measured status, not required criteria or identified deficits. Use CoverageSummary instead when the record aggregates totals across all targets and requirements of a whole TestCoverageModel rather than metrics for one target. Use CoverageGap instead when the element records a specific uncovered requirement with severity and remediation status, rather than numeric coverage counts. Use CoverageRequirement instead when the element specifies the coverage criteria a target must satisfy, rather than reporting how far they are satisfied. Use TestCoverageTarget instead when the element identifies the endpoint, workflow or component in scope for testing, rather than its coverage metrics.",
|
|
647
812
|
"allOf": [
|
|
648
813
|
{
|
|
649
814
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -692,12 +857,24 @@
|
|
|
692
857
|
"additionalProperties": false
|
|
693
858
|
}
|
|
694
859
|
},
|
|
860
|
+
"x-dr-standard": "IEEE 829-2008 Clause 16 Level Test Report (summary of results and comprehensiveness assessment; the Test Summary Report in IEEE 829-1998), per-feature scope",
|
|
861
|
+
"x-dr-evidence": [
|
|
862
|
+
"A generated coverage report file (e.g. coverage-summary.json, a JUnit/Allure per-endpoint section) keyed by a single endpoint, route or feature ID with counts of planned, implemented and automated tests",
|
|
863
|
+
"A CI script or reporting job that groups test results by target (e.g. by OpenAPI operationId or tag) and computes a percentage of requirements with passing implemented tests",
|
|
864
|
+
"A traceability matrix row or markdown table in test documentation listing one feature/endpoint alongside sketch count, implemented count, automated count and coverage %"
|
|
865
|
+
],
|
|
866
|
+
"x-dr-distinguish": {
|
|
867
|
+
"testing.coveragesummary": "the record aggregates totals across all targets and requirements of a whole TestCoverageModel rather than metrics for one target.",
|
|
868
|
+
"testing.coveragegap": "the element records a specific uncovered requirement with severity and remediation status, rather than numeric coverage counts.",
|
|
869
|
+
"testing.coveragerequirement": "the element specifies the coverage criteria a target must satisfy, rather than reporting how far they are satisfied.",
|
|
870
|
+
"testing.testcoveragetarget": "the element identifies the endpoint, workflow or component in scope for testing, rather than its coverage metrics."
|
|
871
|
+
},
|
|
695
872
|
"$id": "urn:dr:spec:node:testing.targetcoveragesummary"
|
|
696
873
|
},
|
|
697
874
|
"targetinputfield": {
|
|
698
875
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
699
876
|
"title": "TargetInputField",
|
|
700
|
-
"description": "
|
|
877
|
+
"description": "A test-design association that binds one input field of a TestCoverageTarget's artifact (an API parameter, data-model property or UI input) to the InputSpacePartition used to divide that field into equivalence classes. It also records whether the field must appear in test inputs for that target. Use InputSpacePartition instead when you are defining the equivalence classes of an input dimension itself, independent of which target or field uses them. Use InputPartitionSelection instead when you are stating which values of a partition a specific CoverageRequirement must exercise, rather than which partition governs a target's field. Use InputSelection instead when you are binding a concrete test datum to a partition value for an individual TestCaseSketch. Use TestCoverageTarget instead when the symbol represents the endpoint, workflow or component under test as a whole, not one of its input fields.",
|
|
701
878
|
"allOf": [
|
|
702
879
|
{
|
|
703
880
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -725,7 +902,8 @@
|
|
|
725
902
|
"description": "ID of the testing.inputspacepartition that defines the equivalence classes or boundary values for this input field."
|
|
726
903
|
},
|
|
727
904
|
"description": {
|
|
728
|
-
"type": "string"
|
|
905
|
+
"type": "string",
|
|
906
|
+
"description": "Free-text note on why this field matters for testing the target, such as validation rules or known defect history. Set it when the field's relevance or chosen partition is not self-evident from fieldRef and partitionRef."
|
|
729
907
|
},
|
|
730
908
|
"relevance": {
|
|
731
909
|
"type": "string",
|
|
@@ -737,12 +915,24 @@
|
|
|
737
915
|
"additionalProperties": false
|
|
738
916
|
}
|
|
739
917
|
},
|
|
918
|
+
"x-dr-standard": "IEEE 829-2008 Clause 11 Level Test Case, inputs, informed by Level Test Design equivalence-partitioning features",
|
|
919
|
+
"x-dr-evidence": [
|
|
920
|
+
"A parameterized test (pytest.mark.parametrize, JUnit @ParameterizedTest/@MethodSource) whose parameter is named after one request field of the endpoint under test, with value sets grouped as valid/invalid/boundary.",
|
|
921
|
+
"A per-endpoint test-data map or fixture keyed by request field name (e.g. {\"email\": EMAIL_CASES, \"age\": AGE_BOUNDARIES}) that pairs each field with a reusable case list.",
|
|
922
|
+
"A property-based or schema-driven generator bound to a single DTO/OpenAPI parameter (Hypothesis st.builds field override, fast-check arbitrary, Schemathesis hook for one parameter)."
|
|
923
|
+
],
|
|
924
|
+
"x-dr-distinguish": {
|
|
925
|
+
"testing.inputspacepartition": "you are defining the equivalence classes of an input dimension itself, independent of which target or field uses them.",
|
|
926
|
+
"testing.inputpartitionselection": "you are stating which values of a partition a specific CoverageRequirement must exercise, rather than which partition governs a target's field.",
|
|
927
|
+
"testing.inputselection": "you are binding a concrete test datum to a partition value for an individual TestCaseSketch.",
|
|
928
|
+
"testing.testcoveragetarget": "the symbol represents the endpoint, workflow or component under test as a whole, not one of its input fields."
|
|
929
|
+
},
|
|
740
930
|
"$id": "urn:dr:spec:node:testing.targetinputfield"
|
|
741
931
|
},
|
|
742
932
|
"testcasesketch": {
|
|
743
933
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
744
934
|
"title": "TestCaseSketch",
|
|
745
|
-
"description": "A
|
|
935
|
+
"description": "A single test case design that combines specific input selections (one chosen value per relevant partition), a context variation and an expected outcome category to exercise one CoverageRequirement of a TestCoverageTarget. It may remain unimplemented or be linked through source to the individual test function, parameterized row or scenario that realizes it. Use CoverageRequirement instead when the element states which partitions, contexts or outcomes must be covered (the criterion), rather than one specific combination chosen to satisfy it. Use InputSelection instead when the element is one field's binding of a partition representative to a concrete datum inside a test case, not the whole test case. Use InputPartitionSelection instead when the element lists which partition values a coverage requirement demands across all its tests, rather than the values one test case uses. Use TestCoverageTarget instead when the element identifies the endpoint, component or workflow under test, which anchors many test cases, rather than an individual test case against it.",
|
|
746
936
|
"allOf": [
|
|
747
937
|
{
|
|
748
938
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -762,7 +952,8 @@
|
|
|
762
952
|
"type": "object",
|
|
763
953
|
"properties": {
|
|
764
954
|
"description": {
|
|
765
|
-
"type": "string"
|
|
955
|
+
"type": "string",
|
|
956
|
+
"description": "Free-text summary of the scenario this sketch exercises: preconditions, the input combination chosen and the expected observable outcome. Set it whenever the name alone does not make the intent clear."
|
|
766
957
|
},
|
|
767
958
|
"status": {
|
|
768
959
|
"type": "string",
|
|
@@ -794,12 +985,24 @@
|
|
|
794
985
|
"additionalProperties": false
|
|
795
986
|
}
|
|
796
987
|
},
|
|
988
|
+
"x-dr-standard": "IEEE 829-2008 Clause 11 Level Test Case (test case specification: inputs, expected outcomes, environmental needs)",
|
|
989
|
+
"x-dr-evidence": [
|
|
990
|
+
"An individual test function or method (pytest test_*, Jest it()/test(), JUnit @Test) whose name, docstring or tag cites a requirement or partition, e.g. 'rejects quantity below zero'.",
|
|
991
|
+
"A single row of a parameterized test, such as a pytest.mark.parametrize id, a JUnit @CsvSource line or a Gherkin 'Scenario Outline' Examples row, binding concrete inputs to an expected result.",
|
|
992
|
+
"A test-case entry in a test plan, spreadsheet or test-management export (TestRail, Xray, Zephyr) with an ID, preconditions, input values, expected result and a status such as Draft or Approved."
|
|
993
|
+
],
|
|
994
|
+
"x-dr-distinguish": {
|
|
995
|
+
"testing.coveragerequirement": "the element states which partitions, contexts or outcomes must be covered (the criterion), rather than one specific combination chosen to satisfy it.",
|
|
996
|
+
"testing.inputselection": "the element is one field's binding of a partition representative to a concrete datum inside a test case, not the whole test case.",
|
|
997
|
+
"testing.inputpartitionselection": "the element lists which partition values a coverage requirement demands across all its tests, rather than the values one test case uses.",
|
|
998
|
+
"testing.testcoveragetarget": "the element identifies the endpoint, component or workflow under test, which anchors many test cases, rather than an individual test case against it."
|
|
999
|
+
},
|
|
797
1000
|
"$id": "urn:dr:spec:node:testing.testcasesketch"
|
|
798
1001
|
},
|
|
799
1002
|
"testcoveragemodel": {
|
|
800
1003
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
801
1004
|
"title": "TestCoverageModel",
|
|
802
|
-
"description": "
|
|
1005
|
+
"description": "A versioned, application-scoped coverage specification that acts as the root container for the coverage targets, input partitions, context variations, coverage requirements, exclusions and test case sketches of exactly one application or API. It corresponds to a test plan as a whole, not to any individual target, test, suite or results report. Use TestCoverageTarget instead when the element identifies one endpoint, workflow, UI component, job or integration flow that needs coverage, rather than the whole application's coverage specification. Use CoverageSummary instead when the element reports aggregated counts or status across a model's targets, requirements and sketches, rather than defining the coverage scope itself. Use CoverageRequirement instead when the element states the criteria (partitions, contexts, outcomes, coverage strategy) that a single target must satisfy, rather than containing all targets and requirements.",
|
|
803
1006
|
"allOf": [
|
|
804
1007
|
{
|
|
805
1008
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -819,14 +1022,16 @@
|
|
|
819
1022
|
"type": "object",
|
|
820
1023
|
"properties": {
|
|
821
1024
|
"version": {
|
|
822
|
-
"type": "string"
|
|
1025
|
+
"type": "string",
|
|
1026
|
+
"description": "Version identifier of this coverage model, as a semantic version or date stamp (e.g. '1.2.0' or '2024-05-01'); increment it whenever targets, requirements or exclusions are added, removed or changed."
|
|
823
1027
|
},
|
|
824
1028
|
"application": {
|
|
825
1029
|
"type": "string",
|
|
826
1030
|
"description": "Cross-layer reference ID to the application or API element (application layer or api layer) being covered by this model"
|
|
827
1031
|
},
|
|
828
1032
|
"description": {
|
|
829
|
-
"type": "string"
|
|
1033
|
+
"type": "string",
|
|
1034
|
+
"description": "Free-text summary of the model's scope, the application release or test level it addresses, and any overall test approach; set it whenever the scope is not obvious from the application reference."
|
|
830
1035
|
},
|
|
831
1036
|
"source": {
|
|
832
1037
|
"type": "object",
|
|
@@ -837,12 +1042,23 @@
|
|
|
837
1042
|
"additionalProperties": false
|
|
838
1043
|
}
|
|
839
1044
|
},
|
|
1045
|
+
"x-dr-standard": "IEEE 829-2008 Clause 8 Master Test Plan / Clause 9 Level Test Plan",
|
|
1046
|
+
"x-dr-evidence": [
|
|
1047
|
+
"A top-level test plan or coverage manifest file (e.g. test-plan.yaml, coverage-model.json) carrying a version and an application or service identifier, and listing the endpoints or features to be tested.",
|
|
1048
|
+
"A TEST_PLAN.md or docs/testing/plan document for one service that has 'Features to be tested', 'Approach' and 'Pass/fail criteria' sections.",
|
|
1049
|
+
"A test-generation configuration that imports one OpenAPI document or application spec (e.g. a schemathesis, dredd or contract-test config pointing at openapi.yaml) and produces the set of coverage targets for that application."
|
|
1050
|
+
],
|
|
1051
|
+
"x-dr-distinguish": {
|
|
1052
|
+
"testing.testcoveragetarget": "the element identifies one endpoint, workflow, UI component, job or integration flow that needs coverage, rather than the whole application's coverage specification.",
|
|
1053
|
+
"testing.coveragesummary": "the element reports aggregated counts or status across a model's targets, requirements and sketches, rather than defining the coverage scope itself.",
|
|
1054
|
+
"testing.coveragerequirement": "the element states the criteria (partitions, contexts, outcomes, coverage strategy) that a single target must satisfy, rather than containing all targets and requirements."
|
|
1055
|
+
},
|
|
840
1056
|
"$id": "urn:dr:spec:node:testing.testcoveragemodel"
|
|
841
1057
|
},
|
|
842
1058
|
"testcoveragetarget": {
|
|
843
1059
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
844
1060
|
"title": "TestCoverageTarget",
|
|
845
|
-
"description": "
|
|
1061
|
+
"description": "A test-scope entry in a TestCoverageModel that names one production artifact or capability (an API operation, UI view, business workflow, data migration, integration flow or scheduled job) whose behaviour must be verified. It is the anchor to which input fields, outcome categories, coverage requirements and test case sketches for that artifact attach. It records what is in scope, not the production code itself. Use CoverageRequirement instead when the element states the criteria (e.g. boundary-values, pairwise) that must be exercised for a target, rather than naming the thing to be tested. Use TestCaseSketch instead when the element is an individual designed or implemented test case selecting specific partition values, rather than the artifact those cases exercise. Use TestCoverageModel instead when the element is the application-wide root aggregating many targets, partitions and requirements, rather than a single artifact in scope. Use TargetCoverageSummary instead when the element reports sketch, implemented or automated counts and a percentage for a target, rather than defining the target.",
|
|
846
1062
|
"allOf": [
|
|
847
1063
|
{
|
|
848
1064
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -862,7 +1078,8 @@
|
|
|
862
1078
|
"type": "object",
|
|
863
1079
|
"properties": {
|
|
864
1080
|
"description": {
|
|
865
|
-
"type": "string"
|
|
1081
|
+
"type": "string",
|
|
1082
|
+
"description": "Free-text summary of the artifact or functionality in scope and the testing concerns it raises. Set it whenever the target name and targetType alone do not make the boundary of what must be verified clear."
|
|
866
1083
|
},
|
|
867
1084
|
"targetType": {
|
|
868
1085
|
"type": "string",
|
|
@@ -890,21 +1107,22 @@
|
|
|
890
1107
|
"additionalProperties": false
|
|
891
1108
|
}
|
|
892
1109
|
},
|
|
1110
|
+
"x-dr-standard": "IEEE 829-2008 Clause 8 Master Test Plan / Clause 9 Level Test Plan: features to be tested (with test items)",
|
|
1111
|
+
"x-dr-evidence": [
|
|
1112
|
+
"A test suite block (describe/class/@Nested) named after a specific endpoint, component, job or workflow, e.g. describe('POST /orders'), whose tests all import or call that one production symbol",
|
|
1113
|
+
"A test plan, coverage manifest or traceability file (YAML/JSON/Markdown) listing 'features to be tested' entries keyed by operationId, route, component or job name, with a priority",
|
|
1114
|
+
"Coverage tool configuration that scopes include patterns or thresholds to a named module, endpoint handler or scheduled-job entry point (e.g. per-path thresholds in jest/istanbul or a JaCoCo include rule)"
|
|
1115
|
+
],
|
|
1116
|
+
"x-dr-distinguish": {
|
|
1117
|
+
"testing.coveragerequirement": "the element states the criteria (e.g. boundary-values, pairwise) that must be exercised for a target, rather than naming the thing to be tested",
|
|
1118
|
+
"testing.testcasesketch": "the element is an individual designed or implemented test case selecting specific partition values, rather than the artifact those cases exercise",
|
|
1119
|
+
"testing.testcoveragemodel": "the element is the application-wide root aggregating many targets, partitions and requirements, rather than a single artifact in scope",
|
|
1120
|
+
"testing.targetcoveragesummary": "the element reports sketch, implemented or automated counts and a percentage for a target, rather than defining the target"
|
|
1121
|
+
},
|
|
893
1122
|
"$id": "urn:dr:spec:node:testing.testcoveragetarget"
|
|
894
1123
|
}
|
|
895
1124
|
},
|
|
896
1125
|
"relationshipSchemas": {
|
|
897
|
-
"testing.contextvariation.depends-on.testing.contextvariation": {
|
|
898
|
-
"id": "testing.contextvariation.depends-on.testing.contextvariation",
|
|
899
|
-
"source_spec_node_id": "testing.contextvariation",
|
|
900
|
-
"source_layer": "testing",
|
|
901
|
-
"destination_spec_node_id": "testing.contextvariation",
|
|
902
|
-
"destination_layer": "testing",
|
|
903
|
-
"predicate": "depends-on",
|
|
904
|
-
"cardinality": "many-to-many",
|
|
905
|
-
"strength": "medium",
|
|
906
|
-
"required": false
|
|
907
|
-
},
|
|
908
1126
|
"testing.contextvariation.references.testing.environmentfactor": {
|
|
909
1127
|
"id": "testing.contextvariation.references.testing.environmentfactor",
|
|
910
1128
|
"source_spec_node_id": "testing.contextvariation",
|
|
@@ -914,18 +1132,8 @@
|
|
|
914
1132
|
"predicate": "references",
|
|
915
1133
|
"cardinality": "many-to-many",
|
|
916
1134
|
"strength": "medium",
|
|
917
|
-
"required": false
|
|
918
|
-
|
|
919
|
-
"testing.contextvariation.serves.testing.testcoveragetarget": {
|
|
920
|
-
"id": "testing.contextvariation.serves.testing.testcoveragetarget",
|
|
921
|
-
"source_spec_node_id": "testing.contextvariation",
|
|
922
|
-
"source_layer": "testing",
|
|
923
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
924
|
-
"destination_layer": "testing",
|
|
925
|
-
"predicate": "serves",
|
|
926
|
-
"cardinality": "many-to-many",
|
|
927
|
-
"strength": "medium",
|
|
928
|
-
"required": false
|
|
1135
|
+
"required": false,
|
|
1136
|
+
"description": "The context variation fixes the environment factor, such as a load context pinned to a given network latency."
|
|
929
1137
|
},
|
|
930
1138
|
"testing.coverageexclusion.references.testing.coveragegap": {
|
|
931
1139
|
"id": "testing.coverageexclusion.references.testing.coveragegap",
|
|
@@ -936,7 +1144,8 @@
|
|
|
936
1144
|
"predicate": "references",
|
|
937
1145
|
"cardinality": "many-to-many",
|
|
938
1146
|
"strength": "medium",
|
|
939
|
-
"required": false
|
|
1147
|
+
"required": false,
|
|
1148
|
+
"description": "The exclusion waives the gap, accepting the risk instead of closing it."
|
|
940
1149
|
},
|
|
941
1150
|
"testing.coverageexclusion.references.testing.coveragerequirement": {
|
|
942
1151
|
"id": "testing.coverageexclusion.references.testing.coveragerequirement",
|
|
@@ -947,7 +1156,8 @@
|
|
|
947
1156
|
"predicate": "references",
|
|
948
1157
|
"cardinality": "many-to-many",
|
|
949
1158
|
"strength": "medium",
|
|
950
|
-
"required": false
|
|
1159
|
+
"required": false,
|
|
1160
|
+
"description": "The exclusion removes the coverage requirement from the coverage that must be achieved."
|
|
951
1161
|
},
|
|
952
1162
|
"testing.coverageexclusion.references.testing.testcoveragetarget": {
|
|
953
1163
|
"id": "testing.coverageexclusion.references.testing.testcoveragetarget",
|
|
@@ -958,18 +1168,8 @@
|
|
|
958
1168
|
"predicate": "references",
|
|
959
1169
|
"cardinality": "many-to-many",
|
|
960
1170
|
"strength": "medium",
|
|
961
|
-
"required": false
|
|
962
|
-
|
|
963
|
-
"testing.coveragegap.flows-to.testing.coverageexclusion": {
|
|
964
|
-
"id": "testing.coveragegap.flows-to.testing.coverageexclusion",
|
|
965
|
-
"source_spec_node_id": "testing.coveragegap",
|
|
966
|
-
"source_layer": "testing",
|
|
967
|
-
"destination_spec_node_id": "testing.coverageexclusion",
|
|
968
|
-
"destination_layer": "testing",
|
|
969
|
-
"predicate": "flows-to",
|
|
970
|
-
"cardinality": "many-to-many",
|
|
971
|
-
"strength": "medium",
|
|
972
|
-
"required": false
|
|
1171
|
+
"required": false,
|
|
1172
|
+
"description": "The exclusion removes the whole target from the coverage that must be achieved."
|
|
973
1173
|
},
|
|
974
1174
|
"testing.coveragegap.references.testing.coveragerequirement": {
|
|
975
1175
|
"id": "testing.coveragegap.references.testing.coveragerequirement",
|
|
@@ -980,7 +1180,8 @@
|
|
|
980
1180
|
"predicate": "references",
|
|
981
1181
|
"cardinality": "many-to-many",
|
|
982
1182
|
"strength": "medium",
|
|
983
|
-
"required": false
|
|
1183
|
+
"required": false,
|
|
1184
|
+
"description": "The gap records that the coverage requirement lacks the tests it needs."
|
|
984
1185
|
},
|
|
985
1186
|
"testing.coveragegap.references.testing.testcoveragetarget": {
|
|
986
1187
|
"id": "testing.coveragegap.references.testing.testcoveragetarget",
|
|
@@ -991,1041 +1192,260 @@
|
|
|
991
1192
|
"predicate": "references",
|
|
992
1193
|
"cardinality": "many-to-many",
|
|
993
1194
|
"strength": "medium",
|
|
994
|
-
"required": false
|
|
1195
|
+
"required": false,
|
|
1196
|
+
"description": "The gap records that the target lacks the tests it needs."
|
|
995
1197
|
},
|
|
996
|
-
"testing.
|
|
997
|
-
"id": "testing.
|
|
998
|
-
"source_spec_node_id": "testing.
|
|
1198
|
+
"testing.coveragerequirement.composes.testing.inputpartitionselection": {
|
|
1199
|
+
"id": "testing.coveragerequirement.composes.testing.inputpartitionselection",
|
|
1200
|
+
"source_spec_node_id": "testing.coveragerequirement",
|
|
999
1201
|
"source_layer": "testing",
|
|
1000
|
-
"destination_spec_node_id": "testing.
|
|
1202
|
+
"destination_spec_node_id": "testing.inputpartitionselection",
|
|
1001
1203
|
"destination_layer": "testing",
|
|
1002
|
-
"predicate": "
|
|
1204
|
+
"predicate": "composes",
|
|
1003
1205
|
"cardinality": "many-to-many",
|
|
1004
1206
|
"strength": "medium",
|
|
1005
|
-
"required": false
|
|
1207
|
+
"required": false,
|
|
1208
|
+
"description": "The selection states which partition values the requirement must exercise and exists only within it."
|
|
1006
1209
|
},
|
|
1007
|
-
"testing.
|
|
1008
|
-
"id": "testing.
|
|
1009
|
-
"source_spec_node_id": "testing.
|
|
1210
|
+
"testing.coveragerequirement.references.testing.contextvariation": {
|
|
1211
|
+
"id": "testing.coveragerequirement.references.testing.contextvariation",
|
|
1212
|
+
"source_spec_node_id": "testing.coveragerequirement",
|
|
1010
1213
|
"source_layer": "testing",
|
|
1011
|
-
"destination_spec_node_id": "testing.
|
|
1214
|
+
"destination_spec_node_id": "testing.contextvariation",
|
|
1012
1215
|
"destination_layer": "testing",
|
|
1013
|
-
"predicate": "
|
|
1216
|
+
"predicate": "references",
|
|
1014
1217
|
"cardinality": "many-to-many",
|
|
1015
1218
|
"strength": "medium",
|
|
1016
|
-
"required": false
|
|
1219
|
+
"required": false,
|
|
1220
|
+
"description": "The requirement must be met under the context variation, such as also under a security context."
|
|
1017
1221
|
},
|
|
1018
|
-
"testing.coveragerequirement.
|
|
1019
|
-
"id": "testing.coveragerequirement.
|
|
1222
|
+
"testing.coveragerequirement.references.testing.coveragerequirement": {
|
|
1223
|
+
"id": "testing.coveragerequirement.references.testing.coveragerequirement",
|
|
1020
1224
|
"source_spec_node_id": "testing.coveragerequirement",
|
|
1021
1225
|
"source_layer": "testing",
|
|
1022
|
-
"destination_spec_node_id": "testing.
|
|
1226
|
+
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1023
1227
|
"destination_layer": "testing",
|
|
1024
|
-
"predicate": "
|
|
1228
|
+
"predicate": "references",
|
|
1025
1229
|
"cardinality": "many-to-many",
|
|
1026
1230
|
"strength": "medium",
|
|
1027
|
-
"required": false
|
|
1231
|
+
"required": false,
|
|
1232
|
+
"description": "The requirement builds on or refines another requirement, such as pairwise coverage extending boundary-value coverage."
|
|
1028
1233
|
},
|
|
1029
|
-
"testing.coveragerequirement.
|
|
1030
|
-
"id": "testing.coveragerequirement.
|
|
1234
|
+
"testing.coveragerequirement.references.testing.outcomecategory": {
|
|
1235
|
+
"id": "testing.coveragerequirement.references.testing.outcomecategory",
|
|
1031
1236
|
"source_spec_node_id": "testing.coveragerequirement",
|
|
1032
1237
|
"source_layer": "testing",
|
|
1033
|
-
"destination_spec_node_id": "testing.
|
|
1238
|
+
"destination_spec_node_id": "testing.outcomecategory",
|
|
1034
1239
|
"destination_layer": "testing",
|
|
1035
|
-
"predicate": "
|
|
1240
|
+
"predicate": "references",
|
|
1036
1241
|
"cardinality": "many-to-many",
|
|
1037
1242
|
"strength": "medium",
|
|
1038
|
-
"required": false
|
|
1243
|
+
"required": false,
|
|
1244
|
+
"description": "The requirement must exercise the outcome category, such as every validation error."
|
|
1039
1245
|
},
|
|
1040
|
-
"testing.
|
|
1041
|
-
"id": "testing.
|
|
1042
|
-
"source_spec_node_id": "testing.
|
|
1246
|
+
"testing.coveragesummary.aggregates.testing.targetcoveragesummary": {
|
|
1247
|
+
"id": "testing.coveragesummary.aggregates.testing.targetcoveragesummary",
|
|
1248
|
+
"source_spec_node_id": "testing.coveragesummary",
|
|
1043
1249
|
"source_layer": "testing",
|
|
1044
|
-
"destination_spec_node_id": "testing.
|
|
1250
|
+
"destination_spec_node_id": "testing.targetcoveragesummary",
|
|
1045
1251
|
"destination_layer": "testing",
|
|
1046
1252
|
"predicate": "aggregates",
|
|
1047
1253
|
"cardinality": "many-to-many",
|
|
1048
1254
|
"strength": "medium",
|
|
1049
|
-
"required": false
|
|
1255
|
+
"required": false,
|
|
1256
|
+
"description": "The model summary rolls up the per-target summary."
|
|
1050
1257
|
},
|
|
1051
|
-
"testing.
|
|
1052
|
-
"id": "testing.
|
|
1053
|
-
"source_spec_node_id": "testing.
|
|
1258
|
+
"testing.coveragesummary.references.testing.coverageexclusion": {
|
|
1259
|
+
"id": "testing.coveragesummary.references.testing.coverageexclusion",
|
|
1260
|
+
"source_spec_node_id": "testing.coveragesummary",
|
|
1054
1261
|
"source_layer": "testing",
|
|
1055
1262
|
"destination_spec_node_id": "testing.coverageexclusion",
|
|
1056
1263
|
"destination_layer": "testing",
|
|
1057
|
-
"predicate": "
|
|
1264
|
+
"predicate": "references",
|
|
1058
1265
|
"cardinality": "many-to-many",
|
|
1059
1266
|
"strength": "medium",
|
|
1060
|
-
"required": false
|
|
1267
|
+
"required": false,
|
|
1268
|
+
"description": "The summary counts the exclusion among the accepted waivers."
|
|
1061
1269
|
},
|
|
1062
|
-
"testing.
|
|
1063
|
-
"id": "testing.
|
|
1064
|
-
"source_spec_node_id": "testing.
|
|
1270
|
+
"testing.coveragesummary.references.testing.coveragegap": {
|
|
1271
|
+
"id": "testing.coveragesummary.references.testing.coveragegap",
|
|
1272
|
+
"source_spec_node_id": "testing.coveragesummary",
|
|
1065
1273
|
"source_layer": "testing",
|
|
1066
|
-
"destination_spec_node_id": "testing.
|
|
1274
|
+
"destination_spec_node_id": "testing.coveragegap",
|
|
1067
1275
|
"destination_layer": "testing",
|
|
1068
|
-
"predicate": "
|
|
1276
|
+
"predicate": "references",
|
|
1069
1277
|
"cardinality": "many-to-many",
|
|
1070
1278
|
"strength": "medium",
|
|
1071
|
-
"required": false
|
|
1279
|
+
"required": false,
|
|
1280
|
+
"description": "The summary counts the gap among the open shortfalls."
|
|
1072
1281
|
},
|
|
1073
|
-
"testing.
|
|
1074
|
-
"id": "testing.
|
|
1075
|
-
"source_spec_node_id": "testing.
|
|
1282
|
+
"testing.environmentfactor.references.technology.node": {
|
|
1283
|
+
"id": "testing.environmentfactor.references.technology.node",
|
|
1284
|
+
"source_spec_node_id": "testing.environmentfactor",
|
|
1076
1285
|
"source_layer": "testing",
|
|
1077
|
-
"destination_spec_node_id": "
|
|
1078
|
-
"destination_layer": "
|
|
1079
|
-
"predicate": "
|
|
1286
|
+
"destination_spec_node_id": "technology.node",
|
|
1287
|
+
"destination_layer": "technology",
|
|
1288
|
+
"predicate": "references",
|
|
1080
1289
|
"cardinality": "many-to-many",
|
|
1081
1290
|
"strength": "medium",
|
|
1082
|
-
"required": false
|
|
1291
|
+
"required": false,
|
|
1292
|
+
"description": "The factor pins the host, container or device tests run on."
|
|
1083
1293
|
},
|
|
1084
|
-
"testing.
|
|
1085
|
-
"id": "testing.
|
|
1086
|
-
"source_spec_node_id": "testing.
|
|
1294
|
+
"testing.environmentfactor.references.technology.systemsoftware": {
|
|
1295
|
+
"id": "testing.environmentfactor.references.technology.systemsoftware",
|
|
1296
|
+
"source_spec_node_id": "testing.environmentfactor",
|
|
1087
1297
|
"source_layer": "testing",
|
|
1088
|
-
"destination_spec_node_id": "
|
|
1089
|
-
"destination_layer": "
|
|
1090
|
-
"predicate": "
|
|
1298
|
+
"destination_spec_node_id": "technology.systemsoftware",
|
|
1299
|
+
"destination_layer": "technology",
|
|
1300
|
+
"predicate": "references",
|
|
1091
1301
|
"cardinality": "many-to-many",
|
|
1092
1302
|
"strength": "medium",
|
|
1093
|
-
"required": false
|
|
1303
|
+
"required": false,
|
|
1304
|
+
"description": "The factor pins a runtime, browser or dependency version tests run against."
|
|
1094
1305
|
},
|
|
1095
|
-
"testing.
|
|
1096
|
-
"id": "testing.
|
|
1097
|
-
"source_spec_node_id": "testing.
|
|
1306
|
+
"testing.inputpartitionselection.references.testing.partitionvalue": {
|
|
1307
|
+
"id": "testing.inputpartitionselection.references.testing.partitionvalue",
|
|
1308
|
+
"source_spec_node_id": "testing.inputpartitionselection",
|
|
1098
1309
|
"source_layer": "testing",
|
|
1099
|
-
"destination_spec_node_id": "testing.
|
|
1310
|
+
"destination_spec_node_id": "testing.partitionvalue",
|
|
1100
1311
|
"destination_layer": "testing",
|
|
1101
|
-
"predicate": "
|
|
1102
|
-
"cardinality": "many-to-many",
|
|
1103
|
-
"strength": "medium",
|
|
1104
|
-
"required": false
|
|
1105
|
-
},
|
|
1106
|
-
"testing.coveragerequirement.constrained-by.motivation.constraint": {
|
|
1107
|
-
"id": "testing.coveragerequirement.constrained-by.motivation.constraint",
|
|
1108
|
-
"source_spec_node_id": "testing.coveragerequirement",
|
|
1109
|
-
"source_layer": "testing",
|
|
1110
|
-
"destination_spec_node_id": "motivation.constraint",
|
|
1111
|
-
"destination_layer": "motivation",
|
|
1112
|
-
"predicate": "constrained-by",
|
|
1312
|
+
"predicate": "references",
|
|
1113
1313
|
"cardinality": "many-to-many",
|
|
1114
1314
|
"strength": "medium",
|
|
1115
|
-
"required": false
|
|
1315
|
+
"required": false,
|
|
1316
|
+
"description": "The selection includes or excludes the partition value."
|
|
1116
1317
|
},
|
|
1117
|
-
"testing.
|
|
1118
|
-
"id": "testing.
|
|
1119
|
-
"source_spec_node_id": "testing.
|
|
1318
|
+
"testing.inputselection.references.testing.partitionvalue": {
|
|
1319
|
+
"id": "testing.inputselection.references.testing.partitionvalue",
|
|
1320
|
+
"source_spec_node_id": "testing.inputselection",
|
|
1120
1321
|
"source_layer": "testing",
|
|
1121
|
-
"destination_spec_node_id": "
|
|
1122
|
-
"destination_layer": "
|
|
1123
|
-
"predicate": "
|
|
1322
|
+
"destination_spec_node_id": "testing.partitionvalue",
|
|
1323
|
+
"destination_layer": "testing",
|
|
1324
|
+
"predicate": "references",
|
|
1124
1325
|
"cardinality": "many-to-many",
|
|
1125
1326
|
"strength": "medium",
|
|
1126
|
-
"required": false
|
|
1327
|
+
"required": false,
|
|
1328
|
+
"description": "The input selection picks the partition value as the class its datum stands for."
|
|
1127
1329
|
},
|
|
1128
|
-
"testing.
|
|
1129
|
-
"id": "testing.
|
|
1130
|
-
"source_spec_node_id": "testing.
|
|
1330
|
+
"testing.inputspacepartition.composes.testing.partitionvalue": {
|
|
1331
|
+
"id": "testing.inputspacepartition.composes.testing.partitionvalue",
|
|
1332
|
+
"source_spec_node_id": "testing.inputspacepartition",
|
|
1131
1333
|
"source_layer": "testing",
|
|
1132
|
-
"destination_spec_node_id": "
|
|
1133
|
-
"destination_layer": "
|
|
1134
|
-
"predicate": "
|
|
1135
|
-
"cardinality": "
|
|
1136
|
-
"strength": "
|
|
1137
|
-
"required": false
|
|
1334
|
+
"destination_spec_node_id": "testing.partitionvalue",
|
|
1335
|
+
"destination_layer": "testing",
|
|
1336
|
+
"predicate": "composes",
|
|
1337
|
+
"cardinality": "one-to-many",
|
|
1338
|
+
"strength": "high",
|
|
1339
|
+
"required": false,
|
|
1340
|
+
"description": "The value is one equivalence or boundary class of the partition and exists only within it."
|
|
1138
1341
|
},
|
|
1139
|
-
"testing.
|
|
1140
|
-
"id": "testing.
|
|
1141
|
-
"source_spec_node_id": "testing.
|
|
1342
|
+
"testing.partitiondependency.references.testing.inputspacepartition": {
|
|
1343
|
+
"id": "testing.partitiondependency.references.testing.inputspacepartition",
|
|
1344
|
+
"source_spec_node_id": "testing.partitiondependency",
|
|
1142
1345
|
"source_layer": "testing",
|
|
1143
|
-
"destination_spec_node_id": "
|
|
1144
|
-
"destination_layer": "
|
|
1145
|
-
"predicate": "
|
|
1346
|
+
"destination_spec_node_id": "testing.inputspacepartition",
|
|
1347
|
+
"destination_layer": "testing",
|
|
1348
|
+
"predicate": "references",
|
|
1146
1349
|
"cardinality": "many-to-many",
|
|
1147
1350
|
"strength": "medium",
|
|
1148
|
-
"required": false
|
|
1351
|
+
"required": false,
|
|
1352
|
+
"description": "The dependency restricts the values available in the partition."
|
|
1149
1353
|
},
|
|
1150
|
-
"testing.
|
|
1151
|
-
"id": "testing.
|
|
1152
|
-
"source_spec_node_id": "testing.
|
|
1354
|
+
"testing.partitiondependency.references.testing.partitionvalue": {
|
|
1355
|
+
"id": "testing.partitiondependency.references.testing.partitionvalue",
|
|
1356
|
+
"source_spec_node_id": "testing.partitiondependency",
|
|
1153
1357
|
"source_layer": "testing",
|
|
1154
|
-
"destination_spec_node_id": "
|
|
1155
|
-
"destination_layer": "
|
|
1156
|
-
"predicate": "
|
|
1358
|
+
"destination_spec_node_id": "testing.partitionvalue",
|
|
1359
|
+
"destination_layer": "testing",
|
|
1360
|
+
"predicate": "references",
|
|
1157
1361
|
"cardinality": "many-to-many",
|
|
1158
1362
|
"strength": "medium",
|
|
1159
|
-
"required": false
|
|
1363
|
+
"required": false,
|
|
1364
|
+
"description": "The value triggers the dependency when it is selected."
|
|
1160
1365
|
},
|
|
1161
|
-
"testing.
|
|
1162
|
-
"id": "testing.
|
|
1163
|
-
"source_spec_node_id": "testing.
|
|
1366
|
+
"testing.targetcoveragesummary.references.testing.coverageexclusion": {
|
|
1367
|
+
"id": "testing.targetcoveragesummary.references.testing.coverageexclusion",
|
|
1368
|
+
"source_spec_node_id": "testing.targetcoveragesummary",
|
|
1164
1369
|
"source_layer": "testing",
|
|
1165
|
-
"destination_spec_node_id": "testing.
|
|
1370
|
+
"destination_spec_node_id": "testing.coverageexclusion",
|
|
1166
1371
|
"destination_layer": "testing",
|
|
1167
|
-
"predicate": "
|
|
1372
|
+
"predicate": "references",
|
|
1168
1373
|
"cardinality": "many-to-many",
|
|
1169
1374
|
"strength": "medium",
|
|
1170
|
-
"required": false
|
|
1375
|
+
"required": false,
|
|
1376
|
+
"description": "The target summary counts the exclusion among the target's waivers."
|
|
1171
1377
|
},
|
|
1172
|
-
"testing.
|
|
1173
|
-
"id": "testing.
|
|
1174
|
-
"source_spec_node_id": "testing.
|
|
1378
|
+
"testing.targetcoveragesummary.references.testing.coveragegap": {
|
|
1379
|
+
"id": "testing.targetcoveragesummary.references.testing.coveragegap",
|
|
1380
|
+
"source_spec_node_id": "testing.targetcoveragesummary",
|
|
1175
1381
|
"source_layer": "testing",
|
|
1176
|
-
"destination_spec_node_id": "testing.
|
|
1382
|
+
"destination_spec_node_id": "testing.coveragegap",
|
|
1177
1383
|
"destination_layer": "testing",
|
|
1178
|
-
"predicate": "
|
|
1384
|
+
"predicate": "references",
|
|
1179
1385
|
"cardinality": "many-to-many",
|
|
1180
1386
|
"strength": "medium",
|
|
1181
|
-
"required": false
|
|
1387
|
+
"required": false,
|
|
1388
|
+
"description": "The target summary counts the gap among the target's open shortfalls."
|
|
1182
1389
|
},
|
|
1183
|
-
"testing.
|
|
1184
|
-
"id": "testing.
|
|
1185
|
-
"source_spec_node_id": "testing.
|
|
1390
|
+
"testing.targetcoveragesummary.references.testing.testcoveragetarget": {
|
|
1391
|
+
"id": "testing.targetcoveragesummary.references.testing.testcoveragetarget",
|
|
1392
|
+
"source_spec_node_id": "testing.targetcoveragesummary",
|
|
1186
1393
|
"source_layer": "testing",
|
|
1187
|
-
"destination_spec_node_id": "testing.
|
|
1394
|
+
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
1188
1395
|
"destination_layer": "testing",
|
|
1189
|
-
"predicate": "
|
|
1396
|
+
"predicate": "references",
|
|
1190
1397
|
"cardinality": "many-to-many",
|
|
1191
1398
|
"strength": "medium",
|
|
1192
|
-
"required": false
|
|
1399
|
+
"required": false,
|
|
1400
|
+
"description": "The summary reports coverage for the target."
|
|
1193
1401
|
},
|
|
1194
|
-
"testing.
|
|
1195
|
-
"id": "testing.
|
|
1196
|
-
"source_spec_node_id": "testing.
|
|
1402
|
+
"testing.targetinputfield.references.ux.actioncomponent": {
|
|
1403
|
+
"id": "testing.targetinputfield.references.ux.actioncomponent",
|
|
1404
|
+
"source_spec_node_id": "testing.targetinputfield",
|
|
1197
1405
|
"source_layer": "testing",
|
|
1198
|
-
"destination_spec_node_id": "
|
|
1199
|
-
"destination_layer": "
|
|
1200
|
-
"predicate": "
|
|
1406
|
+
"destination_spec_node_id": "ux.actioncomponent",
|
|
1407
|
+
"destination_layer": "ux",
|
|
1408
|
+
"predicate": "references",
|
|
1201
1409
|
"cardinality": "many-to-many",
|
|
1202
1410
|
"strength": "medium",
|
|
1203
|
-
"required": false
|
|
1411
|
+
"required": false,
|
|
1412
|
+
"description": "The field under test is the UX component's input."
|
|
1204
1413
|
},
|
|
1205
|
-
"testing.
|
|
1206
|
-
"id": "testing.
|
|
1207
|
-
"source_spec_node_id": "testing.
|
|
1414
|
+
"testing.targetinputfield.references.testing.inputspacepartition": {
|
|
1415
|
+
"id": "testing.targetinputfield.references.testing.inputspacepartition",
|
|
1416
|
+
"source_spec_node_id": "testing.targetinputfield",
|
|
1208
1417
|
"source_layer": "testing",
|
|
1209
|
-
"destination_spec_node_id": "testing.
|
|
1418
|
+
"destination_spec_node_id": "testing.inputspacepartition",
|
|
1210
1419
|
"destination_layer": "testing",
|
|
1211
|
-
"predicate": "
|
|
1420
|
+
"predicate": "references",
|
|
1212
1421
|
"cardinality": "many-to-many",
|
|
1213
1422
|
"strength": "medium",
|
|
1214
|
-
"required": false
|
|
1423
|
+
"required": false,
|
|
1424
|
+
"description": "The partition divides the field's domain into classes."
|
|
1215
1425
|
},
|
|
1216
|
-
"testing.
|
|
1217
|
-
"id": "testing.
|
|
1218
|
-
"source_spec_node_id": "testing.
|
|
1426
|
+
"testing.targetinputfield.references.api.parameter": {
|
|
1427
|
+
"id": "testing.targetinputfield.references.api.parameter",
|
|
1428
|
+
"source_spec_node_id": "testing.targetinputfield",
|
|
1219
1429
|
"source_layer": "testing",
|
|
1220
|
-
"destination_spec_node_id": "
|
|
1221
|
-
"destination_layer": "
|
|
1222
|
-
"predicate": "
|
|
1430
|
+
"destination_spec_node_id": "api.parameter",
|
|
1431
|
+
"destination_layer": "api",
|
|
1432
|
+
"predicate": "references",
|
|
1223
1433
|
"cardinality": "many-to-many",
|
|
1224
|
-
"strength": "
|
|
1225
|
-
"required": false
|
|
1434
|
+
"strength": "medium",
|
|
1435
|
+
"required": false,
|
|
1436
|
+
"description": "The field under test is the API parameter."
|
|
1226
1437
|
},
|
|
1227
|
-
"testing.
|
|
1228
|
-
"id": "testing.
|
|
1229
|
-
"source_spec_node_id": "testing.
|
|
1438
|
+
"testing.targetinputfield.references.data-model.schemaproperty": {
|
|
1439
|
+
"id": "testing.targetinputfield.references.data-model.schemaproperty",
|
|
1440
|
+
"source_spec_node_id": "testing.targetinputfield",
|
|
1230
1441
|
"source_layer": "testing",
|
|
1231
|
-
"destination_spec_node_id": "
|
|
1232
|
-
"destination_layer": "
|
|
1442
|
+
"destination_spec_node_id": "data-model.schemaproperty",
|
|
1443
|
+
"destination_layer": "data-model",
|
|
1233
1444
|
"predicate": "references",
|
|
1234
1445
|
"cardinality": "many-to-many",
|
|
1235
1446
|
"strength": "medium",
|
|
1236
|
-
"required": false
|
|
1237
|
-
|
|
1238
|
-
"testing.coveragerequirement.references.testing.coveragerequirement": {
|
|
1239
|
-
"id": "testing.coveragerequirement.references.testing.coveragerequirement",
|
|
1240
|
-
"source_spec_node_id": "testing.coveragerequirement",
|
|
1241
|
-
"source_layer": "testing",
|
|
1242
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1243
|
-
"destination_layer": "testing",
|
|
1244
|
-
"predicate": "references",
|
|
1245
|
-
"cardinality": "many-to-many",
|
|
1246
|
-
"strength": "medium",
|
|
1247
|
-
"required": false
|
|
1248
|
-
},
|
|
1249
|
-
"testing.coveragerequirement.references.apm.metricinstrument": {
|
|
1250
|
-
"id": "testing.coveragerequirement.references.apm.metricinstrument",
|
|
1251
|
-
"source_spec_node_id": "testing.coveragerequirement",
|
|
1252
|
-
"source_layer": "testing",
|
|
1253
|
-
"destination_spec_node_id": "apm.metricinstrument",
|
|
1254
|
-
"destination_layer": "apm",
|
|
1255
|
-
"predicate": "references",
|
|
1256
|
-
"cardinality": "many-to-many",
|
|
1257
|
-
"strength": "medium",
|
|
1258
|
-
"required": false
|
|
1259
|
-
},
|
|
1260
|
-
"testing.coveragerequirement.references.api.operation": {
|
|
1261
|
-
"id": "testing.coveragerequirement.references.api.operation",
|
|
1262
|
-
"source_spec_node_id": "testing.coveragerequirement",
|
|
1263
|
-
"source_layer": "testing",
|
|
1264
|
-
"destination_spec_node_id": "api.operation",
|
|
1265
|
-
"destination_layer": "api",
|
|
1266
|
-
"predicate": "references",
|
|
1267
|
-
"cardinality": "many-to-many",
|
|
1268
|
-
"strength": "medium",
|
|
1269
|
-
"required": false
|
|
1270
|
-
},
|
|
1271
|
-
"testing.coveragerequirement.references.testing.partitionvalue": {
|
|
1272
|
-
"id": "testing.coveragerequirement.references.testing.partitionvalue",
|
|
1273
|
-
"source_spec_node_id": "testing.coveragerequirement",
|
|
1274
|
-
"source_layer": "testing",
|
|
1275
|
-
"destination_spec_node_id": "testing.partitionvalue",
|
|
1276
|
-
"destination_layer": "testing",
|
|
1277
|
-
"predicate": "references",
|
|
1278
|
-
"cardinality": "many-to-many",
|
|
1279
|
-
"strength": "medium",
|
|
1280
|
-
"required": false
|
|
1281
|
-
},
|
|
1282
|
-
"testing.coveragerequirement.references.security.securitypolicy": {
|
|
1283
|
-
"id": "testing.coveragerequirement.references.security.securitypolicy",
|
|
1284
|
-
"source_spec_node_id": "testing.coveragerequirement",
|
|
1285
|
-
"source_layer": "testing",
|
|
1286
|
-
"destination_spec_node_id": "security.securitypolicy",
|
|
1287
|
-
"destination_layer": "security",
|
|
1288
|
-
"predicate": "references",
|
|
1289
|
-
"cardinality": "many-to-many",
|
|
1290
|
-
"strength": "medium",
|
|
1291
|
-
"required": false
|
|
1292
|
-
},
|
|
1293
|
-
"testing.coveragerequirement.references.testing.testcoveragetarget": {
|
|
1294
|
-
"id": "testing.coveragerequirement.references.testing.testcoveragetarget",
|
|
1295
|
-
"source_spec_node_id": "testing.coveragerequirement",
|
|
1296
|
-
"source_layer": "testing",
|
|
1297
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
1298
|
-
"destination_layer": "testing",
|
|
1299
|
-
"predicate": "references",
|
|
1300
|
-
"cardinality": "many-to-many",
|
|
1301
|
-
"strength": "medium",
|
|
1302
|
-
"required": false
|
|
1303
|
-
},
|
|
1304
|
-
"testing.coveragerequirement.supports-goals.motivation.goal": {
|
|
1305
|
-
"id": "testing.coveragerequirement.supports-goals.motivation.goal",
|
|
1306
|
-
"source_spec_node_id": "testing.coveragerequirement",
|
|
1307
|
-
"source_layer": "testing",
|
|
1308
|
-
"destination_spec_node_id": "motivation.goal",
|
|
1309
|
-
"destination_layer": "motivation",
|
|
1310
|
-
"predicate": "supports-goals",
|
|
1311
|
-
"cardinality": "many-to-many",
|
|
1312
|
-
"strength": "medium",
|
|
1313
|
-
"required": false
|
|
1314
|
-
},
|
|
1315
|
-
"testing.coveragesummary.aggregates.testing.coveragerequirement": {
|
|
1316
|
-
"id": "testing.coveragesummary.aggregates.testing.coveragerequirement",
|
|
1317
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1318
|
-
"source_layer": "testing",
|
|
1319
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1320
|
-
"destination_layer": "testing",
|
|
1321
|
-
"predicate": "aggregates",
|
|
1322
|
-
"cardinality": "many-to-many",
|
|
1323
|
-
"strength": "medium",
|
|
1324
|
-
"required": false
|
|
1325
|
-
},
|
|
1326
|
-
"testing.coveragesummary.aggregates.testing.targetcoveragesummary": {
|
|
1327
|
-
"id": "testing.coveragesummary.aggregates.testing.targetcoveragesummary",
|
|
1328
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1329
|
-
"source_layer": "testing",
|
|
1330
|
-
"destination_spec_node_id": "testing.targetcoveragesummary",
|
|
1331
|
-
"destination_layer": "testing",
|
|
1332
|
-
"predicate": "aggregates",
|
|
1333
|
-
"cardinality": "many-to-many",
|
|
1334
|
-
"strength": "medium",
|
|
1335
|
-
"required": false
|
|
1336
|
-
},
|
|
1337
|
-
"testing.coveragesummary.aggregates.testing.testcasesketch": {
|
|
1338
|
-
"id": "testing.coveragesummary.aggregates.testing.testcasesketch",
|
|
1339
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1340
|
-
"source_layer": "testing",
|
|
1341
|
-
"destination_spec_node_id": "testing.testcasesketch",
|
|
1342
|
-
"destination_layer": "testing",
|
|
1343
|
-
"predicate": "aggregates",
|
|
1344
|
-
"cardinality": "many-to-many",
|
|
1345
|
-
"strength": "medium",
|
|
1346
|
-
"required": false
|
|
1347
|
-
},
|
|
1348
|
-
"testing.coveragesummary.aggregates.testing.testcoveragemodel": {
|
|
1349
|
-
"id": "testing.coveragesummary.aggregates.testing.testcoveragemodel",
|
|
1350
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1351
|
-
"source_layer": "testing",
|
|
1352
|
-
"destination_spec_node_id": "testing.testcoveragemodel",
|
|
1353
|
-
"destination_layer": "testing",
|
|
1354
|
-
"predicate": "aggregates",
|
|
1355
|
-
"cardinality": "many-to-many",
|
|
1356
|
-
"strength": "medium",
|
|
1357
|
-
"required": false
|
|
1358
|
-
},
|
|
1359
|
-
"testing.coveragesummary.depends-on.testing.testcoveragetarget": {
|
|
1360
|
-
"id": "testing.coveragesummary.depends-on.testing.testcoveragetarget",
|
|
1361
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1362
|
-
"source_layer": "testing",
|
|
1363
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
1364
|
-
"destination_layer": "testing",
|
|
1365
|
-
"predicate": "depends-on",
|
|
1366
|
-
"cardinality": "many-to-many",
|
|
1367
|
-
"strength": "medium",
|
|
1368
|
-
"required": false
|
|
1369
|
-
},
|
|
1370
|
-
"testing.coveragesummary.fulfills-requirements.motivation.requirement": {
|
|
1371
|
-
"id": "testing.coveragesummary.fulfills-requirements.motivation.requirement",
|
|
1372
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1373
|
-
"source_layer": "testing",
|
|
1374
|
-
"destination_spec_node_id": "motivation.requirement",
|
|
1375
|
-
"destination_layer": "motivation",
|
|
1376
|
-
"predicate": "fulfills-requirements",
|
|
1377
|
-
"cardinality": "many-to-many",
|
|
1378
|
-
"strength": "medium",
|
|
1379
|
-
"required": false
|
|
1380
|
-
},
|
|
1381
|
-
"testing.coveragesummary.measures-outcome.motivation.outcome": {
|
|
1382
|
-
"id": "testing.coveragesummary.measures-outcome.motivation.outcome",
|
|
1383
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1384
|
-
"source_layer": "testing",
|
|
1385
|
-
"destination_spec_node_id": "motivation.outcome",
|
|
1386
|
-
"destination_layer": "motivation",
|
|
1387
|
-
"predicate": "measures-outcome",
|
|
1388
|
-
"cardinality": "many-to-many",
|
|
1389
|
-
"strength": "medium",
|
|
1390
|
-
"required": false
|
|
1391
|
-
},
|
|
1392
|
-
"testing.coveragesummary.references.business.businessprocess": {
|
|
1393
|
-
"id": "testing.coveragesummary.references.business.businessprocess",
|
|
1394
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1395
|
-
"source_layer": "testing",
|
|
1396
|
-
"destination_spec_node_id": "business.businessprocess",
|
|
1397
|
-
"destination_layer": "business",
|
|
1398
|
-
"predicate": "references",
|
|
1399
|
-
"cardinality": "many-to-many",
|
|
1400
|
-
"strength": "medium",
|
|
1401
|
-
"required": false
|
|
1402
|
-
},
|
|
1403
|
-
"testing.coveragesummary.references.testing.coverageexclusion": {
|
|
1404
|
-
"id": "testing.coveragesummary.references.testing.coverageexclusion",
|
|
1405
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1406
|
-
"source_layer": "testing",
|
|
1407
|
-
"destination_spec_node_id": "testing.coverageexclusion",
|
|
1408
|
-
"destination_layer": "testing",
|
|
1409
|
-
"predicate": "references",
|
|
1410
|
-
"cardinality": "many-to-many",
|
|
1411
|
-
"strength": "medium",
|
|
1412
|
-
"required": false
|
|
1413
|
-
},
|
|
1414
|
-
"testing.coveragesummary.references.testing.coveragegap": {
|
|
1415
|
-
"id": "testing.coveragesummary.references.testing.coveragegap",
|
|
1416
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1417
|
-
"source_layer": "testing",
|
|
1418
|
-
"destination_spec_node_id": "testing.coveragegap",
|
|
1419
|
-
"destination_layer": "testing",
|
|
1420
|
-
"predicate": "references",
|
|
1421
|
-
"cardinality": "many-to-many",
|
|
1422
|
-
"strength": "medium",
|
|
1423
|
-
"required": false
|
|
1424
|
-
},
|
|
1425
|
-
"testing.coveragesummary.references.testing.testcoveragemodel": {
|
|
1426
|
-
"id": "testing.coveragesummary.references.testing.testcoveragemodel",
|
|
1427
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1428
|
-
"source_layer": "testing",
|
|
1429
|
-
"destination_spec_node_id": "testing.testcoveragemodel",
|
|
1430
|
-
"destination_layer": "testing",
|
|
1431
|
-
"predicate": "references",
|
|
1432
|
-
"cardinality": "many-to-many",
|
|
1433
|
-
"strength": "medium",
|
|
1434
|
-
"required": false
|
|
1435
|
-
},
|
|
1436
|
-
"testing.coveragesummary.serves.testing.testcoveragemodel": {
|
|
1437
|
-
"id": "testing.coveragesummary.serves.testing.testcoveragemodel",
|
|
1438
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1439
|
-
"source_layer": "testing",
|
|
1440
|
-
"destination_spec_node_id": "testing.testcoveragemodel",
|
|
1441
|
-
"destination_layer": "testing",
|
|
1442
|
-
"predicate": "serves",
|
|
1443
|
-
"cardinality": "many-to-many",
|
|
1444
|
-
"strength": "medium",
|
|
1445
|
-
"required": false
|
|
1446
|
-
},
|
|
1447
|
-
"testing.coveragesummary.validates.testing.coveragerequirement": {
|
|
1448
|
-
"id": "testing.coveragesummary.validates.testing.coveragerequirement",
|
|
1449
|
-
"source_spec_node_id": "testing.coveragesummary",
|
|
1450
|
-
"source_layer": "testing",
|
|
1451
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1452
|
-
"destination_layer": "testing",
|
|
1453
|
-
"predicate": "validates",
|
|
1454
|
-
"cardinality": "many-to-many",
|
|
1455
|
-
"strength": "medium",
|
|
1456
|
-
"required": false
|
|
1457
|
-
},
|
|
1458
|
-
"testing.environmentfactor.composes.testing.contextvariation": {
|
|
1459
|
-
"id": "testing.environmentfactor.composes.testing.contextvariation",
|
|
1460
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1461
|
-
"source_layer": "testing",
|
|
1462
|
-
"destination_spec_node_id": "testing.contextvariation",
|
|
1463
|
-
"destination_layer": "testing",
|
|
1464
|
-
"predicate": "composes",
|
|
1465
|
-
"cardinality": "many-to-many",
|
|
1466
|
-
"strength": "medium",
|
|
1467
|
-
"required": false
|
|
1468
|
-
},
|
|
1469
|
-
"testing.environmentfactor.composes.testing.inputspacepartition": {
|
|
1470
|
-
"id": "testing.environmentfactor.composes.testing.inputspacepartition",
|
|
1471
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1472
|
-
"source_layer": "testing",
|
|
1473
|
-
"destination_spec_node_id": "testing.inputspacepartition",
|
|
1474
|
-
"destination_layer": "testing",
|
|
1475
|
-
"predicate": "composes",
|
|
1476
|
-
"cardinality": "many-to-many",
|
|
1477
|
-
"strength": "medium",
|
|
1478
|
-
"required": false
|
|
1479
|
-
},
|
|
1480
|
-
"testing.environmentfactor.flows-to.testing.coveragesummary": {
|
|
1481
|
-
"id": "testing.environmentfactor.flows-to.testing.coveragesummary",
|
|
1482
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1483
|
-
"source_layer": "testing",
|
|
1484
|
-
"destination_spec_node_id": "testing.coveragesummary",
|
|
1485
|
-
"destination_layer": "testing",
|
|
1486
|
-
"predicate": "flows-to",
|
|
1487
|
-
"cardinality": "many-to-many",
|
|
1488
|
-
"strength": "medium",
|
|
1489
|
-
"required": false
|
|
1490
|
-
},
|
|
1491
|
-
"testing.environmentfactor.references.apm.instrumentationconfig": {
|
|
1492
|
-
"id": "testing.environmentfactor.references.apm.instrumentationconfig",
|
|
1493
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1494
|
-
"source_layer": "testing",
|
|
1495
|
-
"destination_spec_node_id": "apm.instrumentationconfig",
|
|
1496
|
-
"destination_layer": "apm",
|
|
1497
|
-
"predicate": "references",
|
|
1498
|
-
"cardinality": "many-to-many",
|
|
1499
|
-
"strength": "medium",
|
|
1500
|
-
"required": false
|
|
1501
|
-
},
|
|
1502
|
-
"testing.environmentfactor.references.technology.node": {
|
|
1503
|
-
"id": "testing.environmentfactor.references.technology.node",
|
|
1504
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1505
|
-
"source_layer": "testing",
|
|
1506
|
-
"destination_spec_node_id": "technology.node",
|
|
1507
|
-
"destination_layer": "technology",
|
|
1508
|
-
"predicate": "references",
|
|
1509
|
-
"cardinality": "many-to-many",
|
|
1510
|
-
"strength": "medium",
|
|
1511
|
-
"required": false
|
|
1512
|
-
},
|
|
1513
|
-
"testing.environmentfactor.references.testing.partitionvalue": {
|
|
1514
|
-
"id": "testing.environmentfactor.references.testing.partitionvalue",
|
|
1515
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1516
|
-
"source_layer": "testing",
|
|
1517
|
-
"destination_spec_node_id": "testing.partitionvalue",
|
|
1518
|
-
"destination_layer": "testing",
|
|
1519
|
-
"predicate": "references",
|
|
1520
|
-
"cardinality": "many-to-many",
|
|
1521
|
-
"strength": "medium",
|
|
1522
|
-
"required": false
|
|
1523
|
-
},
|
|
1524
|
-
"testing.environmentfactor.references.security.securitypolicy": {
|
|
1525
|
-
"id": "testing.environmentfactor.references.security.securitypolicy",
|
|
1526
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1527
|
-
"source_layer": "testing",
|
|
1528
|
-
"destination_spec_node_id": "security.securitypolicy",
|
|
1529
|
-
"destination_layer": "security",
|
|
1530
|
-
"predicate": "references",
|
|
1531
|
-
"cardinality": "many-to-many",
|
|
1532
|
-
"strength": "medium",
|
|
1533
|
-
"required": false
|
|
1534
|
-
},
|
|
1535
|
-
"testing.environmentfactor.references.technology.systemsoftware": {
|
|
1536
|
-
"id": "testing.environmentfactor.references.technology.systemsoftware",
|
|
1537
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1538
|
-
"source_layer": "testing",
|
|
1539
|
-
"destination_spec_node_id": "technology.systemsoftware",
|
|
1540
|
-
"destination_layer": "technology",
|
|
1541
|
-
"predicate": "references",
|
|
1542
|
-
"cardinality": "many-to-many",
|
|
1543
|
-
"strength": "medium",
|
|
1544
|
-
"required": false
|
|
1545
|
-
},
|
|
1546
|
-
"testing.environmentfactor.serves.testing.coveragerequirement": {
|
|
1547
|
-
"id": "testing.environmentfactor.serves.testing.coveragerequirement",
|
|
1548
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1549
|
-
"source_layer": "testing",
|
|
1550
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1551
|
-
"destination_layer": "testing",
|
|
1552
|
-
"predicate": "serves",
|
|
1553
|
-
"cardinality": "many-to-many",
|
|
1554
|
-
"strength": "medium",
|
|
1555
|
-
"required": false
|
|
1556
|
-
},
|
|
1557
|
-
"testing.environmentfactor.serves.testing.testcasesketch": {
|
|
1558
|
-
"id": "testing.environmentfactor.serves.testing.testcasesketch",
|
|
1559
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1560
|
-
"source_layer": "testing",
|
|
1561
|
-
"destination_spec_node_id": "testing.testcasesketch",
|
|
1562
|
-
"destination_layer": "testing",
|
|
1563
|
-
"predicate": "serves",
|
|
1564
|
-
"cardinality": "many-to-many",
|
|
1565
|
-
"strength": "medium",
|
|
1566
|
-
"required": false
|
|
1567
|
-
},
|
|
1568
|
-
"testing.environmentfactor.serves.testing.testcoveragemodel": {
|
|
1569
|
-
"id": "testing.environmentfactor.serves.testing.testcoveragemodel",
|
|
1570
|
-
"source_spec_node_id": "testing.environmentfactor",
|
|
1571
|
-
"source_layer": "testing",
|
|
1572
|
-
"destination_spec_node_id": "testing.testcoveragemodel",
|
|
1573
|
-
"destination_layer": "testing",
|
|
1574
|
-
"predicate": "serves",
|
|
1575
|
-
"cardinality": "many-to-many",
|
|
1576
|
-
"strength": "medium",
|
|
1577
|
-
"required": false
|
|
1578
|
-
},
|
|
1579
|
-
"testing.inputpartitionselection.aggregates.testing.contextvariation": {
|
|
1580
|
-
"id": "testing.inputpartitionselection.aggregates.testing.contextvariation",
|
|
1581
|
-
"source_spec_node_id": "testing.inputpartitionselection",
|
|
1582
|
-
"source_layer": "testing",
|
|
1583
|
-
"destination_spec_node_id": "testing.contextvariation",
|
|
1584
|
-
"destination_layer": "testing",
|
|
1585
|
-
"predicate": "aggregates",
|
|
1586
|
-
"cardinality": "many-to-many",
|
|
1587
|
-
"strength": "medium",
|
|
1588
|
-
"required": false
|
|
1589
|
-
},
|
|
1590
|
-
"testing.inputpartitionselection.aggregates.testing.partitionvalue": {
|
|
1591
|
-
"id": "testing.inputpartitionselection.aggregates.testing.partitionvalue",
|
|
1592
|
-
"source_spec_node_id": "testing.inputpartitionselection",
|
|
1593
|
-
"source_layer": "testing",
|
|
1594
|
-
"destination_spec_node_id": "testing.partitionvalue",
|
|
1595
|
-
"destination_layer": "testing",
|
|
1596
|
-
"predicate": "aggregates",
|
|
1597
|
-
"cardinality": "many-to-many",
|
|
1598
|
-
"strength": "medium",
|
|
1599
|
-
"required": false
|
|
1600
|
-
},
|
|
1601
|
-
"testing.inputselection.references.testing.coveragerequirement": {
|
|
1602
|
-
"id": "testing.inputselection.references.testing.coveragerequirement",
|
|
1603
|
-
"source_spec_node_id": "testing.inputselection",
|
|
1604
|
-
"source_layer": "testing",
|
|
1605
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1606
|
-
"destination_layer": "testing",
|
|
1607
|
-
"predicate": "references",
|
|
1608
|
-
"cardinality": "many-to-many",
|
|
1609
|
-
"strength": "medium",
|
|
1610
|
-
"required": false
|
|
1611
|
-
},
|
|
1612
|
-
"testing.inputselection.references.testing.partitionvalue": {
|
|
1613
|
-
"id": "testing.inputselection.references.testing.partitionvalue",
|
|
1614
|
-
"source_spec_node_id": "testing.inputselection",
|
|
1615
|
-
"source_layer": "testing",
|
|
1616
|
-
"destination_spec_node_id": "testing.partitionvalue",
|
|
1617
|
-
"destination_layer": "testing",
|
|
1618
|
-
"predicate": "references",
|
|
1619
|
-
"cardinality": "many-to-many",
|
|
1620
|
-
"strength": "medium",
|
|
1621
|
-
"required": false
|
|
1622
|
-
},
|
|
1623
|
-
"testing.inputselection.references.testing.testcoveragetarget": {
|
|
1624
|
-
"id": "testing.inputselection.references.testing.testcoveragetarget",
|
|
1625
|
-
"source_spec_node_id": "testing.inputselection",
|
|
1626
|
-
"source_layer": "testing",
|
|
1627
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
1628
|
-
"destination_layer": "testing",
|
|
1629
|
-
"predicate": "references",
|
|
1630
|
-
"cardinality": "many-to-many",
|
|
1631
|
-
"strength": "medium",
|
|
1632
|
-
"required": false
|
|
1633
|
-
},
|
|
1634
|
-
"testing.inputspacepartition.composes.partitionvalue": {
|
|
1635
|
-
"id": "testing.inputspacepartition.composes.partitionvalue",
|
|
1636
|
-
"source_spec_node_id": "testing.inputspacepartition",
|
|
1637
|
-
"source_layer": "testing",
|
|
1638
|
-
"destination_spec_node_id": "testing.partitionvalue",
|
|
1639
|
-
"destination_layer": "testing",
|
|
1640
|
-
"predicate": "composes",
|
|
1641
|
-
"cardinality": "one-to-many",
|
|
1642
|
-
"strength": "high",
|
|
1643
|
-
"required": false
|
|
1644
|
-
},
|
|
1645
|
-
"testing.inputspacepartition.depends-on.inputspacepartition": {
|
|
1646
|
-
"id": "testing.inputspacepartition.depends-on.inputspacepartition",
|
|
1647
|
-
"source_spec_node_id": "testing.inputspacepartition",
|
|
1648
|
-
"source_layer": "testing",
|
|
1649
|
-
"destination_spec_node_id": "testing.inputspacepartition",
|
|
1650
|
-
"destination_layer": "testing",
|
|
1651
|
-
"predicate": "depends-on",
|
|
1652
|
-
"cardinality": "many-to-many",
|
|
1653
|
-
"strength": "medium",
|
|
1654
|
-
"required": false
|
|
1655
|
-
},
|
|
1656
|
-
"testing.inputspacepartition.references.data-store.collection": {
|
|
1657
|
-
"id": "testing.inputspacepartition.references.data-store.collection",
|
|
1658
|
-
"source_spec_node_id": "testing.inputspacepartition",
|
|
1659
|
-
"source_layer": "testing",
|
|
1660
|
-
"destination_spec_node_id": "data-store.collection",
|
|
1661
|
-
"destination_layer": "data-store",
|
|
1662
|
-
"predicate": "references",
|
|
1663
|
-
"cardinality": "many-to-many",
|
|
1664
|
-
"strength": "medium",
|
|
1665
|
-
"required": false
|
|
1666
|
-
},
|
|
1667
|
-
"testing.inputspacepartition.references.data-model.jsonschema": {
|
|
1668
|
-
"id": "testing.inputspacepartition.references.data-model.jsonschema",
|
|
1669
|
-
"source_spec_node_id": "testing.inputspacepartition",
|
|
1670
|
-
"source_layer": "testing",
|
|
1671
|
-
"destination_spec_node_id": "data-model.jsonschema",
|
|
1672
|
-
"destination_layer": "data-model",
|
|
1673
|
-
"predicate": "references",
|
|
1674
|
-
"cardinality": "many-to-many",
|
|
1675
|
-
"strength": "medium",
|
|
1676
|
-
"required": false
|
|
1677
|
-
},
|
|
1678
|
-
"testing.inputspacepartition.references.api.parameter": {
|
|
1679
|
-
"id": "testing.inputspacepartition.references.api.parameter",
|
|
1680
|
-
"source_spec_node_id": "testing.inputspacepartition",
|
|
1681
|
-
"source_layer": "testing",
|
|
1682
|
-
"destination_spec_node_id": "api.parameter",
|
|
1683
|
-
"destination_layer": "api",
|
|
1684
|
-
"predicate": "references",
|
|
1685
|
-
"cardinality": "many-to-many",
|
|
1686
|
-
"strength": "medium",
|
|
1687
|
-
"required": false
|
|
1688
|
-
},
|
|
1689
|
-
"testing.inputspacepartition.references.data-model.schemaproperty": {
|
|
1690
|
-
"id": "testing.inputspacepartition.references.data-model.schemaproperty",
|
|
1691
|
-
"source_spec_node_id": "testing.inputspacepartition",
|
|
1692
|
-
"source_layer": "testing",
|
|
1693
|
-
"destination_spec_node_id": "data-model.schemaproperty",
|
|
1694
|
-
"destination_layer": "data-model",
|
|
1695
|
-
"predicate": "references",
|
|
1696
|
-
"cardinality": "many-to-many",
|
|
1697
|
-
"strength": "medium",
|
|
1698
|
-
"required": false
|
|
1699
|
-
},
|
|
1700
|
-
"testing.inputspacepartition.serves.testing.testcoveragetarget": {
|
|
1701
|
-
"id": "testing.inputspacepartition.serves.testing.testcoveragetarget",
|
|
1702
|
-
"source_spec_node_id": "testing.inputspacepartition",
|
|
1703
|
-
"source_layer": "testing",
|
|
1704
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
1705
|
-
"destination_layer": "testing",
|
|
1706
|
-
"predicate": "serves",
|
|
1707
|
-
"cardinality": "many-to-many",
|
|
1708
|
-
"strength": "medium",
|
|
1709
|
-
"required": false
|
|
1710
|
-
},
|
|
1711
|
-
"testing.outcomecategory.aggregates.testing.testcasesketch": {
|
|
1712
|
-
"id": "testing.outcomecategory.aggregates.testing.testcasesketch",
|
|
1713
|
-
"source_spec_node_id": "testing.outcomecategory",
|
|
1714
|
-
"source_layer": "testing",
|
|
1715
|
-
"destination_spec_node_id": "testing.testcasesketch",
|
|
1716
|
-
"destination_layer": "testing",
|
|
1717
|
-
"predicate": "aggregates",
|
|
1718
|
-
"cardinality": "many-to-many",
|
|
1719
|
-
"strength": "medium",
|
|
1720
|
-
"required": false
|
|
1721
|
-
},
|
|
1722
|
-
"testing.outcomecategory.constrained-by.testing.environmentfactor": {
|
|
1723
|
-
"id": "testing.outcomecategory.constrained-by.testing.environmentfactor",
|
|
1724
|
-
"source_spec_node_id": "testing.outcomecategory",
|
|
1725
|
-
"source_layer": "testing",
|
|
1726
|
-
"destination_spec_node_id": "testing.environmentfactor",
|
|
1727
|
-
"destination_layer": "testing",
|
|
1728
|
-
"predicate": "constrained-by",
|
|
1729
|
-
"cardinality": "many-to-many",
|
|
1730
|
-
"strength": "medium",
|
|
1731
|
-
"required": false
|
|
1732
|
-
},
|
|
1733
|
-
"testing.outcomecategory.flows-to.testing.coveragesummary": {
|
|
1734
|
-
"id": "testing.outcomecategory.flows-to.testing.coveragesummary",
|
|
1735
|
-
"source_spec_node_id": "testing.outcomecategory",
|
|
1736
|
-
"source_layer": "testing",
|
|
1737
|
-
"destination_spec_node_id": "testing.coveragesummary",
|
|
1738
|
-
"destination_layer": "testing",
|
|
1739
|
-
"predicate": "flows-to",
|
|
1740
|
-
"cardinality": "many-to-many",
|
|
1741
|
-
"strength": "medium",
|
|
1742
|
-
"required": false
|
|
1743
|
-
},
|
|
1744
|
-
"testing.outcomecategory.references.testing.targetinputfield": {
|
|
1745
|
-
"id": "testing.outcomecategory.references.testing.targetinputfield",
|
|
1746
|
-
"source_spec_node_id": "testing.outcomecategory",
|
|
1747
|
-
"source_layer": "testing",
|
|
1748
|
-
"destination_spec_node_id": "testing.targetinputfield",
|
|
1749
|
-
"destination_layer": "testing",
|
|
1750
|
-
"predicate": "references",
|
|
1751
|
-
"cardinality": "many-to-many",
|
|
1752
|
-
"strength": "medium",
|
|
1753
|
-
"required": false
|
|
1754
|
-
},
|
|
1755
|
-
"testing.outcomecategory.serves.testing.coveragerequirement": {
|
|
1756
|
-
"id": "testing.outcomecategory.serves.testing.coveragerequirement",
|
|
1757
|
-
"source_spec_node_id": "testing.outcomecategory",
|
|
1758
|
-
"source_layer": "testing",
|
|
1759
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1760
|
-
"destination_layer": "testing",
|
|
1761
|
-
"predicate": "serves",
|
|
1762
|
-
"cardinality": "many-to-many",
|
|
1763
|
-
"strength": "medium",
|
|
1764
|
-
"required": false
|
|
1765
|
-
},
|
|
1766
|
-
"testing.partitiondependency.constrained-by.testing.inputpartitionselection": {
|
|
1767
|
-
"id": "testing.partitiondependency.constrained-by.testing.inputpartitionselection",
|
|
1768
|
-
"source_spec_node_id": "testing.partitiondependency",
|
|
1769
|
-
"source_layer": "testing",
|
|
1770
|
-
"destination_spec_node_id": "testing.inputpartitionselection",
|
|
1771
|
-
"destination_layer": "testing",
|
|
1772
|
-
"predicate": "constrained-by",
|
|
1773
|
-
"cardinality": "many-to-many",
|
|
1774
|
-
"strength": "medium",
|
|
1775
|
-
"required": false
|
|
1776
|
-
},
|
|
1777
|
-
"testing.partitiondependency.references.testing.inputspacepartition": {
|
|
1778
|
-
"id": "testing.partitiondependency.references.testing.inputspacepartition",
|
|
1779
|
-
"source_spec_node_id": "testing.partitiondependency",
|
|
1780
|
-
"source_layer": "testing",
|
|
1781
|
-
"destination_spec_node_id": "testing.inputspacepartition",
|
|
1782
|
-
"destination_layer": "testing",
|
|
1783
|
-
"predicate": "references",
|
|
1784
|
-
"cardinality": "many-to-many",
|
|
1785
|
-
"strength": "medium",
|
|
1786
|
-
"required": false
|
|
1787
|
-
},
|
|
1788
|
-
"testing.partitiondependency.triggers.testing.coveragerequirement": {
|
|
1789
|
-
"id": "testing.partitiondependency.triggers.testing.coveragerequirement",
|
|
1790
|
-
"source_spec_node_id": "testing.partitiondependency",
|
|
1791
|
-
"source_layer": "testing",
|
|
1792
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1793
|
-
"destination_layer": "testing",
|
|
1794
|
-
"predicate": "triggers",
|
|
1795
|
-
"cardinality": "many-to-many",
|
|
1796
|
-
"strength": "medium",
|
|
1797
|
-
"required": false
|
|
1798
|
-
},
|
|
1799
|
-
"testing.partitiondependency.triggers.testing.partitionvalue": {
|
|
1800
|
-
"id": "testing.partitiondependency.triggers.testing.partitionvalue",
|
|
1801
|
-
"source_spec_node_id": "testing.partitiondependency",
|
|
1802
|
-
"source_layer": "testing",
|
|
1803
|
-
"destination_spec_node_id": "testing.partitionvalue",
|
|
1804
|
-
"destination_layer": "testing",
|
|
1805
|
-
"predicate": "triggers",
|
|
1806
|
-
"cardinality": "many-to-many",
|
|
1807
|
-
"strength": "medium",
|
|
1808
|
-
"required": false
|
|
1809
|
-
},
|
|
1810
|
-
"testing.partitionvalue.composes.testing.inputspacepartition": {
|
|
1811
|
-
"id": "testing.partitionvalue.composes.testing.inputspacepartition",
|
|
1812
|
-
"source_spec_node_id": "testing.partitionvalue",
|
|
1813
|
-
"source_layer": "testing",
|
|
1814
|
-
"destination_spec_node_id": "testing.inputspacepartition",
|
|
1815
|
-
"destination_layer": "testing",
|
|
1816
|
-
"predicate": "composes",
|
|
1817
|
-
"cardinality": "many-to-many",
|
|
1818
|
-
"strength": "medium",
|
|
1819
|
-
"required": false
|
|
1820
|
-
},
|
|
1821
|
-
"testing.partitionvalue.constrained-by.testing.coveragerequirement": {
|
|
1822
|
-
"id": "testing.partitionvalue.constrained-by.testing.coveragerequirement",
|
|
1823
|
-
"source_spec_node_id": "testing.partitionvalue",
|
|
1824
|
-
"source_layer": "testing",
|
|
1825
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1826
|
-
"destination_layer": "testing",
|
|
1827
|
-
"predicate": "constrained-by",
|
|
1828
|
-
"cardinality": "many-to-many",
|
|
1829
|
-
"strength": "medium",
|
|
1830
|
-
"required": false
|
|
1831
|
-
},
|
|
1832
|
-
"testing.partitionvalue.depends-on.testing.environmentfactor": {
|
|
1833
|
-
"id": "testing.partitionvalue.depends-on.testing.environmentfactor",
|
|
1834
|
-
"source_spec_node_id": "testing.partitionvalue",
|
|
1835
|
-
"source_layer": "testing",
|
|
1836
|
-
"destination_spec_node_id": "testing.environmentfactor",
|
|
1837
|
-
"destination_layer": "testing",
|
|
1838
|
-
"predicate": "depends-on",
|
|
1839
|
-
"cardinality": "many-to-many",
|
|
1840
|
-
"strength": "medium",
|
|
1841
|
-
"required": false
|
|
1842
|
-
},
|
|
1843
|
-
"testing.partitionvalue.flows-to.testing.outcomecategory": {
|
|
1844
|
-
"id": "testing.partitionvalue.flows-to.testing.outcomecategory",
|
|
1845
|
-
"source_spec_node_id": "testing.partitionvalue",
|
|
1846
|
-
"source_layer": "testing",
|
|
1847
|
-
"destination_spec_node_id": "testing.outcomecategory",
|
|
1848
|
-
"destination_layer": "testing",
|
|
1849
|
-
"predicate": "flows-to",
|
|
1850
|
-
"cardinality": "many-to-many",
|
|
1851
|
-
"strength": "medium",
|
|
1852
|
-
"required": false
|
|
1853
|
-
},
|
|
1854
|
-
"testing.partitionvalue.references.testing.coverageexclusion": {
|
|
1855
|
-
"id": "testing.partitionvalue.references.testing.coverageexclusion",
|
|
1856
|
-
"source_spec_node_id": "testing.partitionvalue",
|
|
1857
|
-
"source_layer": "testing",
|
|
1858
|
-
"destination_spec_node_id": "testing.coverageexclusion",
|
|
1859
|
-
"destination_layer": "testing",
|
|
1860
|
-
"predicate": "references",
|
|
1861
|
-
"cardinality": "many-to-many",
|
|
1862
|
-
"strength": "medium",
|
|
1863
|
-
"required": false
|
|
1864
|
-
},
|
|
1865
|
-
"testing.partitionvalue.triggers.testing.coveragegap": {
|
|
1866
|
-
"id": "testing.partitionvalue.triggers.testing.coveragegap",
|
|
1867
|
-
"source_spec_node_id": "testing.partitionvalue",
|
|
1868
|
-
"source_layer": "testing",
|
|
1869
|
-
"destination_spec_node_id": "testing.coveragegap",
|
|
1870
|
-
"destination_layer": "testing",
|
|
1871
|
-
"predicate": "triggers",
|
|
1872
|
-
"cardinality": "many-to-many",
|
|
1873
|
-
"strength": "medium",
|
|
1874
|
-
"required": false
|
|
1875
|
-
},
|
|
1876
|
-
"testing.targetcoveragesummary.aggregates.testing.testcasesketch": {
|
|
1877
|
-
"id": "testing.targetcoveragesummary.aggregates.testing.testcasesketch",
|
|
1878
|
-
"source_spec_node_id": "testing.targetcoveragesummary",
|
|
1879
|
-
"source_layer": "testing",
|
|
1880
|
-
"destination_spec_node_id": "testing.testcasesketch",
|
|
1881
|
-
"destination_layer": "testing",
|
|
1882
|
-
"predicate": "aggregates",
|
|
1883
|
-
"cardinality": "many-to-many",
|
|
1884
|
-
"strength": "medium",
|
|
1885
|
-
"required": false
|
|
1886
|
-
},
|
|
1887
|
-
"testing.targetcoveragesummary.references.testing.coverageexclusion": {
|
|
1888
|
-
"id": "testing.targetcoveragesummary.references.testing.coverageexclusion",
|
|
1889
|
-
"source_spec_node_id": "testing.targetcoveragesummary",
|
|
1890
|
-
"source_layer": "testing",
|
|
1891
|
-
"destination_spec_node_id": "testing.coverageexclusion",
|
|
1892
|
-
"destination_layer": "testing",
|
|
1893
|
-
"predicate": "references",
|
|
1894
|
-
"cardinality": "many-to-many",
|
|
1895
|
-
"strength": "medium",
|
|
1896
|
-
"required": false
|
|
1897
|
-
},
|
|
1898
|
-
"testing.targetcoveragesummary.references.testing.coveragegap": {
|
|
1899
|
-
"id": "testing.targetcoveragesummary.references.testing.coveragegap",
|
|
1900
|
-
"source_spec_node_id": "testing.targetcoveragesummary",
|
|
1901
|
-
"source_layer": "testing",
|
|
1902
|
-
"destination_spec_node_id": "testing.coveragegap",
|
|
1903
|
-
"destination_layer": "testing",
|
|
1904
|
-
"predicate": "references",
|
|
1905
|
-
"cardinality": "many-to-many",
|
|
1906
|
-
"strength": "medium",
|
|
1907
|
-
"required": false
|
|
1908
|
-
},
|
|
1909
|
-
"testing.targetcoveragesummary.validates.testing.coveragerequirement": {
|
|
1910
|
-
"id": "testing.targetcoveragesummary.validates.testing.coveragerequirement",
|
|
1911
|
-
"source_spec_node_id": "testing.targetcoveragesummary",
|
|
1912
|
-
"source_layer": "testing",
|
|
1913
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1914
|
-
"destination_layer": "testing",
|
|
1915
|
-
"predicate": "validates",
|
|
1916
|
-
"cardinality": "many-to-many",
|
|
1917
|
-
"strength": "medium",
|
|
1918
|
-
"required": false
|
|
1919
|
-
},
|
|
1920
|
-
"testing.targetcoveragesummary.validates.testing.testcoveragetarget": {
|
|
1921
|
-
"id": "testing.targetcoveragesummary.validates.testing.testcoveragetarget",
|
|
1922
|
-
"source_spec_node_id": "testing.targetcoveragesummary",
|
|
1923
|
-
"source_layer": "testing",
|
|
1924
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
1925
|
-
"destination_layer": "testing",
|
|
1926
|
-
"predicate": "validates",
|
|
1927
|
-
"cardinality": "many-to-many",
|
|
1928
|
-
"strength": "medium",
|
|
1929
|
-
"required": false
|
|
1930
|
-
},
|
|
1931
|
-
"testing.targetinputfield.aggregates.testing.partitionvalue": {
|
|
1932
|
-
"id": "testing.targetinputfield.aggregates.testing.partitionvalue",
|
|
1933
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
1934
|
-
"source_layer": "testing",
|
|
1935
|
-
"destination_spec_node_id": "testing.partitionvalue",
|
|
1936
|
-
"destination_layer": "testing",
|
|
1937
|
-
"predicate": "aggregates",
|
|
1938
|
-
"cardinality": "many-to-many",
|
|
1939
|
-
"strength": "medium",
|
|
1940
|
-
"required": false
|
|
1941
|
-
},
|
|
1942
|
-
"testing.targetinputfield.constrained-by.testing.coveragerequirement": {
|
|
1943
|
-
"id": "testing.targetinputfield.constrained-by.testing.coveragerequirement",
|
|
1944
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
1945
|
-
"source_layer": "testing",
|
|
1946
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
1947
|
-
"destination_layer": "testing",
|
|
1948
|
-
"predicate": "constrained-by",
|
|
1949
|
-
"cardinality": "many-to-many",
|
|
1950
|
-
"strength": "medium",
|
|
1951
|
-
"required": false
|
|
1952
|
-
},
|
|
1953
|
-
"testing.targetinputfield.depends-on.testing.contextvariation": {
|
|
1954
|
-
"id": "testing.targetinputfield.depends-on.testing.contextvariation",
|
|
1955
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
1956
|
-
"source_layer": "testing",
|
|
1957
|
-
"destination_spec_node_id": "testing.contextvariation",
|
|
1958
|
-
"destination_layer": "testing",
|
|
1959
|
-
"predicate": "depends-on",
|
|
1960
|
-
"cardinality": "many-to-many",
|
|
1961
|
-
"strength": "medium",
|
|
1962
|
-
"required": false
|
|
1963
|
-
},
|
|
1964
|
-
"testing.targetinputfield.flows-to.testing.inputpartitionselection": {
|
|
1965
|
-
"id": "testing.targetinputfield.flows-to.testing.inputpartitionselection",
|
|
1966
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
1967
|
-
"source_layer": "testing",
|
|
1968
|
-
"destination_spec_node_id": "testing.inputpartitionselection",
|
|
1969
|
-
"destination_layer": "testing",
|
|
1970
|
-
"predicate": "flows-to",
|
|
1971
|
-
"cardinality": "many-to-many",
|
|
1972
|
-
"strength": "medium",
|
|
1973
|
-
"required": false
|
|
1974
|
-
},
|
|
1975
|
-
"testing.targetinputfield.maps-to.ux.actioncomponent": {
|
|
1976
|
-
"id": "testing.targetinputfield.maps-to.ux.actioncomponent",
|
|
1977
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
1978
|
-
"source_layer": "testing",
|
|
1979
|
-
"destination_spec_node_id": "ux.actioncomponent",
|
|
1980
|
-
"destination_layer": "ux",
|
|
1981
|
-
"predicate": "maps-to",
|
|
1982
|
-
"cardinality": "many-to-many",
|
|
1983
|
-
"strength": "medium",
|
|
1984
|
-
"required": false
|
|
1985
|
-
},
|
|
1986
|
-
"testing.targetinputfield.references.testing.inputspacepartition": {
|
|
1987
|
-
"id": "testing.targetinputfield.references.testing.inputspacepartition",
|
|
1988
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
1989
|
-
"source_layer": "testing",
|
|
1990
|
-
"destination_spec_node_id": "testing.inputspacepartition",
|
|
1991
|
-
"destination_layer": "testing",
|
|
1992
|
-
"predicate": "references",
|
|
1993
|
-
"cardinality": "many-to-many",
|
|
1994
|
-
"strength": "medium",
|
|
1995
|
-
"required": false
|
|
1996
|
-
},
|
|
1997
|
-
"testing.targetinputfield.references.api.parameter": {
|
|
1998
|
-
"id": "testing.targetinputfield.references.api.parameter",
|
|
1999
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
2000
|
-
"source_layer": "testing",
|
|
2001
|
-
"destination_spec_node_id": "api.parameter",
|
|
2002
|
-
"destination_layer": "api",
|
|
2003
|
-
"predicate": "references",
|
|
2004
|
-
"cardinality": "many-to-many",
|
|
2005
|
-
"strength": "medium",
|
|
2006
|
-
"required": false
|
|
2007
|
-
},
|
|
2008
|
-
"testing.targetinputfield.references.data-model.schemaproperty": {
|
|
2009
|
-
"id": "testing.targetinputfield.references.data-model.schemaproperty",
|
|
2010
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
2011
|
-
"source_layer": "testing",
|
|
2012
|
-
"destination_spec_node_id": "data-model.schemaproperty",
|
|
2013
|
-
"destination_layer": "data-model",
|
|
2014
|
-
"predicate": "references",
|
|
2015
|
-
"cardinality": "many-to-many",
|
|
2016
|
-
"strength": "medium",
|
|
2017
|
-
"required": false
|
|
2018
|
-
},
|
|
2019
|
-
"testing.targetinputfield.references.testing.testcoveragetarget": {
|
|
2020
|
-
"id": "testing.targetinputfield.references.testing.testcoveragetarget",
|
|
2021
|
-
"source_spec_node_id": "testing.targetinputfield",
|
|
2022
|
-
"source_layer": "testing",
|
|
2023
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
2024
|
-
"destination_layer": "testing",
|
|
2025
|
-
"predicate": "references",
|
|
2026
|
-
"cardinality": "many-to-many",
|
|
2027
|
-
"strength": "medium",
|
|
2028
|
-
"required": false
|
|
1447
|
+
"required": false,
|
|
1448
|
+
"description": "The field under test is the schema property."
|
|
2029
1449
|
},
|
|
2030
1450
|
"testing.testcasesketch.accesses.data-store.collection": {
|
|
2031
1451
|
"id": "testing.testcasesketch.accesses.data-store.collection",
|
|
@@ -2036,40 +1456,8 @@
|
|
|
2036
1456
|
"predicate": "accesses",
|
|
2037
1457
|
"cardinality": "many-to-many",
|
|
2038
1458
|
"strength": "medium",
|
|
2039
|
-
"required": false
|
|
2040
|
-
|
|
2041
|
-
"testing.testcasesketch.accesses.testing.inputpartitionselection": {
|
|
2042
|
-
"id": "testing.testcasesketch.accesses.testing.inputpartitionselection",
|
|
2043
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2044
|
-
"source_layer": "testing",
|
|
2045
|
-
"destination_spec_node_id": "testing.inputpartitionselection",
|
|
2046
|
-
"destination_layer": "testing",
|
|
2047
|
-
"predicate": "accesses",
|
|
2048
|
-
"cardinality": "many-to-many",
|
|
2049
|
-
"strength": "medium",
|
|
2050
|
-
"required": false
|
|
2051
|
-
},
|
|
2052
|
-
"testing.testcasesketch.accesses.testing.inputselection": {
|
|
2053
|
-
"id": "testing.testcasesketch.accesses.testing.inputselection",
|
|
2054
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2055
|
-
"source_layer": "testing",
|
|
2056
|
-
"destination_spec_node_id": "testing.inputselection",
|
|
2057
|
-
"destination_layer": "testing",
|
|
2058
|
-
"predicate": "accesses",
|
|
2059
|
-
"cardinality": "many-to-many",
|
|
2060
|
-
"strength": "medium",
|
|
2061
|
-
"required": false
|
|
2062
|
-
},
|
|
2063
|
-
"testing.testcasesketch.accesses.api.requestbody": {
|
|
2064
|
-
"id": "testing.testcasesketch.accesses.api.requestbody",
|
|
2065
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2066
|
-
"source_layer": "testing",
|
|
2067
|
-
"destination_spec_node_id": "api.requestbody",
|
|
2068
|
-
"destination_layer": "api",
|
|
2069
|
-
"predicate": "accesses",
|
|
2070
|
-
"cardinality": "many-to-many",
|
|
2071
|
-
"strength": "medium",
|
|
2072
|
-
"required": false
|
|
1459
|
+
"required": false,
|
|
1460
|
+
"description": "The test seeds or reads fixture data in the collection."
|
|
2073
1461
|
},
|
|
2074
1462
|
"testing.testcasesketch.accesses.data-store.view": {
|
|
2075
1463
|
"id": "testing.testcasesketch.accesses.data-store.view",
|
|
@@ -2080,7 +1468,8 @@
|
|
|
2080
1468
|
"predicate": "accesses",
|
|
2081
1469
|
"cardinality": "many-to-many",
|
|
2082
1470
|
"strength": "medium",
|
|
2083
|
-
"required": false
|
|
1471
|
+
"required": false,
|
|
1472
|
+
"description": "The test reads fixture data through the view."
|
|
2084
1473
|
},
|
|
2085
1474
|
"testing.testcasesketch.composes.testing.inputselection": {
|
|
2086
1475
|
"id": "testing.testcasesketch.composes.testing.inputselection",
|
|
@@ -2091,51 +1480,8 @@
|
|
|
2091
1480
|
"predicate": "composes",
|
|
2092
1481
|
"cardinality": "many-to-many",
|
|
2093
1482
|
"strength": "medium",
|
|
2094
|
-
"required": false
|
|
2095
|
-
|
|
2096
|
-
"testing.testcasesketch.constrained-by.motivation.constraint": {
|
|
2097
|
-
"id": "testing.testcasesketch.constrained-by.motivation.constraint",
|
|
2098
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2099
|
-
"source_layer": "testing",
|
|
2100
|
-
"destination_spec_node_id": "motivation.constraint",
|
|
2101
|
-
"destination_layer": "motivation",
|
|
2102
|
-
"predicate": "constrained-by",
|
|
2103
|
-
"cardinality": "many-to-many",
|
|
2104
|
-
"strength": "medium",
|
|
2105
|
-
"required": false
|
|
2106
|
-
},
|
|
2107
|
-
"testing.testcasesketch.depends-on.testing.contextvariation": {
|
|
2108
|
-
"id": "testing.testcasesketch.depends-on.testing.contextvariation",
|
|
2109
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2110
|
-
"source_layer": "testing",
|
|
2111
|
-
"destination_spec_node_id": "testing.contextvariation",
|
|
2112
|
-
"destination_layer": "testing",
|
|
2113
|
-
"predicate": "depends-on",
|
|
2114
|
-
"cardinality": "many-to-many",
|
|
2115
|
-
"strength": "medium",
|
|
2116
|
-
"required": false
|
|
2117
|
-
},
|
|
2118
|
-
"testing.testcasesketch.depends-on.testing.inputspacepartition": {
|
|
2119
|
-
"id": "testing.testcasesketch.depends-on.testing.inputspacepartition",
|
|
2120
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2121
|
-
"source_layer": "testing",
|
|
2122
|
-
"destination_spec_node_id": "testing.inputspacepartition",
|
|
2123
|
-
"destination_layer": "testing",
|
|
2124
|
-
"predicate": "depends-on",
|
|
2125
|
-
"cardinality": "many-to-many",
|
|
2126
|
-
"strength": "medium",
|
|
2127
|
-
"required": false
|
|
2128
|
-
},
|
|
2129
|
-
"testing.testcasesketch.depends-on.testing.outcomecategory": {
|
|
2130
|
-
"id": "testing.testcasesketch.depends-on.testing.outcomecategory",
|
|
2131
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2132
|
-
"source_layer": "testing",
|
|
2133
|
-
"destination_spec_node_id": "testing.outcomecategory",
|
|
2134
|
-
"destination_layer": "testing",
|
|
2135
|
-
"predicate": "depends-on",
|
|
2136
|
-
"cardinality": "many-to-many",
|
|
2137
|
-
"strength": "medium",
|
|
2138
|
-
"required": false
|
|
1483
|
+
"required": false,
|
|
1484
|
+
"description": "The input selection binds one field of this test case and exists only within it."
|
|
2139
1485
|
},
|
|
2140
1486
|
"testing.testcasesketch.depends-on.testing.testcasesketch": {
|
|
2141
1487
|
"id": "testing.testcasesketch.depends-on.testing.testcasesketch",
|
|
@@ -2146,73 +1492,32 @@
|
|
|
2146
1492
|
"predicate": "depends-on",
|
|
2147
1493
|
"cardinality": "many-to-many",
|
|
2148
1494
|
"strength": "medium",
|
|
2149
|
-
"required": false
|
|
2150
|
-
|
|
2151
|
-
"testing.testcasesketch.fulfills-requirements.motivation.requirement": {
|
|
2152
|
-
"id": "testing.testcasesketch.fulfills-requirements.motivation.requirement",
|
|
2153
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2154
|
-
"source_layer": "testing",
|
|
2155
|
-
"destination_spec_node_id": "motivation.requirement",
|
|
2156
|
-
"destination_layer": "motivation",
|
|
2157
|
-
"predicate": "fulfills-requirements",
|
|
2158
|
-
"cardinality": "many-to-many",
|
|
2159
|
-
"strength": "high",
|
|
2160
|
-
"required": false
|
|
2161
|
-
},
|
|
2162
|
-
"testing.testcasesketch.references.testing.coveragerequirement": {
|
|
2163
|
-
"id": "testing.testcasesketch.references.testing.coveragerequirement",
|
|
2164
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2165
|
-
"source_layer": "testing",
|
|
2166
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
2167
|
-
"destination_layer": "testing",
|
|
2168
|
-
"predicate": "references",
|
|
2169
|
-
"cardinality": "many-to-many",
|
|
2170
|
-
"strength": "medium",
|
|
2171
|
-
"required": false
|
|
2172
|
-
},
|
|
2173
|
-
"testing.testcasesketch.references.apm.logconfiguration": {
|
|
2174
|
-
"id": "testing.testcasesketch.references.apm.logconfiguration",
|
|
2175
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2176
|
-
"source_layer": "testing",
|
|
2177
|
-
"destination_spec_node_id": "apm.logconfiguration",
|
|
2178
|
-
"destination_layer": "apm",
|
|
2179
|
-
"predicate": "references",
|
|
2180
|
-
"cardinality": "many-to-many",
|
|
2181
|
-
"strength": "medium",
|
|
2182
|
-
"required": false
|
|
1495
|
+
"required": false,
|
|
1496
|
+
"description": "The test case needs the other one run first, such as a setup case that creates its data."
|
|
2183
1497
|
},
|
|
2184
|
-
"testing.testcasesketch.references.testing.
|
|
2185
|
-
"id": "testing.testcasesketch.references.testing.
|
|
1498
|
+
"testing.testcasesketch.references.testing.contextvariation": {
|
|
1499
|
+
"id": "testing.testcasesketch.references.testing.contextvariation",
|
|
2186
1500
|
"source_spec_node_id": "testing.testcasesketch",
|
|
2187
1501
|
"source_layer": "testing",
|
|
2188
|
-
"destination_spec_node_id": "testing.
|
|
1502
|
+
"destination_spec_node_id": "testing.contextvariation",
|
|
2189
1503
|
"destination_layer": "testing",
|
|
2190
1504
|
"predicate": "references",
|
|
2191
1505
|
"cardinality": "many-to-many",
|
|
2192
1506
|
"strength": "medium",
|
|
2193
|
-
"required": false
|
|
2194
|
-
|
|
2195
|
-
"testing.testcasesketch.references.apm.span": {
|
|
2196
|
-
"id": "testing.testcasesketch.references.apm.span",
|
|
2197
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2198
|
-
"source_layer": "testing",
|
|
2199
|
-
"destination_spec_node_id": "apm.span",
|
|
2200
|
-
"destination_layer": "apm",
|
|
2201
|
-
"predicate": "references",
|
|
2202
|
-
"cardinality": "many-to-many",
|
|
2203
|
-
"strength": "medium",
|
|
2204
|
-
"required": false
|
|
1507
|
+
"required": false,
|
|
1508
|
+
"description": "The test case runs under the context variation."
|
|
2205
1509
|
},
|
|
2206
|
-
"testing.testcasesketch.references.testing.
|
|
2207
|
-
"id": "testing.testcasesketch.references.testing.
|
|
1510
|
+
"testing.testcasesketch.references.testing.outcomecategory": {
|
|
1511
|
+
"id": "testing.testcasesketch.references.testing.outcomecategory",
|
|
2208
1512
|
"source_spec_node_id": "testing.testcasesketch",
|
|
2209
1513
|
"source_layer": "testing",
|
|
2210
|
-
"destination_spec_node_id": "testing.
|
|
1514
|
+
"destination_spec_node_id": "testing.outcomecategory",
|
|
2211
1515
|
"destination_layer": "testing",
|
|
2212
1516
|
"predicate": "references",
|
|
2213
1517
|
"cardinality": "many-to-many",
|
|
2214
1518
|
"strength": "medium",
|
|
2215
|
-
"required": false
|
|
1519
|
+
"required": false,
|
|
1520
|
+
"description": "The test case expects the outcome category."
|
|
2216
1521
|
},
|
|
2217
1522
|
"testing.testcasesketch.requires.technology.systemsoftware": {
|
|
2218
1523
|
"id": "testing.testcasesketch.requires.technology.systemsoftware",
|
|
@@ -2223,18 +1528,20 @@
|
|
|
2223
1528
|
"predicate": "requires",
|
|
2224
1529
|
"cardinality": "many-to-many",
|
|
2225
1530
|
"strength": "medium",
|
|
2226
|
-
"required": false
|
|
1531
|
+
"required": false,
|
|
1532
|
+
"description": "The test case needs the software to run, such as a browser driver or test database."
|
|
2227
1533
|
},
|
|
2228
|
-
"testing.testcasesketch.
|
|
2229
|
-
"id": "testing.testcasesketch.
|
|
1534
|
+
"testing.testcasesketch.satisfies.motivation.requirement": {
|
|
1535
|
+
"id": "testing.testcasesketch.satisfies.motivation.requirement",
|
|
2230
1536
|
"source_spec_node_id": "testing.testcasesketch",
|
|
2231
1537
|
"source_layer": "testing",
|
|
2232
|
-
"destination_spec_node_id": "motivation.
|
|
1538
|
+
"destination_spec_node_id": "motivation.requirement",
|
|
2233
1539
|
"destination_layer": "motivation",
|
|
2234
|
-
"predicate": "
|
|
1540
|
+
"predicate": "satisfies",
|
|
2235
1541
|
"cardinality": "many-to-many",
|
|
2236
1542
|
"strength": "high",
|
|
2237
|
-
"required": false
|
|
1543
|
+
"required": false,
|
|
1544
|
+
"description": "The test case verifies the requirement, so passing it is evidence that the requirement is met."
|
|
2238
1545
|
},
|
|
2239
1546
|
"testing.testcasesketch.tests.ux.actioncomponent": {
|
|
2240
1547
|
"id": "testing.testcasesketch.tests.ux.actioncomponent",
|
|
@@ -2245,7 +1552,8 @@
|
|
|
2245
1552
|
"predicate": "tests",
|
|
2246
1553
|
"cardinality": "many-to-many",
|
|
2247
1554
|
"strength": "medium",
|
|
2248
|
-
"required": false
|
|
1555
|
+
"required": false,
|
|
1556
|
+
"description": "The test case exercises the action component, such as clicking a button."
|
|
2249
1557
|
},
|
|
2250
1558
|
"testing.testcasesketch.tests.application.applicationfunction": {
|
|
2251
1559
|
"id": "testing.testcasesketch.tests.application.applicationfunction",
|
|
@@ -2256,7 +1564,8 @@
|
|
|
2256
1564
|
"predicate": "tests",
|
|
2257
1565
|
"cardinality": "many-to-many",
|
|
2258
1566
|
"strength": "medium",
|
|
2259
|
-
"required": false
|
|
1567
|
+
"required": false,
|
|
1568
|
+
"description": "The test case exercises the application function."
|
|
2260
1569
|
},
|
|
2261
1570
|
"testing.testcasesketch.tests.application.applicationinterface": {
|
|
2262
1571
|
"id": "testing.testcasesketch.tests.application.applicationinterface",
|
|
@@ -2267,7 +1576,8 @@
|
|
|
2267
1576
|
"predicate": "tests",
|
|
2268
1577
|
"cardinality": "many-to-many",
|
|
2269
1578
|
"strength": "medium",
|
|
2270
|
-
"required": false
|
|
1579
|
+
"required": false,
|
|
1580
|
+
"description": "The test case exercises the application interface, such as a contract test."
|
|
2271
1581
|
},
|
|
2272
1582
|
"testing.testcasesketch.tests.application.applicationservice": {
|
|
2273
1583
|
"id": "testing.testcasesketch.tests.application.applicationservice",
|
|
@@ -2278,7 +1588,8 @@
|
|
|
2278
1588
|
"predicate": "tests",
|
|
2279
1589
|
"cardinality": "many-to-many",
|
|
2280
1590
|
"strength": "medium",
|
|
2281
|
-
"required": false
|
|
1591
|
+
"required": false,
|
|
1592
|
+
"description": "The test case exercises the application service."
|
|
2282
1593
|
},
|
|
2283
1594
|
"testing.testcasesketch.tests.business.businessprocess": {
|
|
2284
1595
|
"id": "testing.testcasesketch.tests.business.businessprocess",
|
|
@@ -2289,7 +1600,8 @@
|
|
|
2289
1600
|
"predicate": "tests",
|
|
2290
1601
|
"cardinality": "many-to-many",
|
|
2291
1602
|
"strength": "medium",
|
|
2292
|
-
"required": false
|
|
1603
|
+
"required": false,
|
|
1604
|
+
"description": "The test case exercises the business process end to end."
|
|
2293
1605
|
},
|
|
2294
1606
|
"testing.testcasesketch.tests.business.businessservice": {
|
|
2295
1607
|
"id": "testing.testcasesketch.tests.business.businessservice",
|
|
@@ -2300,7 +1612,8 @@
|
|
|
2300
1612
|
"predicate": "tests",
|
|
2301
1613
|
"cardinality": "many-to-many",
|
|
2302
1614
|
"strength": "medium",
|
|
2303
|
-
"required": false
|
|
1615
|
+
"required": false,
|
|
1616
|
+
"description": "The test case exercises the business service, such as an acceptance test."
|
|
2304
1617
|
},
|
|
2305
1618
|
"testing.testcasesketch.tests.security.countermeasure": {
|
|
2306
1619
|
"id": "testing.testcasesketch.tests.security.countermeasure",
|
|
@@ -2311,18 +1624,20 @@
|
|
|
2311
1624
|
"predicate": "tests",
|
|
2312
1625
|
"cardinality": "many-to-many",
|
|
2313
1626
|
"strength": "medium",
|
|
2314
|
-
"required": false
|
|
1627
|
+
"required": false,
|
|
1628
|
+
"description": "The test case checks that the countermeasure works."
|
|
2315
1629
|
},
|
|
2316
|
-
"testing.testcasesketch.tests.
|
|
2317
|
-
"id": "testing.testcasesketch.tests.
|
|
1630
|
+
"testing.testcasesketch.tests.product.feature": {
|
|
1631
|
+
"id": "testing.testcasesketch.tests.product.feature",
|
|
2318
1632
|
"source_spec_node_id": "testing.testcasesketch",
|
|
2319
1633
|
"source_layer": "testing",
|
|
2320
|
-
"destination_spec_node_id": "
|
|
2321
|
-
"destination_layer": "
|
|
1634
|
+
"destination_spec_node_id": "product.feature",
|
|
1635
|
+
"destination_layer": "product",
|
|
2322
1636
|
"predicate": "tests",
|
|
2323
1637
|
"cardinality": "many-to-many",
|
|
2324
1638
|
"strength": "medium",
|
|
2325
|
-
"required": false
|
|
1639
|
+
"required": false,
|
|
1640
|
+
"description": "The test case exercises the feature."
|
|
2326
1641
|
},
|
|
2327
1642
|
"testing.testcasesketch.tests.ux.librarycomponent": {
|
|
2328
1643
|
"id": "testing.testcasesketch.tests.ux.librarycomponent",
|
|
@@ -2333,7 +1648,8 @@
|
|
|
2333
1648
|
"predicate": "tests",
|
|
2334
1649
|
"cardinality": "many-to-many",
|
|
2335
1650
|
"strength": "medium",
|
|
2336
|
-
"required": false
|
|
1651
|
+
"required": false,
|
|
1652
|
+
"description": "The test case exercises the library component, such as a component test."
|
|
2337
1653
|
},
|
|
2338
1654
|
"testing.testcasesketch.tests.apm.metricinstrument": {
|
|
2339
1655
|
"id": "testing.testcasesketch.tests.apm.metricinstrument",
|
|
@@ -2344,7 +1660,8 @@
|
|
|
2344
1660
|
"predicate": "tests",
|
|
2345
1661
|
"cardinality": "many-to-many",
|
|
2346
1662
|
"strength": "medium",
|
|
2347
|
-
"required": false
|
|
1663
|
+
"required": false,
|
|
1664
|
+
"description": "The test case checks that the metric is emitted with the expected values."
|
|
2348
1665
|
},
|
|
2349
1666
|
"testing.testcasesketch.tests.navigation.navigationflow": {
|
|
2350
1667
|
"id": "testing.testcasesketch.tests.navigation.navigationflow",
|
|
@@ -2355,7 +1672,8 @@
|
|
|
2355
1672
|
"predicate": "tests",
|
|
2356
1673
|
"cardinality": "many-to-many",
|
|
2357
1674
|
"strength": "medium",
|
|
2358
|
-
"required": false
|
|
1675
|
+
"required": false,
|
|
1676
|
+
"description": "The test case walks through the navigation flow."
|
|
2359
1677
|
},
|
|
2360
1678
|
"testing.testcasesketch.tests.navigation.navigationguard": {
|
|
2361
1679
|
"id": "testing.testcasesketch.tests.navigation.navigationguard",
|
|
@@ -2366,7 +1684,8 @@
|
|
|
2366
1684
|
"predicate": "tests",
|
|
2367
1685
|
"cardinality": "many-to-many",
|
|
2368
1686
|
"strength": "medium",
|
|
2369
|
-
"required": false
|
|
1687
|
+
"required": false,
|
|
1688
|
+
"description": "The test case checks that the guard allows or blocks navigation."
|
|
2370
1689
|
},
|
|
2371
1690
|
"testing.testcasesketch.tests.api.operation": {
|
|
2372
1691
|
"id": "testing.testcasesketch.tests.api.operation",
|
|
@@ -2377,7 +1696,20 @@
|
|
|
2377
1696
|
"predicate": "tests",
|
|
2378
1697
|
"cardinality": "many-to-many",
|
|
2379
1698
|
"strength": "medium",
|
|
2380
|
-
"required": false
|
|
1699
|
+
"required": false,
|
|
1700
|
+
"description": "The test case calls the operation."
|
|
1701
|
+
},
|
|
1702
|
+
"testing.testcasesketch.tests.api.response": {
|
|
1703
|
+
"id": "testing.testcasesketch.tests.api.response",
|
|
1704
|
+
"source_spec_node_id": "testing.testcasesketch",
|
|
1705
|
+
"source_layer": "testing",
|
|
1706
|
+
"destination_spec_node_id": "api.response",
|
|
1707
|
+
"destination_layer": "api",
|
|
1708
|
+
"predicate": "tests",
|
|
1709
|
+
"cardinality": "many-to-many",
|
|
1710
|
+
"strength": "medium",
|
|
1711
|
+
"required": false,
|
|
1712
|
+
"description": "The test case checks the operation returns the response, such as its status and body shape."
|
|
2381
1713
|
},
|
|
2382
1714
|
"testing.testcasesketch.tests.navigation.route": {
|
|
2383
1715
|
"id": "testing.testcasesketch.tests.navigation.route",
|
|
@@ -2388,7 +1720,8 @@
|
|
|
2388
1720
|
"predicate": "tests",
|
|
2389
1721
|
"cardinality": "many-to-many",
|
|
2390
1722
|
"strength": "medium",
|
|
2391
|
-
"required": false
|
|
1723
|
+
"required": false,
|
|
1724
|
+
"description": "The test case navigates to the route."
|
|
2392
1725
|
},
|
|
2393
1726
|
"testing.testcasesketch.tests.data-model.schemadefinition": {
|
|
2394
1727
|
"id": "testing.testcasesketch.tests.data-model.schemadefinition",
|
|
@@ -2399,7 +1732,20 @@
|
|
|
2399
1732
|
"predicate": "tests",
|
|
2400
1733
|
"cardinality": "many-to-many",
|
|
2401
1734
|
"strength": "medium",
|
|
2402
|
-
"required": false
|
|
1735
|
+
"required": false,
|
|
1736
|
+
"description": "The test case checks values against the schema definition."
|
|
1737
|
+
},
|
|
1738
|
+
"testing.testcasesketch.tests.security.securitypolicy": {
|
|
1739
|
+
"id": "testing.testcasesketch.tests.security.securitypolicy",
|
|
1740
|
+
"source_spec_node_id": "testing.testcasesketch",
|
|
1741
|
+
"source_layer": "testing",
|
|
1742
|
+
"destination_spec_node_id": "security.securitypolicy",
|
|
1743
|
+
"destination_layer": "security",
|
|
1744
|
+
"predicate": "tests",
|
|
1745
|
+
"cardinality": "many-to-many",
|
|
1746
|
+
"strength": "medium",
|
|
1747
|
+
"required": false,
|
|
1748
|
+
"description": "The test case checks that the security policy is enforced."
|
|
2403
1749
|
},
|
|
2404
1750
|
"testing.testcasesketch.tests.security.threat": {
|
|
2405
1751
|
"id": "testing.testcasesketch.tests.security.threat",
|
|
@@ -2410,7 +1756,8 @@
|
|
|
2410
1756
|
"predicate": "tests",
|
|
2411
1757
|
"cardinality": "many-to-many",
|
|
2412
1758
|
"strength": "medium",
|
|
2413
|
-
"required": false
|
|
1759
|
+
"required": false,
|
|
1760
|
+
"description": "The test case attempts the threat, such as a penetration test."
|
|
2414
1761
|
},
|
|
2415
1762
|
"testing.testcasesketch.tests.data-store.validationrule": {
|
|
2416
1763
|
"id": "testing.testcasesketch.tests.data-store.validationrule",
|
|
@@ -2421,7 +1768,8 @@
|
|
|
2421
1768
|
"predicate": "tests",
|
|
2422
1769
|
"cardinality": "many-to-many",
|
|
2423
1770
|
"strength": "medium",
|
|
2424
|
-
"required": false
|
|
1771
|
+
"required": false,
|
|
1772
|
+
"description": "The test case checks that the store enforces the validation rule."
|
|
2425
1773
|
},
|
|
2426
1774
|
"testing.testcasesketch.tests.ux.view": {
|
|
2427
1775
|
"id": "testing.testcasesketch.tests.ux.view",
|
|
@@ -2432,7 +1780,8 @@
|
|
|
2432
1780
|
"predicate": "tests",
|
|
2433
1781
|
"cardinality": "many-to-many",
|
|
2434
1782
|
"strength": "medium",
|
|
2435
|
-
"required": false
|
|
1783
|
+
"required": false,
|
|
1784
|
+
"description": "The test case renders or interacts with the view."
|
|
2436
1785
|
},
|
|
2437
1786
|
"testing.testcasesketch.validates.testing.coveragerequirement": {
|
|
2438
1787
|
"id": "testing.testcasesketch.validates.testing.coveragerequirement",
|
|
@@ -2443,227 +1792,92 @@
|
|
|
2443
1792
|
"predicate": "validates",
|
|
2444
1793
|
"cardinality": "many-to-many",
|
|
2445
1794
|
"strength": "medium",
|
|
2446
|
-
"required": false
|
|
2447
|
-
|
|
2448
|
-
"testing.testcasesketch.validates.api.response": {
|
|
2449
|
-
"id": "testing.testcasesketch.validates.api.response",
|
|
2450
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2451
|
-
"source_layer": "testing",
|
|
2452
|
-
"destination_spec_node_id": "api.response",
|
|
2453
|
-
"destination_layer": "api",
|
|
2454
|
-
"predicate": "validates",
|
|
2455
|
-
"cardinality": "many-to-many",
|
|
2456
|
-
"strength": "medium",
|
|
2457
|
-
"required": false
|
|
2458
|
-
},
|
|
2459
|
-
"testing.testcasesketch.validates.security.securitypolicy": {
|
|
2460
|
-
"id": "testing.testcasesketch.validates.security.securitypolicy",
|
|
2461
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2462
|
-
"source_layer": "testing",
|
|
2463
|
-
"destination_spec_node_id": "security.securitypolicy",
|
|
2464
|
-
"destination_layer": "security",
|
|
2465
|
-
"predicate": "validates",
|
|
2466
|
-
"cardinality": "many-to-many",
|
|
2467
|
-
"strength": "medium",
|
|
2468
|
-
"required": false
|
|
2469
|
-
},
|
|
2470
|
-
"testing.testcasesketch.validates.testing.testcoveragetarget": {
|
|
2471
|
-
"id": "testing.testcasesketch.validates.testing.testcoveragetarget",
|
|
2472
|
-
"source_spec_node_id": "testing.testcasesketch",
|
|
2473
|
-
"source_layer": "testing",
|
|
2474
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
2475
|
-
"destination_layer": "testing",
|
|
2476
|
-
"predicate": "validates",
|
|
2477
|
-
"cardinality": "many-to-many",
|
|
2478
|
-
"strength": "medium",
|
|
2479
|
-
"required": false
|
|
1795
|
+
"required": false,
|
|
1796
|
+
"description": "The test case exercises the coverage requirement, counting toward it when implemented."
|
|
2480
1797
|
},
|
|
2481
|
-
"testing.testcoveragemodel.
|
|
2482
|
-
"id": "testing.testcoveragemodel.
|
|
1798
|
+
"testing.testcoveragemodel.composes.testing.contextvariation": {
|
|
1799
|
+
"id": "testing.testcoveragemodel.composes.testing.contextvariation",
|
|
2483
1800
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2484
1801
|
"source_layer": "testing",
|
|
2485
1802
|
"destination_spec_node_id": "testing.contextvariation",
|
|
2486
1803
|
"destination_layer": "testing",
|
|
2487
|
-
"predicate": "
|
|
2488
|
-
"cardinality": "one-to-many",
|
|
2489
|
-
"strength": "medium",
|
|
2490
|
-
"required": false
|
|
2491
|
-
},
|
|
2492
|
-
"testing.testcoveragemodel.aggregates.inputspacepartition": {
|
|
2493
|
-
"id": "testing.testcoveragemodel.aggregates.inputspacepartition",
|
|
2494
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2495
|
-
"source_layer": "testing",
|
|
2496
|
-
"destination_spec_node_id": "testing.inputspacepartition",
|
|
2497
|
-
"destination_layer": "testing",
|
|
2498
|
-
"predicate": "aggregates",
|
|
2499
|
-
"cardinality": "one-to-many",
|
|
2500
|
-
"strength": "medium",
|
|
2501
|
-
"required": false
|
|
2502
|
-
},
|
|
2503
|
-
"testing.testcoveragemodel.aggregates.testcasesketch": {
|
|
2504
|
-
"id": "testing.testcoveragemodel.aggregates.testcasesketch",
|
|
2505
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2506
|
-
"source_layer": "testing",
|
|
2507
|
-
"destination_spec_node_id": "testing.testcasesketch",
|
|
2508
|
-
"destination_layer": "testing",
|
|
2509
|
-
"predicate": "aggregates",
|
|
1804
|
+
"predicate": "composes",
|
|
2510
1805
|
"cardinality": "one-to-many",
|
|
2511
1806
|
"strength": "medium",
|
|
2512
|
-
"required": false
|
|
2513
|
-
|
|
2514
|
-
"testing.testcoveragemodel.aggregates.testing.testcoveragetarget": {
|
|
2515
|
-
"id": "testing.testcoveragemodel.aggregates.testing.testcoveragetarget",
|
|
2516
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2517
|
-
"source_layer": "testing",
|
|
2518
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
2519
|
-
"destination_layer": "testing",
|
|
2520
|
-
"predicate": "aggregates",
|
|
2521
|
-
"cardinality": "many-to-many",
|
|
2522
|
-
"strength": "medium",
|
|
2523
|
-
"required": false
|
|
1807
|
+
"required": false,
|
|
1808
|
+
"description": "The context variation is defined in the model and shared by its targets, requirements and test cases."
|
|
2524
1809
|
},
|
|
2525
1810
|
"testing.testcoveragemodel.composes.testing.coverageexclusion": {
|
|
2526
1811
|
"id": "testing.testcoveragemodel.composes.testing.coverageexclusion",
|
|
2527
1812
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2528
1813
|
"source_layer": "testing",
|
|
2529
|
-
"destination_spec_node_id": "testing.coverageexclusion",
|
|
2530
|
-
"destination_layer": "testing",
|
|
2531
|
-
"predicate": "composes",
|
|
2532
|
-
"cardinality": "many-to-many",
|
|
2533
|
-
"strength": "medium",
|
|
2534
|
-
"required": false
|
|
2535
|
-
},
|
|
2536
|
-
"testing.testcoveragemodel.composes.testing.coveragerequirement": {
|
|
2537
|
-
"id": "testing.testcoveragemodel.composes.testing.coveragerequirement",
|
|
2538
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2539
|
-
"source_layer": "testing",
|
|
2540
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
2541
|
-
"destination_layer": "testing",
|
|
2542
|
-
"predicate": "composes",
|
|
2543
|
-
"cardinality": "many-to-many",
|
|
2544
|
-
"strength": "medium",
|
|
2545
|
-
"required": false
|
|
2546
|
-
},
|
|
2547
|
-
"testing.testcoveragemodel.composes.testing.coveragesummary": {
|
|
2548
|
-
"id": "testing.testcoveragemodel.composes.testing.coveragesummary",
|
|
2549
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2550
|
-
"source_layer": "testing",
|
|
2551
|
-
"destination_spec_node_id": "testing.coveragesummary",
|
|
2552
|
-
"destination_layer": "testing",
|
|
2553
|
-
"predicate": "composes",
|
|
2554
|
-
"cardinality": "many-to-many",
|
|
2555
|
-
"strength": "medium",
|
|
2556
|
-
"required": false
|
|
2557
|
-
},
|
|
2558
|
-
"testing.testcoveragemodel.composes.testing.inputpartitionselection": {
|
|
2559
|
-
"id": "testing.testcoveragemodel.composes.testing.inputpartitionselection",
|
|
2560
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2561
|
-
"source_layer": "testing",
|
|
2562
|
-
"destination_spec_node_id": "testing.inputpartitionselection",
|
|
2563
|
-
"destination_layer": "testing",
|
|
2564
|
-
"predicate": "composes",
|
|
2565
|
-
"cardinality": "many-to-many",
|
|
2566
|
-
"strength": "medium",
|
|
2567
|
-
"required": false
|
|
2568
|
-
},
|
|
2569
|
-
"testing.testcoveragemodel.composes.testing.outcomecategory": {
|
|
2570
|
-
"id": "testing.testcoveragemodel.composes.testing.outcomecategory",
|
|
2571
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2572
|
-
"source_layer": "testing",
|
|
2573
|
-
"destination_spec_node_id": "testing.outcomecategory",
|
|
2574
|
-
"destination_layer": "testing",
|
|
2575
|
-
"predicate": "composes",
|
|
2576
|
-
"cardinality": "many-to-many",
|
|
2577
|
-
"strength": "medium",
|
|
2578
|
-
"required": false
|
|
2579
|
-
},
|
|
2580
|
-
"testing.testcoveragemodel.composes.testing.testcoveragetarget": {
|
|
2581
|
-
"id": "testing.testcoveragemodel.composes.testing.testcoveragetarget",
|
|
2582
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2583
|
-
"source_layer": "testing",
|
|
2584
|
-
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
2585
|
-
"destination_layer": "testing",
|
|
2586
|
-
"predicate": "composes",
|
|
2587
|
-
"cardinality": "many-to-many",
|
|
2588
|
-
"strength": "medium",
|
|
2589
|
-
"required": false
|
|
2590
|
-
},
|
|
2591
|
-
"testing.testcoveragemodel.constrained-by.motivation.constraint": {
|
|
2592
|
-
"id": "testing.testcoveragemodel.constrained-by.motivation.constraint",
|
|
2593
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2594
|
-
"source_layer": "testing",
|
|
2595
|
-
"destination_spec_node_id": "motivation.constraint",
|
|
2596
|
-
"destination_layer": "motivation",
|
|
2597
|
-
"predicate": "constrained-by",
|
|
2598
|
-
"cardinality": "many-to-many",
|
|
2599
|
-
"strength": "medium",
|
|
2600
|
-
"required": false
|
|
2601
|
-
},
|
|
2602
|
-
"testing.testcoveragemodel.covers.application.applicationcomponent": {
|
|
2603
|
-
"id": "testing.testcoveragemodel.covers.application.applicationcomponent",
|
|
2604
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2605
|
-
"source_layer": "testing",
|
|
2606
|
-
"destination_spec_node_id": "application.applicationcomponent",
|
|
2607
|
-
"destination_layer": "application",
|
|
2608
|
-
"predicate": "covers",
|
|
1814
|
+
"destination_spec_node_id": "testing.coverageexclusion",
|
|
1815
|
+
"destination_layer": "testing",
|
|
1816
|
+
"predicate": "composes",
|
|
2609
1817
|
"cardinality": "many-to-many",
|
|
2610
1818
|
"strength": "medium",
|
|
2611
|
-
"required": false
|
|
1819
|
+
"required": false,
|
|
1820
|
+
"description": "The exclusion is a governance decision recorded in the model."
|
|
2612
1821
|
},
|
|
2613
|
-
"testing.testcoveragemodel.
|
|
2614
|
-
"id": "testing.testcoveragemodel.
|
|
1822
|
+
"testing.testcoveragemodel.composes.testing.coveragesummary": {
|
|
1823
|
+
"id": "testing.testcoveragemodel.composes.testing.coveragesummary",
|
|
2615
1824
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2616
1825
|
"source_layer": "testing",
|
|
2617
|
-
"destination_spec_node_id": "
|
|
2618
|
-
"destination_layer": "
|
|
2619
|
-
"predicate": "
|
|
1826
|
+
"destination_spec_node_id": "testing.coveragesummary",
|
|
1827
|
+
"destination_layer": "testing",
|
|
1828
|
+
"predicate": "composes",
|
|
2620
1829
|
"cardinality": "many-to-many",
|
|
2621
1830
|
"strength": "medium",
|
|
2622
|
-
"required": false
|
|
1831
|
+
"required": false,
|
|
1832
|
+
"description": "The summary reports on the model at a point in time."
|
|
2623
1833
|
},
|
|
2624
|
-
"testing.testcoveragemodel.
|
|
2625
|
-
"id": "testing.testcoveragemodel.
|
|
1834
|
+
"testing.testcoveragemodel.composes.testing.environmentfactor": {
|
|
1835
|
+
"id": "testing.testcoveragemodel.composes.testing.environmentfactor",
|
|
2626
1836
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2627
1837
|
"source_layer": "testing",
|
|
2628
|
-
"destination_spec_node_id": "
|
|
2629
|
-
"destination_layer": "
|
|
2630
|
-
"predicate": "
|
|
1838
|
+
"destination_spec_node_id": "testing.environmentfactor",
|
|
1839
|
+
"destination_layer": "testing",
|
|
1840
|
+
"predicate": "composes",
|
|
2631
1841
|
"cardinality": "many-to-many",
|
|
2632
1842
|
"strength": "medium",
|
|
2633
|
-
"required": false
|
|
1843
|
+
"required": false,
|
|
1844
|
+
"description": "The environment factor is defined in the model and shared by its context variations."
|
|
2634
1845
|
},
|
|
2635
|
-
"testing.testcoveragemodel.
|
|
2636
|
-
"id": "testing.testcoveragemodel.
|
|
1846
|
+
"testing.testcoveragemodel.composes.testing.inputspacepartition": {
|
|
1847
|
+
"id": "testing.testcoveragemodel.composes.testing.inputspacepartition",
|
|
2637
1848
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2638
1849
|
"source_layer": "testing",
|
|
2639
|
-
"destination_spec_node_id": "
|
|
2640
|
-
"destination_layer": "
|
|
2641
|
-
"predicate": "
|
|
2642
|
-
"cardinality": "
|
|
1850
|
+
"destination_spec_node_id": "testing.inputspacepartition",
|
|
1851
|
+
"destination_layer": "testing",
|
|
1852
|
+
"predicate": "composes",
|
|
1853
|
+
"cardinality": "one-to-many",
|
|
2643
1854
|
"strength": "medium",
|
|
2644
|
-
"required": false
|
|
1855
|
+
"required": false,
|
|
1856
|
+
"description": "The partition is defined in the model and shared by the target input fields that use it."
|
|
2645
1857
|
},
|
|
2646
|
-
"testing.testcoveragemodel.
|
|
2647
|
-
"id": "testing.testcoveragemodel.
|
|
1858
|
+
"testing.testcoveragemodel.composes.testing.testcoveragetarget": {
|
|
1859
|
+
"id": "testing.testcoveragemodel.composes.testing.testcoveragetarget",
|
|
2648
1860
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2649
1861
|
"source_layer": "testing",
|
|
2650
|
-
"destination_spec_node_id": "
|
|
2651
|
-
"destination_layer": "
|
|
2652
|
-
"predicate": "
|
|
1862
|
+
"destination_spec_node_id": "testing.testcoveragetarget",
|
|
1863
|
+
"destination_layer": "testing",
|
|
1864
|
+
"predicate": "composes",
|
|
2653
1865
|
"cardinality": "many-to-many",
|
|
2654
1866
|
"strength": "medium",
|
|
2655
|
-
"required": false
|
|
1867
|
+
"required": false,
|
|
1868
|
+
"description": "The target is in the model's test scope."
|
|
2656
1869
|
},
|
|
2657
|
-
"testing.testcoveragemodel.covers.
|
|
2658
|
-
"id": "testing.testcoveragemodel.covers.
|
|
1870
|
+
"testing.testcoveragemodel.covers.application.applicationcomponent": {
|
|
1871
|
+
"id": "testing.testcoveragemodel.covers.application.applicationcomponent",
|
|
2659
1872
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2660
1873
|
"source_layer": "testing",
|
|
2661
|
-
"destination_spec_node_id": "
|
|
2662
|
-
"destination_layer": "
|
|
1874
|
+
"destination_spec_node_id": "application.applicationcomponent",
|
|
1875
|
+
"destination_layer": "application",
|
|
2663
1876
|
"predicate": "covers",
|
|
2664
1877
|
"cardinality": "many-to-many",
|
|
2665
1878
|
"strength": "medium",
|
|
2666
|
-
"required": false
|
|
1879
|
+
"required": false,
|
|
1880
|
+
"description": "The model is the coverage plan for the application component."
|
|
2667
1881
|
},
|
|
2668
1882
|
"testing.testcoveragemodel.covers.api.openapidocument": {
|
|
2669
1883
|
"id": "testing.testcoveragemodel.covers.api.openapidocument",
|
|
@@ -2674,29 +1888,8 @@
|
|
|
2674
1888
|
"predicate": "covers",
|
|
2675
1889
|
"cardinality": "many-to-many",
|
|
2676
1890
|
"strength": "medium",
|
|
2677
|
-
"required": false
|
|
2678
|
-
|
|
2679
|
-
"testing.testcoveragemodel.covers.navigation.route": {
|
|
2680
|
-
"id": "testing.testcoveragemodel.covers.navigation.route",
|
|
2681
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2682
|
-
"source_layer": "testing",
|
|
2683
|
-
"destination_spec_node_id": "navigation.route",
|
|
2684
|
-
"destination_layer": "navigation",
|
|
2685
|
-
"predicate": "covers",
|
|
2686
|
-
"cardinality": "many-to-many",
|
|
2687
|
-
"strength": "medium",
|
|
2688
|
-
"required": false
|
|
2689
|
-
},
|
|
2690
|
-
"testing.testcoveragemodel.covers.security.securitypolicy": {
|
|
2691
|
-
"id": "testing.testcoveragemodel.covers.security.securitypolicy",
|
|
2692
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2693
|
-
"source_layer": "testing",
|
|
2694
|
-
"destination_spec_node_id": "security.securitypolicy",
|
|
2695
|
-
"destination_layer": "security",
|
|
2696
|
-
"predicate": "covers",
|
|
2697
|
-
"cardinality": "many-to-many",
|
|
2698
|
-
"strength": "medium",
|
|
2699
|
-
"required": false
|
|
1891
|
+
"required": false,
|
|
1892
|
+
"description": "The model is the coverage plan for the API document."
|
|
2700
1893
|
},
|
|
2701
1894
|
"testing.testcoveragemodel.covers.ux.uxapplication": {
|
|
2702
1895
|
"id": "testing.testcoveragemodel.covers.ux.uxapplication",
|
|
@@ -2707,29 +1900,8 @@
|
|
|
2707
1900
|
"predicate": "covers",
|
|
2708
1901
|
"cardinality": "many-to-many",
|
|
2709
1902
|
"strength": "medium",
|
|
2710
|
-
"required": false
|
|
2711
|
-
|
|
2712
|
-
"testing.testcoveragemodel.fulfills-requirements.motivation.requirement": {
|
|
2713
|
-
"id": "testing.testcoveragemodel.fulfills-requirements.motivation.requirement",
|
|
2714
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2715
|
-
"source_layer": "testing",
|
|
2716
|
-
"destination_spec_node_id": "motivation.requirement",
|
|
2717
|
-
"destination_layer": "motivation",
|
|
2718
|
-
"predicate": "fulfills-requirements",
|
|
2719
|
-
"cardinality": "many-to-many",
|
|
2720
|
-
"strength": "high",
|
|
2721
|
-
"required": false
|
|
2722
|
-
},
|
|
2723
|
-
"testing.testcoveragemodel.governed-by-principles.motivation.principle": {
|
|
2724
|
-
"id": "testing.testcoveragemodel.governed-by-principles.motivation.principle",
|
|
2725
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2726
|
-
"source_layer": "testing",
|
|
2727
|
-
"destination_spec_node_id": "motivation.principle",
|
|
2728
|
-
"destination_layer": "motivation",
|
|
2729
|
-
"predicate": "governed-by-principles",
|
|
2730
|
-
"cardinality": "many-to-many",
|
|
2731
|
-
"strength": "high",
|
|
2732
|
-
"required": false
|
|
1903
|
+
"required": false,
|
|
1904
|
+
"description": "The model is the coverage plan for the UX application."
|
|
2733
1905
|
},
|
|
2734
1906
|
"testing.testcoveragemodel.measures-outcome.motivation.outcome": {
|
|
2735
1907
|
"id": "testing.testcoveragemodel.measures-outcome.motivation.outcome",
|
|
@@ -2740,106 +1912,56 @@
|
|
|
2740
1912
|
"predicate": "measures-outcome",
|
|
2741
1913
|
"cardinality": "many-to-many",
|
|
2742
1914
|
"strength": "medium",
|
|
2743
|
-
"required": false
|
|
2744
|
-
|
|
2745
|
-
"testing.testcoveragemodel.references.data-store.database": {
|
|
2746
|
-
"id": "testing.testcoveragemodel.references.data-store.database",
|
|
2747
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2748
|
-
"source_layer": "testing",
|
|
2749
|
-
"destination_spec_node_id": "data-store.database",
|
|
2750
|
-
"destination_layer": "data-store",
|
|
2751
|
-
"predicate": "references",
|
|
2752
|
-
"cardinality": "many-to-many",
|
|
2753
|
-
"strength": "medium",
|
|
2754
|
-
"required": false
|
|
1915
|
+
"required": false,
|
|
1916
|
+
"description": "The model's coverage shows progress toward the outcome, such as 'no untested payment paths'."
|
|
2755
1917
|
},
|
|
2756
|
-
"testing.testcoveragemodel.
|
|
2757
|
-
"id": "testing.testcoveragemodel.
|
|
1918
|
+
"testing.testcoveragemodel.satisfies.motivation.constraint": {
|
|
1919
|
+
"id": "testing.testcoveragemodel.satisfies.motivation.constraint",
|
|
2758
1920
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2759
1921
|
"source_layer": "testing",
|
|
2760
|
-
"destination_spec_node_id": "motivation.
|
|
1922
|
+
"destination_spec_node_id": "motivation.constraint",
|
|
2761
1923
|
"destination_layer": "motivation",
|
|
2762
|
-
"predicate": "
|
|
1924
|
+
"predicate": "satisfies",
|
|
2763
1925
|
"cardinality": "many-to-many",
|
|
2764
1926
|
"strength": "medium",
|
|
2765
|
-
"required": false
|
|
1927
|
+
"required": false,
|
|
1928
|
+
"description": "The coverage model respects the constraint, such as a deadline or budget that bounds how much is tested."
|
|
2766
1929
|
},
|
|
2767
|
-
"testing.testcoveragemodel.
|
|
2768
|
-
"id": "testing.testcoveragemodel.
|
|
1930
|
+
"testing.testcoveragemodel.satisfies.motivation.principle": {
|
|
1931
|
+
"id": "testing.testcoveragemodel.satisfies.motivation.principle",
|
|
2769
1932
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2770
1933
|
"source_layer": "testing",
|
|
2771
|
-
"destination_spec_node_id": "
|
|
2772
|
-
"destination_layer": "
|
|
2773
|
-
"predicate": "
|
|
2774
|
-
"cardinality": "many-to-many",
|
|
2775
|
-
"strength": "medium",
|
|
2776
|
-
"required": false
|
|
2777
|
-
},
|
|
2778
|
-
"testing.testcoveragemodel.references.security.threat": {
|
|
2779
|
-
"id": "testing.testcoveragemodel.references.security.threat",
|
|
2780
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2781
|
-
"source_layer": "testing",
|
|
2782
|
-
"destination_spec_node_id": "security.threat",
|
|
2783
|
-
"destination_layer": "security",
|
|
2784
|
-
"predicate": "references",
|
|
1934
|
+
"destination_spec_node_id": "motivation.principle",
|
|
1935
|
+
"destination_layer": "motivation",
|
|
1936
|
+
"predicate": "satisfies",
|
|
2785
1937
|
"cardinality": "many-to-many",
|
|
2786
|
-
"strength": "
|
|
2787
|
-
"required": false
|
|
1938
|
+
"strength": "high",
|
|
1939
|
+
"required": false,
|
|
1940
|
+
"description": "The coverage model follows the principle, such as 'test at the boundary' guiding which partitions it defines."
|
|
2788
1941
|
},
|
|
2789
|
-
"testing.testcoveragemodel.
|
|
2790
|
-
"id": "testing.testcoveragemodel.
|
|
1942
|
+
"testing.testcoveragemodel.satisfies.motivation.requirement": {
|
|
1943
|
+
"id": "testing.testcoveragemodel.satisfies.motivation.requirement",
|
|
2791
1944
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2792
1945
|
"source_layer": "testing",
|
|
2793
|
-
"destination_spec_node_id": "
|
|
2794
|
-
"destination_layer": "
|
|
2795
|
-
"predicate": "
|
|
1946
|
+
"destination_spec_node_id": "motivation.requirement",
|
|
1947
|
+
"destination_layer": "motivation",
|
|
1948
|
+
"predicate": "satisfies",
|
|
2796
1949
|
"cardinality": "many-to-many",
|
|
2797
|
-
"strength": "
|
|
2798
|
-
"required": false
|
|
1950
|
+
"strength": "high",
|
|
1951
|
+
"required": false,
|
|
1952
|
+
"description": "The coverage model plans the testing that shows the requirement is met."
|
|
2799
1953
|
},
|
|
2800
|
-
"testing.testcoveragemodel.supports
|
|
2801
|
-
"id": "testing.testcoveragemodel.supports
|
|
1954
|
+
"testing.testcoveragemodel.supports.motivation.goal": {
|
|
1955
|
+
"id": "testing.testcoveragemodel.supports.motivation.goal",
|
|
2802
1956
|
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2803
1957
|
"source_layer": "testing",
|
|
2804
1958
|
"destination_spec_node_id": "motivation.goal",
|
|
2805
1959
|
"destination_layer": "motivation",
|
|
2806
|
-
"predicate": "supports
|
|
1960
|
+
"predicate": "supports",
|
|
2807
1961
|
"cardinality": "many-to-many",
|
|
2808
1962
|
"strength": "high",
|
|
2809
|
-
"required": false
|
|
2810
|
-
|
|
2811
|
-
"testing.testcoveragemodel.tests.technology.systemsoftware": {
|
|
2812
|
-
"id": "testing.testcoveragemodel.tests.technology.systemsoftware",
|
|
2813
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2814
|
-
"source_layer": "testing",
|
|
2815
|
-
"destination_spec_node_id": "technology.systemsoftware",
|
|
2816
|
-
"destination_layer": "technology",
|
|
2817
|
-
"predicate": "tests",
|
|
2818
|
-
"cardinality": "many-to-many",
|
|
2819
|
-
"strength": "medium",
|
|
2820
|
-
"required": false
|
|
2821
|
-
},
|
|
2822
|
-
"testing.testcoveragemodel.tests.technology.technologyservice": {
|
|
2823
|
-
"id": "testing.testcoveragemodel.tests.technology.technologyservice",
|
|
2824
|
-
"source_spec_node_id": "testing.testcoveragemodel",
|
|
2825
|
-
"source_layer": "testing",
|
|
2826
|
-
"destination_spec_node_id": "technology.technologyservice",
|
|
2827
|
-
"destination_layer": "technology",
|
|
2828
|
-
"predicate": "tests",
|
|
2829
|
-
"cardinality": "many-to-many",
|
|
2830
|
-
"strength": "medium",
|
|
2831
|
-
"required": false
|
|
2832
|
-
},
|
|
2833
|
-
"testing.testcoveragetarget.aggregates.contextvariation": {
|
|
2834
|
-
"id": "testing.testcoveragetarget.aggregates.contextvariation",
|
|
2835
|
-
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2836
|
-
"source_layer": "testing",
|
|
2837
|
-
"destination_spec_node_id": "testing.contextvariation",
|
|
2838
|
-
"destination_layer": "testing",
|
|
2839
|
-
"predicate": "aggregates",
|
|
2840
|
-
"cardinality": "many-to-many",
|
|
2841
|
-
"strength": "medium",
|
|
2842
|
-
"required": false
|
|
1963
|
+
"required": false,
|
|
1964
|
+
"description": "The coverage plan contributes to the goal, such as release confidence."
|
|
2843
1965
|
},
|
|
2844
1966
|
"testing.testcoveragetarget.composes.testing.coveragerequirement": {
|
|
2845
1967
|
"id": "testing.testcoveragetarget.composes.testing.coveragerequirement",
|
|
@@ -2850,18 +1972,8 @@
|
|
|
2850
1972
|
"predicate": "composes",
|
|
2851
1973
|
"cardinality": "many-to-many",
|
|
2852
1974
|
"strength": "medium",
|
|
2853
|
-
"required": false
|
|
2854
|
-
|
|
2855
|
-
"testing.testcoveragetarget.composes.testing.inputpartitionselection": {
|
|
2856
|
-
"id": "testing.testcoveragetarget.composes.testing.inputpartitionselection",
|
|
2857
|
-
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2858
|
-
"source_layer": "testing",
|
|
2859
|
-
"destination_spec_node_id": "testing.inputpartitionselection",
|
|
2860
|
-
"destination_layer": "testing",
|
|
2861
|
-
"predicate": "composes",
|
|
2862
|
-
"cardinality": "many-to-many",
|
|
2863
|
-
"strength": "medium",
|
|
2864
|
-
"required": false
|
|
1975
|
+
"required": false,
|
|
1976
|
+
"description": "The requirement states a coverage criterion for the target and exists only within it."
|
|
2865
1977
|
},
|
|
2866
1978
|
"testing.testcoveragetarget.composes.testing.outcomecategory": {
|
|
2867
1979
|
"id": "testing.testcoveragetarget.composes.testing.outcomecategory",
|
|
@@ -2872,7 +1984,8 @@
|
|
|
2872
1984
|
"predicate": "composes",
|
|
2873
1985
|
"cardinality": "many-to-many",
|
|
2874
1986
|
"strength": "medium",
|
|
2875
|
-
"required": false
|
|
1987
|
+
"required": false,
|
|
1988
|
+
"description": "The outcome category is a result class the target can produce."
|
|
2876
1989
|
},
|
|
2877
1990
|
"testing.testcoveragetarget.composes.testing.targetinputfield": {
|
|
2878
1991
|
"id": "testing.testcoveragetarget.composes.testing.targetinputfield",
|
|
@@ -2883,238 +1996,200 @@
|
|
|
2883
1996
|
"predicate": "composes",
|
|
2884
1997
|
"cardinality": "many-to-many",
|
|
2885
1998
|
"strength": "medium",
|
|
2886
|
-
"required": false
|
|
1999
|
+
"required": false,
|
|
2000
|
+
"description": "The input field belongs to the target's artifact."
|
|
2887
2001
|
},
|
|
2888
|
-
"testing.testcoveragetarget.composes.testing.
|
|
2889
|
-
"id": "testing.testcoveragetarget.composes.testing.
|
|
2002
|
+
"testing.testcoveragetarget.composes.testing.testcasesketch": {
|
|
2003
|
+
"id": "testing.testcoveragetarget.composes.testing.testcasesketch",
|
|
2890
2004
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2891
2005
|
"source_layer": "testing",
|
|
2892
|
-
"destination_spec_node_id": "testing.
|
|
2006
|
+
"destination_spec_node_id": "testing.testcasesketch",
|
|
2893
2007
|
"destination_layer": "testing",
|
|
2894
2008
|
"predicate": "composes",
|
|
2895
2009
|
"cardinality": "many-to-many",
|
|
2896
2010
|
"strength": "medium",
|
|
2897
|
-
"required": false
|
|
2011
|
+
"required": false,
|
|
2012
|
+
"description": "The test case is designed for the target."
|
|
2898
2013
|
},
|
|
2899
|
-
"testing.testcoveragetarget.covers.application.
|
|
2900
|
-
"id": "testing.testcoveragetarget.covers.application.
|
|
2014
|
+
"testing.testcoveragetarget.covers.application.applicationcomponent": {
|
|
2015
|
+
"id": "testing.testcoveragetarget.covers.application.applicationcomponent",
|
|
2901
2016
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2902
2017
|
"source_layer": "testing",
|
|
2903
|
-
"destination_spec_node_id": "application.
|
|
2018
|
+
"destination_spec_node_id": "application.applicationcomponent",
|
|
2904
2019
|
"destination_layer": "application",
|
|
2905
2020
|
"predicate": "covers",
|
|
2906
2021
|
"cardinality": "many-to-many",
|
|
2907
2022
|
"strength": "medium",
|
|
2908
|
-
"required": false
|
|
2023
|
+
"required": false,
|
|
2024
|
+
"description": "The target puts the application component in test scope."
|
|
2909
2025
|
},
|
|
2910
|
-
"testing.testcoveragetarget.covers.
|
|
2911
|
-
"id": "testing.testcoveragetarget.covers.
|
|
2026
|
+
"testing.testcoveragetarget.covers.application.applicationservice": {
|
|
2027
|
+
"id": "testing.testcoveragetarget.covers.application.applicationservice",
|
|
2912
2028
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2913
2029
|
"source_layer": "testing",
|
|
2914
|
-
"destination_spec_node_id": "
|
|
2915
|
-
"destination_layer": "
|
|
2030
|
+
"destination_spec_node_id": "application.applicationservice",
|
|
2031
|
+
"destination_layer": "application",
|
|
2916
2032
|
"predicate": "covers",
|
|
2917
2033
|
"cardinality": "many-to-many",
|
|
2918
2034
|
"strength": "medium",
|
|
2919
|
-
"required": false
|
|
2035
|
+
"required": false,
|
|
2036
|
+
"description": "The target puts the application service in test scope."
|
|
2920
2037
|
},
|
|
2921
|
-
"testing.testcoveragetarget.covers.
|
|
2922
|
-
"id": "testing.testcoveragetarget.covers.
|
|
2038
|
+
"testing.testcoveragetarget.covers.business.businessprocess": {
|
|
2039
|
+
"id": "testing.testcoveragetarget.covers.business.businessprocess",
|
|
2923
2040
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2924
2041
|
"source_layer": "testing",
|
|
2925
|
-
"destination_spec_node_id": "
|
|
2926
|
-
"destination_layer": "
|
|
2042
|
+
"destination_spec_node_id": "business.businessprocess",
|
|
2043
|
+
"destination_layer": "business",
|
|
2927
2044
|
"predicate": "covers",
|
|
2928
2045
|
"cardinality": "many-to-many",
|
|
2929
2046
|
"strength": "medium",
|
|
2930
|
-
"required": false
|
|
2047
|
+
"required": false,
|
|
2048
|
+
"description": "The target puts the business workflow in test scope."
|
|
2931
2049
|
},
|
|
2932
|
-
"testing.testcoveragetarget.covers.
|
|
2933
|
-
"id": "testing.testcoveragetarget.covers.
|
|
2050
|
+
"testing.testcoveragetarget.covers.data-store.collection": {
|
|
2051
|
+
"id": "testing.testcoveragetarget.covers.data-store.collection",
|
|
2934
2052
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2935
2053
|
"source_layer": "testing",
|
|
2936
|
-
"destination_spec_node_id": "
|
|
2937
|
-
"destination_layer": "
|
|
2054
|
+
"destination_spec_node_id": "data-store.collection",
|
|
2055
|
+
"destination_layer": "data-store",
|
|
2938
2056
|
"predicate": "covers",
|
|
2939
2057
|
"cardinality": "many-to-many",
|
|
2940
2058
|
"strength": "medium",
|
|
2941
|
-
"required": false
|
|
2942
|
-
|
|
2943
|
-
"testing.testcoveragetarget.flows-to.testing.coveragerequirement": {
|
|
2944
|
-
"id": "testing.testcoveragetarget.flows-to.testing.coveragerequirement",
|
|
2945
|
-
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2946
|
-
"source_layer": "testing",
|
|
2947
|
-
"destination_spec_node_id": "testing.coveragerequirement",
|
|
2948
|
-
"destination_layer": "testing",
|
|
2949
|
-
"predicate": "flows-to",
|
|
2950
|
-
"cardinality": "many-to-many",
|
|
2951
|
-
"strength": "medium",
|
|
2952
|
-
"required": false
|
|
2953
|
-
},
|
|
2954
|
-
"testing.testcoveragetarget.flows-to.testing.testcasesketch": {
|
|
2955
|
-
"id": "testing.testcoveragetarget.flows-to.testing.testcasesketch",
|
|
2956
|
-
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2957
|
-
"source_layer": "testing",
|
|
2958
|
-
"destination_spec_node_id": "testing.testcasesketch",
|
|
2959
|
-
"destination_layer": "testing",
|
|
2960
|
-
"predicate": "flows-to",
|
|
2961
|
-
"cardinality": "many-to-many",
|
|
2962
|
-
"strength": "medium",
|
|
2963
|
-
"required": false
|
|
2964
|
-
},
|
|
2965
|
-
"testing.testcoveragetarget.fulfills-requirements.motivation.requirement": {
|
|
2966
|
-
"id": "testing.testcoveragetarget.fulfills-requirements.motivation.requirement",
|
|
2967
|
-
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2968
|
-
"source_layer": "testing",
|
|
2969
|
-
"destination_spec_node_id": "motivation.requirement",
|
|
2970
|
-
"destination_layer": "motivation",
|
|
2971
|
-
"predicate": "fulfills-requirements",
|
|
2972
|
-
"cardinality": "many-to-many",
|
|
2973
|
-
"strength": "medium",
|
|
2974
|
-
"required": false
|
|
2059
|
+
"required": false,
|
|
2060
|
+
"description": "The target puts the collection in test scope, such as a data migration."
|
|
2975
2061
|
},
|
|
2976
|
-
"testing.testcoveragetarget.
|
|
2977
|
-
"id": "testing.testcoveragetarget.
|
|
2062
|
+
"testing.testcoveragetarget.covers.product.feature": {
|
|
2063
|
+
"id": "testing.testcoveragetarget.covers.product.feature",
|
|
2978
2064
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2979
2065
|
"source_layer": "testing",
|
|
2980
|
-
"destination_spec_node_id": "
|
|
2981
|
-
"destination_layer": "
|
|
2982
|
-
"predicate": "
|
|
2066
|
+
"destination_spec_node_id": "product.feature",
|
|
2067
|
+
"destination_layer": "product",
|
|
2068
|
+
"predicate": "covers",
|
|
2983
2069
|
"cardinality": "many-to-many",
|
|
2984
2070
|
"strength": "medium",
|
|
2985
|
-
"required": false
|
|
2071
|
+
"required": false,
|
|
2072
|
+
"description": "The target puts the feature in test scope."
|
|
2986
2073
|
},
|
|
2987
|
-
"testing.testcoveragetarget.
|
|
2988
|
-
"id": "testing.testcoveragetarget.
|
|
2074
|
+
"testing.testcoveragetarget.covers.data-model.objectschema": {
|
|
2075
|
+
"id": "testing.testcoveragetarget.covers.data-model.objectschema",
|
|
2989
2076
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
2990
2077
|
"source_layer": "testing",
|
|
2991
|
-
"destination_spec_node_id": "
|
|
2992
|
-
"destination_layer": "
|
|
2993
|
-
"predicate": "
|
|
2078
|
+
"destination_spec_node_id": "data-model.objectschema",
|
|
2079
|
+
"destination_layer": "data-model",
|
|
2080
|
+
"predicate": "covers",
|
|
2994
2081
|
"cardinality": "many-to-many",
|
|
2995
2082
|
"strength": "medium",
|
|
2996
|
-
"required": false
|
|
2083
|
+
"required": false,
|
|
2084
|
+
"description": "The target puts the object schema in test scope, such as its validation."
|
|
2997
2085
|
},
|
|
2998
|
-
"testing.testcoveragetarget.
|
|
2999
|
-
"id": "testing.testcoveragetarget.
|
|
2086
|
+
"testing.testcoveragetarget.covers.api.operation": {
|
|
2087
|
+
"id": "testing.testcoveragetarget.covers.api.operation",
|
|
3000
2088
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3001
2089
|
"source_layer": "testing",
|
|
3002
|
-
"destination_spec_node_id": "
|
|
3003
|
-
"destination_layer": "
|
|
3004
|
-
"predicate": "
|
|
2090
|
+
"destination_spec_node_id": "api.operation",
|
|
2091
|
+
"destination_layer": "api",
|
|
2092
|
+
"predicate": "covers",
|
|
3005
2093
|
"cardinality": "many-to-many",
|
|
3006
2094
|
"strength": "medium",
|
|
3007
|
-
"required": false
|
|
2095
|
+
"required": false,
|
|
2096
|
+
"description": "The target puts the operation in test scope."
|
|
3008
2097
|
},
|
|
3009
|
-
"testing.testcoveragetarget.
|
|
3010
|
-
"id": "testing.testcoveragetarget.
|
|
2098
|
+
"testing.testcoveragetarget.covers.navigation.route": {
|
|
2099
|
+
"id": "testing.testcoveragetarget.covers.navigation.route",
|
|
3011
2100
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3012
2101
|
"source_layer": "testing",
|
|
3013
2102
|
"destination_spec_node_id": "navigation.route",
|
|
3014
2103
|
"destination_layer": "navigation",
|
|
3015
|
-
"predicate": "
|
|
2104
|
+
"predicate": "covers",
|
|
3016
2105
|
"cardinality": "many-to-many",
|
|
3017
2106
|
"strength": "medium",
|
|
3018
|
-
"required": false
|
|
2107
|
+
"required": false,
|
|
2108
|
+
"description": "The target puts the route in test scope."
|
|
3019
2109
|
},
|
|
3020
|
-
"testing.testcoveragetarget.
|
|
3021
|
-
"id": "testing.testcoveragetarget.
|
|
2110
|
+
"testing.testcoveragetarget.covers.security.secureresource": {
|
|
2111
|
+
"id": "testing.testcoveragetarget.covers.security.secureresource",
|
|
3022
2112
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3023
2113
|
"source_layer": "testing",
|
|
3024
2114
|
"destination_spec_node_id": "security.secureresource",
|
|
3025
2115
|
"destination_layer": "security",
|
|
3026
|
-
"predicate": "
|
|
3027
|
-
"cardinality": "many-to-many",
|
|
3028
|
-
"strength": "medium",
|
|
3029
|
-
"required": false
|
|
3030
|
-
},
|
|
3031
|
-
"testing.testcoveragetarget.references.technology.systemsoftware": {
|
|
3032
|
-
"id": "testing.testcoveragetarget.references.technology.systemsoftware",
|
|
3033
|
-
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3034
|
-
"source_layer": "testing",
|
|
3035
|
-
"destination_spec_node_id": "technology.systemsoftware",
|
|
3036
|
-
"destination_layer": "technology",
|
|
3037
|
-
"predicate": "references",
|
|
3038
|
-
"cardinality": "many-to-many",
|
|
3039
|
-
"strength": "medium",
|
|
3040
|
-
"required": false
|
|
3041
|
-
},
|
|
3042
|
-
"testing.testcoveragetarget.references.technology.technologyservice": {
|
|
3043
|
-
"id": "testing.testcoveragetarget.references.technology.technologyservice",
|
|
3044
|
-
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3045
|
-
"source_layer": "testing",
|
|
3046
|
-
"destination_spec_node_id": "technology.technologyservice",
|
|
3047
|
-
"destination_layer": "technology",
|
|
3048
|
-
"predicate": "references",
|
|
2116
|
+
"predicate": "covers",
|
|
3049
2117
|
"cardinality": "many-to-many",
|
|
3050
2118
|
"strength": "medium",
|
|
3051
|
-
"required": false
|
|
2119
|
+
"required": false,
|
|
2120
|
+
"description": "The target puts the protected resource in test scope, such as its access rules."
|
|
3052
2121
|
},
|
|
3053
|
-
"testing.testcoveragetarget.
|
|
3054
|
-
"id": "testing.testcoveragetarget.
|
|
2122
|
+
"testing.testcoveragetarget.covers.data-store.storedlogic": {
|
|
2123
|
+
"id": "testing.testcoveragetarget.covers.data-store.storedlogic",
|
|
3055
2124
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3056
2125
|
"source_layer": "testing",
|
|
3057
|
-
"destination_spec_node_id": "
|
|
3058
|
-
"destination_layer": "
|
|
3059
|
-
"predicate": "
|
|
2126
|
+
"destination_spec_node_id": "data-store.storedlogic",
|
|
2127
|
+
"destination_layer": "data-store",
|
|
2128
|
+
"predicate": "covers",
|
|
3060
2129
|
"cardinality": "many-to-many",
|
|
3061
2130
|
"strength": "medium",
|
|
3062
|
-
"required": false
|
|
2131
|
+
"required": false,
|
|
2132
|
+
"description": "The target puts the stored procedure or trigger in test scope."
|
|
3063
2133
|
},
|
|
3064
|
-
"testing.testcoveragetarget.
|
|
3065
|
-
"id": "testing.testcoveragetarget.
|
|
2134
|
+
"testing.testcoveragetarget.covers.ux.subview": {
|
|
2135
|
+
"id": "testing.testcoveragetarget.covers.ux.subview",
|
|
3066
2136
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3067
2137
|
"source_layer": "testing",
|
|
3068
|
-
"destination_spec_node_id": "
|
|
3069
|
-
"destination_layer": "
|
|
3070
|
-
"predicate": "
|
|
2138
|
+
"destination_spec_node_id": "ux.subview",
|
|
2139
|
+
"destination_layer": "ux",
|
|
2140
|
+
"predicate": "covers",
|
|
3071
2141
|
"cardinality": "many-to-many",
|
|
3072
2142
|
"strength": "medium",
|
|
3073
|
-
"required": false
|
|
2143
|
+
"required": false,
|
|
2144
|
+
"description": "The target puts the subview in test scope."
|
|
3074
2145
|
},
|
|
3075
|
-
"testing.testcoveragetarget.
|
|
3076
|
-
"id": "testing.testcoveragetarget.
|
|
2146
|
+
"testing.testcoveragetarget.covers.technology.systemsoftware": {
|
|
2147
|
+
"id": "testing.testcoveragetarget.covers.technology.systemsoftware",
|
|
3077
2148
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3078
2149
|
"source_layer": "testing",
|
|
3079
|
-
"destination_spec_node_id": "
|
|
3080
|
-
"destination_layer": "
|
|
3081
|
-
"predicate": "
|
|
2150
|
+
"destination_spec_node_id": "technology.systemsoftware",
|
|
2151
|
+
"destination_layer": "technology",
|
|
2152
|
+
"predicate": "covers",
|
|
3082
2153
|
"cardinality": "many-to-many",
|
|
3083
2154
|
"strength": "medium",
|
|
3084
|
-
"required": false
|
|
2155
|
+
"required": false,
|
|
2156
|
+
"description": "The target puts the library or runtime in test scope, such as a shared client library."
|
|
3085
2157
|
},
|
|
3086
|
-
"testing.testcoveragetarget.
|
|
3087
|
-
"id": "testing.testcoveragetarget.
|
|
2158
|
+
"testing.testcoveragetarget.covers.technology.technologyservice": {
|
|
2159
|
+
"id": "testing.testcoveragetarget.covers.technology.technologyservice",
|
|
3088
2160
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3089
2161
|
"source_layer": "testing",
|
|
3090
|
-
"destination_spec_node_id": "
|
|
3091
|
-
"destination_layer": "
|
|
3092
|
-
"predicate": "
|
|
2162
|
+
"destination_spec_node_id": "technology.technologyservice",
|
|
2163
|
+
"destination_layer": "technology",
|
|
2164
|
+
"predicate": "covers",
|
|
3093
2165
|
"cardinality": "many-to-many",
|
|
3094
2166
|
"strength": "medium",
|
|
3095
|
-
"required": false
|
|
2167
|
+
"required": false,
|
|
2168
|
+
"description": "The target puts the platform service in test scope, such as an integration with a queue."
|
|
3096
2169
|
},
|
|
3097
|
-
"testing.testcoveragetarget.
|
|
3098
|
-
"id": "testing.testcoveragetarget.
|
|
2170
|
+
"testing.testcoveragetarget.covers.ux.view": {
|
|
2171
|
+
"id": "testing.testcoveragetarget.covers.ux.view",
|
|
3099
2172
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3100
2173
|
"source_layer": "testing",
|
|
3101
|
-
"destination_spec_node_id": "
|
|
3102
|
-
"destination_layer": "
|
|
3103
|
-
"predicate": "
|
|
2174
|
+
"destination_spec_node_id": "ux.view",
|
|
2175
|
+
"destination_layer": "ux",
|
|
2176
|
+
"predicate": "covers",
|
|
3104
2177
|
"cardinality": "many-to-many",
|
|
3105
2178
|
"strength": "medium",
|
|
3106
|
-
"required": false
|
|
2179
|
+
"required": false,
|
|
2180
|
+
"description": "The target puts the view in test scope."
|
|
3107
2181
|
},
|
|
3108
|
-
"testing.testcoveragetarget.
|
|
3109
|
-
"id": "testing.testcoveragetarget.
|
|
2182
|
+
"testing.testcoveragetarget.references.testing.contextvariation": {
|
|
2183
|
+
"id": "testing.testcoveragetarget.references.testing.contextvariation",
|
|
3110
2184
|
"source_spec_node_id": "testing.testcoveragetarget",
|
|
3111
2185
|
"source_layer": "testing",
|
|
3112
|
-
"destination_spec_node_id": "
|
|
3113
|
-
"destination_layer": "
|
|
3114
|
-
"predicate": "
|
|
2186
|
+
"destination_spec_node_id": "testing.contextvariation",
|
|
2187
|
+
"destination_layer": "testing",
|
|
2188
|
+
"predicate": "references",
|
|
3115
2189
|
"cardinality": "many-to-many",
|
|
3116
2190
|
"strength": "medium",
|
|
3117
|
-
"required": false
|
|
2191
|
+
"required": false,
|
|
2192
|
+
"description": "The target is exercised under the context variation."
|
|
3118
2193
|
}
|
|
3119
2194
|
}
|
|
3120
2195
|
}
|