Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0a087ce

Browse filesBrowse files
committed
add experiment script of icse25 paper
1 parent b9cd3b8 commit 0a087ce
Copy full SHA for 0a087ce

37 files changed

+20103
-0
lines changed

‎example/icse25/Keymap/FindAllReleasedHttpAPI.gdl

Copy file name to clipboardExpand all lines: example/icse25/Keymap/FindAllReleasedHttpAPI.gdl
+1,337Lines changed: 1337 additions & 0 deletions
Large diffs are not rendered by default.

‎example/icse25/Keymap/FindAllReleasedTrAPI.gdl

Copy file name to clipboardExpand all lines: example/icse25/Keymap/FindAllReleasedTrAPI.gdl
+1,046Lines changed: 1046 additions & 0 deletions
Large diffs are not rendered by default.

‎example/icse25/motivation example.md

Copy file name to clipboard
+127Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# Motivation Example
2+
3+
## Relation
4+
5+
### Java
6+
7+
```
8+
field(id, tid, name, locId)
9+
method(id, tid, name)
10+
parent(id1, id2)
11+
class(id, name)
12+
interface(id, name)
13+
type(id, n)
14+
javaLoc(locId, s, e, path)
15+
```
16+
17+
### XML
18+
19+
```
20+
xmlEle()
21+
xmlAttri()
22+
```
23+
24+
### JS/TS
25+
26+
```
27+
enclose(exprId, methodId)
28+
callExpr(exprId, methodId, argExprId, callSiteId)
29+
reference(refId, defId)
30+
service(id, appId, locId)
31+
jsLoc(locId, s, e, path)
32+
app(id, name)
33+
api(id, apiName, apiSignature, appId)
34+
functionLikeDeclaration(id, name)
35+
parent(id1, id2)
36+
class(id, name)
37+
```
38+
39+
## Rule
40+
41+
### Java
42+
43+
```
44+
changedField(fid) :- (
45+
field(fid, _, _, locId),
46+
loc(locId, s, e, path),
47+
changedSet(line, path),
48+
line >= s,
49+
line <= e
50+
).
51+
fieldInClassType(fName, tName) :- (
52+
field(fid, _, fName),
53+
parent(fid, cid),
54+
class(cid, tName),
55+
type(tid, tName)
56+
).
57+
58+
fieldInDescendantClassType(fName, tName) :- fieldInClassType(fName, tName).
59+
fieldInDescendantClassType(fName, tName) :- fieldInClassType(fName, tName1), fieldInDescendantClassType(tName1, tName).
60+
61+
changedMethodInInterface(fid, mid, iid) :- (
62+
changedField(fid),
63+
field(fid, _, fName, _),
64+
fieldInDescendantClassType(fName, tName),
65+
type(tid, tName),
66+
method(mid, tid, _),
67+
parent(mid, iid),
68+
interface(iid, _)
69+
).
70+
```
71+
72+
### Java, XML
73+
74+
参考原论文
75+
76+
```
77+
getChangedTrAPI(trInterfaceName, trMethodName) :- (
78+
changedMethodInInterface(fid, mid, iid),
79+
method(mid, _, trMethodName),
80+
interface(iid, trInterfaceName),
81+
service(bid, cid),
82+
in(iid, cid)
83+
).
84+
```
85+
86+
### JS
87+
88+
```
89+
getAppFacade(appName, proxyFacadeName, facadeQualifiedName) :- (
90+
service(id, appId, locId),
91+
jsLoc(locId, _, _, path),
92+
path = "config/proxy.js",
93+
app(appId, appName),
94+
api(_, proxyFacadeName, facadeQualifiedName, appId)
95+
).
96+
getInfluencedTrAPI(appName, proxyFacadeName, facadeQualifiedName, trMethodName) :- (
97+
getChangedTrAPI(facadeQualifiedName, trMethodName),
98+
getAppFacade(appName, proxyFacadeName, facadeQualifiedName)
99+
).
100+
```
101+
102+
### TS
103+
104+
```
105+
getInfluencedTrAPICall(appName, proxyFacadeName, callExprId) :- (
106+
getInfluencedTrAPI(appName, proxyFacadeName, facadeQualifiedName, trMethodName),
107+
callExpr(callExprId, mid, _, callSiteId),
108+
reference(callSiteId, defId),
109+
api(defId, proxyFacadeName, _, _)
110+
).
111+
112+
getInfluencedFrontEndAPI(rpcName, trFuncName) :- (
113+
getInfluencedTrAPICall(_, _, callExprId),
114+
enclose(callExprId, methodId),
115+
functionLikeDeclaration(mid, trFuncName),
116+
parent(mid, cid),
117+
class(cid, rpcName)
118+
).
119+
```
120+
121+
## Workflow
122+
123+
1. 根据变更行号,识别出变更内容为新增某一个Field f。
124+
2. 通过影响面分析,得出有一个 Interface 的函数 m 的返回类型为包含这个新增字段的类 c。
125+
3. 通过结合xml配置分析,这个函数 m 所在的 Interface i 实际为一个对外发布的 rpc 接口。
126+
4. 通过分析 bff 应用的配置 proxy.js 文件,发现 该应用 配置了 变更的 rpc 接口。
127+
5. 通过分析 bff 应用里所有的 函数调用,发现有使用了 该变更的 rpc 接口,并且 调用函数所在类也是对前端开放的服务接口,由于调用函数的传参与变更后的不一致,导致查询失败,使用该接口的前端服务全部崩溃。

