導航:首頁 > 程序命令 > 程序員為啥有bug

程序員為啥有bug

發布時間:2022-05-27 02:57:42

❶ 為什麼程序員要一直改bug

即使是那些經過嚴格訓練的程序員還是不可避免出現bug
軟體越復雜,就意味著代碼行數越多
只要你在編程,即使你很擅長寫代碼,也一定會有錯誤和bug出現
所以才有不斷的優化和更新

❷ 為什麼有些出入職場的程序員,必須要經歷加班修改bug的過程

我個人感覺不是所有職場的程序員都要經歷加班修改的過程,就算不是程序員其他工作的人員也會經歷。上班兒加班兒,這都是很正常。有的時候任務催的很急,肯定是要加班完成的。這些都是常識。只是職場的程序員加班。修改的比較多。程序員他進行的問題的解剖需求,各方面程序的分析運行也是非常多的。所以職場的程序員面對加班修改的經歷會比較多。




以上的情況是想說通常加班的人如果偶爾的話還是可以理解的,畢竟現在的工作都會有時候加點班。就是出來工作的,又不是出來享福出來玩的。所以也不是說職場的程序員必須要經歷加班修改,只是做的不對或者催稿的情況下會進行加班修改的過程。

❸ 為什麼總有無數的Bug困擾著程序員 – 碼農網

下面就是為什麼我們的軟體之所以依然充滿漏洞的5大原因:
1.人的天性
大多數——當然不是全部——軟體bug源於我們自己犯的錯誤。雖然有些是因為軟體編碼工具和編譯器發生了意外,但是大部分的錯誤得歸咎於我們自己。
無論我們受到的SDL培訓和安全工具有多麼強大,只要我們還是人,我們就會犯錯。如果你想問為什麼電腦軟體會有這么多的漏洞,歸根到底是因為,人的天性就是容易犯錯。
也就是說,我們在減少人為錯誤方面做得還不夠。有很多程序員因為沒有受到足夠的SDL培訓(有的甚至乾脆就沒有培訓),所以根本就沒有安全編程的理念。有時候我特別奇怪:有那麼多的程序員以寫安全軟體為生,卻居然不懂如何安全地編程。別不信,我敢打賭,你正在運行的銀行安全軟體中的bug不會比它能提供的保護措施少,搞不好甚至更多。
但是即使是那些經過嚴格訓練的程序員還是不可避免出現bug。舉個例子,前不久有個自鳴得意的傢伙發明的使用HTML標記欄位確定顏色的緩沖區在瀏覽器中溢出了。不像以前還要輸入FFFFFh之類的東西,黑客甚至可以直接執行顏色域的代碼,從而導致瀏覽器過度消耗資源、緩沖區溢出。看到沒有,這就是漏洞!而且很少會有人能預料到這種情況。
2.不斷增加的軟體復雜性
就其本質而言,軟體越復雜,就意味著代碼行數越多。只要你在編程,那麼即使你有多擅長寫代碼,也一定會有錯誤和bug出現。有人曾說,如果你能做到每50行代碼中只出現一個錯誤,那你就已經做得相當好了。大多數程序員差不多每隔5至15行就會犯錯。想像一下,這么說吧,一般性的Linux內核擁有超過1500萬行的代碼,有多少bug你自己算吧!
即使沒有編碼錯誤,互聯網時代應用程序的整體互動性也是漏洞被攻擊的途徑。大多數程序員不得不和其他API協作,保存和檢索文件,在多種設備上正常工作。所有這些過程都會增加被成功擊破的概率。
而要防守的話,則需要寫更多的代碼,因為得抵禦各種不同的攻擊渠道。這么說吧,如果有一個只有30條匯編語言指令的惡意程序,那麼針對相應的防守,你可能至少得寫50000條匯編語言指令!
3.Fuzzers也是人寫出來的
新近冒出來的Fuzzers軟體主要用於掃描軟體漏洞。Fuzzers——以及其他用於尋找編碼錯誤和漏洞的任何程序——都是人寫出來的,還是這句話,是人就會犯錯誤。例如Fuzzers是不會發現顏色屬性的緩沖區溢出這種情況的,這是因為我們在寫Fuzzers的時候沒有考慮這一方面。不過當我們意識到這一點並對Fuzzers進行更新之後,就能做到去查找各種類似的緩沖區溢出條件的欄位。簡而言之,我們要Fuzzers做什麼,它才會去做什麼。
4.缺乏對供應商的問責
許多安全專家抱怨,只要我們不能找到證據起訴供應商的軟體缺陷,我們就永遠不會變得更安全。我贊同這一點,增加對供應商的問責有助於降低安全風險,但是同時卻有可能會減緩進度。不過如果軟體公司比現在更能擔當起責任來,那麼我想我們能在手機上、電腦上能自由自在沖浪的感覺會更爽。
但是成功源於功能和速度,而非安全。社會現狀決定了我們必須犧牲一部分安全和保障去換取新鮮感。這不一定是壞事——因為能讓我們成功得更快。但是這樣一來我們就不得不承擔這樣做的後果。不過到目前為止,我們還是心甘情願為了添加更酷的新鮮玩意兒而面對更多的風險。

