91小视频在线,亚洲大肥女ass,欧美女人天堂,一本之道久久

企業信息化建設
電子商務服務平臺
 
當前位置: 91信息網 » 資訊 » IT行業 » 程序開發者去世,代碼沒人懂,一個bug導致千萬損失

程序開發者去世,代碼沒人懂,一個bug導致千萬損失

放大字體  縮小字體 發布日期:2020-06-11  來源:網絡  作者:游客  瀏覽次數:460

作者丨Rajiv Prabhakar

譯者丨蓋磊

策劃丨田曉旭、Tina

系統出故障了。當年負責寫這個程序的開發者早在十五年前就去世了,現在已經沒有人能讀得懂他的代碼了......

現在一些關鍵系統的運行仍依賴于過時的軟件,但編寫他們的人要么離職要么已經去世。中間也缺少維護或更新,導致現在幾乎沒人能理解它們,而且一旦出現 Bug 就會給企業造成不可挽回的損失。

而現實中的這種例子,遠比你想象中的要多。

一個令人深思的故事

我的一位客戶負責數項世界排名前一百的養老基金,該公司在前幾個月成功的將程序搬到了云端。作為項目的主任架構師,前兩天我很意外地直接收到了 CIO 的短信:“抱歉打擾,我們出 S1X 級的大問題了。你能下午飛過來嗎?”。

“S1X”是他們對“比最嚴重級別還要糟,級聯影響到業務其它非直接相關部分”問題的定義。

事情看起來十萬火急,當天晚上我就飛到現場進行了診斷,發現是該客戶的系統中一個批處理任務發生了崩潰。

該任務每天晚上執行一次,通過寫一個 CSV 文件為某些養老金計算繳費率,再將計算的結果輸出到另一個收益(benefit)分配程序。原先收益分配程序設定為在繳費(contribution)低于預測(projection)時會向客戶發出報警。由于上一個處理任務已發生崩潰,不再產生輸出,因此程序認為“所有繳費為零”。

所以系統立即向該養老基金的經理們發出大量警報郵件,基金經理們被嚇得趕緊從該項目里撤離了。

起初沒有人找得出問題發生在哪里,在大家的記憶和工作記錄中,這個批處理任務也從未崩潰過。編寫該批處理程序的人已經在 15 年前離世了,并且數十年前就不再是該企業的員工了。盡管該批處理的程序代碼規模不大,但非常難讀。因為在編程時主要考慮的是提高計算效率,并未考慮如何適合他人閱讀。當然,程序也沒有留下任何測試。

事故發生的前一天,腳本在運行環境中的編排發生了一次更改。這被認為是導致事故的罪魁禍首。幸運的是,這個更改做了版本 push,工程部門據此回溯到先前的版本。但不幸的是,這只使事情變得更糟。

最后我們通過提供熱修補腳本的方式解決了這個問題。但實質上這次崩潰已經給該基金造成了 170 萬美元(約 1203 萬人民幣)的直接損失。

“數據潰爛”(Bit Rot)問題

事實上類似的故事并非孤例。我在 2012 年離開英特爾加入 Sun 公司,切身體會到他們的 SPARC 產品線做得是多么的糟糕。Sun 在互聯網泡沫時代的殺雞取卵行為,導致此后 SPARC 遠遠落后于英特爾的至強產品線。

我的經理都和我說,要在英特爾至強服務器上運行模擬程序,因為 SPARC 服務器“非常慢”。更嚴重的問題在于,英特爾不僅 CPU 性能更好,而且具有制造優勢,這意味著 CPU 的制造成本也大大降低。

隨之而來的問題很明顯:既然遠遠落后于競爭對手,那么為什么客戶還是會購買我們的 SPARC 芯片?一位高級架構師向我給出了令人震驚的答案。那是因為我們的客戶的軟件系統過于僵化,只能在 SPARC/Solaris 系統上運行。而遷移到 x86/Linux 對客戶而言是一項艱巨的任務。許多客戶甚至丟失了源代碼,無法重新編譯應用。

他們能做的最好選擇,就是升級到最新一代的 SPARC 處理器,無論這樣的處理器性能多慢,價格多么昂貴。

這就是問題所在。我們整個部門的業務模式,完全圍繞著這個國家中那些潰爛的軟件系統。

