原創|實施案例|編輯:鄭恭琳|2020-07-22 10:58:29.833|閱讀 426 次
概述:在軟件開發中,我們極不情愿將 Bug 呈現到客戶面前,但當問題真正產生時,我們需要去反思為什么如此簡單的 for 循環所導致的問題造成這么大影響。對于文中某跨國網通設備大廠所出現的 Bug,只需要通過 C++test 一條簡單代碼規范, 即可防范于未然。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
下面的描述來自 Parasoft 的客戶某跨國網通設備大廠的郵件內容,客戶在郵件中描述了一段存在 Bug 的代碼。以下是郵件內容(注:為防止泄漏客戶代碼信息,對代碼做過輕微改動):
“
As talked last night, we have solved one big code bug; here I list it here for your information.
This code cause system running in an endless loop, that cause system reboot due to watch dog timer timeout.
void ETN_xdd_algo::stop_running(T_global_TCID tcid)
{
if ( pinstances == NULL) { return;
}
LE_simple_list
for (; it != pinstances->end(); ) { if (tcid == (*it)->get_tcid()) {
delete *it; break;
}
}
return;
}
”
對上述錯誤代碼做簡單分析,你將很容易發現問題所在,原因簡單甚至弱智,因為 for 循環的循環因子 it 沒有進行自加運算。這導致只要進入該 for 循環,必將陷入死循環。
以上是從代碼角度進行分析,得出死循環結論。 而當代碼在實際項目中運行時(上述錯誤代碼的項目,實際運行在客戶所生產的電信設備上),所產生的真實后果則更為嚴重。
客戶在郵件中有簡單提及:
“solved one big code bug”
“This code cause system running in an endless loop, that cause system reboot due to watch dog timer timeout.”
而在我們現場支持客戶端過程中,客戶曾說明如下:
“由于存在 Bug 的設備在電信運營商的系統上,經常無端死機,導致他們的客戶怨聲載道。責令他們必須在規定期限內,找到問題根源并修復;”
好了,我們再簡單回顧一下整個問題發生的流程,以便我們能更好的重現問題:
作為電信設備供應商的某跨國網通設備大廠,所銷售的設備正運行在運營商系統上,而運營商發現該設備經常無端死機,于是要求某跨國網通設備大廠必須在短期內找到問題根源并修復。由于不能現場調試,某跨國網通設備大廠的開發人員只能在本地反復診斷,反復模擬,希望重現死機的現象,經過長達一周時間的模擬,他們終于發現問題的根源正是上述那段簡單的 for 循環錯誤。
某跨國網通設備大廠是國際電信行業的佼佼者,是數十億美元規模的電信技術領先廠商, 擁有數個重要的全球研發中心,擁有技術先進、制造能力達到世界一流水平的生產制造平臺, 銷售服務網絡遍及全國和海外 50 多個國家。
上述錯誤的代碼正來自某跨國網通設備大廠核心設備的軟件中。述及該項目的歷史,也足讓你瞠目結舌。總項目全部基礎性代碼超過 1000 萬行,最早的代碼可追蹤到 90 年代。
客戶所測項目隸屬總項目重要模塊之一,代碼量超過 100 萬行。
更為重要的影響在于運營商對于某跨國網通設備大廠產品質量的認定,這樣的問題對于任何客戶而言都是不希望看到的,因為這會影響到實際產品的運行,進而消費者對于產品的使用。
在軟件開發中,我們極不情愿將 Bug 呈現到客戶面前,但當問題真正產生時,我們需要去反思為什么如此簡單的 for 循環所導致的問題造成這么大影響。
……
以上一些問題是保障軟件產品高質量的一些因素,對于這些,C++test 的靜態規則檢查正好完美的滿足這些需求:
對于上文中某跨國網通設備大廠所出現的 Bug,只需要通過 C++test 一條簡單代碼規范, 即可防范于未然。
以下規則來自 C++test 靜態編碼規則:
“Null initialize or increment expressions in for loops will not be used; a while loop will be used instead [CODSTA-49-3]”
從某跨國網通設備大廠反饋的情況,他們非常信賴 C++test 靜態分析,已經將 C++test 的靜態分析作為測試的標準流程,每日進行測試。因為通過 C++test 的代碼規范,只需數分鐘即可預防該問題發生。而該問題從發現到修復前后花費 2 周時間,更重要的是影響客戶對于他們產品的信心。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn