代码的检查走查与评审
多年以來,軟件界的大多數人都持有一個想法,即編寫程序僅僅是為了提供給機器執行,并不是供人們閱讀的,軟件測試的惟一方法就是在計算機上執行它。20 世紀 70 年代早期,一些程序員最先意識到閱讀代碼對于構成完善的軟件測試和調 試手段的價值,通過他們的努力,原有的觀念開始發生變化。
今天,并不是所有的軟件測試人員都要閱讀代碼,但是研讀程序代碼作為測試工作的一部分,這個觀念已經得到了廣泛認同。以下幾個因素會影響到特定的測試 和調試工作需要人工實際閱讀代碼的可能性:軟件的規模和復雜度、軟件開發團隊的規模、軟件開發的時限(例如時間安排表是松散還是緊密)等,當然還有編程小 組的技術背景和文化。
基于這些原因,在深入研究較為傳統的基于計算機的測試技術之前.我們首先討論非基于計算機測試的過程(即“人工測試”)。人工測試技術在查找錯誤方面非常有效,以至于任何編程項目都應該使用其中的一種或多種技術。應該在程序開始編碼之后、基于計算機的測試開始之前使用這些方法。同樣,也可以在編程過程的更早階段就開始設計和應用類似的方法(例如在每個設計階段的末尾),但是這些內容超出了本書討論的范圍。 在開始討論人工測試技術之前,有一條重要的注意事項:由于包含了人為因素在內,導致很多方法的正規性要差于由計算機執行的數學證明,人們可能會懷疑某些如此簡單和不正規的東西是否有用。反之亦然。這些不正規的方法并沒有妨礙測試取得成功;相反,它們從以下兩個方面顯著地提高了測試的功效和可靠性。 首先,人們普遍認識到錯誤發現得越早,改正錯誤的成本越低,正確改正錯誤的可能性也越大。其次,程序員在開始基于計算機的測試時似乎要經歷一個心理上 的轉變。從內部產生的壓力似乎會急劇增長,并產生一個趨勢,要“盡可能快地修正這個缺陷”。由于這些壓力的存在.程序員在改正某個由基于計算機測試發現的錯誤時所犯的失誤,要比改正早期發現的問題時所犯的失誤更多一些。????
代碼檢查與走查是兩種主要的人工測試方法。由于這兩種方法具有很多的共同之處,在這里我們將一起討論它們的相似點,而它們的不同之處將在后續章節中進行介紹。 代碼檢查與走查都要求人們組成一個小組來閱讀或直觀檢查特定的程序。無論采用哪種方法,參加者都需要完成一些準備工作。準備工作的高潮是在參加者會議 上進行的所謂“頭腦風暴會”。“頭腦風暴會”的目標是找出錯誤來,但不必找出改正錯誤的方法。換句話說,是測試,而不是調試。 代碼檢查與走查已經廣泛運用了很長時間。在代碼走查中,一組開發人員(三至四人為最佳)對代碼進行審核。參加者當中只有一人是程序編寫者。因此,軟件測試的主要工作是由其他人,而不是軟件編寫者本人來完成.這符合“軟件編寫者往往不能有效地測試自己編寫的軟件”的測 試原則。 代碼檢查與走查是對過去桌面檢查過程(在提交測試前由程序員閱讀自己程序 的過程)的改進。與原方法相比,代碼檢查與走查更為有效,同樣是因為在實施過程中,除了軟件編寫者本人,還有其他人參與進來。
代碼走查的另一個優點在于,一旦發現錯誤,通常就能在代碼中對其進行精確定位,這就降低了調試(錯誤修正)的成本。另外,這個過程通常發現成批的錯誤。 這樣錯誤就可以一同得到修正。而基于計算機的測試通常只能暴露出錯誤的某個表癥(程序不能停止,或打印出一個無意義的結果),錯誤通常是逐個地被發現并得到糾正的。 在典型的程序中,這些方法通常會有效地查找出 30%~70%的邏輯設計和編碼錯誤。但是,這些方法不能有效地查找出高層次的設計錯誤,例如在軟件需求分析階段的錯誤。請注意,所謂 30%~70%的錯誤發現率,并不是說所有錯誤中多達 70%可能會被找出來,而是講這些方法在測試過程結束時可以有效地查找出多達 70 %的已知錯誤。
當然,可能存在對這統計數字的批評,即人工方法只能發現“簡單”的錯誤(即 與基于計算機的測試方法相比,所發現的問題顯得微不足道),而困難的、不明顯 的或微妙的錯誤只能用基于計算機的測試方法才能找到。然而,一些測試人員在使 用了人工方法之后發現,對于某些特定類型的錯誤,人工方法比基于計算機的方法 更有效,而對于其他錯誤類型,基于計算機的方法更有效。這就意味著,代碼檢查 /走查與基于計算機的測試是互補的。缺少其中任何一種,錯誤檢查的效率都會降低。 最后,不但這些測試過程對于測試新開發的程序有著不可估量的作用,而且對 于測試更改后的程序,這些測試過程具有相同的作用,甚至更大。根據我們的經驗, 修改一個現存的程序比編寫一個新程序更容易產生錯誤(以每寫一行代碼的錯誤數 量計)。因此,除了回歸測試方法之外,更改后的程序還要進行這些人工方法的測試。 作者:青勝軟件測試 https://www.bilibili.com/read/cv16864059 出處:bilibili
總結
以上是生活随笔為你收集整理的代码的检查走查与评审的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swappiness
- 下一篇: 构建一个文本搜索系统