自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

哪種編程語言最容易出bug?

開發(fā) 后端
研究人員Baishakhi Ray,Daryl Posnett,Premkumar Devanbu和Vladimir Filkov使用GitHub數(shù)據(jù)進行了一次大規(guī)模的實驗性調(diào)查,主要研究程序員對于哪種編程語言針對某個特定任務(wù)是最好的爭論。研究院通過多重回歸建模、可視化以及文本分析等結(jié)合在一起的方法,研究了靜態(tài)和動態(tài)語言的特性,以及編程語言對軟件質(zhì)量的影響。

最近,ACM發(fā)布了一個關(guān)于編程語言對軟件質(zhì)量的影響的研究報告,在報告中有一些關(guān)于bug的有趣發(fā)現(xiàn)。

研究人員Baishakhi Ray,Daryl Posnett,Premkumar Devanbu和Vladimir Filkov使用GitHub數(shù)據(jù)進行了一次大規(guī)模的實驗性調(diào)查,主要研究程序員對于哪種編程語言針對某個特定任務(wù)是***的爭論。研究院通過多重回歸建模、可視化以及文本分析等結(jié)合在一起的方法,研究了靜態(tài)和動態(tài)語言的特性,以及編程語言對軟件質(zhì)量的影響。

分析得到的結(jié)論可以簡單表述為:

語言設(shè)計確實對軟件質(zhì)量有顯著的影響。最值得注意的是,看起來不允許類型混淆的情況要比允許的稍微好一點,而且在函數(shù)式語言中,靜態(tài)類型也比動態(tài)類型要好一些。我們還發(fā)現(xiàn)函數(shù)式語言比過程語言稍好一些。

這個研究的目的在于闡明編程語言是否會同時影響編程的過程和結(jié)果,重點在于靜態(tài)和動態(tài)語言的比較:

倡導(dǎo)靜態(tài)類型語言強大的人認(rèn)為靜態(tài)可以及早發(fā)現(xiàn)缺陷,對于他們來說預(yù)防遠(yuǎn)比治療要好得多;而動態(tài)類型語言的倡導(dǎo)者則認(rèn)為保守的靜態(tài)類型檢查是開發(fā)資源的浪費,而且還可以依靠強大的動態(tài)類型檢查來捕捉類型錯誤。當(dāng)然,這些爭論大多還是停留在紙上談兵的階段,缺乏事實證據(jù)支撐。

為了進行這項調(diào)查,團隊選擇了GitHub排名前19位的編程語言,并且添加TypeScript作為第20種編程語言,然后以每種語言編寫的前50個項目為樣本,同時放棄了提交次數(shù)少于28次的項目,如果是多種語言提交的項目,那么使用該語言的有效提交次數(shù)少于20次也會被放棄。

 

圖0:哪種編程語言最容易出bug?

然后,如上表所示,這項研究分析了以17種語言開發(fā)的728個項目。這些項目跨越了18年的歷史,囊括了2.9萬名不同的開發(fā)人員,157萬次提交和564625次錯誤修復(fù)提交。

接下來,團隊定義了語言類,區(qū)分了三個編程范例:程序、腳本和功能;兩類類型檢查:靜態(tài)和動態(tài);隱式類型轉(zhuǎn)換是否被禁止或允許,以及管理內(nèi)存或未管理內(nèi)存:

 

圖1:哪種編程語言最容易出bug?

使用關(guān)鍵字搜索錯誤修復(fù)信息的10%來訓(xùn)練一個錯誤分類器,研究人員確定了每個bux-fix提交的原因和影響。

 

圖2:哪種編程語言最容易出bug?

要解決的***個問題是“有些語言比其他語言更容易出現(xiàn)缺陷嗎?”“這是用回歸模型來比較每種語言對所有語言平均缺陷數(shù)量的影響,并針對缺陷修復(fù)提交:

 

圖3:哪種編程語言最容易出bug?

 

[[215685]]

在這張表的頂部是一些變量,這些變量被用來控制可能與之相關(guān)的因素。項目年齡主要是反映了在一些較老的項目中,通常會有更多的缺陷修復(fù);參與的開發(fā)人員的數(shù)量和項目的原始大小也會影響到bug的數(shù)量,最終提交的數(shù)量也是很大影響因素。

具有***正系數(shù)的語言即與缺陷修復(fù)更相關(guān)的編程語言是c++、C、objective – C,以及PHP和Python。而Clojure、Haskell、Ruby和Scala都有顯著的負(fù)系數(shù),這意味著這些語言不太可能導(dǎo)致缺陷修復(fù)提交。對于語言類來說,函數(shù)式語言的缺陷比程序或腳本語言都要少。

研究人員接下來將注意力轉(zhuǎn)移到缺陷的傾向上,即缺陷修復(fù)對每種語言總提交數(shù)的比率,并生成了一個熱圖,其中顏色越深表明越容易出現(xiàn)錯誤:

 

圖4:哪種編程語言最容易出bug?

從上面的熱圖中可以得出結(jié)論:應(yīng)用領(lǐng)域與語言缺陷傾向性之間沒有一般的關(guān)系。但是觀察語言類和錯誤類別之間的關(guān)系表明:

缺陷類型與語言緊密相關(guān);內(nèi)存錯誤和并發(fā)錯誤等一些缺陷類型也依賴于語言原語。對于特定類別,語言比缺陷整體來說更重要。

 

圖5:哪種編程語言最容易出bug?

由于這個熱圖顯示了Proc-Static-Implicit-Unmanaged 類與并發(fā)性和內(nèi)存錯誤之間的強關(guān)系。它還表明,靜態(tài)語言通常更容易出現(xiàn)故障和性能錯誤,其次是 Functional-Dynamic-Explicit-Managed 語言,如Erlang。

最終結(jié)論

數(shù)據(jù)表明,函數(shù)式語言優(yōu)于過程語言,不允許隱式類型轉(zhuǎn)換要比允許更好;靜態(tài)類型優(yōu)于動態(tài)類型。而且,管理內(nèi)存使用比未管理好。此外,一般而言,語言的缺陷傾向與軟件領(lǐng)域沒有關(guān)聯(lián)。此外,與總體bug相比,語言更與單個的bug類別相關(guān)。

責(zé)任編輯:未麗燕 來源: 程序師
相關(guān)推薦

2013-04-11 09:51:43

編程語言

2020-12-30 10:38:54

漏洞編程語言加密

2011-12-20 15:57:32

程序員

2020-05-11 10:25:38

編程語言J開發(fā)Python

2009-05-13 11:40:19

編程語言開發(fā)語言Perl

2020-05-28 10:24:42

漏洞編程語言應(yīng)用安全

2017-03-10 17:00:28

編程語言

2019-04-24 08:34:46

編程語言PythonJava

2021-12-29 22:08:17

編程語言CPython

2021-01-13 10:40:42

編程語言PLCGraph

2021-09-18 14:59:58

語言PythonC語言

2011-08-29 09:19:25

c語言

2011-05-30 15:00:06

編程語言

2013-07-19 09:31:09

2019-01-25 18:00:12

編程語言PythonJava

2014-02-04 19:44:23

編程語言開發(fā)

2011-12-26 09:12:24

編程語言

2021-03-23 14:50:16

編程語言Rust漏洞

2022-05-17 09:32:24

Bash編程Linux

2010-02-23 09:24:35

點贊
收藏

51CTO技術(shù)棧公眾號