第一輪。Go微服務框架。三萬兩千行。
大屏幕上兩個進度條同時跑起來。左邊藍色CodeSafe,右邊綠色BugKiller。在線觀眾四萬一千,還在漲。
CodeSafe的掃描速度稍快,進度條先到100%。
彈幕立刻刷起來。
“CodeSafe速度好快”
“等等BugKiller還沒跑完?”
BugKiller的進度條慢了大概七秒,跟著到頂。
掃描結果不直接上屏。按賽制,每輪由五人技術專家組現場核驗,三家公司技術負責人加兩位開源社區資深貢獻者,逐條確認真Bug還是誤報,再把核驗數據投上去。
專家組圍著顯示器開始過結果。彈幕等得有點急,“快快快”“急什么人家要逐條看代碼”。
六分鐘后,核驗結果上屏。
CodeSafe:標記總數24個,確認Bug 24個,誤報0個。誤報率0%。
BugKiller:標記總數23個,確認Bug 22個,誤報1個。誤報率4.5%。每條附影響評估和修復路徑。
專家組組長拿話筒:“三萬行級別兩款工具都表現不錯。CodeSafe多檢出兩個,零誤報,干凈利落。BugKiller有一個誤報,少檢出兩個,但每條結果附帶的影響評估和修復路徑是CodeSafe沒有的功能。綜合來看,第一輪CodeSafe略占優。”
趙文淵靠在椅背上,對著鏡頭點了點頭。“兩家產品各有所長。不過在標準化的代碼審查場景下,檢出率和精確率還是硬指標。”
彈幕滾得很快。
“CodeSafe第一輪贏了?”
“零誤報確實漂亮”
“BugKiller那個影響評估挺有意思的,但檢出少了兩個”
“完了NullPointer要輸?”
“才第一輪別急”
韓路一全程沒什么反應。他看了一眼大屏上的數據,點了點頭,然后低頭喝了口水。
彈幕有人注意到了:“NullPointer這心態也太穩了”“輸了一輪跟沒事人一樣”“是穩還是裝的?”
蘇念念窩在出租屋的床上看直播,被子裹到胸口,筆記本電腦架在膝蓋上,屏幕左半邊直播間右半邊BugKiller后臺。手機扔在枕頭邊充著電,旁邊散著一小堆橘子皮。
第一輪結果出來的時候她盯著屏幕愣了兩秒。CodeSafe贏了?
她打開微信給韓路一發了一條:“啊啊啊第一輪輸了”
沒回。她想了想,也對,他在直播,不可能看手機。
她放下手機,開始剝第四顆橘子。心里默算:第一輪三萬行,CodeSafe贏。第二輪十二萬行。第三輪三十五萬行。
上次八萬行的對比測試,BugKiller就已經拉開差距了。十二萬行只會更大。
“第一輪本來就不是我們的主場。”她對著屏幕說了一句。沒人聽。
主持人:“感謝雙方。第一輪結果已在屏幕上呈現。現在進入第二輪,Python數據處理平臺,代碼量約十二萬行。”
“開始。”
進度條再次跑起來。
這一次,速度差異從第一秒就開始了。
BugKiller的綠色進度條勻速推進,跟第一輪節奏差不多。
CodeSafe的藍色進度條明顯慢了。10%正常,20%開始拖,到30%的時候像遇到了什么東西,頓了兩秒才跳到31%。
彈幕比專家敏感。
“CodeSafe卡了?”
“正常正常,12萬行確實需要時間”
“BugKiller沒卡啊,你看那個綠條”
“速度差距出來了”
BugKiller先跑完。韓路一靠在椅背上,雙手交叉放在腦后,等著。屏幕上BugKiller的結果已經靜靜地排好了,五十八條檢出整整齊齊。
CodeSafe的藍色進度條還在78%。
彈幕開始倒計時。“80了80了”“快了快了”“這個速度差……”
等了將近兩分鐘,CodeSafe才到100%。
彈幕:“第一輪只差七秒,第二輪差了兩分鐘”“十二萬行拉開這么多?”“代碼量翻四倍,差距翻十幾倍”
專家組核驗。這次比第一輪久。彈幕能看到專家們反復對照代碼,有人皺眉翻回去重看。
十一分鐘后,核驗結果上屏。
BugKiller:標記總數60個,確認Bug 58個,誤報2個。誤報率3.4%。
CodeSafe:標記總數48個,確認Bug 41個,誤報7個。誤報率17.1%。
專家組組長這次沒笑。“CodeSafe有7個誤報,其中4個是把正常的異常處理邏輯標成Bug,這說明代碼規模增大后,檢測引擎的上下文理解在下降。BugKiller多檢出的17個里,確認15個為真實Bug。”
在線人數四萬六千。彈幕越來越密了。
“17%???”
“專家說了,規模一大就不行”
“17%的誤報率在生產環境里根本不能用”
“BugKiller穩如老狗,3.4%”
趙文淵盯著屏幕上的數字。直播里不能暫停,不能查日志。所有人都在看著他。
“十二萬行項目確實對檢測引擎有更高要求。我們現在正在進行下個版本的迭代和優化。”
韓路一的聲音從右邊傳過來。不大,但收音很清楚。
“趙博士,開始第三輪吧。”
彈幕:“不給他解釋的時間”“尊重對手的方式,快點結束”
主持人看了一眼兩邊。
“第三輪,Java企業級核心系統,代碼量約三十五萬行。”
在線人數破五萬。彈幕停了一瞬間,五萬人同時屏住了呼吸。