你見過一個有著11,000行的原始碼檔案嗎? - Austin

banq發表於2022-04-04

很久以前,在我的第一份軟體工作中,我收到了一份關於一個內部產品的錯誤報告,我甚至不知道這個產品的存在。

結果發現這是一個應用程式,基本上提供了公司內任何員工可能需要的所有表格。基本上是一個萬能的資源。你需要向人力資源部門報告某人嗎?這裡有一個表格。你需要一個新客戶的合同嗎?有這樣的表格。

多年來,維護專案的責任一直在團隊之間跳來跳去。顯然,它屬於我的團隊。我的團隊,我指的是我。

哦,太可怕了。

這是一個單一的程式碼檔案,有超過11,000行的VBScript。

多年來,無數人對這個檔案進行了修改。但他們似乎並不是軟體開發人員。他們的角色從IT支援到業務分析員不等。考慮到每天有多少員工使用這些表格,我對這個專案被賦予的價值如此之小感到震驚。

看起來整個檔案會從上到下執行完畢,儘管我從未實際確認過。程式碼遵循一個粗略的模式:獲取一些關於使用者的資料,檢查是否滿足一些條件,然後做一些重複一千次左右的動作。這些條件通常很簡單,比如。

if(usrrps = 5)and(wauth <> "")then

接下來通常是顯示一個表單,訪問共享驅動器上的檔案,在誰的資料庫上執行一個SQL查詢,以及向一個硬編碼的地址傳送電子郵件。

現在,我以前從未使用過VBScript(從那時起也沒有),但許多變數似乎沒有被使用。名稱難以辨認。同義詞到處都是。

我覺得很搞笑的是,一個變數可能在第200-210行被使用,然後又在第8544行被使用。其他地方則沒有。

很多邏輯都是多餘的。可能是在某一時刻複製和貼上,然後再分流。比如,在一個程式碼檔案中需要對使用者進行多少次認證?有一次,我敢於清理這些,並重新使用認證響應,但它破壞了一切。我一直沒有搞清楚原因。直到今天,我有時躺在床上想,是什麼原因導致了這種情況。

當時沒有版本控制。關於程式碼修改的唯一背景是在錯誤跟蹤器和程式碼註釋中,儘管我學到了不相信這些的艱難方式。

這裡沒有測試環境。如果我做了一個改變,我必須在 "生產 "中測試它。所有程式的狀態都是基於使用者的許可權,所以我們會冒充報告錯誤的人,這樣我們就能看到他們看到的東西。

沒有單元測試。如果我做了一個改動,導致其他的 "功能 "損壞,基本上我沒有機會知道,直到一週後市場部的傑夫報告了一個錯誤。

這個故事的寓意是什麼?
  • 使用者並不關心技術或程式碼?
  • 開發人員關心?
  • 技術債務是真實的。而且,它可能是昂貴的。
  • 人們的聰明才智是令人震驚的。


網友:
1. 大約在 2006 年,我在上大學,被聘為大學部門編寫 web 應用程式。我不知道 JavaScript 可以有類和捕獲變數,所以我用完全全域性變數和普通函式結合 `eval` 製作了這個應用程式。超過2000行,我之後沒有人能看懂。


2. 在我曾經工作過的一家公司(非常短暫,因為質疑一切而被解僱),有一個C專案,有2萬多行的類。這些類主要是用來生成報告的。

我記得,基本上每個客戶的所有報告都存在於他們自己的類中。當一個新客戶註冊時,你會把檔案複製/貼上到它自己的類中,改變一個屬性以匹配某種客戶的ID,然後再部署它。這是因為客戶經常會在報告中要求自定義指標,所以每個報告都需要稍作改動。

很明顯,這裡有很多問題:首先,每當一個報告在做它不應該做的事情時,我們就不得不翻閱成千上萬的行。這些類並不都是自成一體的;有時它們會接觸到其他客戶的功能(這都是靜態類)。刪除一個客戶(和他們的後續報告)會導致幾十個編譯錯誤,而且沒有單元測試來確保正確的程式碼被保留下來。所以老客戶被保留在程式碼中。

第二,每當要對報告進行改進時,你需要對每個客戶都進行改進。每次專案經理要求對報告進行修改,我記得我都會聽到開發人員的痛苦聲。有一個特別的傢伙,他所做的就是管理這些報告。他看起來絕對是個苦命人。

總之,我不記得其他的事情了。那家公司是一個噩夢。我不知道他們怎麼還在做生意。


3. 由於害怕寫出糟糕的麵條狀程式碼,我最終沒有寫任何程式碼。
這個話題讓我意識到,有一個能賺錢的專案,但程式碼卻很糟糕,這比一個完美的未完成的專案,以及精心選擇的設計模式要好。

由於害怕被評判為糟糕的程式碼,在我有正確的架構之前,我不能開始。

4. 歡迎來到古代程式碼庫。現在再加上一些excel工作簿的宏,這些宏基本上是作為完整的應用程式,透過ODBC直接呼叫資料庫,在儲存過程中觸發真正重要的業務決策,並讓他們在多個網路伺服器上爭奪一個DLL,因為許可......也使用一些早於SQL的資料庫,沒有外來鍵。這對某些人來說是個星期二。再加上水晶報告,一些早於USB的印表機,以及大量可能被使用,也可能不被使用的程式碼,還有你已經超過了程式碼編輯器的行數限制,所以你現在到處都在使用名字相似的include檔案,並且不得不根據執行程式碼的機器來猜測哪一個會在載入時符合你的範圍層次。另外,在版本控制中只有一個分支,而這個分支在生產中是實時使用的。另外,一堆大型機器執行在這個程式碼庫中,如果你破壞了什麼,你可能會損失數萬美元的原材料。FML我只是想編輯這該死的報告,鮑勃,為什麼會停止車間機器的生產,英國的一個傢伙想要我的個人號碼,對他被毀壞的數控機床進行死亡威脅?這些都是我工作過的各個地方的真實故事。
 

相關文章