‎example/icse25/procedure.md

Copy file name to clipboard
+27Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
实验步骤:
2+
3+
1. 运行gitdiff脚本,识别出两个commit之间的所有变更文件名和行号
4+
2. 运行rule1.gdl,将变更文件名和行号转换为对应的java ecg node id。
5+
3. 运行rule5.gdl,将变更文件名和行号转换为对应的xml ecg node id。
6+
4. 运行rule4.gdl,输入为rule1找到的java ecg node,输出为这些ecg node影响到的发布的http request函数。
7+
4. 运行rule2.gdl,输入为rule1找到的java ecg node,输出为这些ecg node影响到的http response函数。
8+
5. 运行rule6.gdl,输入为rule1和rule5找到的所有ecg node,输出为这些ecg node是否为发布的tr接口。
9+
6. 运行rule7.gdl,输入为rule5找到的xml ecg node,输出为这些node对应的mybatis 框架下的java源码,字段或函数。
10+
7. 运行rule8.gdl,输入为rule1和rule7找到的所有ecg node,输出为这些ecg node 影响到的发布的tr接口。
11+
8. 运行rule13.gdl,输入为变更行和行号,输出为本次变更的变更影响调用链路的调用根节点的函数签名(默认为baseline)。
12+
9. 比较rule13与rule4,rule6的结果。
13+
10. rule17 仓库地址:{unknown}
14+
11. 运行rule17, 输入为rule1找到的java ecg node,输出为本次变更影响到的tr接口和函数名。
15+
12. BFF为私仓,本地下好。
16+
13. 运行rule18, 输入为rule17找到的tr接口全名和函数名,输出为BFF应用使用到的appname配置,tr接口和函数名。
17+
14. 运行rule19,输入为rule18找到的appname配置,tr接口和函数名,输出为使用到这些tr接口的rpc接口和函数
18+
19+
update 版本
20+
1. 运行gitdiff脚本,识别出两个commit之间的所有变更文件名和行号
21+
2. 运行rule_ecg.gdl,输入为变更行和行号,输出为本次变更的tr接口和http接口信息。
22+
3. 运行rule_1_5.gdl,输入为变更行和行号,输出为本次变更的ecg node。
23+
4. 运行rule_6_8.gdl,输入为变更行和行号,输出为本次变更的tr接口。
24+
5. 运行rule_1_4.gdl,输入为变更行和行号,输出为本次变更的http接口。
25+
3. 运行rule13.gdl,输入为变更行和行号,输出为本次变更的变更影响调用链路的调用根节点的函数签名(默认为baseline)。
26+
4. 运行rule9 输出为查询到该应用发布的所有http request接口,用于与rule_1_4的结果进行比较。
27+
5. 运行rule12.gdl,输出为该应用发布的所有tr接口、实现类和对应的具体函数信息,用于与rule6_8结果进行比较。

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.