有很多令人困惑的代碼可以導(dǎo)致編程中的錯(cuò)誤,最近科羅拉多大學(xué)科羅拉多斯普林斯分校和美國(guó)賓夕法尼亞州立大學(xué)的研究人員進(jìn)行了一項(xiàng)新的研究,試圖證明:許多代碼模式在統(tǒng)計(jì)學(xué)意義上增加了誤差,而不是模式的等效代碼,并且刪除這些代碼模式對(duì)程序員了解大型項(xiàng)目代碼很有幫助。
這項(xiàng)研究解決了源代碼中的誤解,并嘗試證明“能夠可靠地識(shí)別和刪除可能導(dǎo)致誤解的代碼并將提高生產(chǎn)力降低維護(hù)成本。”結(jié)果提供了針對(duì)通用編碼的建議,并提出了擴(kuò)展現(xiàn)有指南的新方法。
源代碼具有雙重目的。它將程序指令分別傳達(dá)給機(jī)器和人類(lèi),當(dāng)程序員對(duì)于一段代碼的期待行為與機(jī)器的執(zhí)行行為不同時(shí),問(wèn)題就出現(xiàn)了。
換句話(huà)說(shuō),程序員對(duì)一段代碼的行為解釋與機(jī)器不同。雖然在某些情況下(例如涉及隨機(jī)性,API知識(shí)不明確或未定義行為)的情況下,解釋的差異自然會(huì)發(fā)生,但它也可能發(fā)生在小型獨(dú)立的代碼行中,這些易于誤解的設(shè)計(jì)模式自然會(huì)導(dǎo)致代碼中的錯(cuò)誤。
然而,確定和刪除導(dǎo)致混亂的程序元素不僅會(huì)導(dǎo)致更少的bug。根據(jù)研究,了解源代碼是不斷成功的軟件項(xiàng)目最重要的元素之一。這些錯(cuò)誤通常導(dǎo)致巨大的成本和錯(cuò)誤的產(chǎn)品,并且有無(wú)數(shù)公司為此支付了高昂的費(fèi)用。這些錯(cuò)誤的后果可能包括生產(chǎn)率下降,產(chǎn)品故障和更高的成本。
研究人員尋求并驗(yàn)證導(dǎo)致程序員誤解的最小常規(guī)代碼。導(dǎo)致誤解的這些模式簡(jiǎn)稱(chēng)為“混亂原子”或“原子”,它們可以作為理解使代碼混亂因素的經(jīng)驗(yàn)和基礎(chǔ)。
該組研究人員選擇的程序已經(jīng)被人們認(rèn)可(國(guó)際奧委會(huì)獲獎(jiǎng)?wù)?mdash;—國(guó)際C語(yǔ)言混亂代碼大賽)和孤立的小型代碼,通常包含在一行內(nèi),這些IOCCC程序是讓程序員混亂的根本原因。
73名有經(jīng)驗(yàn)的參與者進(jìn)行實(shí)驗(yàn),以發(fā)現(xiàn)這些代碼模式中的哪些代碼模式引起統(tǒng)計(jì)學(xué)上的顯著混亂(即,主程序員相信包含該模式的程序行為與C語(yǔ)言規(guī)范不同)。
接下來(lái),他們從大的混亂程序中消除這些混亂原因的影響,也來(lái)自國(guó)際奧委會(huì)獲獎(jiǎng)?wù)摺Mㄟ^(guò)保留轉(zhuǎn)換應(yīng)用行為去除識(shí)別的原子并使用這些程序作為第二個(gè)實(shí)驗(yàn)的基礎(chǔ)來(lái)簡(jiǎn)化IOCCC程序。
招募了10.43名未參加實(shí)驗(yàn)的程序員。研究人員想確定:通過(guò)澄清這些原子,可以減少多少程序錯(cuò)誤。
結(jié)果
通過(guò)實(shí)驗(yàn)研究,證明了混亂原子的存在和影響。通過(guò)國(guó)際C語(yǔ)言混亂代碼大賽的逆向工程的獲勝者,最終生成了19個(gè)潛在原子的部分列表。在實(shí)驗(yàn)中,與功能等效的代碼片段進(jìn)行對(duì)比,以刪除混亂原子。在19個(gè)提出的原子中,15個(gè)在統(tǒng)計(jì)學(xué)上被證實(shí)對(duì)受試者有明顯的混淆。
他們的結(jié)果提供了針對(duì)通用編碼建議的證據(jù),并提出了擴(kuò)展現(xiàn)有指南的新方法。具體情況可以訪(fǎng)問(wèn):https://atomsofconfusion.com/