5.缺乏對黑客的問責
現實是上面沒有一條能很快解決。但是軟體出現漏洞就其本身而言,真不是什麼大問題。說它脆弱是因為這些軟體在面對惡意攻擊的時候毫無抵擋之力。除非我們能制止黑客的猖獗行徑,否則惡意軟體將會一直困擾著我們。
但是我依然深信,將來有一天我們的互聯網會有更好的普遍標准出台,我們能在現實中及時地將那些損害大家利益的傢伙繩之以法。不過在此之前,我們還是得不斷地寫補丁,在黑客的狂轟濫炸下苟延殘喘。

❹ 程序員為什麼要一直改bug,不能一次性寫好嗎

軟體可能在使用過程中沒有任何問題,但不符合產品的預期下圖源自「How projects really work?」,很形象的突出了客戶需要的產品和最終得到的產品不一致。


所以軟體想要變得成熟,Bug收集和處理機制是非常有必要的,比如:會影響客戶使用的優先順序高的Bug要優先修復。Bug是軟體的影子,也是程序員的噩夢實際上不能存在沒有bug的軟體,Bug和軟體如影隨形。就像我們使用的Windows,窮盡無數優秀的軟體工程師來設計給用戶優秀的桌面體驗,但也有各種層出不窮的bug。

程序員對Bug有多愛就有多恨,Bug無處不在,即使再牛逼的程序員也逃脫不了Bug的魔掌。想要完全避免Bug幾乎是不可能的,所以也不在一次性就寫好的程序。以上個人淺見,歡迎批評指正。認同我的看法,請點個贊再走,感謝!喜歡我的,請關注我,再次感謝!

❺ 程序員寫的程序里的bug,會不會是鬼造成的

但大部分程序員都有一個問題就是不太願意測試自己的代碼。他們草草的調式完成以後就認為工作結束,測試那是測試人員的工作。
1. 影響了程序員自己的聲譽
2. 影響了產品的質量
3. 影響了客戶的信任度
4. 這個時候再 DEBUG 難度增大了許多。
大的不說,就說多自己聲譽的影響吧。如果你的程序總會有這樣那樣的 BUG ,你得到收益會減少,即使你寫了很多代碼。
程序員必須克服一些自身的致命缺點才能夠從根本上解決這個問題。那麼這個問題是什麼?前面我們已經提到,程序員對自己的代碼都非常寬容,認為那是正確的沒有問題。實際上這種想法比較正常,程序是通過程序員思考和設計之後才寫出來,程序員不會將自己認為不正確的東西寫到代碼里,而到這個時候都一直假設程序是正確的;但人非聖賢,怎麼可能不犯錯誤來。實際上程序員在對待其他程序員時候的態度就很好,帶著一種挑剔和學習的態度;但一旦對待自己的代碼就很難這么做;這就是最致命的。程序員也必須對自己的代碼帶著挑剔和學習的態度;這個基礎是假設自己的代碼是錯誤的,然後需要做的是怎麼樣證明自己的代碼是正確的。程序員自身可以在程序生成的每個階段做這些工作:仔細的設計(這個時候畫點時間是值得的,必須保證我們對自己的程序有清晰的輪廓後才能開始動手寫)、編寫代碼時、單元測試(單元測試的重要性就不在贅婿了)、功能測試。
仔細的設計:這個的仔細是說在程序員編寫代碼之前,其必須對代碼的整個結構以及邏輯結構有明確的清晰的了解,只有這個時候才可以去寫代碼。這里沒有談到文檔,但我說到了一定要清晰的思路,但清晰的思路不是每個人都可以在腦袋中直接形成的,很多人都是普通人,沒有辦法在腦袋瓜中把所有問題都想清楚,那麼就記下來,特別對於復雜的邏輯。
編寫代碼:對於沒有把握的代碼,例如:新設計的演算法,最好保證其正確性。可以單獨將這部分測試,這可以讓代碼模塊化的同時又保證了代碼的正確性。一句話:少量的代碼保證質量還是比較簡單的。
單元測試:單元測試的重要性不在贅敘了,現在也有許多工具可以幫助程序員並減少工作量。
功能測試:程序員保證自己代碼質量的最後一關;為了做這樣的工作我們可能必須寫一些代碼來測試,甚至是測試工作。使用大量的 CASE 來測試,以及錯誤的 CASE 。這里和測試人員的測試不同之處在於:仍然讓程序員的注意力放在其自己的代碼范圍內,減小了排錯的難度。
如果你通過了以上的步驟都找不出你程序中有任何問題的話,那麼我想你的程序應該足夠健壯了。其實還有一點必須說明的就是:代碼 REVIEW 。
前面說道了程序員對待別人代碼的態度是挑剔和學習的態度,所以讓其他程序員來 REVIEW 你的代碼也是檢查程序有沒有邏輯錯誤的很好的辦法。團隊中應該交叉 REVIEW 代碼,這是實踐的經驗。
作為一個好的程序員必須有以上的習慣,以及對待自己代碼象孩子一樣,我們要愛惜我們的代碼,同時也要讓代碼走正確的路。

❻ 軟體存在bug是程序員把代碼打錯了造成的嗎

從你的描述來看,軟體存在bug,不是程序員把代碼打錯了,而是代碼設置不合理,比如需求不合理,軟體的操作上,設計上原本就存在邏輯漏洞,多個單體能夠正常工作的模塊結合到一起產生問題,異常場景沒有考慮到等等,很多原因都可能產生bug。

❼ 為什麼有的程序員的代碼結構混亂

程序員都有一顆工程師的心,所以當他們到一片新的場地想做的第一件事就是,將舊的一切推倒重來。是的,他們決不會滿足於簡單的增量勞動。

或許這種微妙的心理定位可以解釋:為什麼程序員進入新項目組後寧願丟掉舊代碼重新寫,也不願意修修補補。他們認為舊代碼簡直一團糟。

但是,事實上真是這樣嗎?你之所以認為舊代碼一團糟,其實是由編程的一個基本定律決定的,那就是:寫代碼容易,讀代碼難。

為什麼你覺得舊代碼異常混亂?因為讀代碼更難。

這大概就是代碼Reuse難以實現的原因。 這就是你組里的每個人都喜歡用不同的功能將分割的字元串轉換成一個數組。比起猜測舊的功能是怎樣實現的,重新寫一個自己的功能要簡單和有趣多了。

作為這個公理的推論,你可以問問身邊的程序員他們正在奮戰的代碼怎麼樣?「簡直是一塌糊塗!」他們肯定會這樣說。「我簡直想推倒重來!」

為什麼認為代碼這么糟糕呢?「額,看看這個功能,竟然有兩頁長!完全不知道這些東西為什麼在這里!完全不知道這些API是干什麼的。」他們會這樣回答你。

漫畫:讀別人代碼是一種怎樣的體驗?

