tft每日頭條

 > 生活

 > 編寫程序時四種常見的編寫錯誤

編寫程序時四種常見的編寫錯誤

生活 更新时间:2025-01-08 12:52:48
如何編寫沒有錯誤的程序測試驅動開發如何幫助您避免錯誤

編寫程序時四種常見的編寫錯誤(如何編寫沒有錯誤的程序)1

照片由Chris Ried在Unsplash上拍攝

在開發一個大程序的時候,難免會出現一些bug。您可能已經知道減少錯誤數量的最佳方法是為您的項目編寫測試。在本文中,我将向您展示如何使用稱為測試驅動開發的原則将其提升到一個新的水平。

顧名思義,測試驅動開發是在寫下一些測試之後才開發程序的過程。在理解為什麼這比在開發過程結束時編寫測試更好之前,讓我們看看它是如何工作的。

TDD 的工作原理

遵循 TDD 原則時,主要思想是分别開發每個新功能,一次一個。您可以将創建單個功能的工作分為 5 個不同的階段:

  1. 編寫測試:首先要做的是編寫測試來檢查您要創建的功能。
  2. 運行所有測試:新測試應該失敗,因為該功能尚未實現。此步驟用于檢查是否需要新代碼。此外,您确保其餘代碼(如果您之前創建了一些其他測試)按預期工作。
  3. 實現特性:在這個階段,不需要編寫優雅的代碼。您應該隻關心通過編寫盡可能少的代碼行來實現功能。
  4. 測試代碼:現在所有的測試都應該通過了。您還可以檢查以前的測試是否仍然有效(因此新代碼沒有引入錯誤)。
  5. 重構:最後,您可以重寫代碼以提高效率和優雅。請記住在每次修改後檢查您的測試是否仍然通過。

一旦一個功能已經完全開發出來,你可以再次從第 1 步開始進行下一步。每次實現程序的新部分時,您仍然應該運行之前編寫的測試。通過這種方式,您可以确保您沒有破壞舊代碼。

現在我們已經了解了 TDD 是如何工作的,為什麼要采用它呢?以下是使用測試驅動開發的主要優點(和缺點)。

1.隻寫你需要的代碼

編寫程序時四種常見的編寫錯誤(如何編寫沒有錯誤的程序)2

斯科特·布萊克 ( Scott Blake ) 在Unsplash上拍攝的照片

在開發程序時,很容易被熱情所吸引并重新開始使您的代碼複雜化。但是,這很可能會在您的程序中引入許多錯誤。此外,您可能根本不需要此代碼。這個想法可以概括為“你不需要它”的原則。

現在,考慮如果您在開始開發階段之前編寫測試會發生什麼:一旦測試通過,您就知道您的代碼是完整的。因此,您不太可能在程序中添加無用的功能(因此您的錯誤會更少)。

2.深入測試每個功能

編寫程序時四種常見的編寫錯誤(如何編寫沒有錯誤的程序)3

羅伯特·拜在Unsplash上的照片

在開發代碼之後編寫測試的問題之一是您将受到代碼編寫方式的影響。這意味着您的測試将嘗試檢查代碼是否按預期工作,而不是尋找意外的錯誤。所以更多的錯誤将仍然未被發現。

另一方面,在編寫代碼之前創建測試時,您不會對如何實現該功能有任何先入之見。這意味着将更徹底地檢查代碼。

3.更容易重構

編寫程序時四種常見的編寫錯誤(如何編寫沒有錯誤的程序)4

照片由Sven Mieke在Unsplash上拍攝

使用 TDD 時,您知道代碼完全被測試用例覆蓋。這意味着如果重構引入了錯誤,您的測試将檢測到它。

另一方面,在正常的程序開發中,您重構的代碼可能會出現一些您認為原始代碼中不可能出現的錯誤(因此您沒有為它編寫任何測試)。

因此,通過使用 TDD,您不必在每次重構後重新考慮您的測試:您可以隻運行您最初編寫的測試。

缺點1.耗時

編寫程序時四種常見的編寫錯誤(如何編寫沒有錯誤的程序)5

照片由Agê Barros在Unsplash上拍攝

如果您沒有很多時間,使用測試驅動開發可能不是最佳選擇。事實上,在沒有代碼的情況下編寫測試比您想象的要困難得多。

但是,您花在編寫這些測試上的時間将得到補償,因為您無需浪費時間尋找隐藏良好的錯誤。

2.學習曲線

編寫程序時四種常見的編寫錯誤(如何編寫沒有錯誤的程序)6

照片由Element5 Digital在Unsplash上拍攝

在開發代碼之前可能很難習慣于編寫測試。學習如何有效地編寫測試需要一些時間,但一段時間後,我可以向你保證,這将是值得的。

此外,在測試驅動開發中,重要的是您的測試涵蓋代碼的所有方面。否則,這隻是浪費時間。所以你必須學會​編寫适量的測試。

結論

如您所見,使用 TDD 的好處大于壞處,這就是您應該立即開始采用它的原因。

如果您想了解有關測試驅動開發的更多信息,請查看以下資源:

  • 維基百科上的 TDD
  • 測試驅動開發:通過示例 — Kent Beck
  • TDD 的好處
,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved