A. 為什麼每個程序都會有bug
這個涉及到高級的悖論,人是製造部出來完備的體系的,所以書寫的程序系統一定有BUG,不論你這么修復中是會產生新BUG
B. 程序員為什麼要一直改bug 不能一次性寫好嗎
程序寫代碼就像造一座大樓,如果即便經過嚴格的設計論證,裝配高質量的部件,最後還有系統性地驗收,讓你去造這么一座大樓,你能保證不管是窗戶安沒安好,還是地基挖淺了挖深了,還是牆皮脫落,都一個問題沒有?
回想早年的小程序,執行某一個具體的任務,明確的輸入輸出,一般是不會有bug的。
但現在的軟體開發,早就已經不是一個人在戰鬥了,大部分的工程,開發規模5人左右居多,另外稍大的軟體工程動輒幾十人,更有甚者幾百人的團隊規模並行作業。你試想一下,要保證這么多人的產出都符合設計要求,勢必需要合適的開發流程,需要更多的項目管理的技巧和方法。這就對個人以及團隊的提出了非常高的要求了。
軟體工程的方法論中,要求軟體開發者盡可能多地在軟體測試階段發現bug,而不是交付之後。
但是樓主說的能不能讓軟體開發出來沒有bug,我覺得把下面這幾個事情做好,還是有可能的。
1、花盡可能多的時間,和客戶溝通軟體需求,了解每一項需求的用意。
2、確保軟體需求不能隨意變動,因為很多情況下一個需求的變化,程序會帶來很多問題,有可能連底層結構都需要跟著一起變動。頻繁的需求變動,加上開發周期和成本的約束,帶來的結果就是軟體質量的不可控。
3、確保軟體測試質量,完成全覆蓋測試,設計系統需要的全部用例並保證全部通過。
總結下,軟體項目在實際開發過程中風險點還是很多的,通過合理的控制,可以降低和減少bug。但是軟體本身是為人的需求而生,只要需求在變化,軟體是永遠都需要跟著去維護和更新的,所以只要有不可控的因素(需求分析,系統設計,系統詳細設計,編碼,單元測試,集成測試,系統測試,驗收等)任何一個環節任何一個人產生問題,反映到最後的軟體產品上就是一個bug。
另外Bug分很多類,一類是對用戶來說不能正常使用,能被用戶感知到的錯誤。一類是用戶能正常使用,但是有各種異常的錯誤。一類是使用沒有任何問題,但是不符合產品預期的問題。其他應該還有很多,這里我們一一討論。
對用戶來說不能正常使用,能被用戶感知到的錯誤。
其中一種情況是程序員和測試人員的問題,所有功能在上線前,工程師和QA人員應該測試,回歸完功能。能被用戶感知到使用流程有問題的話,一定是相關人員能力或者線上意識某一方面欠缺,也是最不能容忍的。
另外一種情況是黑天鵝事件,什麼網線被挖斷,機房被炸,伺服器爆炸什麼的。。。。。。 ,這個說實話,出了在軟體架構上做冗餘,目前沒有什麼特別好的辦法。
2. 用戶能正常使用,但是在用戶看不到的地方有各種異常的。
一個功能模塊幾乎不可能是獨立的,它必然牽扯到其他模塊。對於你所依賴的模塊,你沒辦法保證這些模塊是100%可用的。這個時候可能雖然有錯誤,但是只要不影響主要流程,我們依然可以正常使用。但這個時候對於外部依賴的異常處理,很考驗工程師的能力。
舉個例子,有可能你看到的點贊數比你實際收到的點贊數少。這個是由於點贊統計在什麼時候失敗了一次,某些用戶可能認為這個是bug,但是其他可能不會在意(當你有10001贊的時候,你在意少了1個么?)
3. 使用沒有任何問題,但是不符合產品預期
這個更多的是研發和產品經理對於需求理解的不一致。因為文字是有二義性的,況且人和人對相同文本的理解本來就可能出現偏差,這就導致了需求理解的不一致,最終導致了線上產品不符合預期。對於內部人員來說,這個也算BUG。
說了那麼多,最主要的核心在於實現功能的是人。人不像機器,不可能不犯錯;同樣的,不可能存在沒有bug的程序,像大家使用的windows,窮盡無數優秀的工程師,給予用戶優秀的桌面體驗的同時,也有你可能完全看不到的數千個bug。想要完全避免幾乎是不可能的。所有也不存在一次性就寫好的情況,鬼知道產品經理什麼時候改需求呢~
C. 為什麼軟體里總會有那麼多Bug
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. 缺乏對黑客的問責
現實是上面沒有一條能很快解決。但是軟體出現漏洞就其本身而言,真不是什麼大問題。說它脆弱是因為這些軟體在面對惡意攻擊的時候毫無抵擋之力。除非我們能制止黑客的猖獗行徑,否則惡意軟體將會一直困擾著我們。
D. 程序員為什麼要一直改bug,不能一次性寫好嗎
軟體可能在使用過程中沒有任何問題,但不符合產品的預期下圖源自「How projects really work?」,很形象的突出了客戶需要的產品和最終得到的產品不一致。
所以軟體想要變得成熟,Bug收集和處理機制是非常有必要的,比如:會影響客戶使用的優先順序高的Bug要優先修復。Bug是軟體的影子,也是程序員的噩夢實際上不能存在沒有bug的軟體,Bug和軟體如影隨形。就像我們使用的Windows,窮盡無數優秀的軟體工程師來設計給用戶優秀的桌面體驗,但也有各種層出不窮的bug。
程序員對Bug有多愛就有多恨,Bug無處不在,即使再牛逼的程序員也逃脫不了Bug的魔掌。想要完全避免Bug幾乎是不可能的,所以也不在一次性就寫好的程序。以上個人淺見,歡迎批評指正。認同我的看法,請點個贊再走,感謝!喜歡我的,請關注我,再次感謝!
E. php程序員寫的代碼為什麼總有bug
弱類型以及即編即譯等等靈活的特性,註定PHP必須要有犧牲一定的穩定性的前提來達到。換句話說,通常JAVA中一些BUG可以通過編譯機制可以盡早的扼殺早搖籃之中,即使是運行期的錯誤,也可以通過編譯機制找到。同時,強類型語言的嚴謹的代碼編寫風格,也不容易出現由弱類型語言中那些讓人又愛又恨的類型自動轉換發生的意想不到的行為。
最終,我可以認為PHP為了快速開發,做出了他應有的犧牲。把更多的代碼控制權力交給程序員,而不是交給機器,這也意味著代碼的有效性考驗著作為程序員本身的編程能力。更可能是程序員本身對編程思想的理解程度。不過,PHP大多數都是用來開發web站點,而且還有很龐大的社區,以及許多優秀的框架,這些都可以幫助PHP程序員在開發中減少不必要的麻煩。
BUG不可避免,BUG與否決定在你!
個人經驗,少年,你如果要開發應用的話,這個年代不用框架,就等於自己為自己增加N倍的難度。在下推薦幾款框架給你吧:
LARAVAL (強力推薦),YII,codeigniter.......
F. 程序bug出現的原因是什麼
原因是多方面的,比如程序邏輯不嚴謹、程序變數類型設置不當、程序演算法不完善等。
G. 軟體存在bug是程序員把代碼打錯了造成的嗎
從你的描述來看,軟體存在bug,不是程序員把代碼打錯了,而是代碼設置不合理,比如需求不合理,軟體的操作上,設計上原本就存在邏輯漏洞,多個單體能夠正常工作的模塊結合到一起產生問題,異常場景沒有考慮到等等,很多原因都可能產生bug。
H. 為什麼總有無數的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.缺乏對黑客的問責
現實是上面沒有一條能很快解決。但是軟體出現漏洞就其本身而言,真不是什麼大問題。說它脆弱是因為這些軟體在面對惡意攻擊的時候毫無抵擋之力。除非我們能制止黑客的猖獗行徑,否則惡意軟體將會一直困擾著我們。
但是我依然深信,將來有一天我們的互聯網會有更好的普遍標准出台,我們能在現實中及時地將那些損害大家利益的傢伙繩之以法。不過在此之前,我們還是得不斷地寫補丁,在黑客的狂轟濫炸下苟延殘喘。
I. 有哪些事情是程序員都知道,但大多數人不知道
1. 原來Bug是永遠改不完的程序員的日常三件事:寫Bug、改Bug、背鍋。調侃程序員時,就經常會說:「喲,又在寫Bug。」。
文章圖片2
圖片來源於網路,如有侵權請聯系作者刪除
2. 原來程序員工作後不繼續學習是要被時代淘汰的互聯網行業作為高薪行業之一,與其他行業不同,它的入行門檻低,賺錢快,只需要會寫代碼就能入行。許多年輕人受到「高薪誘惑」,紛紛湧入程序員這個賽道,讓這個本來就很擁擠的行業競爭變得更加激烈殘酷。
文章圖片3
圖片來源於網路,如有侵權請聯系作者刪除
3. 原來程序員不能一直死磕技術在互聯網行業,技術雖然是核心競爭力,但是技術永遠是為業務服務的,兩者結合最終才能創造出價值。作為一名程序員,技術固然很重要,只有對演算法進行了深刻理解、掌握了數據結構、資料庫、操作系統等知識,才能做出改變整個行業工作方式的框架出來,甚至連產品設計、業務功能都要憑借技術才能做到。
4. 原來程序員不穿格子衫、頭發黝黑曾經流行這樣一種說法:程序員支撐起了全世界的格子襯衫產業。一個程序員必備的四件套:格子衫、黑框眼鏡、牛仔褲、運動鞋。
文章圖片4
圖片來源於網路,如有侵權請聯系作者刪除
5. 原來程序員只是一份普通的職業每個程序員都只是普普通通打工者的一員,每天要面對腦力和體力的雙重暴擊,如果不小心編寫出了錯誤的程序,就會看到滿屏的錯誤警告。還有,不是每個程序員邏輯都很好……作為程序員,經常面對被人誤解的喪、還要保持懶得辯解的忍……
文章圖片5
圖片來源於網路,如有侵權請聯系作者刪除
6. 程序員其實可以朝九晚六不加班。
7. 很多時候體力活大於腦力活。
8. 很多時候處於底層,相對於業務方,產品,測試等等。
9. 揮灑代碼大多數時候都是復制粘貼。
10. 大多數bug不是代碼問題,是用戶環境或者網路原因。
文章圖片6
圖片來源於網路,如有侵權請聯系作者刪除
11. 有些人就等著被辭退,然後重新找工作,既漲工資又拿補償。
12. 上班時間是上班時間,下班時間是自己時間,拉屎喝水盡量在上班時間干。
13. 看到網上有公司老闆問問題,加班之類的,記錄下公司名,保存到黑名單,絕不入坑。
J. BUG的來歷
所謂「(Bug)」,是指電腦系統的硬體、系統軟體(如操作系統)或應用軟體(如文字處理軟體)出錯。硬體的出錯有兩個原因,一是設計錯誤,一是硬體部件老化失效等。軟體的錯誤全是廠家設計錯誤。那種說用戶執行了非法操作的提示,是軟體廠商不負責的胡說八道。用戶可能會執行不正確的操作,比如本來是做加法但按了減法鍵。這樣用戶會得到一個不正確的結果,但不會引起bug發作。軟體廠商在設計產品時的一個基本要求,就是不允許用戶做非法的操作。只要允許用戶做的,都是合法的。用戶根本就沒有辦法知道廠家心裡是怎麼想的,哪些操作序列是非法的。
從電腦誕生之日起,就有了電腦BUG。第一個有記載的bug是美國海軍的編程員,編譯器的發明者格蕾斯·哈珀(Grace Hopper)發現的。哈珀後來成了美國海軍的一個將軍,領導了著名計算機語言Cobol的開發。
1945年9月9日,下午三點。哈珀中尉正領著她的小組構造一個稱為「馬克二型」的計算機。這還不是一個完全的電子計算機,它使用了大量的繼電器,一種電子機械裝置。第二次世界大戰還沒有結束。哈珀的小組日以繼夜地工作。機房是一間第一次世界大戰時建造的老建築。那是一個炎熱的夏天,房間沒有空調,所有窗戶都敞開散熱。
突然,馬克二型死機了。技術人員試了很多辦法,最後定位到第70號繼電器出錯。哈珀觀察這個出錯的繼電器,發現一隻飛蛾躺在中間,已經被繼電器打死。她小心地用攝子將蛾子夾出來,用透明膠布帖到「事件記錄本」中,並註明「第一個發現蟲子的實例。」
從此以後,人們將計算機錯誤戲稱為蟲子(bug),而把找尋錯誤的工作稱為(debug)。