維持運轉的代價

我加入 Amazon 后,發現自己面對正是這樣一個為遺留系統而構建適用的原型。該系統是另一個團隊基于大量技術債務開發的,并且團隊早已解散。之后該項目的所有權就移交給我們的團隊……事實操明,這并非攬下一件好事。所以開發人員陸陸續續跳槽到其他的團隊。我加入時的十多名團隊成員中,一年后一位都沒有留下。

該系統從表面上看并非一無是處。它使用了現代編程語言和技術棧(Java 8)編寫,由拿著六位數收入的開發人員所組成的團隊進行著日常維護,并不斷更新以修復錯誤和添加新功能。盡管如此,測試修改(turnover)依然是拖累整個系統的顯著負擔。所有權變更和團隊更替導致整體代碼設計、端到端功能、最佳實踐和調試技術等大量實操知識的丟失。盡管我們一直努力保持項目的推進,但感覺就像進入了一片沼澤地,四處亡羊補牢,深陷戰爭迷霧(Fog of War)中。

設想一下,一個運行在第一版 Java 上的項目,開發活動幾乎為零,沒有開發人員負責。還有比這更糟的項目嗎?

如何預防發生災難性故障

軟件開發人員致力于構建健壯、無錯誤的系統,無需過多人工維護就能正常運行多年。據此標準,上面所說的養老金腳本無疑是非常成功的項目。

然而現實很嚴峻,再好的項目有發生崩潰的一天。最終,所有內容都需要做更新。導致原因可能是:

系統運行所基于的硬件系統停產了。

系統的依賴關系不再可用。

依賴關系中出現了嚴重安全漏洞,而唯一可用的安全補丁僅適用于并不后向兼容的版本。

應用開發基于一些已不再成立的假設。

甚至是整個世界發生了改變,軟件必需因勢而變。

無論出于何種原因,變更都是不可避免的。唯一的問題是,當最終需要變更時,它的代價有多大。

對于一個活躍維護的系統,變更就不會那么痛苦。但是,對于一個已有幾年甚至數十年沒有維護的系統,那么很多因素都可能會導致災難性的錯誤。例如:

構建系統的開發人員已經離職。

源碼丟失。

開發人員不了解如何正確地編譯源碼,并構建可執行文件。

開發人員不了解如何部署系統。

開發人員不了解如何正確地配置運行可執行文件。

開發人員對代碼的架構和實現一頭霧水。

開發人員不了解使代碼功能正常運作所依賴的常量和隱含假設。

開發人員不了解如何運行自動化測試。

開發人員不了解如何調試測試問題。

開發人員不了解如何調試生產故障。

開發人員不了解如何獲取生產日志和指標度量。

一種解決方案是對上述問題做盡量詳細的記錄。但文檔并非最優的解決方案,因為其中難免會有遺漏。再全面的文檔,也比不上自己親自動手操作。

理想的做法

一個好的開端,就是企業指定專門的開發人員全面負責上述所有問題。但這還不夠。

如果僅僅反復“閱讀文檔”,那么就會產生厭倦。人們并不能從中獲得實踐經驗,進而解決實際問題。

如果加上“績效審核”,那么人們更傾向于新的出彩項目,很有可能會簡單地抹去并掩蓋舊的問題,甚至直接從中剔除問題。如果沒有真正面對的可交付成果或挑戰,許多人自然會選擇一條最輕松的道路。

真正要想避免軟件發生潰爛,唯一的方法是確保項目的持續推進,即使看起來毫無必要,或是存在風險。建立、維護和驗證實操知識和能力的最佳方法,就是不斷做出變更,并測試這些變更是否能成功地執行。一旦項目停止推進,那么相關實操知識就會過時和消解。

即使原地打轉聽上去很可笑,但這對疏于維護而言仍是一種進步。事實上,維護人員總是可以做一些事情實現向前推進,雖然步伐可能很校

一種做法是使用所有依賴關系的最新版本去更新開發環境,例如:

從 JDK 8 遷移到 11。

更新 JVM,使用 G1 垃圾回收機制替代原先的 CMS。

將 GCC 編譯器從版本 5 更新到 7。

將數據庫從 Postgres 9.5 更新到 Postgres 11。

