我們的軟體產品需要在a、b、c三種硬體平台(理論上對我們的軟體影響是不大的)上工作,早些時候已經成功在a上工作了,但在b、c上還有些問題,加班的那天是乙個deadline,需要保證在b、c上也能夠工作。這個產品由x、y、z三個部分組成,分別由三個team負責,基本的關係是:x和使用者打交道,x呼叫y,y是資料進資料出,y呼叫z,z和硬體打交道。
其中,x和y都是新寫的程式,而且早些時候,在x上發現了較多bug,y基本上沒發現問題。z的**在以前的產品中就有,相對已經比較穩定。由於專案的時間壓力,這三個部分沒有時間做分別的測試,只是程式設計師簡單測一下自己的**後,就要整合和測試了(這就是我的具體工作)。除了三個team的leader留下外,x的程式設計師都留下了;y的leader檢查了team members的工作後,認為沒什麼問題就放他們回家了;z的leader最「無辜」,目送所有手下下班後,自己不得不留下。
都是指標惹的禍:
一開始要加班是因為x的工作還沒有完成,於是大家就一邊等,一邊「催」(x的leader聲稱要到12點才能完成,真是烏鴉嘴),一邊各忙各的(我在上網看新聞)。事實上,x到7點多就完成了,但一測試發現有明顯的記憶體訪問問題。於是x就除錯,由於x在記憶體訪問問題上已經「臭名昭著」了,所以大家(至少我)相信是以前類似的問題,或者是以前的修改沒有徹底。
但很快,x發現問題是:y傳了乙個空指標給x;很快,y也證實了x的說法。大家責問y,為什麼程式設計師自己測試時沒有發現?其實很簡單,程式設計師的單元測試程式會檢查是否是空指標,如果空就列印空行。於是,x和y開始「踢球」,互相要對方加上空指標的錯誤處理**;但踢了一會後,新的疑問出現了,y照理不應該出現空指標,所以要麼y的**有問題,要麼y要證明自己沒錯。
找乙個bug好難:
於是y的leader也加入了除錯隊伍,因為y的**都有詳細的log,所以很快就定位到了他的乙個team member的**裡。不幸的是,y learder的開發機器在關鍵時刻down掉了。好在我們初步實施了軟體配置管理,y leader很快在別人的機器上重新搭建好了除錯環境。
y作了些修改(事實上,他改的這些**都是無關緊要的),經我測試後,發現還是不行。以我的職業感覺,我覺得x也有問題(後來知道是歪打正著)。但x寧可上sina看「北京某景區有人裸泳」也不肯檢查一下自己的**。y經過艱苦的除錯(其實絕大部分時間我想是在理解這些不屬於他的**),發現是因為某個資料沒有取得而導致了空指標的出現,但照理,z應該總是把這項資料傳送給y的。但y對z的「指控」很快被證明是無效的,因為z leader向大家「展示」了她從硬體取得的資料是好好的。
個人真實學習程式經歷!
相信對於學習程式的朋友都有一定的了解,php的功能是很強大的,同時對於程式大家一定要從c語言學起來,因為c語言對於很多語言都有共同的特點,同時對於朋友來說 一直找不到程式的突破口,所以在這裡我可以分享一下自己學習php的真實方法,因為php也不是很難學,同時對於php大家一定要走堅持刻苦之路,因為程...
個人安裝docker的經歷
個人安裝docker的經歷 我最後是在vmware中的ubuntu安裝docker。我這裡是自己的安裝過程。安裝ubuntu,註冊後,ctrl alt t快捷鍵開啟terminal進行操作,其中安裝ubuntu時會有乙個清除該磁碟內容的步驟,親測不會影響虛擬機器之外的檔案。最後docker安裝在ub...
結合自己的經歷談談怎麼更好地學習Go語言
之所以會寫這篇文章,是因為在自學go語言的過程,總會有些困惑和迷茫,總希望更好地學習下去,因此有了一些想法,在這裡梳理一下,以便日後回過頭來也可以看看此時此刻的想法。基礎,除了學習go語言的基礎外,也應該加強計算機基礎的學習。對於go語言的基礎,很多從其他語言轉過來的人,會覺得go的基礎就是簡單的語...