經(jīng)常會有剛?cè)胄械某绦騿T試圖比較各大編程語言之間的差別,然后選擇自己認(rèn)為較好的編程語言學(xué)習(xí)。雖然圈子里公認(rèn)各大編程語言之間沒有好壞之分,只有是否合適,但不知廣大程序員有沒有思考過編程語言對軟件質(zhì)量的影響呢。
近日,研究人員Baishakhi Ray、Daryl Posnett、Premkumar Devanbu、Vladimir Filkov 從GitHub收集了大量數(shù)據(jù)(728個項目,6300萬SLOC,29,000作者,150萬提交,17種語言)以回答這個問題:編程語言與軟件質(zhì)量之間的關(guān)系是什么呢?
他們發(fā)現(xiàn):
編程語言確實對軟件質(zhì)量有影響,但影響程度一般;
不允許類型混淆的編程語言比允許類型混亂的要更好一些;
在函數(shù)式編程語言中,靜態(tài)類型比動態(tài)類型更好;
函數(shù)式編程語言比過程式編程語言效果差。
結(jié)論:
函數(shù)式編程語言編寫的軟件質(zhì)量顯然不如過程式編程語言,C、C ++、Objective-C、Php和Python與更多數(shù)量的缺陷修復(fù)相關(guān),而Clojure、Haskell、Ruby和Scala則不太可能導(dǎo)致缺陷修復(fù)。而在函數(shù)式編程語言中,靜態(tài)類型語言表現(xiàn)更好。語言類型與軟件缺陷之間存在很小但重要的關(guān)系,函數(shù)式編程語言比過程式語言或腳本語言的缺陷更多。缺陷類型與編程語言密切相關(guān), 一些缺陷類型,如內(nèi)存錯誤和并發(fā)錯誤取決于語言原語。對于具體類別而言,編程語言對整體缺陷的影響更大。
上圖顯示的第一列為編程語言,最后一列為對應(yīng)的bug修復(fù)數(shù),不難看出Python的41.9明顯高于Java的35.9,如果Python想取代Java,似乎還欠缺很大火候啊!此外,C語言的182.6實在是多得離譜,可能是因為C語言問世較早,所以經(jīng)歷的摸索期和修復(fù)期更長的關(guān)系,C++、C#或許與C語言有著相同的原因。
本次實驗所選用的語言和項目數(shù)據(jù)是從公共GitHub數(shù)據(jù)庫GitHub Archive中提取出來的。研究人員從GitHub中選擇了前20種編程語言(不含CSS、Shell腳本和Vim腳本,因為它們不被視為通用語言)并添加了Typescript。同時,檢索了這些主流編程語言的前50個開源項目!
對于每個項目(共728個),研究人員使用git下載了未合并的提交,包括提交日志、作者日期和作者姓名。根據(jù)每個文件添加、刪除的行計算代碼流失和每個提交修改的文件數(shù),然后從修改的文件擴(kuò)展中檢索與每個提交相關(guān)聯(lián)的語言。對于每個提交,通過從相應(yīng)項目的第一次提交中減去其提交日期來計算其提交周期,并計算其他項目相關(guān)統(tǒng)計信息,包括項目的最大提交周期和參與的開發(fā)人員總數(shù)。研究人員通過搜索錯誤相關(guān)的關(guān)鍵字,確定了對個別項目的錯誤修復(fù)提交,比如“錯誤”、修復(fù)”、“問題”、“不正確”、“故障“、”缺陷”等。
然后,根據(jù)其原因和影響將錯誤分為兩個階段:關(guān)鍵字搜索和監(jiān)督分類。研究人員使用回歸模型記錄軟件項目相關(guān)的缺陷提交數(shù)量。
這些結(jié)果是否對程序員選擇編程語言有所幫助呢?會不會動搖你現(xiàn)在的基本選擇呢?評論告訴我們吧!