將 AWS SDK 從版本 1.10 更新到 1.11。

在生產環境中安裝最新的 Linux 發行版。

在一些情況下,依賴關系會過時。這時就需要考慮整體遷移到新的架構。例如:

從 SPARC 遷移到 x86;

從 Solaris 遷移到 Linux。

同樣,保持開發人員的戰斗力,可對應用做如下更新:

修復頑疾和一些邊緣用例。

加固自動測試套件。

清理技術債務。

做性能優化。

實現新特性。

增量重構代碼庫,改進可讀性。

上述變化勢必會帶來暫時性風險,并產生看似“不必要的”支出。開發人員難免會犯一些錯誤,甚至引入新的錯誤。面對這些代價時,人們很容易退而求其次,認為“如果還沒有破裂,就不要修復。”

對于一個業務價值不大的系統,這可能是合理的做法。但對于任何關鍵任務系統而言,忽略問題將僅會掩蓋較小的瞬態風險,而沒有解決永久的災難性風險。一旦有一天需要緊急調試或更新系統,那么企業將無所適從。

對于任何關鍵任務系統,至關重要的就是維持實操知識和能力。做到這一點的唯一方法,就是不斷地開展實操。企業的大腦和肌肉一樣,不使用,就會失效。

作者簡介

Rajiv Prabhakar,畢業于密歇根大學和斯坦福大學,之后曾在 Intel 和 Sun Microsystem 公司工作五年,參與了 Jaketown、Skylake 和 SPARC 設計團隊。之后轉向軟件相關工作,先后任職于 Amazon、Google、Engineers Gate,并數次自己組建創業公司。

參考閱讀:

https://software.rajivprab.com/2020/04/25/preventing-software-rot/

為你推薦

InfoQ Pro是 InfoQ 專為技術早期開拓者樂于鉆研的技術探險者打造的專業媒體服務平臺。

