現在的軟件質量為什麼不如十年前?

2024年4月12日 21点热度 0人点赞

軟件的重要性愈發凸顯的如今,本文作者指出如今的軟件質量遠不如十年前,並解釋了這種現象背後的原因。

原文鏈接:https://bitheap.tech/why-is-software-quality-worse-than-a-decado-ago/

作者 | Laurentiu.Raducu

翻譯 | 鄭麗媛

出品 | 程序人生(ID:coder_life)

自互聯網誕生之初,軟件的作用就變得越來越重要,以至於我們的世界現在嚴重依賴軟件。從發射衛星到軌道,到管理龐大的供應鏈網絡,軟件在各種運作中都不可或缺。在我們的日常活動中,不論是開車、坐飛機還是購物支付,也都離不開軟件。

然而,隨着軟件解決方案不斷增長,由軟件錯誤引發的事故也會相應增加。如果你在科技公司工作,或者日常工作中依賴軟件,那你可能經常會遇到性能和可用性方面的問題。

為什麼會出現這種情況呢?盡管已經設立了用戶體驗專家和質量保證工程師等專業角色,他們也努力將軟件中的錯誤數量降到最低,但現代軟件的復雜性仍然不容忽視。即使做出了這些努力,軟件行業依舊面臨着重大挑戰。為此,本文將探討這一持續質量危機的根本原因,並揭示為什麼明明取得了這些進步,軟件質量仍然是一個關鍵問題。

我所說的軟件質量是什麼?

談到軟件質量,有許多不同的定義。就我個人而言,我會從以下幾個方面來考慮:功能性、可靠性、易用性和安全性。

就功能性而言,我們要考慮:軟件是否提供了用戶實現目標所需的所有功能?是否需要依賴其他軟件?舉個例子,我認為在消費者軟件方面, Facebook 就是一個不符合功能性要求的糟糕應用。你需要一個應用來使用平台的動態消息功能,還需要另一個應用來使用聊天功能——不過在網頁應用中,Facebook 在同一個 URL 下提供了這兩個功能。另一個例子,仍然適用於消費者軟件,那就是視頻游戲行業。我在大學時代玩電子游戲時,從未聽說過一款游戲需要打 20 個補丁才能玩。但現在,游戲公司推出產品後,給人的感覺像是測試版。他們通常會在推出後的頭兩天發布 2 個補丁,我們更新了才能玩游戲。這個行業似乎已經完全崩潰了,價格也在不斷上漲。

在可靠性方面,軟件必須是可靠的,要幾乎沒有停機時間或錯誤,這包括了從故障中恢復的能力和保持數據完整性的能力。有很多報告顯示,雲服務或其他關鍵軟件的可靠性還不夠。例如 2023 年,谷歌支持論壇上充斥着用戶投訴數據從 Google 雲端硬盤中丟失的報告。雖然我個人認為,將數據存儲在雲端比存儲在移動硬盤上更安全,但事實並非如此!

從易用性的角度來看,軟件必須方便用戶使用,不能過於復雜,而且性能要好。在我生活的地方,金融業在經濟中占據了很大的比重,銀行和投資公司在這里擁有巨大的權力和幾乎無限的資源。盡管如此,他們的移動銀行平台簡直是一個笑話!卡頓、復雜和不直觀的用戶界面,我每次用它們時都很煩,甚至他們的反饋表也沒法用,每次我試圖提交時就會出現 500 錯誤。

最後,還有最重要的一點:安全性。現代軟件有許多依賴項,我們都知道管理它們並使其保持最新版本有多難。即使有 Renovate 或 Dependabot 這樣的自動工具,各種庫的提供商也無法確保其新的主要版本能向後兼容。這就給開發人員的工作增加了難度,他們不得不手動處理這些依賴關系的升級。然而,在他們設法做到這一點之前,攻擊者可能已經利用舊依賴項的漏洞來竊取用戶數據了。這些數據泄露不僅給公司帶來了麻煩,還可能會面臨用戶的法律訴訟,而且對最終用戶來說也是一種危險。每天都有成千上萬 GB 的用戶數據,如電子郵件、密碼甚至電話號碼,被傾倒在暗網論壇上,這也是世界各地垃圾電話激增的主要原因。

