摘 要:軟件測試是提高軟件質量的關鍵方法之一,軟件單元測試是軟件測試中一個重要的步驟,充分的單元測試對發現和排除軟件中的缺陷非常有效,并且成本很小。但在軟件項目實踐中,軟件測試的作用還沒有受到特別的重視,許多軟件項目組的工程師還存在對軟件測試的認知誤區,這嚴重影響了軟件測試工作高品質的開展。文章針對嵌入式軟件單元測試,結合工程實踐,明確了單元測試的要求以及重點,介紹了一種高效、容易操作單元測試流程。
關鍵詞:軟件測試;認知誤區;嵌入式;單元測試流程
1 軟件測試簡述
軟件測試是在軟件投入商用前,對軟件需求分析報告、設計規格說明書和編碼的最終復查,是軟件質量保證的關鍵方法,軟件測試并不等于程序測試。它貫穿于軟件定義和開發的整個過程,因此,軟件需求分析、軟件概要設計、軟件詳細設計和程序編碼等各階段所得到的文檔,包括需求規格說明書、概要設計說明書、詳細設計說明書,以及源代碼都是軟件測試的測試對象。隨著軟件規模的不斷擴大,以及軟件設計復雜程度不斷的提高,軟件開發中出現失誤或缺陷的概率越來越大。隨著市場對軟件質量重要性的認知程序的提高,因此軟件測試在軟件項目實施過程中的重要性尤為突出。軟件測試將會成為一個具有很大發展前景的行業,市場將需要更多具有豐富測試技術和先進管理經驗的測試技術員和項目經理。
2 軟件開發項目測試的誤區
軟件測試從1990年左右進入中國,目前國內大的測評中心、大型企業已經完全掌握了軟件測試的測試策略和測試方法。小企業普遍存在測試人員不懂什么是單元測試,怎樣進行單元測試,很少能看懂代碼的細節。而開發人員很少能夠提供完整的詳細設計報告、需求報告。導致單元測試,以拼湊測試報告為目的。
認知誤區一:軟件測試是軟件開發的最后一道步驟,工程師們一般認為,軟件實際項目要經過下面六個階段:需求分析,概要設計,詳細設計,軟件編碼,軟件測試,軟件發布。因而,認為軟件測試只是編碼后的一個孤立的階段,這就是不了解軟件測試流程的認知偏差。軟件測試是一個系列的活動過程,是一個開放的體系,包括軟件測試需求分析,測試計劃設計,測試用例設計,執行測試。從而,軟件測試應當貫穿于軟件項目的整個生命周期,并不是軟件開發后最后一道步驟。認知誤區二:軟件商用后如果發現質量問題,就武斷認為是軟件測試人員的工作失誤。這種認識很狹隘,很是打擊軟件測試人員的工作積極性。軟件測試只能確認軟件存在錯誤,不能保證軟件沒有錯誤。因為從根本上講,軟件測試不可能發現全部錯誤,軟件發布后的錯誤可能來自軟件項目中的各個過程。認知誤區三:軟件測試對測試人員技術要求不高,任何人都可以做。很多工程師認為軟件測試就是安裝并運行程序,按按鍵盤的重復性工作。隨著軟件測試技術的不斷改進和完善,新測試方法、新流程、新工具都在不斷被開發出來。這就需要軟件測試工程師掌握和學習很多專業測試新理念和新技能。認知誤區四:只有編寫程序的高手才是軟件專家,而軟件測試沒有前途。由于我國軟件行業整體研發能力比較低,軟件開發過程不規范。不少軟件項目的開發都還停留在“累加堆疊“階段。項目開發依靠個別程序員決定,他們一人負責總體設計和代碼編寫,給人的印象是程序員是真正的牛人,完成了所有的軟件項目開發工作。但在微軟等世界知名軟件企業里,軟件測試人員的待遇和數量與一般程序員沒有多少差異,優秀測試人員的待遇甚至比普通程序員要高的多。
3 嵌入式軟件單元測試流程
單元測試是指對軟件中的最小可測試單元進行檢查和驗證。單元是規格說明書中的最小單元,包括函數、子程序、程序。單元測試關注獨立的函數功能,是測試過程中最低級別的測試活動。需要開發一個或多個測試用例執行單元測試。把代碼問題縮小范圍在開發階段鎖定Bug是單元測試的主旨要求,以下將介紹一種容易操作的嵌入式單元測試實戰流程。
第一階段,制定測試記錄表,記錄測試過程,和測試情況。測試記錄表包含:源文件名,子函數名,用例標號,用例名稱,用例個數,用例通過個數,語句覆蓋率,分支覆蓋率,MC/DC覆蓋率,測試結果,問題描述,測試人員,測試時間。針對第一階段的測試結果,此時需要大家分析出問題的代碼,各抒己見,總結問題,給出解決方法。
第二階段,解決部分測試用例failed問題,找出阻止生成用例的共性。常見問題匯總:局部變量未初始化,調用函數未聲明,局部變量直接賦值,結構體嵌套、結構體指針、聲明問題、聲明位置問題,函數指針,大循環、死循環,絕對地址,指針變量,C語言程序中帶有goto語句。解決辦法:局部變量聲明后,需要賦初值再使用。調用函數未聲明,該問題發生在隔離測試階段,屬于代碼書寫不規范問題。解決方法:自定義的函數都需要在頭文件中做統一聲明。局部變量直接賦初值:該問題發生在測試用例無法生成階段,屬于代碼書寫不規范問題。解決方法,結構體局部變量,指針變量需要先聲明后賦初值。結構體嵌套、結構體指針、聲明問題、聲明位置問題:該問題也屬于代碼書寫不規范問題。解決方法:根據MISRA代碼書寫規范,結構體需要放在頭文件中統一聲明。大循環、死循環:單元測試需要有程序結束的出口。解決方法:把大循環改為小循環,注釋掉死循環(if(1)、for(; ;),while(1))。絕對地址:單元測試不連接真實的硬件設備。遇到寄存器等絕對地址時,需要對寄存器做變量處理。指針變量:需要聲明一個同類的數組,然后把數組的首地址,賦給指針變量。函數指針:需要虛構一個函數實體,取函數地地址賦給函數指針,完成映射。C語言程序中帶有goto語句:需要改變程序結構,增加判斷語句,去除所有的goto語句,以便確保C語言程序的穩定性。
測試第三階段:基本圈復雜度高于MISRA閥值要求的函數,先考慮把復雜函數改為幾個小函數。改不了的由開發人員寫聲明以及具體原因,再按照路徑分支來設計測試用例。匯總測試結果,提交測試問題報告單,并提交行業標準測試報告。
4 結束語
文章簡述了軟件測試的基本概念,澄清了軟件測試工程實踐中的幾個誤區,依據單元測試實踐的具體案例,介紹了一種高效、容易操作的嵌入式單元測試的流程。
參考文獻
[1]胡丹,杜新華.基于目標機的嵌入式軟件單元測試[J].電子測量技術,2006(2).
[2]趙正海,王寧.跟蹤雷達“指示引導”功能軟件測試方法研究[J].現代電子技術,2013(36).
[3]于園園.軟件測試技術與測試管理研究[J].江蘇科技信息,2016(7).
[4]王琨.嵌入式計算機軟件測試關鍵技術探討[J].科技創新與應用,2016(7).
[5]張金環,田洪濤.淺析設備軟件測試與質量保證[J].電子工業專用備,2016,45(1).
作者簡介:張軍(1988-),男,陜西武功人,工學碩士,助理工程師,主要研究方向:雷達信號處理算法、數字中頻收發機和嵌入式軟件測試。
李攀(1987-),男,陜西西安人,工學碩士,助理工程師,主要研究方向:相控陣雷達天線技術與測試。
邢光輝(1990-),男,陜西大荔人,工學學士,助理工程師,主要研究方向:數字中頻收發機技術與測試。