曾經,Borland的創始人 Philippe Kahn當初就是向記者們吹噓:Quattro Pro會比Microsoft Excel要好用得多,因為它是從頭開始編寫的,全部都是新的源代碼!

但是,認為新代碼比舊代碼好簡直就是荒謬。舊代碼是已經運行過的,測試過的。無數的bug在被發現前都上線運行過,發現之後程序員們可能在花了好些日子才修復了這些bug。這種修復可能是一行代碼,也可能是幾個字元,無數的時間和精力都花在了這些bug修復上。

當你決定拋棄這些舊代碼從零開始的時候,你也丟掉全部前任努力的結果。

新代碼一定比舊代買好?NO,重寫可能會帶來更大的風險。

對技術領導者來說,重寫項目的代碼也是一個異常艱難的決定。因為從公司層面說,重現代碼甚至會威脅產品的市場競爭力。一旦決定重寫代碼,那麼與競品相比,你可能落後了2~3年——在軟體行業,這時間可夠長的。

你理想中的新代碼會帶來產品功能的提升▼

但事實上,即便重寫的新代碼可以實現舊代碼的所有功能和需求,但是為產品帶來的市場競爭力只有邊際提升。因為重寫用的新技術、新語言、新框架並沒有給產品帶來質的飛躍。

更不用說在重寫的漫長過程中可能會遇到一些意外情況,比如:

1、缺錢:資金鏈的斷裂▼

2、缺人:核心程序員離職

最終導致效果不佳:達不到原產品應有的所有功能和需求,白白浪費了時間和金錢,也丟掉了市場競爭力。▼

所以重寫代碼意味著,你在把自己置身於非常危險的境地,可能幾年後你也寫不出比以前更好的代碼。你只是花了一大筆錢把已經存在的代碼又寫了一遍。

當你覺得眼前的舊代碼很爛時,該怎麼辦?

你覺得舊代碼寫的很爛,那又怎樣呢?它們已經上線,已經在實際運行中經受住了考驗。所以當你發現前任留下的代碼亂七八糟的時候,不妨冷靜下來,從以下三個方面入手理解代碼、改善代碼:

1、代碼的結構有問題

如果一段網路代碼突然彈出了自己的對話框,應該是UI代碼需要被處理。這些問題可以被解決掉,你要一次次小心地移動代碼,重構,改變介面。還需要一位細心的工程師立馬仔細地檢查這些改變是否有問題,從而不打擾到其他人。事實上,甚至比較大的結構變化也可以不扔掉代碼來完成。

大牛程序員Joel Spolsky回憶說,曾經在某個項目中,他和他的團隊花了好幾個月重新架構在一點上:把代碼動來動去、清理、創建有意義的基類,並創建了模塊之間的完美介面。但是他們始終非常小心翼翼,並沒有產生新的bug、也沒有丟掉任何舊代碼。

2、代碼的效率不高

曾經,Netscape的渲染代碼被傳非常緩慢。但事實上,這只會影響該項目的一小部分,這部分是你可以優化甚至重寫的。你完全不必重寫全部代碼。優化速度的1%工作量,會讓你獲得99%的爆炸性提高。

3、代碼寫得很醜

有些代碼真的寫的很醜,比如Joel曾參與一個項目,開始用下劃線做開始的成員變數約定,但後來改用更標準的「M_」。所以一半的功能用「_」開始,一半用「M」開始,這看起來真的很醜陋。但這個問題5分鍾就能解決,而不用從頭開始寫全部的代碼。

最後,你要記住,從頭開始再寫一遍並不意味著你會寫出比以前更好的代碼。因為你沒有參與到上一個版本的創建,所以你其實根本就不算有經驗。一旦你准備推倒重寫,你可能會再犯一遍版本一犯過的錯,甚至會產生更多的新問題。

一個總結:

面對糟糕的舊代碼,Keep Calm & Carry On !

在大型商業項目中,推倒重來是非常危險的行為。當然,如果你是在做實驗,想到新演算法可以隨時重寫。

❽ 程序員為什麼要一直改bug 不能一次性寫好嗎

