一、实验程序
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 |
三、定位Failure Cause
现在要在不知道上述错误代码(由>=变为>)位置的情况下,调试出错误代码位置。
先使用增量调试(见参考文献):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.