選擇藍(lán)色藥丸,故事結(jié)束,你將在床上醒來。 選擇紅色藥丸,我就帶你看看這個(gè)世界的bug。 有大量沒有或者幾乎沒有bug的程序,比如超市的收銀機(jī)中使用的程序,比如你購買的計(jì)算器中的程序等等。這些程序都有一個(gè)共同的特點(diǎn),就是功能非常明確,用戶的使用方式完全可以預(yù)測,同時(shí)程序總的來說相對(duì)簡單。 但我們使用的更大型的程序,比如操作系統(tǒng)以及大型游戲程序,它們注定了bug重重,而且許多bug甚至只有在大量用戶的使用過程中才有可能暴露出來,還有一些bug只有當(dāng)你“惡意”的使用軟件的時(shí)候才會(huì)暴露出來,比如非法獲取系統(tǒng)權(quán)限。要求一個(gè)復(fù)雜的大型軟件,沒有任何bug,那基本上是強(qiáng)人所難,簡單說就是這超出了人類的能力,而我們制造的用來開發(fā)這些大型軟件的軟件本身就不是完美的。但我們當(dāng)然希望盡可能完美,因此在軟件行業(yè)專門引入了軟件測試工程師。并且,希望盡可能減少bug的數(shù)量,完美做不到,但趨近于完美是有可能的。 目前在軟件測試領(lǐng)域中對(duì)bug出現(xiàn)的原因有如下總結(jié),而除了軟件開發(fā)行業(yè)之外,這些總結(jié)也同樣有益,因?yàn)槿祟惓鲥e(cuò)的模式具有相似性,所以不僅僅是程序有bug需要不斷的修正,我們的社會(huì)何嘗不是如此。 固有的復(fù)雜性 比如,為了方便用戶而引入的圖形化和操作互動(dòng),同時(shí)也是bug之源,但為了便利,我們只能忍受,并盡可能降低bug的數(shù)量。除此之外,大型軟件中涉及到的許多工具,本身就不夠完美,但我們還得使用它們,比如網(wǎng)絡(luò)通信協(xié)議,同樣不完美,但我們不能等到完美那一天才上網(wǎng)。 交流不夠、誤解或者沒有進(jìn)行有效交流目的不明,不知道要實(shí)現(xiàn)什么功能不需要實(shí)現(xiàn)什么功能的情況下,就開始開發(fā)。 程序設(shè)計(jì)錯(cuò)誤和所有的人一樣,軟件開發(fā)人員也會(huì)出錯(cuò)。 開發(fā)中途,需求變化需求改變帶來的復(fù)雜性可能導(dǎo)致錯(cuò)誤,還可能影響工程參與者的積極性。 時(shí)間壓力軟件開發(fā)工具 如何選擇合適的軟件開發(fā)工具,能在保證完成開發(fā)的情況下,保持簡單,并不是個(gè)容易的選擇。程序員之間為了使用哪種開發(fā)工具更合適,可以爆發(fā)世界大戰(zhàn)。 世界上第一個(gè)計(jì)算機(jī)bug,一只真bug。 1945年9月,哈佛大學(xué)的 Mark II Aiken Relay Calculator的管理員,找到了影響這臺(tái)原始計(jì)算機(jī)運(yùn)行故障的原因,一只飛蛾。于是他將該事件寫到管理日志中,并將該飛蛾也貼在上面,同時(shí)將bug一詞正式引入了計(jì)算機(jī)領(lǐng)域之中。 “First actual case of bug being found.” |
|