程序寫代碼就像造一座大樓,如果即便經過嚴格的設計論證,裝配高質量的部件,最後還有系統性地驗收,讓你去造這么一座大樓,你能保證不管是窗戶安沒安好,還是地基挖淺了挖深了,還是牆皮脫落,都一個問題沒有?
回想早年的小程序,執行某一個具體的任務,明確的輸入輸出,一般是不會有bug的。
但現在的軟體開發,早就已經不是一個人在戰鬥了,大部分的工程,開發規模5人左右居多,另外稍大的軟體工程動輒幾十人,更有甚者幾百人的團隊規模並行作業。你試想一下,要保證這么多人的產出都符合設計要求,勢必需要合適的開發流程,需要更多的項目管理的技巧和方法。這就對個人以及團隊的提出了非常高的要求了。
軟體工程的方法論中,要求軟體開發者盡可能多地在軟體測試階段發現bug,而不是交付之後。
但是樓主說的能不能讓軟體開發出來沒有bug,我覺得把下面這幾個事情做好,還是有可能的。
1、花盡可能多的時間,和客戶溝通軟體需求,了解每一項需求的用意。
2、確保軟體需求不能隨意變動,因為很多情況下一個需求的變化,程序會帶來很多問題,有可能連底層結構都需要跟著一起變動。頻繁的需求變動,加上開發周期和成本的約束,帶來的結果就是軟體質量的不可控。
3、確保軟體測試質量,完成全覆蓋測試,設計系統需要的全部用例並保證全部通過。
總結下,軟體項目在實際開發過程中風險點還是很多的,通過合理的控制,可以降低和減少bug。但是軟體本身是為人的需求而生,只要需求在變化,軟體是永遠都需要跟著去維護和更新的,所以只要有不可控的因素(需求分析,系統設計,系統詳細設計,編碼,單元測試,集成測試,系統測試,驗收等)任何一個環節任何一個人產生問題,反映到最後的軟體產品上就是一個bug。
另外Bug分很多類,一類是對用戶來說不能正常使用,能被用戶感知到的錯誤。一類是用戶能正常使用,但是有各種異常的錯誤。一類是使用沒有任何問題,但是不符合產品預期的問題。其他應該還有很多,這里我們一一討論。

對用戶來說不能正常使用,能被用戶感知到的錯誤。
其中一種情況是程序員和測試人員的問題,所有功能在上線前,工程師和QA人員應該測試,回歸完功能。能被用戶感知到使用流程有問題的話,一定是相關人員能力或者線上意識某一方面欠缺,也是最不能容忍的。
另外一種情況是黑天鵝事件,什麼網線被挖斷,機房被炸,伺服器爆炸什麼的。。。。。。 ,這個說實話,出了在軟體架構上做冗餘,目前沒有什麼特別好的辦法。

2. 用戶能正常使用,但是在用戶看不到的地方有各種異常的。
一個功能模塊幾乎不可能是獨立的,它必然牽扯到其他模塊。對於你所依賴的模塊,你沒辦法保證這些模塊是100%可用的。這個時候可能雖然有錯誤,但是只要不影響主要流程,我們依然可以正常使用。但這個時候對於外部依賴的異常處理,很考驗工程師的能力。
舉個例子,有可能你看到的點贊數比你實際收到的點贊數少。這個是由於點贊統計在什麼時候失敗了一次,某些用戶可能認為這個是bug,但是其他可能不會在意(當你有10001贊的時候,你在意少了1個么?)
3. 使用沒有任何問題,但是不符合產品預期
這個更多的是研發和產品經理對於需求理解的不一致。因為文字是有二義性的,況且人和人對相同文本的理解本來就可能出現偏差,這就導致了需求理解的不一致,最終導致了線上產品不符合預期。對於內部人員來說,這個也算BUG。
說了那麼多,最主要的核心在於實現功能的是人。人不像機器,不可能不犯錯;同樣的,不可能存在沒有bug的程序,像大家使用的windows,窮盡無數優秀的工程師,給予用戶優秀的桌面體驗的同時,也有你可能完全看不到的數千個bug。想要完全避免幾乎是不可能的。所有也不存在一次性就寫好的情況,鬼知道產品經理什麼時候改需求呢~

