來自加拿大的編碼告解

作者 : Mark Pitchford,LDRA Software Technology技術專家

大約35年前,在一家生產動物飼料的加工廠,我遭遇了一個難解的問題,為解決問題,我硬是添加了最終檢查程式…這個痛苦的經驗卻為我現在的工作帶來一些啟發…

大約35年前,在剛起步的軟體工程生涯中,我從英國被派往加拿大對生產工廠進行故障排除。我的工作是完成一組加工廠的調試,其控制系統幾乎全部由單個DEC LSI-11 (PDP-11/03)組成,且配置記憶體比你現在可以找到的廉價手錶內的還要少,並執行著一個被人們遺忘、可多工作業的作業系統,還部署BASIC語言的修改版本。

當我到達時,最初的調試工作已經完成,且工廠有完整的生產計劃可以進行。儘管控制系統出現問題意味著運作速度非常緩慢,但該工廠仍需要為加拿大寒冷的冬季提供動物飼料。解決現場即時系統問題的機會為我帶來了巨大壓力,因為很少有機會讓我實際去做些事情。

客戶的耐心等待和支援的工程團隊協助為我的英國規格開發機器臨時接通了240V電源,我花了幾個小時研究離線解決方案,並等待機會在線上測試它們。一路上走來,總有跌宕起伏,客戶對工作表選項的反應特別令人難忘,該工作表唯一的功能是顯示「還沒寫」訊息!

生產調度程序軟體已在無數先前的系統上獲得使用證明。它旨在為生產工廠做好準備以生產下一個計劃的飼料,確保裝袋機已準備就緒,並在重新開始循環之前監視生產。

但是在一種特定的配置中,它顯示了一個非常難以捉摸的錯誤,且這錯誤每幾週發生一次。有鑑於它是一種藥物飼料,可以用以治療從雞到賽馬的各種動物,因此導致意外和訴訟的可能性實在太高了。

為了尋找定時問題,許多時間被浪費了。這個錯誤無法在模擬系統上發生,當它在上產系統上冒出頭時,並未留下任何蛛絲馬跡,但是必須做些事情解決它。

解決方式雖然讓人厭惡但仍是有效的。在開始新的生產運作之前,我添加了最終檢查程式以確保調度程序輸入、分配的生產批次和包裝都匹配。如果不匹配,調度程序將被迫再試一次,直到匹配為止。這樣做很務實?當然,客戶對他們的工廠現在可被信任感到很高興;這個方式是最佳的做法?幾乎不是,你想要飛行控制軟體這樣被編寫嗎?當然不。

如今,我從事功能安全、網路安全和編碼標準方面的工作,讓我很容易忘記上述那些痛苦。但實際上,這個經歷可以幫助我們編寫可以正常運作的軟體。因此,如果我開始懷疑功能安全和安全標準是否真的必要,只需要回想加拿大一個非常寒冷的冬天就可以找到答案。

(參考原文:Coding confessions from Canada,by Mark Pitchford,EDN Taiwan Anthea Chuang編譯)

 

 

加入LINE@,最新消息一手掌握!

發表評論