當我們駕駛自動駕駛汽車穿梭都市、用智能語音助手規劃日程時,一個人、機、物三元融合的智能時代已悄然來臨。然而,在這幅便捷生活的圖景之下,軟件安全風險如同一座座深海中的冰山:傳感器采集的5%誤差可能導致致命的轉向,被我們無條件信任的編譯器竟可能成為暗藏的“代碼殺手”,而機器學習模型與硬件故障的疊加,更讓問題的根源難以追溯。
如何為這個日益複雜的世界築牢安全防線?
中國科學技術大學9511校友、南京大學計算機學院教授、國家級人才計劃入選者許暢,在軟件安全領域深耕十七年,正致力於破解這個時代的“安全困局”。從人機物係統的“第一道防線”輸入驗證,到守護軟件“地基”的編譯測試,他帶領團隊不斷向基礎軟件的“卡脖子”難題發起衝擊。
2025年5月17日,安徽壽縣,許暢教授在第四屆華夏計算機科技英才班學術交流會上作《智能人機物係統安全:從輸入驗證和編譯測試的角度》報告,我們有幸在報告會前和他進行了一對一深度采訪,本文為采訪實錄的上篇。
在本篇專訪中,我們將跟隨許暢教授的思緒,深入其學術報告的核心,探討智能係統麵臨的根本性挑戰、編譯測試的“蝴蝶效應”,以及他對GPT時代軟件“可成長性”與產學研結合的深邃洞見。這不僅是一場技術的剖析,更是一次對未來軟件方法論的前瞻。
受訪者:許暢(中國科學技術大學9511校友,南京大學計算機學院教授、博士生導師,國家級人才計劃入選者)
采訪時間:2025年5月17日
采訪人:薄震宇、王勁博
編輯:郭東昊
【第一部分:智能人機物係統的安全挑戰】
5%誤差如何顛覆自動駕駛?
Q:
您的報告聚焦"智能人機物係統安全",從輸入驗證和編譯測試切入,能不能概括一下核心觀點?
許暢教授:
當前我們正經曆一場重要的技術變革:人機物融合時代的到來。在傳統計算機時代,我們隻需編寫程序在電腦運行,而如今通過傳感器、控製器等泛在計算技術,形成了人-機-物三元融合的生態係統。其次是大語言模型等智能化工具深度融入生活,這種新型AI與傳統程序化預測有本質區別。
在這個背景下,軟件安全麵臨全新挑戰:一方麵是係統複雜度呈指數級增長,軟件開發與質量維護難度陡增;另一方麵是人機物融合係統存在環境感知誤差等固有風險。對此我們提出三大技術支柱:
第一是輸入驗證。以無人駕駛為例,傳感器采集的環境數據存在5%以內的固有誤差,但係統必須在這種不確定輸入下保持可靠運行。輸入驗證就是要確保軟件係統的"第一道防線"可靠。
第二是編譯測試。就像CPU芯片故障會導致整個係統崩潰,編譯器作為軟件基礎層,其可靠性直接決定上層應用安全。我們曾遇到編譯器將正確邏輯編譯成錯誤指令的情況,這種底層錯誤往往難以察覺卻危害極大。
第三是係統調試。當出現問題時,需要精準定位是算法錯誤、編譯錯誤還是硬件故障。特別是在智能係統中,機器學習模塊的預測誤差與編譯錯誤可能相互交織,需要新的調試方法論。
Q:
您深耕軟件質量保障領域多年,曾獲國家科技進步二等獎、CCF青年科學家獎等榮譽。從您的經驗看,當前智能人機物係統安全領域麵臨哪些核心挑戰?近五年行業的研究重心發生了哪些顯著變化?
許暢教授:
這個問題,我想從我的經曆說起。我讀書和做科研的時間比較久,本科5年、碩士3年、博士5年,讀書一共13年。現在到南京大學工作已經15年了,中間還有兩年在香港,工作共17年。這麼多年下來,我看到軟件的形態在慢慢變化。
最早的時候,我們都隻是做普通程序,我也喜歡寫程序,甚至本科時自己寫遊戲。這些經曆讓我慢慢轉向軟件科研的方向。最開始是PC端的軟件,後來是移動軟件,再到今天的智能人機物係統,軟件和環境之間的關係變得更複雜了。
過去手機上沒有什麼軟件,隻能打電話發短信,但現在大家都知道可以點外賣、打遊戲、放音樂。這種環境要求軟件更輕量、更適應環境,特別是非功能性需求,比如能耗、性能、安全等。這些特性對軟件提出了新的挑戰。
比如一個看似簡單的Excel,其實也屬於一種終端用戶軟件,用戶可以寫公式、寫腳本、自動更新數據——這其實也是程序。隨著軟件智能化程度提升,與機器結合的越來越多,帶來了控製、傳感等方麵的不確定性,對軟件質量的要求也更高。
我總結下來,現在做軟件的人要關注兩點:一是程序開發的效率,二是軟件的開發質量。這兩個方向是我們的重心,形態變了,但方法和目標沒有變。
Q:
您提到研究重心從形態轉向了方法,能否展開講講?
許暢教授:
是的,現在的研究更注重“軟件的方法學”。這個詞聽起來很虛,但它很重要。就像古代的孔子、老子、孟子講的那些思想,並不是講一件具體的事情,而是講“怎麼做事情”的方法。同樣,我們也希望不僅是寫個程序,而是讓後麵的人也能沿用這個方法。
我們經常說,一個好的軟件方法要能沉澱成工具,這樣即使後麵的人不懂這個方法,也能用工具做出來。比如判斷一家軟件公司是否成熟,有個重要標準是:有沒有“個人英雄主義”。如果靠一個人撐著,一旦他走了,項目就崩了,這就是不成熟。反過來,如果工具和方法沉澱下來,別人也能接手,就是可持續的。
所以目前的挑戰在於,不僅要關注“怎麼做”,還要考慮“別人怎麼接著做”,這是軟件工程研究真正的難點,也就是方法論。
【第二部分:編譯測試與基礎軟件的“破壁”法則】
“希望同學們突破課堂編程的思維定式”
Q:
您希望學生通過講座獲得哪些啟發?
許暢教授:
希望同學們突破課堂上編程教學的思維定式。傳統的編程教學是給定確定輸入輸出,驗證算法正確性即可。但現實係統要麵對三大挑戰:
1)環境感知的固有誤差,如自動駕駛的傳感器誤差;
2)人機物融合帶來的輸入不確定性;
3)基礎層(編譯器/芯片)可靠性對整體係統的影響。
這些複雜性要求工程師必須具備係統級思維,理解從物理感知層到智能決策層的全棧安全。特別是要重視基礎軟件研發,當前國際形勢下,編譯器等"卡脖子"技術的自主可控具有戰略意義。
編譯器的「蝴蝶效應」
Q:
編譯測試在係統安全中的獨特價值如何體現?
許暢教授:
編譯測試的特殊性在於其"基礎放大器效應"。我們做過實驗:當編譯器存在萬分之一錯誤率時,經其編譯的自動駕駛係統錯誤率會指數級放大到千分之一。這就像精密鍾表裏一個齒輪的微小偏差,最終導致整點報時完全錯誤。典型案例是某工業控製係統升級時,新編譯器將安全校驗代碼優化掉了,導致係統直接執行危險指令。由於編譯器被視為可信基礎層,這類問題往往排查困難。我們團隊研發的差分編譯測試技術,通過多編譯器交叉驗證,成功發現並幫助修複了GCC編譯器的數十個安全隱患。
這些實踐說明,在智能時代,安全防護必須下沉到基礎層。就像建造摩天大樓,地基的微小缺陷都可能導致災難性後果。編譯測試正是守護軟件"地基"的關鍵技術。
Q:
您的研究方向涵蓋軟件工程、編譯技術、係統安全等多個交叉領域。您認為這種跨學科融合對解決係統安全問題有什麼必要性?
許暢教授:
我們現在不僅做軟件本身,也要做工具鏈開發、操作係統、程序語言,甚至支持國產替代。每個方向都有自己的挑戰。如果隻關注其中一個麵,可能會比較弱。所以我建議年輕人要廣泛接觸,才能有更全麵的能力。做係統安全,本質上是多個方向合力的結果,靠單一角度使力可能無法解決根本問題。
【第三部分:GPT時代的展望與產業思考】
大模型:工具還是奴隸?
Q:
您提到大語言模型用途很廣,是一個很好的工具。您覺得未來這類AI技術在編譯測試、速度驗證中會起到什麼作用?
許暢教授:
簡單說,像大語言模型這樣的技術是一種表現形式,更早的時候是神經網絡,還有各種機器學習算法。我們統一稱它們為“智能化手段”。這些手段現在越來越有用,不僅在機器學習領域,在很多別的領域也在用。所以首先不要忽視它們——它們確實有用,我們要承認這一點。
如果我們未來想進入軟件領域,首先要有基本的編程能力,再具備編譯分析能力,然後結合智能化手段去做。擁有這些手段後,首先你要想清楚你想幹什麼,再去使用它,而不是直接丟個問題進去希望它幫你解決;如果你問得太粗,它也給不出想要的答案,即使給了你也不一定懂——因為你自己都還沒弄明白你要幹什麼。所以,我們得先想清楚問題,再借助這些手段,效果才會好。這些智能化手段是助力,而不是替代。
軟件的「可成長性」
許暢教授:
我現在重點關注的一個問題是:“軟件的可成長性”。你們可能注意到,寫代碼時常常是“給定需求,寫完就結束了”。但軟件行業不是這樣。很多公司都有自己的核心產品,它們不是一錘子買賣,而是一直在舊軟件的基礎上迭代。有時候必須要重寫,但很多時候是在原有基礎上不斷加功能。
問題來了:你當初設計這個軟件的時候,有沒有考慮到未來會增加哪些功能?
所以,我本科、研究生時開始關注“設計模式”這個話題。它並不決定正確與否,但確實能影響軟件是否好維護。有的軟件加功能容易,有的找 bug 容易;但也有的軟件“加個功能就全炸了”。這其實是軟件可維護能力的體現,叫做“關注點分離”(Separation of Concerns),也就是你們說的“高內聚低耦合”。
高手與低手的區別不是有沒有 bug,而是出了 bug 能不能快速定位,軟件能不能維護。好的設計能讓你清楚地知道在哪加代碼,差的設計你加起來就很容易出錯。質量,不隻是說寫得對,更重要的是“可複用性”。很多其他專業的人可能不太理解,覺得能跑就行,但是搞軟件研究的人深刻明白這點。
所以我提到的“軟件可成長性”就和這相關。當年我們關注設計模式帶來的軟件可複用性,現在我們關注更大範圍的問題——軟件是否能夠不斷演化。有的軟件隨著加功能,就變得不可維護。我們需要明確這些差別,並指導學生寫出“可成長性更好”的代碼。
而我當前的重點,就是將“代碼能力”、“設計抽象”、“智能手段”這幾個方麵結合起來,構建一個真正“可成長”的軟件係統。現在我們有大語言模型,也許可以借它的手段來輔助軟件實現這樣的“可成長性”。
Q:
您對國內軟件質量保障領域的研究生態有何期待?您認為推進大軟件領域的學術界與產業界的結合是否有助於這一點?
許暢教授:
我覺得這個問題對你們來說可能早一些,我就分享下我們現在的體會吧。
你們從本科到研究生,基本都是跟老師打交道,除非準備實習才會開始接觸企業。實習時得刷題,甚至開始真正做項目。時代變了,以前學生本科想去實習,我是支持的,因為那時候是“黃金時代”,企業很多、機會多,大家實習後回來反而會覺得工作挺無聊的,於是更願意繼續讀研。
那時候找工作不難,企業也不指望本科生能做出什麼,安排點測試或者跟著師兄做點事就行。可現在不一樣了,大家都意識到想找份“滿意”的工作並不容易,於是會更認真地對待實習,也更願意從中學習東西。
隨著我們老師與工業界的合作越來越多,我發現很多時候我們說“工業界有很多真實需求”,這話說起來容易,但真正做起來挑戰很多。比如,為什麼好事做不好?其中有很多深層原因。企業確實麵臨很多困惑,他們自己也沒有時間去解決。比如華為,從做電信起家,到現在做操作係統、編程語言、智能駕駛等,軟件方麵做得也非常不錯。華為員工非常忙,這隻是他們承受壓力的一個方麵。有的公司扛不住壓力就倒閉了,而華為還在堅持,還在努力。這背後也是他們文化的一部分。
我現在是CCF係統軟件專委的副主任,我們跟企業有很多合作。不隻是學術界之間的交流,也搭建起了學術界與企業之間的橋梁。比如華為的員工很活躍,他們內部有KPI製度。你們做采訪時也有KPI吧?完成任務、整理報告,其實也挺辛苦的。他們那邊也有類似的製度,雖然我不清楚具體怎麼規定,但我看到他們真的很主動,會組織workshop、走進高校、跟我們交流技術問題。
比如今天剛接待了一個華為部門,明天又是另一個部門來了,他們每個團隊都有自己的任務,有問題就來找我們討論。他們在一邊被KPI驅動的同時,也確實提出了很多實際問題。我曾在香港讀書時就聽說,他們當時麵臨一個問題:他們招了很多程序員,但不都是最優秀的,比如清華北大的學生很多去了國外,早期招進來的程序員可能代碼質量不高。後來招聘質量提升了,但仍麵臨大量曆史代碼。這時候,他們開始思考能不能通過一些方法或工具,讓普通人也能寫出高質量代碼。這其實就涉及“軟件工程化”思想,也是一種很了不起的理念——讓普通人做出不普通的成果。他們每周都會發郵件來征詢我們對某些戰略問題的看法,是真的“求賢若渴”。我們在語言級創建、工具鏈開發等方麵與他們有深度合作,甚至建了微信群實時溝通。他們還專門設立了眾多的茶思屋,可以在特定環境下做測試。因為涉及保密,必須在他們的網絡環境內操作,有問題可以直接找負責人解決。企業這麼積極,也影響了我們。我覺得跟產業界合作並不複雜,不要害怕去實習。如果沒機會實習,將來工作中也會接觸到。也許哪天你就能做成一件事。
所以有時企業中很有幹勁,他們很希望把事情做成。與他們合作,會覺得挺受鼓舞的,這隻是一個側麵。將來我們大家都會覺得學術界和產業界結合的重要性。
(未完待續)