国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 課堂 > 技術開發 > 正文

單元測試問答(摘要)

2023-06-18 12:51:36
字體:
來源:轉載
供稿:網友

為什么要進行單元測試?  

單元測試保證局部代碼的質量

單元測試改良項目代碼的整體結構

單元測試降低測試、維護升級的成本

單元測試使開發過程適應頻繁變化的需求

單元測試有助于提升程序員的能力

由誰進行測試?開發部門還是測試部門?

應該由開發部門進行單元測試!

由測試部門進行單元測試的問題:代價高,人手不足,耽誤了測試部門對其他測試的準備工作。

由開發部門進行單元測試的問題:擔心影響開發進度,程序員不習慣做單元測試,測試自己編寫的代碼,難于保證測試的效果。

無論由哪個部門做單元測試,都要面對一些問題,但開發部門所面對的問題可以借助工具來解決,而由測試部門進行單元測試,要么無法真正實施,要么代價昂貴。

由測試部門進行單元測試為什么成本昂貴? 

需多次重復理解程序

反復溝通需要大量時間成本

不利于發揮單元測試對代碼結構的約束機制

耽誤測試部門對其他測試的準備工作

即使測試部門人手充裕,僅僅從效益來考慮,也不應該由測試部門進行單元測試。如果測試部門本來就人力不充裕(進行單元測試的人員需具備編碼能力),勉強由測試部門進行單元測試,結果往往是----沒有結果。

由開發部門進行單元測試能保證測試效果嗎? 

程序員測試自己編寫的代碼,往往只考慮“正常狀況”,這當然會影響測試效果。但如果所用的單元測試工具能夠統計各種白盒覆蓋率,就能檢查測試效果。當然,只做到這一點還是不夠的,因為白盒覆蓋具有逾后逾難的特點,達到一定的覆蓋率后,覆蓋率的提升會很困難。如果測試工具功能足夠強大,能提供工具幫助用戶快速地設計測試用例,達到完整的白盒覆蓋,那么測試效果就能得到完全的保證。

實際上,如果沒有充分的統計數據,沒有達到足夠的測試完整性,那么由誰做單元測試,效果都不能保證。

邊編碼邊測試會影響編碼進度嗎? 

傳統的單元測試是很費時費力的工作,主要時間消耗在于:編寫測試代碼、設計測試用例,如果開發工具能自動生成測試代碼,并且具有快速設計測試用例的功能,那么測試費時就很少;另一方面,如果測試工具還能提供數據,幫助程序員整理編程思路、快速發現錯誤,更高效地調試,那么就能大量提高開發效率,抵銷測試所消耗的時間,不但不會影響編碼進度,甚至加快編碼進度。

實施單元測試需要改變開發流程嗎? 

邊開發邊測試,單元測試是編碼行為而不是測試行為,測試代碼看作是項目代碼的一部分,程序員提交產品代碼時也要提交測試代碼和測試報告,其他流程可以不作任何改變。

另一方面,在充分單元測試的基礎上,由于具有高質量的局部代碼,良好的整體代碼結構,保證了代碼的可擴展性和可復用性,同時,自動回歸測試支持對代碼的頻繁修改而不用擔心引入新的錯誤,因此,開發流程自然會變得敏捷,可以適應頻繁變化的需求,使系統分析、架構設計和后期測試的壓力減輕,自然而有效地改進了開發流程。

單元測試測試哪些代碼?

單元測試通常不測試很簡單的代碼,一般也不測試“邊界代碼”。很簡單的代碼容易理解,例如Get/Set函數,這里解釋一下“邊界代碼”。“邊界代碼”是指用于與外部系統交互的代碼,例如用于處理用戶界面的代碼。數據庫、文件、網絡都可以看作是外部系統,用于讀寫數據庫或文件、或訪問網絡的代碼也可以看作是“邊界代碼”,這類代碼應該獨立出來,可以進行單元測試,但對這些代碼的單元測試通常不能自動驗證預期輸出,而是需要人工察看。編程時,不要把普通代碼與“邊界代碼”混在一起,例如,不要把各種運算直接寫在界面類中,做到了這一點,絕大多數代碼都可以進行單元測試。

實際工作中,單元測試能實現什么程度的測試覆蓋?

單元測試的最低要求是100%語句覆蓋,這個覆蓋率還是不夠的,最好實現多種覆蓋的組全,比較理想的覆蓋率組合是:100%的語句、條件、分支、路徑覆蓋,另外,測試工具最好還能自動生成邊界測試用例捕捉未處理特殊輸入形成的錯誤。在達到這種覆蓋之后,殘留的編碼錯誤可以幾乎說沒有了(設計方面的錯誤除外,這些屬于集成或系統測試的范疇)。

單元測試如何改良項目代碼的整體結構?

具有良好整體結構的代碼,應該符合“低耦合”的特性,即具有“可測性”。測試不具有“可測性”的代碼時一般會產生編譯錯誤,或者需要打樁才能測試,從而將問題暴露出來。發現問題后,重構代碼、消除不當耦合一般不難,這種簡單的重構將有效地改良代碼的整體結構。

我希望依賴全自動的工具來完成單元測試,這一想法現實嗎?

完全自動化是一個美妙的愿望,但由于單元測試的基本特性,完全自動化的單元測試是不現實的。

與其他不同,單元測試是“隔離”的測試,要求代碼具有可測性,一個項目甚至一個文件中,難免會有些影響可測性的代碼,編譯到這些代碼時常常會產生編譯錯誤,因此,全自動的單元測試工具往往只能測試小部分代碼,即使使用某種技術手段屏蔽掉編譯錯誤,也得不償失,因為同時也屏蔽掉了改良代碼整體結構的寶貴機會。如果采用自底向上的方式,一個一個文件測試,測試一個文件前,先將該文件加入測試工程并編譯,沒有編譯錯誤時再測試,這樣可以及時發現并消除不當耦合,使代碼具有可測性,這種非全自動的方式,可以測試絕大多數代碼,也保證了代碼具有良好的整體結構。

另一方面,主要由測試工具自動生成測試用例來進行測試往往沒有實際意義,因為測試工具無法自動了解程序的功能,因此,自動測試用例通常只能發現異常之類的極端錯誤,大多數一般錯誤都是無法發現的。測試工具最重要的不是自動生成測試用例,而是能提供快速建立和編輯測試用例的工具。

如果由開發部門實施單元測試,那么測試部門要做哪些工作?

推動、組織單元測試的實施。單元測試既然叫做“測試”,開發部門常常認識不到其重要性和必要性,需要由測試部門推動和協助組織實施。

制定單元測試規范,培訓單元測試技術。

檢查、審核單元測試結果,保證單元測試的有效性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五家渠市| 颍上县| 潞西市| 荥经县| 宁国市| 扬中市| 咸丰县| 黄大仙区| 大姚县| 商河县| 梁河县| 夏邑县| 海安县| 大安市| 衢州市| 文水县| 商河县| 新河县| 洞头县| 雷山县| 天气| 公主岭市| 绥江县| 阜南县| 黎川县| 定日县| 府谷县| 昌江| 沙田区| 聂拉木县| 襄汾县| 绍兴市| 紫云| 阜康市| 玉林市| 平远县| 包头市| 包头市| 郸城县| 湘潭市| 麟游县|