研究中的軟體維護
研究領域的軟體維護,作者 Konrad Hinsen,發表於 2014 年 2 月 26 日
軟體維護是科學軟體開發者經常面臨的難題之一。這是一項重要的工作,卻耗時費力,且在當前的評鑑機制下鮮少獲得肯定。若您負責大型軟體專案,要為維護工作爭取經費通常更是難上加難。
既然軟體維護既困難又缺乏內在的科學吸引力,我們就應該自問:為何非做不可?是否有方法能減少對維護的需求?
首先,什麼是軟體維護?《韋氏詞典》將動詞「maintain」(維護)定義為:透過修繕、修正問題等方式,使(某物)保持良好狀態。這對會因機械磨損等因素隨時間劣化的技術設備來說合情合理。但軟體不會劣化,因此將「維護」一詞應用於軟體時,其含義必然有所不同。
據我所知,目前尚無公認的定義,因此以下提出我個人的見解:軟體維護係基於以下兩種原因之一而對軟體進行修改:
- 修正錯誤(Bug)。
- 確保軟體在不斷演變的運算環境中仍可正常使用。
有些人會將「功能增強」也列入其中,但這嚴格說來並非維護,而是改進。特別是在科學軟體領域,新功能往往意味著新的科學發現。
相關: — 您可以直接在瀏覽器中編碼的互動式 Python 和資料科學課程.
先談談錯誤(Bugs)。如同任何軟體,我們當然希望修正科學軟體中的錯誤,以便未來獲得更佳的結果。然而,若任何已發表的科學研究曾使用過含有錯誤的版本,我們也必須保留該有誤的版本。這單純是誠信與保存科學紀錄的問題:如果研究的結果可能受到軟體錯誤的影響,後續檢視該研究的人員應能察覺此事。他們必須能夠取用當初使用的確切軟體版本,而不僅僅是今日經過改良的後繼版本。
正因如此,保存研究中實際使用的程式碼,其實比修正錯誤更為重要。ActivePapers 的設計初衷正是為此:ActivePaper 中的任何計算數據項目,皆與其產生該數據的軟體相連結。此外,由於 ActivePapers 如同電子版文章般發表,並透過 DOI 進行引用,此連結在發表後即嚴格不可修改。
您在發表前或許可以作弊,例如刻意修改 ActivePaper 以進行詐欺。ActivePapers 並不支援此類行為,但也未特別著力防範詐欺。理論上可透過雜湊值(hashes)保護來源資訊(provenance information)來加入此類功能,但我希望無需走到這一步。
讀者最愛: — 基於專案的資料科學路徑,具有引導終端和真實資料集.
第二個問題——不斷演變的運算環境——則更为微妙。電腦界的一切(電腦、作業系統、編譯器、語言定義、程式庫……)快速變遷是不爭的事實,導致一段原始碼很可能在幾年後無法原封不動地運行。這背後有兩個原因:(1) 技術進步帶來了更強大的電腦與軟體,而這正是大眾所追求的;(2) 沒有人對運算平台的穩定性擁有既得利益,亦無人具備促成穩定的權力。
對於硬體廠商與商業軟體供應商而言,快速變革是確保客戶購買新機器並定期更新授權的最佳策略。當然,至少有一個社群對運算平台的穩定性擁有既得利益:那就是計算科學社群。如果我們的軟體能在二十年後無需修改即可運行,並得出相同結果,那將是多麼令人欣喜。我們不想進行軟體維護,而且大多數人也無法合理地為自身研究開發的軟體,在超出個人即時需求之外還長期進行維護。指望他人去維護別人的軟體(例如已轉往產業界工作的研究生所留下的軟體),就更不合理了。
實務上,只有被廣泛使用的社群軟體才能獲得足夠長期的維護。但即便是使用這些廣受維護套件的研究專案,通常仍需一些專案專屬的軟體,最起碼也要幾支 Shell 腳本。這也正是計算研究可重現性如此低落的原因之一。
科學社群能否對此有所作為?我相信可以,但我對近期內是否會有行動並不樂觀。科學家恐怕仍會繼續使用商用硬體進行科學計算,這意味著他們必須接受不受其控制的硬體及其相關系統軟體的演變。然而,他們可以在這些不斷演變的底層之上,建構一個穩定的平台,至少適用於其工作中純屬計算的部分。
從根本層面來看,所有圖靈完備(Turing-complete)的軟體表示法都是等價的,且可相互轉換。實務上,效能考量確實限制了程式碼轉換的可行性,但仍有可能定義出一種程式碼表示形式,使其能高效地轉譯至各種底層硬體與系統軟體,從而保持穩定。兩個現實世界的例子分別是 JVM 位元組碼(bytecode)與 LLVM 的中間表示形式(intermediate form)。JVM 位元組碼已存在二十年,證明了其極高的穩定性。LLVM 的中間表示形式並非以穩定為目標,這是因為 LLVM 開發者不希望因承諾某種穩定表示法而限制未來的發展選項。Google 的 PNaCl 專案則試圖無視這項警告,以一種唯有在穩定前提下才有意義的方式使用 LLVM 程式碼。成效如何,時間自會證明。
科學社群大可借鏡現有方法的經驗,定義自己的中間程式碼表示形式,並針對科學應用優化其平台。但如前所述,我對此並不樂觀。這需要數個大型研究與資助組織長期承諾,維持此平台長達數十年。我深信這在經濟上是合理的,因為我確定維護單一平台的成本,遠低於維護眾多科學軟體套件,並不斷重寫那些未被維護的套件。但這需要科學界罕見的共識與承諾程度;迄今僅見於少數大型設施,例如 CERN。
穩定平台所提供的關鍵優勢,正是第一版 ActivePapers 選擇圍繞 JVM 設計的原因。可惜 JVM 在科學計算領域並不受歡迎。這常歸咎於效能不足,儘管此一論點已不如往昔那般成立。JVM 也存在一些設計問題,特別是關於浮點數運算的部分;但同樣的問題也出現在 C 或 C++ 等流行語言上,這並未阻礙科學家使用它們。
更具實用價值的 ActivePapers Python 版本,則是建構在由 Scientific Python 生態系(特別是 Python、NumPy 和 h5py)所定義的平台之上。該平台過去證明具有中等程度的穩定性,其中 transition to Python 3 曾是造成不穩定的重大事件。科學研究的時間尺度跨越……
延伸閱讀
- SciPy — 維基百科
擁有終身課程,而不是訂閱
直接購買單獨的科學 Python 課程,經常享受大幅折扣