❾ 程序員為什麼要一直改bug

程序寫代碼就像造一座大樓,包含有地基、樓層、窗戶等。而且現在的軟體開發,大多是團隊合作,多人的合作產出都符合設計要求,勢必需要合適的開發流程,需要更多的項目管理的技巧和方法。這就要求軟體開發者盡可能多地在軟體測試階段發現bug,而不是交付之後。

另外Bug分很多類,一類是對用戶來說不能正常使用,能被用戶感知到的錯誤。一類是用戶能正常使用,但是有各種異常的錯誤。一類是使用沒有任何問題,但是不符合產品預期的問題。

1、對用戶來說不能正常使用,能被用戶感知到的錯誤。

其中一種情況是程序員和測試人員的問題,所有功能在上線前,工程師和QA人員應該測試,回歸完功能。能被用戶感知到使用流程有問題的話,一定是相關人員能力或者線上意識某一方面欠缺,也是最不能容忍的。

2. 用戶能正常使用,但是在用戶看不到的地方有各種異常的。

一個功能模塊幾乎不可能是獨立的,它必然牽扯到其他模塊。這個時候可能雖然有錯誤,但是只要不影響主要流程,我們依然可以正常使用。但這個時候對於外部依賴的異常處理,很考驗工程師的能力。

3. 使用沒有任何問題,但是不符合產品預期

這個更多的是研發和產品經理對於需求理解的不一致。因為文字是有二義性的,況且人和人對相同文本的理解本來就可能出現偏差,這就導致了需求理解的不一致,最終導致了線上產品不符合預期。對於內部人員來說,這個也算BUG。

php程序員寫的代碼為什麼總有bug

弱類型以及即編即譯等等靈活的特性,註定PHP必須要有犧牲一定的穩定性的前提來達到。換句話說,通常JAVA中一些BUG可以通過編譯機制可以盡早的扼殺早搖籃之中,即使是運行期的錯誤,也可以通過編譯機制找到。同時,強類型語言的嚴謹的代碼編寫風格,也不容易出現由弱類型語言中那些讓人又愛又恨的類型自動轉換發生的意想不到的行為。

最終,我可以認為PHP為了快速開發,做出了他應有的犧牲。把更多的代碼控制權力交給程序員,而不是交給機器,這也意味著代碼的有效性考驗著作為程序員本身的編程能力。更可能是程序員本身對編程思想的理解程度。不過,PHP大多數都是用來開發web站點,而且還有很龐大的社區,以及許多優秀的框架,這些都可以幫助PHP程序員在開發中減少不必要的麻煩。

BUG不可避免,BUG與否決定在你!

個人經驗,少年,你如果要開發應用的話,這個年代不用框架,就等於自己為自己增加N倍的難度。在下推薦幾款框架給你吧:
LARAVAL (強力推薦),YII,codeigniter.......

閱讀全文

與程序員為啥有bug相關的資料

熱點內容
安卓是基於什麼做出來 瀏覽:598
視頻字幕提取APP怎麼使用 瀏覽:57
js通過ip地址連接伺服器嗎 瀏覽:846
java數字金額大寫金額 瀏覽:856
人人影視路由器固件編譯 瀏覽:965
照片通訊錄簡訊怎麼從安卓到蘋果 瀏覽:456
邏輯開發編譯環境 瀏覽:670
ce自己編譯 瀏覽:896
javaexe進程 瀏覽:478
電腦wechat是什麼文件夾 瀏覽:956
單片機moc3041 瀏覽:786
at命令串口助手 瀏覽:749
吸血app怎麼關閉 瀏覽:35
雲伺服器地圖不見了怎麼辦 瀏覽:240
mc伺服器應該叫什麼名字 瀏覽:607
推拉門增加密封性 瀏覽:731
伺服器搬家需要什麼 瀏覽:541
普通電腦如何添加伺服器 瀏覽:401
在外包公司如何成為優秀的程序員 瀏覽:413
無伺服器如何開發 瀏覽:802