程序錯誤

程序錯誤

程序錯誤,即英文的Bug,也稱為缺陷、臭蟲,是指在軟體運行中因為程序本身有錯誤而造成的功能不正常、死機、數據丟失、非正常中斷等現象。早期的計算機由於體積非常龐大,有些小蟲子可能會鑽入機器內部,造成計算機工作失靈。史上的第一隻 "Bug" ,真的是因為一隻飛蛾意外走入一電腦而引致故障,因此Bug從原意為臭蟲引申為程序錯誤。一些有趣的Bug有時也會成為一種樂趣。在電腦遊戲中,一些Bug,假如不令遊戲出現大錯誤的話,經常會變成一種玩遊戲時的秘技。

定義


中文常稱BUG為“缺陷”。而且,“缺陷”一詞更能反映事情的本質。因為“臭蟲”是從外面飛進去的,並非程序本身有問題。而程序本身存在的問題,是程序原來就具有的。因此,在這裡將BUG翻譯為“系統漏洞”更合適。

由來


Bug一詞的原意是“臭蟲”或“蟲子”。但是現在,在電腦系統或程序中,如果隱藏著的一些未被發現的缺陷或問題,人們也叫它“bug”,這是怎麼回事呢?
原來,第一代的計算機是由許多龐大且昂貴的真空管組成,並利用大量的電力來使真空管發光。可能正是由於計算機運行產生的光和熱,引得一隻小蟲子(Bug)鑽進了一支真空管內,導致整個計算機無法正常工作。研究人員費了半天時間,總算髮現原因所在,把這隻小蟲子從真空管中取出后,計算機又恢復正常。後來,Bug這個名詞就沿用下來,用來表示電腦系統或程序中隱藏的錯誤、缺陷、漏洞等問題。
1945年,計算機還是由機械式繼電器和真空管驅動的,機器有房間那麼大。體現當時技術水平的MarkⅡ,是由哈佛大學製造的一個龐然大物。當技術人員正在進行不整機運行時,它突然停止了工作。他們爬上去找原因,發現這台巨大的計算機內部一組繼電器的觸點之間有一隻飛蛾,這顯然是由於飛蛾受光和熱的吸引,飛到了觸點上,然後被高電壓擊死。
與Bug相對應,人們將發現Bug並加以糾正的過程叫做“Debug”(中文稱作“調試”),意即“捉蟲子”或“殺蟲子”。
後來就直接用bug 在現在很多的軟體測試中 都用Bug來說明那些問題。
“bug”術語的發明,因為格蕾絲·霍波(Grace Murray Hopper,是一位為美國海軍工作的電腦專家,也是最早將人類語言融入到電腦程序的人之一。)她公布過早期電子計算機的一個故障原因,通常錯誤地歸功於她。這個版本的故事源自下面這段話:“在1946年,當霍波退役后后,她加入哈佛大學的計算機實驗室,繼續研究馬克II型和馬克III型計算機的工作。操作員在追蹤馬克II型的錯誤時發現繼電器中有一隻飛蛾,遂有bug術語。這個bug被仔細移除,並被貼在日誌本上。這帶來的第一個bug,就是我們今日所說的錯誤(error)或程序中的故障(glitch)。”
格蕾絲·霍波其實並不是那位發現這隻飛蛾的人,只是她欣然承認了而已。雖然日誌本上的日期是1947年9月9日,不過有時候被錯誤地報導成1945年。發現飛蛾的操作員,包括威廉姆·比爾·伯克,伯克在弗吉尼亞州達爾格倫的海軍武器實驗室,熟悉工程術語,好逗樂,給飛蛾寫下了“首個發現bug的實際案例”。霍波喜歡講述這個故事。這個日誌本現存於史密森尼國立美國歷史博物館,飛蛾還完整地貼於其上。

概念


所謂“(Bug)”,是指電腦系統的硬體、系統軟體(如操作系統)或應用軟體(如文字處理軟體)出錯。硬體的出錯有兩個原因,一是設計錯誤,一是硬體部件老化失效等。
軟體的Bug,狹義概念是指軟體程序的漏洞或缺陷,廣義概念除此之外還包括測試工程師或用戶所發現和提出的軟體可改進的細節、或與需求文檔存在差異的功能實現等。僅就狹義概念而言,軟體出現Bug的原因有:
1、對各種流程分支考慮不全面;
2、對邊界情況的處理不到位;
3、編碼時的手誤。
任何軟體在發布時都不可能是絕對的零Bug。目前在軟體過程管理中通行的CMM(能力成熟度模型)中規定的軟體質量標準是(Bug個數/千行源碼):
CMM1級 11.95
CMM2級 5.52
CMM3級 2.39
CMM4級 0.92
CMM5級 0.32
從電腦誕生之日起,就有了電腦BUG。第一個有記載的bug是美國海軍的編程員,編譯器的發明者格蕾斯·哈珀(GraceHopper)發現的。哈珀後來成了美國海軍的一個將軍,領導了著名計算機語言Cobol的開發。
1945年9月9日,下午三點。哈珀中尉正領著她的小組構造一個稱為“馬克二型”的計算機。這還不是一個完全的電子計算機,它使用了大量的繼電器,一種電子機械裝置。第二次世界大戰還沒有結束。哈珀的小組日以繼夜地工作。機房是一間第一次世界大戰時建造的老建築。那是一個炎熱的夏天,房間沒有空調,所有窗戶都敞開散熱。
突然,馬克二型死機了。技術人員試了很多辦法,最後定位到第70號繼電器出錯。哈珀觀察這個出錯的繼電器,發現一隻飛蛾躺在中間,已經被繼電器打死。她小心地用鑷子將蛾子夾出來,用透明膠布帖到“事件記錄本”中,並註明“第一個發現蟲子的實例。”
從此以後,人們將計算機錯誤戲稱為臭蟲(bug),而把找尋錯誤的工作稱為捕殺蟲子(debug)。
程序中隱藏的功能缺陷或錯誤。由於現在的軟體複雜程度早已超出了一般人能控制的範圍,如Win95Win98這樣的較成熟的操作系統也會不定期地公布其中的Bug。如何減少以至消滅程序中的Bug,一直是程序員所極為重視的課題。