https://files.cnblogs.com/files/xiaojieshisilang/tcas.tar.gz
链接中是西门子tcas测试程序。
source下是正确版本,versions/v1下是一个错误版本。两个版本的差异是:
执行脚本是:
../source/tcas.exe 958 1 1 2597 574 4253 0 399 400 0 0 1
../versions/v1/tcas.exe 958 1 1 2597 574 4253 0 399 400 0 0 1
测试输入如下:
tcas
测试输入
测试输入
Cur_Vertical_Sep
958
627
High_Confidence
1
0
Two_of_Three_Reports_Valid
1
0
Own_Tracked_Alt
2597
621
Own_Tracked_Alt_Rate
574
216
Other_Tracked_Alt
4253
382
Alt_Layer_Value
0
1
Up_Separation
399
400
Down_Separation
400
641
Other_RAC
0
1
Other_Capability
0
1
Climb_Inhibit
1
0
V1版本tcas
1
0
正确版本tcas
0
0
V1版本执行结果:
FAIL
PASS
现在要在不知道上述错误代码(由>=变为>)位置的情况下,调试出错误代码位置。
先使用增量调试(见参考文献):Delta Debugging先找到failure_introducing input
编号
tcas
第一步
第二步
第三步
2
1
Cur_Vertical_Sep
958
958
958
958
627
2
High_Confidence
1
1
1
1
0
3
Two_of_Three_Reports_Valid
1
1
1
1
0
4
Own_Tracked_Alt
2597
2597
2597
2597
621
5
Own_Tracked_Alt_Rate
574
574
574
574
216
6
Other_Tracked_Alt
4253
382
4253
382
382
7
Alt_Layer_Value
0
1
0
1
1
8
Up_Separation
399
400
399
400
400
9
Down_Separation
400
641
400
641
641
10
Other_RAC
0
1
1
0
1
11
Other_Capability
0
1
1
0
1
12
Climb_Inhibit
1
0
0
1
0
V1版本
1
0
0
0
0
正确版本
0
0
0
0
0
执行结果:
FAIL
P
P
P
BUt为什么?
PASS
在上述第三步,本来应该继续在10,11,12对应的输入中继续二分查找的。我手残,想试试另一半,于是将0,399,400替换成了1,400,641。
结果也是PASS,but为什么呢?
求助大神!!!是不是自己对增量调试理解有误。
寻找真正导致failure的输入。这里的failure是指的是不满足功能正确性,即不满足预期输出(比较而言,西门子测试程序的正确版本的输入,我们认为是预期输出)。
Zeller A. Isolating cause-effect chains from computer programs[J]. Acm Sigsoft Software Engineering Notes, 2002, 27(6):1-10.
Zeller A, Hildebrandt R. Simplifying and Isolating Failure-Inducing Input[J]. Software Engineering IEEE Transactions on, 2002, 28(2):183-200.