寫 patch 修復了一個軟體的 bug,卻被拒絕合併是一種怎樣的體驗?


我也有過若干這樣的經歷。

在一個編譯器里,有一次我在某版本臨近發布前修了個很奇怪的corner case bug(會導致這個corner case情況下會編譯出代碼拋出錯誤的空指針異常之類)。提交了之後一周內就被回滾了,因為這個修復導致了許多benchmark跑分有顯著下降。當然這是我的錯,我應該在提交前先把一些基本性能測試跑過再說的。

但當時我的思路是:這是個正確性問題,而正確性應該是優先於性能的;而管理層的思路是:這是個非常罕見的corner case,能碰到它的代碼本來就少之又少,但讓一般代碼的性能大幅下降是不可接受的。

於是這個修復就沒被合併。顯然。咳咳。提交補丁被拒絕我雖然心裡有點不爽,但管理層的決定我還是可以接受的——回頭一大堆客戶抱怨性能下降了咱可吃不消。正確性問題修是得修,但是要儘可能不犧牲已有的性能。

看來我得曲線救國才能修好這個問題:先實現一些有趣的優化提升我們的編譯器的部分情況的代碼質量,同時把上面說的那個bug修了並藏在那個性能提升的補丁里,這樣一併提交就沒人抱怨了(逃

&<- 這bug優先順序太低,上次修被拒之後就再沒空看它了…


從前我有個老闆是個阿三,阿三特點是技術爛得令人髮指,嘴上功夫一流(不是說真的一流,而是只會用嘴(編程不是比武,我沒辦法一刀捅死他)you can"t do that.... you know, in the future....),人品爆爛,平時我說什麼提議都會給我頂回來。

一次我寫了一個能極大提升便利性的模塊(業界領先水平(業界還是太低端啊,我才剛入行月余而已)),阿三被鎮住了,沒有頂回來,說感覺不錯,然後周末他惡補了一下我的代碼,周一對老闆說我做的東西不行,各種問題,說他已經解決了這個問題,然後讓我把我的東西刪了,然後說這事他來做。

他其實是把我的思路搞明白後找了幾個開源庫拼湊一番,但是畢竟開源庫哪怕是有名的那些也會讓人十分蛋疼再加上阿三光環加持,等於是把我的設計里里外外給山寨了一遍(真正的山寨),最終效果用句話來形容就是——畫虎不成反類犬。。然後也不讓改,就只能按照他的天才模仿來寫代碼,爽得不能自已(yi)


你修復的是一個feature.


我前不久剛在公司遇到一次,而且過程非常冗長。開源界遇到這種情況就更多了,我想起來多少寫多少。

公司的項目遇到的情況是,用戶報告某個app在拖動菜單的時候花屏。我花了3天終於用一個小程序復現了同樣的情況。觸發條件很特殊,必須在某個特定GPU的某個特定驅動上,按照某個順序調用圖形API,才會發生。這很苛刻以至於幾乎沒有程序在實際中遇到了。

既然問題出在ANGLE的調用上,我就找ms ANGLE的人,ANGLE的人說這個東西你應該找D3D;找D3D的人,D3D的人說,這個東西是驅動bug,你應該找驅動,D3D裡面針對這個GPU已經做了41處特別處理,我不想再增加一處(誰能告訴我這是什麼邏輯);找驅動的人,驅動的人說,已經發布了,我們都不改了,出什麼事都不改,你自己想辦法。返回找D3D,D3D的人說驅動不改我也不改,繼續返回找ANGLE,ANGLE說你行你上。(在此期間,還有個原nokia高級director級別的人衝出來罵街,說我們被裁的很慘,圖形就剩12人了,你還想怎麼樣!要比人數,我就1人行嗎!)

我上就我上,15分鐘改好,提交。ANGLE說,你自己留著這個分支用吧,我不合併,這個情況太特殊。。。

開源界的話,前一段遇到的事情是,android 64-bit支持剛出,我就給cmake-android做了個x64/arm64/mips64的支持,提交了很久作者都沒反應,倒是幾個愛好者給我很好的code review。過了2周,作者自己推上去一個版本,並把我的pull request關掉了,說他自己實現了一個。抄就抄,扯什麼單。


我是不是應該讓 Erich Gamma 來回答這個問題. [what"s in this pull request is not important] by egamma · Pull Request #1 · vilic/vscode-es-quotes · GitHub


之前看到了個將Python對象列表列印成表格的小工具,但是作者說不支持中文。

我看了看代碼,發現作者是將每個單元格的內容用str轉了一遍,我們知道Python2.7下這種方式處理Unicode是會遇到UnicodeEncodeError的,看來不支持中文就是這個問題了。

正確的做法是將單元格的內容轉為Unicode,發了pull request後,作者很快就把這個pull request關掉了,我並不知道作者遇到了什麼問題。

很高興炸出了作者 @Leviathan ,以及兩位大神 @laike9m和 @王銘燁 Arthur2e5,作者說我的方法沒有計算中文寬度和對齊的問題,所以關掉了。

那個pull request現在多了條評論:

This patch also adds Klingon support (ConScript Unicode Registry, in PUA), which is crucial for future communication with major alien empires.

Not accepting this patch and keep using str(value) in Py 2.7 (which often messes up with Unicode) will keep the Federation from being able to decode Klingon and finally lead to the end of humanity…

事關人類存活啊。

===== 2015/12/22 23:26 =====

@王銘燁 Arthur2e5 新開了個PR,修復了中文寬度和對齊問題,不過不知道是否支持Klingon?

Add corrected unicode support by Arthur2e5 · Pull Request #30 · Leviathan1995/Pylsy · GitHub

回答這個問題真是近期在知乎感到最愉悅的一件事了:)

什麼叫執行力,請看評論。


常有的事情啊. 本來就會有很多patch不能被merge. 不然還要code review幹嗎... 我以前做技術人員的時候, 也被upstream拒絕過patch... 感覺蠻正常的啊.

現在做獵頭了, 推薦xx去yy公司面試然後yy公司都不面試就直接拒了xx的情況都有啊.


最近剛好遇到了,花了整整兩天整理出一個遠古問題的patch。 被告知:整個這一塊兒都將/正在被重寫。 不值得單獨patch這個問題。

好吧,我倒要看看你什麼時候把這塊兒整個重寫完了。

==

心情當然鬱悶, 不過想一想所有的代碼最終都是無用的。 我挺會調整自己


大約就是測試給我提了一個bug,被我拒絕了一樣的感覺。


光是改到bug不會重現不見得是對的,還要在正確的層面修改代碼才對


也許你無意間堵上了人家想留的後門的必由之路。


加任何東西進去都要跑regression test,很多時候來不及了就推到下一個版本發布。

不過從流程上來講,先確認你「有權」寫這個patch吧,bug不是你想修,想修就能修的(手動斜眼)。


沒事。等到提了10個都被拒,你就習慣了


正常啊 一個bug往往有不止一種修法 尤其在比較大的系統里 如果你沒有找到root cause的話 基本被打回來


可以辭職了 如果這是你想要的回答


我會在公司 肆無忌憚的罵人


世界上與殘忍的事情莫過於:修復了一個普通BUG卻引入了毀滅性的BUG導致在售設備緊急限售。


不知道原因,只是簡單的catch住異常的代碼,要堅決反對merge。還有知乎又掛了,沒人catch下異常么?


推薦閱讀:

守望先鋒有哪些有趣的bug?
玩一些遊戲切換出去之後就無法再次運行的原因是什麼?
爐石傳說12.11任務無法接取的bug是怎麼回事?
如何看待陰陽師業火原bug事件?

TAG:程序員 | Bug | 軟體調試 |