哪裡出了問題?

既然我已經定義了軟件質量是什麼,那麼下面我就談談我個人對當今軟件問題的看法。我必須提醒你,在這部分中你會看到很多直接提到人或群體的地方。聲明一下,我無意將我們所處的混亂局面歸咎於任何人、任何團體或行業。我只是想根據我在這個行業 10 多年的工作經驗,談談我的看法。這只是一個基於趣聞軼事的個人觀點,所以請不要產生其他反應,也不要把這個當作是對你個人的指責。

現在,能力危機影響着整個世界。由於我們每天都會接觸到大量的娛樂活動,人們實在是太容易分心了。每個人的注意力都在下降,想要集中精力超過幾分鍾都很難。

根據我的經驗,這個問題在年輕人中尤為突出。我有幸能與一些 Z 世代中的傑出人士共事,但我合作過的大多數年輕人都無法完成任何任務。不是因為缺乏經驗,而是因為他們在本該完成工作的時候,卻一直在玩手機,沒完沒了地看視頻,甚至玩游戲。有時候,我甚至感覺自己是在和一個癮君子共事。不只是我,有科學研究表明,這個年齡段的人對社交媒體的沉迷程度很高。

如今,人們無法長時間集中精力處理復雜任務,這就導致了更多的錯誤、更多的可用性問題,以及作為軟件開發人員對工作和使命的專注度降低。

有人可能會反駁說,如今高效的軟件團隊需要遵循最新的最佳實踐來保持質量。TDD事件驅動架構、封閉測試、直接推送到主程序等深奧概念將有助於你的團隊持續交付並將質量保持在最高水平。讓我們回過頭來分析一下這些建議的來源?

Martin Fowler軟件工程領域的思想領袖之一,許多工程師盲目追隨他提出的一切建議。我在很多公司都看到了這種趨勢,特別是那些自稱擁有無與倫比的工程文化的「狂熱」組織中。許多這樣的組織都會構建微服務,即使他們的軟件領域復雜度不高,軟件本身預計也不會有太大的擴展性。他們會這麼做,因為他們的「上帝」告訴他們要這樣做。但是,但是,他和其他一些領導者是如何變得如此有影響力的呢?他們一定是自己構建了世界一流的軟件,對嗎?

於是,我到處搜索 Martin Fowler 創建的軟件:沒有任何開源軟件,也沒有任何公開的閉源軟件被宣傳為是由他開發的。所以我又要問:他是如何變得如此出名的呢?很簡單,因為他提供了那些平庸工程師所渴望的爭議。

如今,構建軟件不再只是工程問題,更多是為工作選擇正確的設計模式。這是高級編程語言普及的結果,我們不再需要考慮諸如內存分配之類的復雜問題,使得幾乎任何人都能進入軟件工程領域,同時這也不再是真正熱愛的人才能做的事了。主要的影響是,標准降低到了這樣一個程度,你的團隊中可能會有一些人每天都不寫代碼,但他們在關於是否應該使用 TDD 的無休止爭論中所發表的言論,卻受到了非技術經理的高度贊賞。但最終,從他們所交付的軟件中來看,這些人帶來的價值接近零。

隨着這些編程語言的出現,以及許多公司發布的豐富框架,抽象級別不斷上升,這使得工程師們逐漸不再需要深入了解他們正在使用的技術了。別誤會我的意思,這也有優點。例如你可以獲得更高的工作效率,一切都有了更快的學習曲線。然而,增加對這些工具的依賴性可能會導致一個風險,即工程師會缺乏對底層原理的深入理解,而這在調試、優化和理解抽象的局限性方面至關重要。

總而言之,我認為現代軟件的崩潰主要有以下幾個原因:缺乏專注、虛假的工程師,以及缺乏對抽象概念背後的深刻理解。我真的很好奇,AI 將會如何加劇我們現在看到的軟件質量危機。我敢打賭,再過幾年,情況會變得更糟,優秀的工程師會被平庸的同行擠出這個行業,因為後者可能更喜歡發表意見,並大肆宣揚行業虛假領袖的觀點。