C/C++單元測試理論精要(二)

來源:互聯網
上載者:User

1.2 單元測試的目標和方法

 

    單元測試的目標是什麼呢?就是完整檢測代碼單元的功能邏輯。找出代碼單元本身的所有功能邏輯錯誤,具體來說,就是檢測對資料的各種分類是否考慮全面,處理是否正確。單元測試並不是用來代替系統測試、效能測試的,它的目標相當明確,就是檢測代碼單元本身的功能邏輯錯誤。

   

   
    如果時間緊張,應該優先測試哪些代碼呢?代碼的功能邏輯越複雜,也就是演算法密集度越高,可能的錯誤越多,越需要全面的測試,測試效益越大。所以,如果時間不夠,應該優先測試演算法密集的代碼。80-20規則在軟體開發中同樣存在,也就是80%的代碼錯誤可能存在於20%的代碼中,20%的代碼可能佔用了80%的開發調試時間。這20%就是演算法密集的代碼,即使只對這些代碼進行單元測試,也可以產生巨大的效益。代碼複雜度和測試價值可以用工具來統計。

 

    測試方法主要有兩種:靜態和動態。靜態方法主要由工具掃描和分析代碼。動態方法則需要執行代碼。

   

    靜態方法能發現哪些錯誤呢?從靜態測試的角度來看,代碼錯誤可分為代碼缺失,語義錯誤,一般錯誤。代碼缺失是分類遺漏造成的,也就是程式員沒有考慮到某些輸入,沒有編寫相應代碼。語義錯誤就是通過分析代碼的文法含義,有可能判斷的錯誤,例如,條件陳述式中將等於操作符寫成了賦值操作符、數組越界、除零錯。其他錯誤就是一般錯誤。對於語義錯誤,靜態測試可能能夠發現。對於代碼缺失,靜態測試無法發現,因為代碼不存在,也就無從分析。其他錯誤,靜態測試不能發現,因為工具不瞭解代碼的設計功能。很顯然,靜態測試並沒有真正檢測代碼的功能邏輯,根本不知道這個代碼是幹什麼的,實現什麼功能才對,只是通過分析代碼的自然特性來檢測錯誤,所以作用是很有限的。

   

    動態方法是這麼做的:首先,依資料的分類列出輸入,這個分類是跟程式功能緊密相關的,一個分類,相當於是一個功能點。然後,執行被測試代碼,然後,判斷輸出是不是符合預期,如果不符合,就報告錯誤。只要測試資料是完整的,就可以完整覆蓋代碼的功能邏輯,
發現所有功能邏輯錯誤。靜態測試所能發現的錯誤,如條件陳述式中將等於操作符寫成了賦值操作符,數組越界,除零錯,都會表現為功能不正確,動態測試當然也能發現。因此,要想達到基本的測試效果,要依靠動態方法。我們說的單元測試,主要是指動態方法,也就是動態測試。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.