第288章 Cross-Object API Test|跨对象 API 测试
288.1 提出背景
前面的 API 章节分别建立了 Element API、Object API、Attribute API、Relation API、State API、Scene API、Cognition API、Method API、Behavior API、Action API、Device API、Sensor API、Feedback API,以及第286章建立的 Real-Time Cognitive Loop API 和第287章建立的 Cognitive Synchronization API。
这些 API 如果分别测试,只能够证明:
Element API 可以运行
Object API 可以运行
Relation API 可以运行
State API 可以运行
Scene API 可以运行
Cognition API 可以运行
但 ICAI 并不是由彼此独立的 API 构成的。
ICAI 的核心特征恰恰在于:
Object A
↓
Relation
↓
Object B
↓
State
↓
Scene
↓
Cognition
一个对象发生变化以后,可能影响另一个对象,也可能进一步影响关系、状态、场景和认知。
因此需要建立:
Cross-Object API Test|跨对象 API 测试
它验证的不是单个 API 的孤立功能,而是多个对象之间通过关系和状态形成的动态认知结构能否正确运行。
288.2 Cross-Object API Test 的定义
Cross-Object API Test|跨对象 API 测试是指通过 API 同时操作、查询、更新和验证两个或多个对象,并检查对象之间的属性、关系、状态、场景、认知以及反馈是否能够按照定义的规则正确传播和更新。
定义:
COAT=Test(O1,O2,…,On,R,S,Sc,C)COAT= Test( O_1,O_2,\ldots,O_n, R,S,Sc,C )
其中:
- COATCOAT:Cross-Object API Test;
- OiO_i:对象实例;
- RR:对象之间的关系;
- SS:对象状态;
- ScSc:场景;
- CC:当前认知。
核心不是:
Test(O1)Test(O_1)
而是:
Test(O1,O2,R,S,Sc,C)Test(O_1,O_2,R,S,Sc,C)
288.3 单对象测试与跨对象测试
单对象测试:
Object API
↓
Object A
↓
Create
↓
Read
↓
Update
↓
Delete
只能验证 Object A 自身。
跨对象测试:
Object A
+
Object B
↓
Relation
↓
State
↓
Scene
↓
Cognition
验证的是对象之间的结构关系。
因此:
SingleObjectTest≠CrossObjectTestSingleObjectTest\neq CrossObjectTest
单对象测试验证:
对象自身是否正确
跨对象测试验证:
对象之间是否正确
288.4 跨对象测试的基本结构
最基本的测试模型:
Object A
↕
Relation
↕
Object B
加入状态:
Object A
↕
Relation
↕
Object B
↓
State
加入场景:
Object A
+
Object B
+
Relation
+
State
↓
Scene
加入认知:
Scene
+
Goal
↓
Cognition
因此:
OA+OB+R+S+Sc+G→CO_A+O_B+R+S+Sc+G \rightarrow C
288.5 Cross-Object Test 的目标
跨对象 API 测试主要验证以下内容:
1. Object Identity
2. Object Type
3. Attribute Consistency
4. Relation Validity
5. State Propagation
6. Scene Reconstruction
7. Cognition Update
8. Event Propagation
9. Synchronization
10. Feedback
也就是:
Object
↓
Relation
↓
State
↓
Scene
↓
Cognition
是否能够保持结构一致。
288.6 测试对象模型
建立两个对象:
Object A = Hand
Object B = Egg
注意,这里的对象名称只是测试实例。
系统真正使用的是:
Object Type
Object ID
Attribute
Relation
State
因此不应该编写:
grabEgg();
而应该使用一般化的对象行为:
Grasp(Object)
这验证 ICAI 是否能够跨不同对象类型使用统一认知结构。
288.7 Object A 创建
首先:
POST
/api/object/create
创建:
Object A
ID = hand-001
Type = hand
得到:
OA=(IA,CA,AA,RA,SA,PA,TA)O_A=(I_A,C_A,A_A,R_A,S_A,P_A,T_A)
此时:
Object A
↓
No Relation
↓
No Target Interaction
288.8 Object B 创建
第二个对象:
POST
/api/object/create
创建:
Object B
ID = egg-001
Type = egg
得到:
OB=(IB,CB,AB,RB,SB,PB,TB)O_B=(I_B,C_B,A_B,R_B,S_B,P_B,T_B)
现在机器世界中存在:
O={OA,OB}O=\{O_A,O_B\}
但:
R=∅R=\varnothing
也就是说,两个对象存在,但系统还没有建立它们之间的认知关系。
288.9 Object Attribute Test
为两个对象设置属性。
例如:
Hand
Position = [100,50,20]
Egg
Position = [160,50,20]
定义:
PA=[100,50,20]TP_A=[100,50,20]^T PB=[160,50,20]TP_B=[160,50,20]^T
计算距离:
DAB=∥PB−PA∥D_{AB} = \|P_B-P_A\|
其中:
- PAP_A:Object A 位置向量;
- PBP_B:Object B 位置向量;
- DABD_{AB}:两个对象之间的空间距离。
288.10 Cross-Object Distance Test
如果:
PA=[100,50,20]TP_A=[100,50,20]^T PB=[160,50,20]TP_B=[160,50,20]^T
则:
PB−PA=[60,0,0]TP_B-P_A=[60,0,0]^T
因此:
DAB=60D_{AB}=60
系统可以形成:
Object A
↓
Distance = 60
↓
Object B
这不是 Object A 的独立属性,而是:
Cross-Object Relation Attribute|跨对象关系属性
288.11 Relation API Test
通过:
POST
/api/relation/create
建立:
Hand
↓
Near
↓
Egg
定义:
RAB=(OA,Near,OB,V,S,T)R_{AB}= (O_A, Near, O_B, V, S, T)
现在:
R≠∅R\neq\varnothing
机器世界从:
Object A
Object B
变成:
Object A
↓
Near
↓
Object B
这就是第一次跨对象结构形成。
288.12 Relation Validation
测试:
Valid(R)=Valid(OA)∧Valid(Type)∧Valid(OB)∧Valid(Value)∧Valid(Time)Valid(R)= Valid(O_A) \land Valid(Type) \land Valid(O_B) \land Valid(Value) \land Valid(Time)
如果 Object A 和 Object B 都存在,则:
Relation = Valid
如果 Object B 不存在:
Relation
↓
Invalid Target
↓
Rejected
因此 Relation API 不允许产生不存在目标对象的关系。
288.13 Cross-Object State Test
关系发生以后,状态可能发生变化。
例如:
Distance = 60
状态:
Far
当距离变成:
Distance = 10
状态可能变化为:
Near
因此:
DAB,t→DAB,t+1D_{AB,t}\rightarrow D_{AB,t+1}
进一步:
Statet→Statet+1State_t\rightarrow State_{t+1}
288.14 Relation State Test
关系本身也可以具有动态状态。
例如:
Near
↓
Touch
↓
Contact
↓
Grasp
↓
Hold
因此:
Rt→Rt+1R_t\rightarrow R_{t+1}
例如:
Hand
↓
Near
↓
Egg
变化为:
Hand
↓
Touch
↓
Egg
再变化:
Hand
↓
Grasp
↓
Egg
这验证了 Relation API 是否能够支持动态关系变化。
288.15 Cross-Object State Formation
定义:
St=F(At,Rt,Ct)S_t= F( A_t, R_t, C_t )
例如:
Distance < Threshold
AND
Position Valid
得到:
Near
如果:
Touch = true
AND
Force > Threshold
可以得到:
Grasping
因此:
Object A
+
Object B
+
Relation
+
Attributes
↓
State
288.16 Scene API Test
两个对象及其关系进入 Scene:
Sct=F(OA,OB,RAB,St,Et,Pt,Tt)Sc_t= F( O_A, O_B, R_{AB}, S_t, E_t, P_t, T_t )
场景不再只是:
Object A
+
Object B
而是:
Hand
↓
Grasp
↓
Egg
并包含:
Position
Distance
Force
State
Time
Environment
因此:
Scene≠∑ObjectScene\neq \sum Object
288.17 Cognition API Test
场景形成以后,输入目标:
Goal = Move Egg
形成:
Ct=F(Ot,At,Rt,St,Sct,Gt)C_t= F( O_t, A_t, R_t, S_t, Sc_t, G_t )
系统当前认知可能为:
Goal:
Move Egg
Current Cognition:
Hand is near Egg
Egg is graspable
然后进入:
Method
↓
Behavior
↓
Action
288.18 Cross-Object Cognition Test
跨对象认知的重点不是:
What is Object A?
也不是:
What is Object B?
而是:
What is the current relationship between A and B?
即:
C=F(OA,OB,RAB,S,Sc,G)C= F(O_A,O_B,R_{AB},S,Sc,G)
例如:
Hand
+
Egg
+
Grasp Relation
+
Stable State
+
Move Goal
共同形成:
Can Move Egg
这就是跨对象认知。
288.19 Object A 更新测试
假设 Object A 发生位置变化:
Hand Position
100 → 150
则:
ΔPA≠0\Delta P_A\neq0
系统首先更新:
Object A
↓
Attribute
然后检查:
Affected Relations
找到:
Relation(A,B)
因此:
ΔOA→ΔRAB\Delta O_A \rightarrow \Delta R_{AB}
288.20 Relation 自动更新
新的位置:
Hand = [150,50,20]
Egg = [160,50,20]
则:
DAB=10D_{AB}=10
原来:
Distance = 60
现在:
Distance = 10
因此:
Distance Changed
↓
Relation Changed
可能:
Near
变成:
VeryNear
如果进一步接触:
Touch
288.21 State 自动更新
Relation 发生变化以后:
St+1=F(At+1,Rt+1,Ct)S_{t+1} = F( A_{t+1}, R_{t+1}, C_t )
例如:
Old:
Far
New:
Near
或者:
Old:
Approaching
New:
Contact
因此:
ΔR→ΔS\Delta R \rightarrow \Delta S
288.22 Scene 自动更新
状态更新以后:
Sct+1=F(Ot+1,At+1,Rt+1,St+1,Et+1,Pt+1,Tt+1)Sc_{t+1} = F( O_{t+1}, A_{t+1}, R_{t+1}, S_{t+1}, E_{t+1}, P_{t+1}, T_{t+1} )
因此:
Object Update
↓
Relation Update
↓
State Update
↓
Scene Update
这就是跨对象 API 测试最重要的传播链之一。
288.23 Cognition 自动更新
Scene 更新以后:
Ct+1=F(Ot+1,At+1,Rt+1,St+1,Sct+1,Gt)C_{t+1} = F( O_{t+1}, A_{t+1}, R_{t+1}, S_{t+1}, Sc_{t+1}, G_t )
例如:
Old Cognition:
Object is far away.
New Cognition:
Object is within grasp range.
于是:
Old Method
↓
Re-Evaluate
可能产生:
New Method
↓
Grasp
288.24 Cross-Object Synchronization Test
第287章的同步机制可以直接用于测试:
Object A Changed
↓
Relation A-B
↓
State
↓
Scene
↓
Cognition
定义:
Sync(ΔOA)={ΔRAB,ΔS,ΔSc,ΔC}Sync( \Delta O_A ) = \{ \Delta R_{AB}, \Delta S, \Delta Sc, \Delta C \}
测试成功的条件:
SyncResult=ConsistentSyncResult=Consistent
288.25 Cross-Object Event Test
Object A 发生变化:
Position Changed
系统产生:
Eventt=Detect(Xt−1,Xt)Event_t= Detect( X_{t-1}, X_t )
事件:
ObjectChanged
随后:
ObjectChanged
↓
Relation Re-Evaluation
↓
StateChanged
↓
SceneChanged
↓
CognitionChanged
因此一个对象的变化可以产生一系列认知事件。
288.26 Cross-Object Feedback Test
执行动作:
Grasp Egg
动作:
At=Grasp(OA,OB,Pt)A_t=Grasp(O_A,O_B,P_t)
设备执行以后产生反馈:
Ft=Evaluate(At,Dt,Wt+1)F_t= Evaluate( A_t, D_t, W_{t+1} )
反馈可能为:
Grasp Success
Force Valid
Object Stable
然后:
Feedback
↓
Relation Update
↓
State Update
↓
Scene Update
↓
Cognition Update
288.27 Cross-Object Failure Test
假设系统执行:
Grasp Egg
但是反馈:
Force Insufficient
则:
Feedback
↓
State
↓
Grasping = Failed
进一步:
Cognition
↓
Method Re-Evaluation
可能重新选择:
Increase Force
或者:
Reposition Hand
因此:
Failure→Re−Cognition→NewMethodFailure \rightarrow Re-Cognition \rightarrow NewMethod
288.28 多对象测试
跨对象并不局限于两个对象。
可以建立:
O={O1,O2,…,On}O=\{O_1,O_2,\ldots,O_n\}
例如:
Hand
↓
Grasp
↓
Egg
Egg
↓
Inside
↓
Container
Container
↓
On
↓
Table
形成:
Hand
↓
Grasp
↓
Egg
↓
Inside
↓
Container
↓
On
↓
Table
此时对象之间形成关系网络。
288.29 Relation Graph Test
定义:
GR=(O,R)G_R=(O,R)
其中:
- OO:对象节点集合;
- RR:关系集合。
例如:
O={Hand,Egg,Container,Table}O= \{ Hand, Egg, Container, Table \} R={Grasp,Inside,On}R= \{ Grasp, Inside, On \}
测试目标是验证:
Object Graph
↓
Relation Graph
↓
State
↓
Scene
是否保持正确。
288.30 Relation Chain Test
可以进一步测试关系链:
OA→RAB→OB→RBC→OCO_A \rightarrow R_{AB} \rightarrow O_B \rightarrow R_{BC} \rightarrow O_C
例如:
Hand
↓
Grasp
↓
Egg
↓
Inside
↓
Container
如果 Container 移动:
Container Position Changed
则可能影响:
Egg Position
↓
Hand-Egg Relation
↓
Scene
↓
Cognition
因此:
ΔOC→ΔRBC→ΔOB→ΔRAB→ΔC\Delta O_C \rightarrow \Delta R_{BC} \rightarrow \Delta O_B \rightarrow \Delta R_{AB} \rightarrow \Delta C
这是跨对象 API 测试中更加复杂的传播场景。
288.31 Cross-Object Propagation Test
定义:
Propagation(Oi)={Xj∣Impact(Oi,Xj)=1}Propagation(O_i) = \{X_j\mid Impact(O_i,X_j)=1\}
测试:
Object C
↓
Affected Object B
↓
Affected Relation A-B
↓
Affected State
↓
Affected Scene
↓
Affected Cognition
验证系统是否能够沿依赖结构正确传播。
288.32 Cross-Object Isolation Test
除了测试传播,还必须测试隔离。
如果:
Object A
发生与 Object B 无关的属性变化:
Color Changed
那么不应该无条件导致:
Object B
↓
Relation
↓
State
↓
Scene
↓
Cognition
全部更新。
因此:
Impact(ΔA,B)=0Impact(\Delta A,B)=0
时:
B
↓
No Update
这可以验证系统是否具有正确的变化影响边界。
288.33 Cross-Object API Test Matrix
可以建立测试矩阵:
| 测试对象 | 变化 | 预期影响 |
|---|---|---|
| Object A | Position | Relation |
| Object A | Force | State |
| Object B | Position | Relation |
| Relation A-B | Type | State |
| Relation A-B | Value | Scene |
| State A-B | State | Scene |
| Scene | Structure | Cognition |
| Cognition | Goal | Method |
| Method | Selection | Behavior |
| Behavior | State | Action |
| Action | Result | Feedback |
测试的核心不是 API 数量,而是结构传播关系。
288.34 API Test Flow
完整测试:
Create Object A
↓
Create Object B
↓
Create Attributes
↓
Create Relation
↓
Calculate State
↓
Build Scene
↓
Build Cognition
↓
Update Object A
↓
Detect Change
↓
Update Relation
↓
Update State
↓
Update Scene
↓
Re-Cognition
↓
Generate Method
↓
Generate Behavior
↓
Generate Action
↓
Execute
↓
Receive Feedback
↓
Synchronize
↓
Re-Cognition
这已经不再是简单 API CRUD 测试,而是一个完整认知结构测试。
288.35 API Test Case
可以定义:
TestCase=(Input,Precondition,Operation,Expected,Actual,Result)TestCase= ( Input, Precondition, Operation, Expected, Actual, Result )
其中:
- Input:输入;
- Precondition:前置条件;
- Operation:操作;
- Expected:预期结果;
- Actual:实际结果;
- Result:测试结果。
例如:
Input:
Object A Position Change
Expected:
Relation A-B Updated
State Updated
Scene Updated
Cognition Re-Evaluated
288.36 Test Assertion
测试必须定义断言:
Assert(Expected,Actual)Assert(Expected,Actual)
例如:
Assert(
Relation.State = "Near",
Actual.Relation.State
)
或者:
Assert(Cexpected=Cactual)Assert( C_{expected}=C_{actual} )
这样测试结果不再依靠人工观察,而是能够形成程序化验证。
288.37 Cross-Object Test Engine
可以建立:
class CrossObjectApiTestEngine
{
public function run($testCase)
{
$this->createObjects($testCase);
$this->createAttributes($testCase);
$this->createRelations($testCase);
$this->buildState($testCase);
$this->buildScene($testCase);
$this->buildCognition($testCase);
$this->applyChange($testCase);
$this->synchronize($testCase);
return $this->assertResult(
$testCase
);
}
}
Test Engine 的任务是组织测试过程,而不是把认知规则写死在测试代码中。
288.38 Cross-Object API Test Controller
可以建立:
class CrossObjectApiTestController
{
protected $service;
public function run($request)
{
return $this->service
->runTest($request);
}
public function case($request)
{
return $this->service
->runCase($request);
}
public function result($request)
{
return $this->service
->getResult($request);
}
}
288.39 Cross-Object Test Service
class CrossObjectApiTestService
{
public function runTest($testCase)
{
$result = $this->engine
->run($testCase);
$this->repository
->saveResult($result);
return $result;
}
}
这样测试系统可以独立于生产认知 Runtime。
288.40 测试系统与生产系统边界
必须保持:
TestSystem≠ProductionRuntimeTestSystem\neq ProductionRuntime
测试系统负责:
Create Test Data
↓
Run Test
↓
Observe Result
↓
Assert
↓
Record Result
生产 Runtime 负责:
Real-Time Data
↓
Cognition
↓
Action
↓
Feedback
测试代码不能成为认知系统本身。
288.41 API Integration Test
跨对象测试属于:
API Integration Test|API 集成测试
它验证:
API A
↓
Runtime
↓
API B
↓
Runtime
↓
API C
例如:
Object API
↓
Relation API
↓
State API
↓
Scene API
↓
Cognition API
因此:
IntegrationTest=Test(API1→API2→⋯→APIn)IntegrationTest = Test(API_1\rightarrow API_2\rightarrow\cdots\rightarrow API_n)
288.42 Cross-Object Test 与 Unit Test
Unit Test:
ObjectService
↓
Test
Integration Test:
Object API
↓
Relation API
↓
State API
Cross-Object Test:
Object A
+
Object B
+
Relation
+
State
+
Scene
+
Cognition
因此三者具有不同目标:
Unit Test
↓
单模块正确
Integration Test
↓
模块连接正确
Cross-Object Test
↓
对象结构联动正确
288.43 Cross-Object Test 与 Cognitive Loop
第286章的闭环:
Rt+1=T(Rt,It,Ft)R_{t+1}=T(R_t,I_t,F_t)
跨对象测试可以验证:
Rt→ΔO→ΔR→ΔS→ΔSc→ΔCR_t \rightarrow \Delta O \rightarrow \Delta R \rightarrow \Delta S \rightarrow \Delta Sc \rightarrow \Delta C
然后:
C→M→B→A→FC \rightarrow M \rightarrow B \rightarrow A \rightarrow F
最终:
F→Sync→Rt+1F \rightarrow Sync \rightarrow R_{t+1}
288.44 完整 Cross-Object API Test Loop
最终测试闭环:
Create Object A
↓
Create Object B
↓
Create Relation
↓
Build State
↓
Build Scene
↓
Build Cognition
↓
Change Object A
↓
Detect Event
↓
Synchronize
↓
Update Relation
↓
Update State
↓
Update Scene
↓
Re-Cognition
↓
Generate Action
↓
Execute Action
↓
Receive Feedback
↓
Synchronize
↓
Re-Cognition
↓
Assert Final Result
数学形式:
TestResult=Assert(Rexpected,Ractual)TestResult= Assert( R_{expected}, R_{actual} )
288.45 跨对象测试的核心原则
第一:
Object≠IsolatedObject\neq Isolated
对象不是孤立存在的。
第二:
Relation≠StaticRelation\neq Static
关系可以动态变化。
第三:
State=F(Attribute,Relation,Context)State=F(Attribute,Relation,Context)
状态受到对象属性、对象关系和上下文影响。
第四:
Scene=F(Object,Relation,State,…)Scene=F(Object,Relation,State,\ldots)
场景来自对象之间的动态结构。
第五:
Cognition=F(Scene,Goal,…)Cognition=F(Scene,Goal,\ldots)
认知建立在当前结构和目标之上。
因此:
Object
↓
Relation
↓
State
↓
Scene
↓
Cognition
是跨对象认知测试的核心路径。
288.46 跨对象 API 测试的工程价值
Cross-Object API Test 解决的是一个非常关键的问题:
ICAI 是否真的能够理解“对象之间的关系”,而不是仅仅能够保存多个对象?
如果系统只能做到:
Object A
Object B
那么它只是对象数据库。
如果能够做到:
Object A
↓
Relation
↓
Object B
则开始形成机器世界结构。
如果进一步做到:
Relation
↓
State
↓
Scene
↓
Cognition
则形成跨对象认知结构。
因此:
MultipleObjects≠MachineWorldMultipleObjects \neq MachineWorld
而:
Objects+Relations+States+Scenes→MachineWorldObjects+Relations+States+Scenes \rightarrow MachineWorld
288.47 从单对象 API 到跨对象认知
API 系列的发展可以表示为:
Element API
↓
Object API
↓
Attribute API
↓
Relation API
↓
State API
↓
Scene API
↓
Cognition API
第288章进一步验证:
Object A
+
Object B
↓
Relation
↓
State
↓
Scene
↓
Cognition
因此系统从:
Object Management
进入:
Object Relationship
再进入:
Cross-Object Cognition
288.48 本章总结
Cross-Object API Test|跨对象 API 测试的核心任务,是验证 ICAI 是否能够通过 API 建立、维护和更新多个对象之间的动态认知结构。
核心模型:
COAT=Test(O1,…,On,R,S,Sc,C)COAT= Test( O_1,\ldots,O_n, R, S, Sc, C )
最基本结构:
Object A
↕
Relation
↕
Object B
↓
State
↓
Scene
↓
Cognition
当 Object A 发生变化:
ΔOA→ΔR→ΔS→ΔSc→ΔC\Delta O_A \rightarrow \Delta R \rightarrow \Delta S \rightarrow \Delta Sc \rightarrow \Delta C
当动作产生反馈:
Action→Device→WorldChange→Feedback→Synchronization→Re−CognitionAction \rightarrow Device \rightarrow WorldChange \rightarrow Feedback \rightarrow Synchronization \rightarrow Re-Cognition
因此完整测试链为:
Object A
+
Object B
↓
Relation
↓
State
↓
Scene
↓
Cognition
↓
Method
↓
Behavior
↓
Action
↓
Device
↓
World Change
↓
Feedback
↓
Synchronization
↓
Relation Update
↓
State Update
↓
Scene Update
↓
Re-Cognition
↓
Test Assertion
本章最终验证的不是某个 API 是否能够返回 200 OK,而是:
API Operation→Object Change→Relation Change→State Change→SceneChange→CognitionChange\boxed{ API\ Operation \rightarrow Object\ Change \rightarrow Relation\ Change \rightarrow State\ Change \rightarrow Scene Change \rightarrow Cognition Change }
以及:
Action→Feedback→Synchronization→Re−Cognition\boxed{ Action \rightarrow Feedback \rightarrow Synchronization \rightarrow Re-Cognition }
这意味着 API 测试从传统的“接口正确性测试”进一步进入了 机器世界结构测试。
第288章因此建立了 ICAI 的一个重要验证原则:
测试一个认知对象是否正确,不仅要测试对象自身,还必须测试它与其他对象之间形成的关系,以及关系变化对状态、场景和认知产生的传播结果。
最终:
单对象测试
↓
API 集成测试
↓
跨对象测试
↓
关系传播测试
↓
状态传播测试
↓
场景传播测试
↓
认知传播测试
↓
实时闭环测试
由此,ICAI API 体系开始从“接口集合”进入“可验证的机器认知结构体系”。