新聞視頻

 
推薦圖文
推薦資訊
最新文章
 
 
91小视频在线,亚洲大肥女ass,欧美女人天堂,一本之道久久
非洲一级黄色片| 青青草福利视频| 女~淫辱の触手3d动漫| 男人的天堂av网| 人妻 丝袜美腿 中文字幕| 中文字幕免费视频| 日韩 中文字幕| 美女伦理水蜜桃4| 少妇欧美激情一区二区三区| 天美传媒免费在线观看| v8888av| 欧美肉大捧一进一出免费视频| 深夜福利影院在线观看| 亚洲女人毛茸茸高潮| x88av在线| 亚洲一级理论片| av在线免费播放网址| 很污很黄的网站| 加勒比婷婷色综合久久| 三级黄色在线观看| 亚洲一级免费毛片| 稀缺小u女呦精品呦| 黄色网址在线视频| 女~淫辱の触手3d动漫| 亚洲一二三精品| 91精品国产闺蜜国产在线闺蜜| 亚洲天堂一级片| 图片区偷拍区小说区| 国产精品久久久久久久无码| 成人免费无码大片a毛片| 魔女鞋交玉足榨精调教| 永久免费观看片现看| 91在线播放观看| 疯狂揉花蒂控制高潮h| 青娱乐国产视频| 农村黄色一级片| 国产精品成人无码专区| 91网站免费入口| 艳母动漫在线看| 中文字幕一区二区三区人妻电影| 国产wwwwxxxx| 国产精品无码永久免费不卡| 婷婷综合在线视频| www国产视频| 免费高清在线观看电视| 女同毛片一区二区三区| 成年人一级黄色片| 最新中文字幕视频| 亚洲精品成人无码毛片| 久久久久久国产免费a片| 91超薄肉色丝袜交足高跟凉鞋| 国产午夜福利一区| 亚洲观看黄色网| 韩国三级与黑人| 国产精品1区2区3区4区| 97人妻精品一区二区免费| 欧美人与性动交α欧美精品| 国产精品无码无卡无需播放器| 中文字幕三级电影| 亚洲精品一二三四| 色婷婷在线视频观看| 国产又粗又长免费视频| 精品无码人妻一区| 亚洲图片综合网| 亚洲图片欧美另类| 香蕉在线观看视频| 亚洲精品久久一区二区三区777| 懂色av蜜桃av| 亚洲熟妇无码av| 欧亚乱熟女一区二区在线| 国产成人av免费观看| 成人免费视频网站入口::| 久艹在线观看视频| 可以免费看av的网址| 精品成人无码一区二区三区| www.中文字幕av| 亚洲久久久久久久| 亚洲天堂av中文字幕| 欧洲性xxxx| 成熟的女同志hd| 欧美xxxx日本和非洲| 人体私拍套图hdxxxx| 人妻丰满熟妇aⅴ无码| av女人的天堂| 中文国语毛片高清视频| 9999热视频| 亚洲色偷偷色噜噜狠狠99网| 大尺度做爰床戏呻吟舒畅| 在线免费观看麻豆| 亚洲人做受高潮| 日韩女优在线视频| 91成人在线免费视频| 久久爱一区二区| 亚洲香蕉中文网| 久久久久亚洲av无码a片| 印度午夜性春猛xxx交| 五月婷婷综合在线观看| 国产免费嫩草影院| 折磨小男生性器羞耻的故事| 中文字幕第4页| 无码人妻一区二区三区精品视频| 大地资源二中文在线影视观看| 后入内射无码人妻一区| avtt香蕉久久| 乱h高h女3p含苞待放| 成年人免费观看视频网站| 丰满人妻一区二区三区大胸| av电影网站在线观看| 国产视频精品视频| 亚洲国产成人精品综合99| 在线观看国产精品一区| 日本不卡视频一区| 亚洲精品一二三四| 俄罗斯毛片基地| 成人免费毛片糖心| 久久久久国产精品区片区无码| 印度午夜性春猛xxx交| 四虎国产成人精品免费一女五男| 亚洲精品一二三四| 美国黑人一级大黄| 精品无码在线视频| 国产乱淫av麻豆国产免费| 日韩在线一卡二卡| 亚洲一级片在线播放| 日韩乱码人妻无码中文字幕久久 | 中文乱码字幕高清一区二区| 少妇真人直播免费视频| 国产激情第一页| 国产亚洲精品成人a| 欧美卡一卡二卡三| 国产极品国产极品| 欧美黄色aaa| 中文在线字幕在线观看| 99久久婷婷国产综合| 欧美三级日本三级| 男插女视频网站| av女名字大全列表| 日批视频免费看| 亚洲中文字幕无码一区| 日本69式三人交| 人妻精品久久久久中文字幕| 中文字幕免费视频| 成年人视频软件| 日本老熟俱乐部h0930| 男人女人拔萝卜视频| www.美色吧.com| 自拍视频一区二区| av电影网站在线观看| 黄色精品视频在线观看| 人妻激情偷乱视频一区二区三区| 俄罗斯黄色录像| 欧美 日韩 成人| 欧美亚洲日本在线| 日本丰满少妇裸体自慰| 亚洲欧美综合7777色婷婷| 婷婷色中文字幕| 免费毛片视频网站| 久草网站在线观看| 久久久久久久久久久久| 欧美老熟妇一区二区三区| 黄色av网址在线观看| 一级片黄色录像| 欧美xxxxx精品| sm捆绑调教视频| 波多野结衣福利| 丝袜美腿小色网| 国产探花视频在线播放| 好吊操视频这里只有精品| 丰腴饱满的极品熟妇| 国产一精品一aⅴ一免费| 亚洲av熟女国产一区二区性色| 国产盗摄一区二区三区在线| 欧美人妻一区二区三区| 涩视频在线观看| 爱爱视频免费在线观看| 国产全是老熟女太爽了| 黄页网站在线看| 九九精品视频免费| 欧洲性xxxx| 人妻一区二区视频| 欧美大喷水吹潮合集在线观看| fc2ppv在线播放| 亚洲一级黄色录像| 欧美熟妇精品黑人巨大一二三区| 老女人性生活视频| 久热这里有精品| 91禁男男在线观看| 精品国产av无码| 国产精品第七页| xxxwww国产| www.四虎精品| 污污内射在线观看一区二区少妇 | 亚洲天堂网一区二区| 超碰caoprom| 男人网站在线观看| 日本一区二区在线免费观看| 五十路六十路七十路熟婆| 99久久免费看精品国产一区| 成人在线视频免费播放| 亚洲天堂美女视频|