首先,要認識 bug。
如果一個程序做了它不應該做的事,或者沒有做它應該做的事,那就是 bug。bug 很難避免,尤其在規模化的編程過程中。
我們知道從面向過程的角度來說,一個程序是由數據結構和演算法構成的,從面向對象的角度來說,程序可以是由類和對象組成的。因此 bug 我這里分成兩類:
在一個 Java 程序中,類和對象的關系可能會造成 bug。這是設計時的問題,例如多實例的同步問題、線程沖突和死鎖問題,這是常見的兩個潛在的 bug。要盡量避免這類 bug,只能在設計時下功夫。思路一定要清晰,一定要清楚每個類要做些什麼,什麼時候該做些什麼。這類 bug 比較容易發現,但是不易修補,因為牽扯到程序的不同部分,有時候相當麻煩,因此最好一開始就不要讓它出現。
然後一些細節上的 bug,屬於邏輯漏洞,可能是演算法上的漏洞。Java 其實這方面要比 C/C++ 安全,因為後者的某些漏洞是致命的,例如內存泄露、指針沖突、野指針等一系列問題,可能直接導致程序崩潰,但是 Java 絕對不會出現指針問題,內存相對安全。但是 Java 也可能導致內存不斷消耗,最終崩潰的情況也是有的。這個問題我也碰到過幾次了,如何解決?需要你對你大量使用的類非常熟悉,最好事先仔細看看文檔,有的類需要你最後 dispose 的,有的類 add 過後需要 remove 的,有的類的某些方法會間接地創造一些對象。這種 bug 不大容易發現,尤其是我們有時候對 JVM 的絕對信任而忽略了這些細節,甚至造成了不好的習慣。要麼不礙事,要麼很嚴重,一但出現問題可能會發現同樣的問題幾乎出現在所有的地方。所以避免這類 bug 只有謹慎,並且要養長良好的習慣。
順便說一句,Java 內存溢出後程序就直接退出,可能會導致數據丟失之類的,這個責任擔當不起的。
然後邏輯漏洞還沒講完,還有一些和內存無關,但是也是邏輯上的疏忽造成的,例如數組越界、空棧、格式不兼容等等。這些相當難發現,有時候是正常的,有時候就報錯了。這個可以說是最普遍的漏洞,也是最難發現的漏洞。這類漏洞要看程序員的水平,經驗豐富、思維清晰、反應敏捷、習慣良好的程序員會好一點,但是不是所有的程序員都是這樣的,再說人無完人,再怎麼水平高也難免犯點小錯嘛。這種漏洞基本都是在後期測試(傳說中的內測)和已發布的測試版中逐漸被發現。為了盡量早發現,內部的測試要做的好,不過首先負責各個部分的程序員之間要定下默契,程序要符合規范,類和方法盡量簡單化,不要一個方法出現 4 個以上的參數,因為那樣會巨大的增加測試的麻煩。要寫好注釋,變數名寫完整,等等規范就不一一列舉了。然後對測試人員的要求也是比較高的,測試人員必須熟練掌握測試技巧,有的團隊這些小 bug 的修復也是測試人員做的,那測試人員也要良好掌握調試技巧,團隊內人員要保持良好的溝通。
② 當程序員發現BUG時,這反應絕了,你是不是這
開發應用程序是一個非常有壓力的工作。沒有人是完美的,因此在這個行業中,代碼中出現 bug 是相當普遍的現象。面對 bug,一些程序員會生氣,會沮喪,會心煩意亂,甚至會灰心喪氣,而另一些程序員會依然保持冷靜沉著。因此,如何處理修復 bug 的過程也值得我們細細琢磨。
希望可以幫到您,謝謝!
③ 程序員新人怎樣在復雜代碼中找 bug
首先,列印出關鍵變數,看是否符合預期;然後,debug不符合預期的代碼段;最後,梳理流程是否正確。個人淺見。
④ 各位程序員都有過哪些令人哭笑不得的改bug經歷
其實程序員確實也遇到過很多的這個因素,比如說他們要把一些軟體改的好用一點,要不然時間長了人多了以後就出現卡頓,不改的話就會讓這個用戶流失,所以說這些bug我覺得挺有趣的
⑤ 軟體測試新手如何快速找出軟體中的Bug
摘要:當前用戶對軟體企業開發出來的軟體質量提出了越來越高的要求了。所以在這種大的環境背景下,催生了一個新興的職業——「軟體測試工程師」的職業。尤其是最近2-3年來加入這個職業或者即將加入到這個職業的人也越來越多了。那麼作為一名軟體測試工程師,我們該如何迅速找到軟體中的缺陷Bug呢? 下面結合作者多年的軟體測試經驗談談。按照作者的觀點:凡是不符合用戶需求的,或者在使用過程中給用戶造成不便的,都認為它是Bug。話雖然說的有點極端,但是現實就是如此。那麼對於剛入行的軟體測試新手迅速找出軟體中的Bug思路如下: 1、盡快熟悉公司的產品業務 比如你們公司做ERP軟體的,你肯定要迅速熟悉EPR的業務流程;比如你們公司是做法院軟體的,那麼你一定要熟悉法院審判案件的流程,只有熟悉了產品的業務流程、你才能迅速找出軟體中存在的一些重要的缺陷,你發現的軟體缺陷才是有價值的。否則即使你能找到一些軟體缺陷,那也是純軟體的缺陷,價值不大。 2、把自己當成是用戶 把自己當成是用戶去使用該系統,比如在使用該系統過程中是這樣操作的嗎? 2.1 比如在大量要求用戶輸入的軟體界面中,有一些用戶喜歡使用Tab鍵採用全鍵盤的輸入;此時的正確的介面應該採取從左到右,從上到下的順序。 2.2 比如有的用戶喜歡使用快捷鍵操作等(Ctr+C,Ctr+V,Ctr+F),但是實際情況下一些開發出來的軟體的快捷鍵卻根本不起作用。 2.3 比如軟體在需要用戶輸入的信息的時候(特別是在填寫個人資料的時候),必填項後面一律要用*等醒目的標示,要讓用戶知道這個地方時必須填寫的。 2.4 下拉框不選值的時候,應該有個默認值;並且要多檢查程序中的多處下拉框,因為很多情況下下拉框取不到值。 3、善於懷疑,不要迷信高手 世界上沒有絕對正確的,總有錯誤的地方,具有叛逆心理,別人認為不可能發生的事,我卻認為可能發生。別人認為是對的,我卻認為不是對的。如果你認為某個或者某些程序員水平很高,他寫的這個地方應該沒問題吧,那麼我要說你錯了,這樣很容易遺漏軟體中的Bug。因為程序開發人員畢竟是普通的人,只要是人就會犯錯誤的。 4、不要讓程序開發人員的觀點:「用戶不會進行這樣的操作」而說服自己 遇到這樣的情況,你要堅持你自己正確的想法,以後對方會明白你的。比如在一個錄入員工基本信息的系統中,系統中對員工的年齡作為負值、而沒有作為判斷、也可以保存到資料庫中,此時你不要被程序員的用戶不會進行這樣操作的觀點說服自己,你要堅持你正確的觀點,把這種現象作為一個Bug吧,勇敢點!你的選擇不會不錯! 5、在軟體測試過程中要跟蹤一條數據完整的流程 在軟體測試的時候要跟蹤一條數據完整的流程,保證數據的正確性這個真的是太重要了:假如你在測試一個銷售的類型的軟體的時候:你應該先做訂貨-à入庫-à盤點-à銷售-à查詢。首先你要保證這個數據的流向是正確的無誤的。假如你在測試法院審判軟體的時候,你要先收案-à立案-à發送審批-à排期---審理審判-à結案判決-à歸檔-à查詢。總之跟蹤一條數據的流程,保證數據的正確性。如果經過你測試的軟體在用戶使用過程中業務流程上都走不通的話,那麼這樣的軟體你說經過你的測試,但是在比人看來與沒有測試有什麼區別呢? 6、回歸測試要注意的細項 程序員提交新的程序版本後,作為測試人員應該立即與程序員溝通這個修改的功能、並且這個新修改的功能影響哪些功能。舉個簡單的例子來說明一下:比如在一款軟體中,程序開發人員修改了某個「會員」的某個欄位信息。作為測試人員首先你要測試「會員」的功能這個是你首先需要做的。另外你還要和程序員溝通詢問他們新修改的這個會員的欄位,會影響會員的銷售功能嗎?會對會員以前的銷售記錄的查詢有影響嗎?如果對這些功能有影響,那麼這些功能都是你在回歸測試的時候重點測試的地方,也是最容易產生Bug的地方了。 7、與使用者互動的缺陷 7.1 如填寫資料錯誤應的時候,應該能夠提示錯誤的位置,讓用戶知道是這個地方輸入數據不對。 7.2 刪除數據之前給一定要給出是否刪除確認提示。 7.3 不要在軟體中使用中英文混合的提示比如:比如對於用戶某個操作的錯誤提示,不要一會用「error」、一會用「錯誤」;一會用「succeed」另一會用「成功」,總之要統一。
⑥ 一個WEB前端,有找bug的天賦是啥感覺
我已經數不清有多少次我通過Stack Overflow解決了難題。社區里都是和善和聰明的人,他們非常願意提供幫助,如果你邁出第一步的話。在所有的在線論壇中,Stack Overflow絕對是對軟體編程以及前端/後端web開發支持最廣泛的網路。
⑦ 如何向 程序員 描述 bug 笑話
1.程序員寫出自認為沒有Bug的代碼。
2.軟體測試,發現了20個Bug。
3.程序員修改了10個Bug,並告訴測試組另外10個不是Bug。
4.測試組發現其中5個改動根本無法工作,同時又發現了15個新Bug。
5.重復3次步驟3和步驟4。
6.鑒於市場方面的壓力,為了配合當初制定的過分樂觀的發布時間表,產品終於上市了。
7.用戶發現了137個新Bug。
8.已經領了項目獎金的程序員不知跑到哪裡去了。
9.新組建的項目組修正了差不多全部137個Bug,但又發現了456個新Bug。
10.最初那個程序員從斐濟給飽受拖欠工資之苦的測試組寄來了一張明信片。整個測試組集體辭職。
11.公司被競爭對手惡意收購。收購時,軟體的最終版本包含783個Bug。
12.新CEO走馬上任。公司雇了一名新程序員重寫該軟體。
13.程序員寫出自認為沒有Bug的代碼。
⑧ 程序員遇到解決不了的bug怎麼辦
但大部分程序員都有一個問題就是不太願意測試自己的代碼。他們草草的調式完成以後就認為工作結束,測試那是測試人員的工作。
1. 影響了程序員自己的聲譽
2. 影響了產品的質量
3. 影響了客戶的信任度
4. 這個時候再 DEBUG 難度增大了許多。
大的不說,就說多自己聲譽的影響吧。如果你的程序總會有這樣那樣的 BUG ,你得到收益會減少,即使你寫了很多代碼。
程序員必須克服一些自身的致命缺點才能夠從根本上解決這個問題。那麼這個問題是什麼?前面我們已經提到,程序員對自己的代碼都非常寬容,認為那是正確的沒有問題。實際上這種想法比較正常,程序是通過程序員思考和設計之後才寫出來,程序員不會將自己認為不正確的東西寫到代碼里,而到這個時候都一直假設程序是正確的;但人非聖賢,怎麼可能不犯錯誤來。實際上程序員在對待其他程序員時候的態度就很好,帶著一種挑剔和學習的態度;但一旦對待自己的代碼就很難這么做;這就是最致命的。程序員也必須對自己的代碼帶著挑剔和學習的態度;這個基礎是假設自己的代碼是錯誤的,然後需要做的是怎麼樣證明自己的代碼是正確的。程序員自身可以在程序生成的每個階段做這些工作:仔細的設計(這個時候畫點時間是值得的,必須保證我們對自己的程序有清晰的輪廓後才能開始動手寫)、編寫代碼時、單元測試(單元測試的重要性就不在贅婿了)、功能測試。
仔細的設計:這個的仔細是說在程序員編寫代碼之前,其必須對代碼的整個結構以及邏輯結構有明確的清晰的了解,只有這個時候才可以去寫代碼。這里沒有談到文檔,但我說到了一定要清晰的思路,但清晰的思路不是每個人都可以在腦袋中直接形成的,很多人都是普通人,沒有辦法在腦袋瓜中把所有問題都想清楚,那麼就記下來,特別對於復雜的邏輯。
編寫代碼:對於沒有把握的代碼,例如:新設計的演算法,最好保證其正確性。可以單獨將這部分測試,這可以讓代碼模塊化的同時又保證了代碼的正確性。一句話:少量的代碼保證質量還是比較簡單的。
單元測試:單元測試的重要性不在贅敘了,現在也有許多工具可以幫助程序員並減少工作量。
功能測試:程序員保證自己代碼質量的最後一關;為了做這樣的工作我們可能必須寫一些代碼來測試,甚至是測試工作。使用大量的 CASE 來測試,以及錯誤的 CASE 。這里和測試人員的測試不同之處在於:仍然讓程序員的注意力放在其自己的代碼范圍內,減小了排錯的難度。
如果你通過了以上的步驟都找不出你程序中有任何問題的話,那麼我想你的程序應該足夠健壯了。其實還有一點必須說明的就是:代碼 REVIEW 。
前面說道了程序員對待別人代碼的態度是挑剔和學習的態度,所以讓其他程序員來 REVIEW 你的代碼也是檢查程序有沒有邏輯錯誤的很好的辦法。團隊中應該交叉 REVIEW 代碼,這是實踐的經驗。
作為一個好的程序員必須有以上的習慣,以及對待自己代碼象孩子一樣,我們要愛惜我們的代碼,同時也要讓代碼走正確的路。
⑨ 身為程序員,你會在瀏覽網頁的時候找BUG嗎
不會,閑著沒事干嗎…
⑩ 作為程序員,你遇到神奇的bug是什麼反應
修改一個以前項目bug,提交數據時,瀏覽器有時候不會發起post請求。驚訝的下巴都要掉下來了,從來沒有碰到過類似bug。最後終於找出原因,保存參數的對話框保存按鈕調用的函數名稱和提交表單相同,每次使用對話框時,會覆蓋掉提交表單函數。取名字果然很重要。