Contents ...
udn網路城邦
作軟體也需要防禦駕駛的觀念
2019/11/15 05:28
瀏覽639
迴響0
推薦8
引用0

賣車牌辨識系統的廠商多半喜歡推出軟硬體一體成型的產品,像我這樣只賣單純辨識軟體的很少。我會這麼作一方面是成本考量,要作出「整套」產品當然硬體方面的投資不會小!另一方面,我的優勢技術只是軟體,要作硬體整合我也不會作得很好。而且這樣就可以搭便車,使用電腦作業系統已經處理好的螢幕影像做辨識,我的程式就可以跑得很快了!

那別的廠商為何都傾向賣整套車牌辨識「系統」呢?我之前以為他們只是想多賺點錢,一個隨時可以重複拷貝的電腦檔案要賣很貴有點奇怪?怕客戶不能接受,尤其是台灣重硬輕軟的觀念已經根深蒂固,好像軟體都不必花錢買的?但是一整組「設備」賣個幾十萬,客戶就當買一個高科技的「儀器」?就不會覺得太貴了!

當然!內行人都知道,車牌辨識系統不管外觀看起來多精美多龐大,他的靈魂或大腦還是那個核心的辨識軟體!抽掉這個軟體,其他周邊的電腦、攝影機誰都在一般商店賣場或網路上買得到,後端管理用的資料庫程式也不難找到人製作。所以我之前常常嘲諷這些廠商是在唬弄客戶,騙客戶掏出更多的錢買其實自己都能輕易買到的東西。

但是最近發生的幾次意外,讓我知道多數廠商愛整組賣還有技術面的考量!我的停車場動態車牌辨識軟體最近經由一個大客戶推廣之中,卻很漏氣的在某些場地有當機的情形,讓我的客戶很困擾,我當然壓力更大!他們可以嫌棄我改用別家產品,我卻沒處可逃,非解決問題不可!不然東西就難賣了!

但是認真檢視測試程式,也努力抓到錯誤點之後我卻更加疑惑!因為那些錯誤都很奇怪?譬如同樣宣告一個影像物件:New Bitmap(800,600),幾十萬次都沒事,卻會莫名其妙地忽然出現參數錯誤?幾次意外都是類似這種處理影像時程式邏輯無誤,參數也沒改變,卻會這樣突然被作業系統退票,說我給的參數錯了?

其實我之前並不知道為何發生這種詭異事件?但是我可以做到發生這種天災時的補救措施,就是偵測到這種錯誤時,用軟體關掉內部主程序再重啟迴圈,就是不去追究原因了!反正程式卡住就關掉重開,這也是一般電腦當機時多數人會作的動作,除非硬體壞掉,不然這樣多半有用!

昨天一位客戶公司的工程師在現場發現了一種動作會引發這種意外!就是他在該電腦進行其他工作時,按了一個特殊的組合按鍵,我的程式紀錄檔(log)就立即出現那個奇怪的錯誤了!還好我的內部重啟程式證實有效,發生錯誤一秒鐘內就繼續運作,使用者根本不知道發生過意外!工程師也是好意想幫我測試,所以隨時關注紀錄檔內容,才抓到這個幽靈的!

這種怪動作我自己想破腦袋,都不會想出要這樣測試程式的「抗壓性」或「穩定性」的!就像與人分租公寓或大學時與多位室友同住宿舍,我自己管理得好好的,但別人會作甚麼讓我想像不到的事情?我真的無法預期掌握!所以大學生只要不缺錢,誰都想自己租間套房住的!

我的軟體其實是與他們的很多其他軟體共用一台電腦的!他們會用電腦做甚麼事情我真的無法掌控,多數時候是不會互相干擾,但是我的軟體操作影像物件時對於系統來說是屬於獨占式的要求,如果其他的軟體或操作員也搶著用電腦的核心機制時,就有可能讓我的合理請求無法完成,就出錯了!

簡單說,這幾次的意外當機對我的軟體來說是非戰之罪!但是客戶端的感受就是我的研發還不成熟,軟體執行不穩定!雖然我已經有辦法處理,也知道部份原因了!但這個過程讓我壓力好大,也開始想:如果我賣的是「辨識機器」!裡面的電腦只執行我的程式,那就絕對不會有這些「不穩定」,甚至當機了!不是嗎?

如果我還是沒錢製作整套機器來賣,還是沒技術與人力搞定軟硬體整合,那我的軟體就必須學會「與人相處之道」!除了自己的事情要作好,也要學會「防禦性駕駛」,萬一別人作些會影響我工作的怪動作,我也要Hold得住!不能就這麼發生車禍了!即使真的發生車禍,我也要能迅速自行修復繼續行駛。

所以現在我的軟體中開始出現很多看起來有點怪怪的防禦性程式碼,某些明明不可能出錯的動作也會寫捕捉錯誤的程式,就是交代好「萬一」發生意外時要如何處理?好像多此一舉的動作,卻是很重要的軟體穩定性保證,讓軟體絕對不卡關或當機的重要動作,就當作沒事時就先買好保險吧?或者說「防人之心不可無」,想再偷襲我?很難的!哈哈!

有誰推薦more
你可能會有興趣的文章:

限會員,要發表迴響,請先登入