回覆列表
  • 1 # 碼農科普君

    這個問題看起來是我們日常經常碰到的問題,實際上背後有很深的理論原理。跟這個問題直接相關的定理叫萊斯定理(Rice"s theorem),而萊斯定理是從圖靈停機問題引申推匯出來的。

    圖靈停機問題

    停機問題是這麼描述的:

    是否存在一個過程(演算法):該過程(演算法)以一個計算機程式以及該程式的一個輸入作為輸入,並判斷該過程(演算法)在給定的輸入上,在有限的步驟內是否會結束(停止)

    圖靈在1936年用我們眾所周知的“反證法”證明這樣的一個過程(演算法)不存在。

    首先假定這樣的過程(演算法)存在,那麼設計這樣一個停機圖靈機,即根據輸入,在有限步驟內停機時,輸出Yes,否則輸出No。如下圖:

    然後,再設計第二臺圖靈機,用來檢測第一臺停機圖靈機。第二臺圖靈機工作原理是如果檢測到第一臺停機圖靈機停止了,則第二臺進入無限死迴圈;如果檢測到第一臺停機圖靈機不停機,則第二臺圖靈機會停機,並輸出結果“不停機”。

    如下圖:

    這顯然邏輯上是不可能的。也因此證明停機問題是不可判定的——我們無法判斷程式是否會結束(停止)。

    萊斯定理(Rice"s theorem)

    萊斯定理的內容是對於圖靈機使用的特定語言,我們無法判定它是否具有非平凡性。這句話放到程式語言上就是說要想寫出完美除錯其他程式的計算機程式,是不可能做到的事情,也就是說我們無法避免軟體出現Bug。

    綜上,Bug是永遠修不完的。Bug的多少,體現了程式設計師水平的高低。

  • 2 # donghaidadao

    你怎麼看待你還要經常拉屎撒尿,這是一個很常見的小BUG。你怎麼看待你的生病,這是難診斷的BUG,你怎麼看待你闖禍和倒黴出事故,這是不可預料的BUG。

  • 3 # 取名不符規範

    寫程式就像寫作文,不過是寫給機器看的。寫作文簡單的錯誤就是錯別字,標點符號錯誤,進一步是用詞不當,表述不準確,也有可能審題不嚴,或者前後矛盾,最糟糕就是寫跑題了,整個功能不能用。

  • 4 # Fyatto3K

    永遠不可能徹底消滅bug!

    世界top coders聯盟主席Boss Fat給出了關於bug的三大定律:

    正確的程式碼,在某些環境中,會變成BUG;

    正確的程式碼,在某些人眼中,會視為BUG;

    正確的程式碼,在上完線之後,會引起BUG。

    繼而,基於此三大鐵律,精通社會學的Boss Fat給出了宇宙終極定理:

    只要某事物被至於某系統中,與其他事物配合驅動系統執行,則此事物無法徹底擺脫BUG。

    仔細想想,確是如此。

  • 5 # 碼農要信佛

    這和工地上搬磚是有區別的,程式執行是非常嚴謹的,必須遵循規定的業務邏輯。如果哪天要求牆體上的磚塊相互之間的公差在1毫米之內,相信也會出現大量的bug

  • 6 # 會點程式碼的大叔

    程式出現BUG,幾乎是不可避免的,我在程式設計師這個行業也摸爬滾打十多年了,還沒有見過寫程式碼保證不會出現BUG的大神,那麼程式設計師程式設計出現BUG的原因是什麼呢?咱們一起分析分析:

    內因

    出現問題,首先還是要找找自身的原因,在整個軟體開發流程的每一步,都可能會出現BUG。

    需求理解有問題:軟體開發的本質就是把需求變成程式碼,如果需求理解有問題,這就意味著第一步就邁錯了。

    設計有疏漏:程式碼開發之前,需要想清楚流程是怎麼樣的,哪裡需要判斷,哪裡有分支,如果在設計過程中,一些業務點沒有考慮掉,那肯定會造成很大的缺陷。

    編碼不合理:首先在開發本次需求的時候,難免有不合理的地方,而更為恐怖的是,開發一個新功能,老功能不好用了;改了一個BUG,又出來三個BUG。

    自測不充分:很多程式設計師敲完程式碼之後,簡單測試一下程式碼,就扔給測試人員了,而並沒有做好自測,特別是單元測試、整合測試用例,也很少有人編寫。

    外因

    自我檢討做完了,也得發發牢騷,找找外部的原因。

    開發時間緊:最常見的一個問題,“這個下週必須上”,“週五必須提測”,這種話也聽得不少了,在這麼短的時間內開發完成,必然會造成設計、開發上的問題。

    需求不確定:這是造成產品經理和程式設計師“打架”的主要原因,有的時候需求不明確,需求人員都沒有想清楚;有的時候是需求變化快,能有多快呢?按照需求A開發,開發到一半的時候,需求已經變了...

    只測試表面:有些公司的測試人員,在測試過程中只測試頁面,而不會關注介面、日誌、資料庫中的內容。

    人員流動率高:一個產品經理/開發/測試人員剛對這個系統熟悉,就離職了,只能再招一個“新手”,在他成長起來之前,需求/開發/測試方面的工作一定是不充分的。

    如何改善

    其實知道造成BUG的原因,也就很容易知道如何降低BUG率了。

    需求把控:產品、開發、測試多方要充分溝通,保證對需求的理解是一致的;

    設計和開發過程考慮充分,把控程式碼質量,做好程式碼Review;

    充分做好測試,包括開發人員和測試人員,利用自動化測試工具,避免“開發新功能影響老功能”的問題。

    給開發、測試留出合理的時間;

    穩定團隊,降低人員流動率。

  • 7 # 漫步雲端

    從業生涯中最氣的一次就是測試說沒問題,臨近上線時發現了重大bug!

    某日,天朗氣清,臨近下班點,正準備收拾東西回家,結果專案經理半道殺出來:“慢著,發現重大Bug,你今晚留下加班,不然恐怕會影響明天的上線進度。”

    我(一臉無奈的轉向一旁測試):“前幾天你不都說沒問題了嗎!”

    測試(露出無辜相):“是啊,當時還反覆檢查了好幾遍沒啥問題......”

    此時此刻的心情,瞬間沒那麼好了。想說其實作為程式設計師,誰都不想自己的程式出bug,但有時候又很難避免,這也證明我們還有很多可進步的空間,未來任重而道遠。

  • 8 # 全棧之家

    只要是人做事情,沒有人能保證不犯錯誤,這就是bug產生的原因。我們只能通過各種事前事後的保障措施,爭取少犯錯誤,絕對避免錯誤是不可能。

  • 9 # DKink

    你每次考試都能得100分嗎?就是計算機也有算錯的時候,瞭解下Intel的浮點運算錯誤事件。即使是機器製造也會有異常的時候。

  • 10 # 大學生程式設計指南

    從事程式設計也有些年頭了,也算是在程式設計領域見過世面的,就沒見過沒有bug的程式,程式的功能越多越容易出bug,所以外行人特別不理解程式設計師整天忙活些什麼東西,東西寫完直接提交不就可以了嘛,為什麼整天加班,天天盯著電腦還有這麼多事情沒搞定。

    這是外界對於程式設計師工作不理解一個典型的表現,程式設計師在開發功能模組的時候,設計框架的時候還是要儘量減少bug的出現,同時還要能夠避免一些不可能事情的發生,所以越是頂級的高手,越是不輕易下手搞程式碼,幾乎要把所有的事情都想通了,覺得差不多了,就開始大量程式碼寫作過程中了,其實真正寫程式碼的時間只佔總時間百分30都不到,大部分時間是在設計和除錯bug的過程中。

    即使再厲害的程式設計師也不能把所有的技術細節都想的面面俱到,而且在現實中留給程式設計師的開發時間少的可憐,所以有些程式出問題其實不一定是程式設計師本身造成的,現在很多網際網路公司已經形成的慣例,一週至少釋出一次版本,甚至一週兩次版本的釋出,很多時候快到下班點的時候,產品經理過來說有個新需求要加,今晚就要釋出版本,通常這種情況比較多,好在網際網路公司大部分屬於應用級的開發,多少還能經得起折騰,如果是每天傷筋動骨的折騰產品早晚出問題。

    有很多搞笑的程式設計師玩個佛祖保佑的註釋其實這東西起不到什麼作用,就是程式設計師玩的一個小遊戲而已,不修改bug就不是程式設計師了,程式設計師和bug是魚和水的關係,誰都離不開誰,所以工作中脫離開了bug,基本上意味著脫離程式設計師崗位了,作為開發多年的程式設計師嘗試分析下為什麼程式設計師離不開bug,或者講如何減少bug的出現?

    1.良好的程式碼習慣,在寫程式碼的時候就把一些可能存在的問題遮蔽掉,減少警告程式碼的出現,積少成多很容易出問題。

    3.在有時間的情況下可以寫寫單元測試,保證單個模組功能的穩定性,很多程式設計師覺得很麻煩,一旦出了問題再去補救這個時間成本將更大。

    5.充分理解功能需求,吃透需求就能減少冤枉路,很多人為了趕時間還沒徹底明白咋回事就著急寫程式碼了,這種最容易出錯,要明白提出這個需求具體場景是什麼,在設計模組的時候就能做到有的放矢。

    相對來講優秀的程式設計師出的bug會少一些,新手程式設計師更加容易出問題,作為一個程式設計師要懂得在解決bug過程中讓自己成長。

  • 中秋節和大豐收的關聯?
  • 孩子多大離婚才能減少心理陰影?