給定軟件在哪里...該系統由幾個子系統組成每個子系統都包含一些組件每個組件都使用許多類來實現...我喜歡為每個子系統或組件編寫自動化測試。我沒有為組件的每個內部類編寫測試(除非每個類都有助于組件的公共功能,因此可以通過組件的公共API從外部進行測試/測試)。當我重構組件的實現時(作為添加新功能的一部分,我經常這樣做),因此,我不需要更改任何現有的自動化測試:因為這些測試僅取決于組件的公共API和公共API。通常是擴展而不是更改。我認為該政策與諸如Retesting Test Code這樣的文檔形成了鮮明對比,該文檔表示...“ ...單元測試...”“ ...系統中每個類的測試類...”“ ...測試代碼/生產代碼的比率...理想地被認為接近1:1的比率...”……我想所有這些我都不同意(或者至少不練習)。我的問題是,如果您不同意我的政策,您能解釋一下原因嗎?在什么情況下這種測試程度不夠?綜上所述:公共接口經過測試(和重新測試),并且很少更改(它們被添加但很少更改)內部API隱藏在公共API的后面,可以更改而無需重寫測試公共API的測試用例。腳注:我的一些“測試案例”實際上是作為數據實現的。例如,UI的測試用例由包含各種用戶輸入和相應的預期系統輸出的數據文件組成。測試系統意味著具有測試代碼,該代碼讀取每個數據文件,將輸入重放到系統中,并斷言它獲得了相應的預期輸出。盡管我很少需要更改測試代碼(因為通常添加而不是更改公共API),但我確實發現有時(例如每周兩次)需要更改一些現有數據文件。當我更好地更改系統輸出時(即新功能改進了現有輸出),可能會發生這種情況,這可能會導致現有測試“失敗”(因為測試代碼僅嘗試斷言輸出未更改)。要處理這些情況,請執行以下操作:重新運行自動測試套件,該套件帶有一個特殊的運行時標志,該標志指示它不聲明輸出,而是將新輸出捕獲到新目錄中使用可視化差異工具查看哪些輸出數據文件(即哪些測試用例)已更改,并驗證這些更改是否良好以及新功能的預期效果通過將新的輸出文件從新目錄復制到運行測試用例的目錄中來更新現有測試(覆蓋舊測試)腳注:“組件”是指“一個DLL”或“一個程序集”之類的東西,其大小足以在體系結構或系統的部署圖上可見,通常使用數十個或100個類來實現,并且因此與公共API只包含約1或接口少數......一些可能被分配到的開發商之一的團隊(其中不同的組件被分配到不同的團隊),并且將根據康威定律有相對穩定的公共API。腳注:文章《面向對象的測試:神話與現實》說:誤解:黑匣子測試就足夠了。 如果您使用類接口或規范仔細地進行了測試用例設計,則可以確信該類已被充分利用。白盒測試(查看方法的設計測試實現)違反了封裝的概念。現實:OO結構很重要,第二部分。許多研究表明,開發人員認為非常難以理解的黑盒測試套件僅在被測實現中使用了三分之一至一半的語句(更不用說路徑或狀態)。這有三個原因。首先,選擇的輸入或狀態通常使用正常路徑,但不強制所有可能的路徑/狀態。其次,僅憑黑盒測試無法揭示驚喜。假設我們已經測試了被測系統的所有指定行為。為了確信沒有未指明的行為,我們需要知道黑盒測試套件是否未行使系統的任何部分??梢酝ㄟ^代碼檢測來獲取此信息的唯一方法。第三,我應該補充一點,我正在做白盒功能測試:我看到了代碼(在實現中),并且編寫了功能測試(驅動公共API)以行使各種代碼分支(功能實現的詳細信息)。
3 回答

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
答案很簡單:您正在描述功能測試,這是軟件質量檢查的重要組成部分。測試內部實現是單元測試,這是軟件質量保證的另一部分,目標是不同的。因此,您會感到人們不同意您的方法。
功能測試對于驗證系統或子系統是否已完成預期的工作很重要??蛻艨吹降娜魏蝺热荻紤ㄟ^這種方式進行測試。
單元測試是為了檢查您剛剛編寫的10行代碼是否符合預期。它使您對代碼有更高的信心。
兩者是互補的。如果您在現有系統上工作,那么功能測試可能是第一件事。但是,一旦添加代碼,對它進行單元測試也是一個好主意。

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
我的面前沒有我的Lakos副本,所以我只想指出他比我解釋為什么測試在所有級別上都重要的工作要好,而不是引用。
僅測試“公共行為”的問題是這樣的測試給您的信息很少。它會捕獲許多錯誤(就像編譯器會捕獲許多錯誤一樣),但是無法告訴您這些錯誤在哪里。執行不佳的單元通常會長時間返回良好的值,然后在條件發生變化時停止這樣做,這是很常見的。如果對該單元進行了直接測試,則其實施不當的事實將很快得到證實。
測試粒度的最佳級別是單位級別。通過其界面為每個單元提供測試。這使您可以驗證并記錄您對每個組件的工作方式的信念,從而允許您僅通過測試其引入的新功能來測試相關代碼,從而使測試簡短易達。另外,它可以使用他們正在測試的代碼來進行測試。
換句話說,只要您注意每個公共可見的類都有公共行為,則僅測試公共行為是正確的。
- 3 回答
- 0 關注
- 622 瀏覽
添加回答
舉報
0/150
提交
取消