D14 - 完整驗證應用程式:為重構築起無憂的安全防線

閱讀時間約 6 分鐘

哈囉,大家好!讓我們延續單元測試議題,在這篇文章中,我想和大家聊聊單元測試的延伸議題,重構的重要性,特別是它如何為我們的程式碼提供一層安全防線,讓我們在重構時可以無後顧之憂。


一、為什麼重構需要安全防線?

在開發過程中,難免會遇到需要重構的情況。也許一開始的設計不夠完善,或者需求發生了變化。然而,隨著專案的複雜度增加,每次修改都有可能影響到其他部分。這種不確定性常常讓人感到焦慮,甚至不敢輕易動手。

還記得有一次,我在一個專案中需要優化一個看似簡單的函式。結果,一改之下,整個系統都出現了奇怪的錯誤。當時真是頭大,花了好幾個小時才找到問題所在。那次經驗讓我深刻體會到,沒有單元測試的保護,重構真的像是在走鋼索,一不小心就可能摔得很慘。

二、單元測試如何提供保護?

單元測試的目的,不僅僅是為了找到錯誤,更是為我們的程式碼建立一個可靠的基礎。透過撰寫針對各個功能的測試,我們可以:

  • 確認程式碼的正確性:確保每個模組都按照預期運作。
  • 預防回歸錯誤:修改程式碼時,立即發現是否破壞了既有功能。
  • 提高程式碼品質:促使我們寫出更模組化、可測試的程式碼。
    這樣一來,我們在進行重構時,就有了一層安全網。不用再擔心改了一行程式碼,卻導致其他地方出問題。

三、實際應用:為重構撰寫單元測試

讓我們以實際例子來看看如何利用單元測試為重構保駕護航。

1. 撰寫現有功能的測試

假設我們有一個 Transaction 模型,裡面有一個計算用戶總收入的方法:

public function calculateTotalIncome($userId)
{
return $this->where('user_id', $userId)
->where('type', 'income')
->sum('amount');
}

在進行重構前,我們先為這個方法撰寫單元測試:

/** @test */
public function it_calculates_total_income_correctly()
{
$user = User::factory()->create();
Transaction::factory()->create(['user_id' => $user->id, 'type' => 'income', 'amount' => 1000]);
Transaction::factory()->create(['user_id' => $user->id, 'type' => 'income', 'amount' => 2000]);
Transaction::factory()->create(['user_id' => $user->id, 'type' => 'expense', 'amount' => 500]);

$totalIncome = (new Transaction())->calculateTotalIncome($user->id);

$this->assertEquals(3000, $totalIncome);
}

2. 進行重構

假設我們覺得這個方法應該放到 User 模型裡,更符合邏輯。因此,我們將方法移到 User 模型:

public function calculateTotalIncome()
{
return $this->transactions()
->where('type', 'income')
->sum('amount');
}

3. 執行測試,確認功能正常

重構後,重新執行測試:

php artisan test --filter=it_calculates_total_income_correctly

如果測試通過,表示我們的重構沒有破壞原有功能。

4. 擴充測試,涵蓋更多情境

我們可以進一步撰寫更多測試,確保各種情況下功能都正常。例如,當沒有收入時:

/** @test */
public function it_returns_zero_when_no_income()
{
$user = User::factory()->create();

$totalIncome = $user->calculateTotalIncome();

$this->assertEquals(0, $totalIncome);
}

四、反思:單元測試帶來的思考

透過這樣的過程,我們不僅確保了程式碼的品質,也讓自己對系統的理解更加深入。有時候,撰寫測試時會發現原本設計的不合理之處,進而促使我們思考更好的解決方案。

還有一次,我在撰寫測試時,發現某個方法的依賴太多,導致測試很難寫。這讓我意識到,這個方法需要被拆分或重構。結果,不僅測試變得容易,整個系統的結構也因此優化了。


五、結語

單元測試就像是我們程式碼的守護者,為我們築起一座安全的城牆。在這座城牆的保護下,我們可以更自在地進行重構,提升系統的品質和效能。

當然,撰寫測試需要時間和精力,但從長遠來看,這絕對是值得的投資。畢竟,誰也不想在深夜還在追著難纏的 Bug 跑。透過單元測試,我們可以更有信心地面對未來的挑戰。

這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,作者都用幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
單元測試不僅能發現錯誤,更是提升開發技能的關鍵工具。Laravel 提供強大的測試框架,讓我們可以輕鬆撰寫測試。建立測試資料庫、撰寫測試方法、使用 Factory 生成測試資料,能確保程式碼穩定,並幫助開發者在修改與重構中更有信心。持續撰寫測試能提高程式碼品質,並讓開發過程更有條理與安全感。
本文介紹了如何在 Laravel 中實作控制器,為個人財務管理系統建立完整的 CRUD API。我們實現了資料的建立、查詢、更新和刪除,並使用資料驗證提升應用安全性。未來將進行程式碼重構及 API 測試,持續優化應用程式。
本文介紹 Laravel 中的路由設定,討論手動定義路由、群組、前綴和中介層的使用。透過這些技巧,能夠靈活組織 API 結構,提升可讀性和安全性。此外,還探討子資源路由及命名空間等進階技巧,幫助開發者精細控制路由行為。接下來會探討控制器的實作。
本文介紹 Laravel 中的 Model,透過 Eloquent ORM 進行資料庫互動。內容涵蓋 Model 建立、資料表關聯設定,以及利用 Eloquent 特性來優化程式碼。目的是簡化資料庫操作,提高程式碼可讀性與維護性。接下來將開發後端 API,進一步實現系統功能。
這篇文章介紹在 Laravel 中使用 Migration 管理資料庫結構,實現財務管理系統的資料表建立。Migration 提供版本控制、自動化管理和可移植性,方便開發者同步資料庫變更。還介紹了填充測試資料(Seeder)的操作,提高團隊協作效率。
這篇文章介紹了個人財務管理系統的資料庫設計,涵蓋使用者管理、銀行帳戶管理、財務紀錄和分類管理的核心功能。系統需求包括註冊登入、帳戶管理、財務記錄分類和報表生成。設計了四個資料表,並詳細說明其欄位設計和建表語法。透過清晰的表關聯,確保資料一致性和系統擴展性,為後續的 Laravel 開發打下基礎。
單元測試不僅能發現錯誤,更是提升開發技能的關鍵工具。Laravel 提供強大的測試框架,讓我們可以輕鬆撰寫測試。建立測試資料庫、撰寫測試方法、使用 Factory 生成測試資料,能確保程式碼穩定,並幫助開發者在修改與重構中更有信心。持續撰寫測試能提高程式碼品質,並讓開發過程更有條理與安全感。
本文介紹了如何在 Laravel 中實作控制器,為個人財務管理系統建立完整的 CRUD API。我們實現了資料的建立、查詢、更新和刪除,並使用資料驗證提升應用安全性。未來將進行程式碼重構及 API 測試,持續優化應用程式。
本文介紹 Laravel 中的路由設定,討論手動定義路由、群組、前綴和中介層的使用。透過這些技巧,能夠靈活組織 API 結構,提升可讀性和安全性。此外,還探討子資源路由及命名空間等進階技巧,幫助開發者精細控制路由行為。接下來會探討控制器的實作。
本文介紹 Laravel 中的 Model,透過 Eloquent ORM 進行資料庫互動。內容涵蓋 Model 建立、資料表關聯設定,以及利用 Eloquent 特性來優化程式碼。目的是簡化資料庫操作,提高程式碼可讀性與維護性。接下來將開發後端 API,進一步實現系統功能。
這篇文章介紹在 Laravel 中使用 Migration 管理資料庫結構,實現財務管理系統的資料表建立。Migration 提供版本控制、自動化管理和可移植性,方便開發者同步資料庫變更。還介紹了填充測試資料(Seeder)的操作,提高團隊協作效率。
這篇文章介紹了個人財務管理系統的資料庫設計,涵蓋使用者管理、銀行帳戶管理、財務紀錄和分類管理的核心功能。系統需求包括註冊登入、帳戶管理、財務記錄分類和報表生成。設計了四個資料表,並詳細說明其欄位設計和建表語法。透過清晰的表關聯,確保資料一致性和系統擴展性,為後續的 Laravel 開發打下基礎。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
隨著企業在數位轉型過程中,愈來愈依賴多雲端架構,對雲端安全性和合規性的需求變得前所未有的重要。 雲原生應用程式保護平台(CNAPP)提供了一套全面的解決方案,讓企業能夠有效地管理多雲端環境中的安全性和合規性。
在現代社會,網絡扮演著越來越重要的角色。我們的生活和工作都依賴著互聯網和各種數字設備,從銀行帳戶到智慧家居,再到政府和企業的重要系統,這一切都需要確保良好的網絡安全。 網絡安全的重要性可以從以下幾個方面體現: 個人資訊保護個人隱私和金融信息極其敏感,一旦遭到黑客攻擊或數據洩露,都會給個人帶來巨大
在當今數位化和資訊化程度越來越高的環境下,企業面臨的資安挑戰也日益嚴峻。資料外洩不僅可能造成重大財務損失,還可能觸犯法律法規,影響企業的聲譽和運營。因此,選擇合適的防毒軟體對於企業來說至關重要。本文將探討企業在選擇防毒軟體時需要考慮的關鍵因素,以及如何避免因資料外洩而觸法的問題。
在今天的數字世界中,網站安全性是極為重要的議題。隨著越來越多的網站選擇採用HTTPS協議加密數據傳輸,但這並不意味著它是絕對安全的。事實上,HTTPS本身也存在著一些安全隱患,這些隱患可能會影響網站的安全性和用戶的數據隱私。 1. SSL/TLS 憑證漏洞 HTTPS的加密基於SSL/TLS
Thumbnail
電腦跟手機是我們每天不可或缺的工具,大家一定都有過這種經驗,那就是「電腦或手機中毒」!病毒會把我們設備中的重要資料刪除或竄改,甚至會讓整個作業系統癱瘓! 為了防止這種情況,各種防毒軟體也因應而生,幾乎每台電腦都會安裝防毒軟體或「防火牆」,避免病毒入侵我們倚賴的重要工具
在現今數位時代,網路安全已成為企業和個人必須面對的首要挑戰。隨著網路犯罪活動的日益猖獗,如何有效地保護敏感資訊並確保網絡環境的安全,成為每個組織和個人不可忽視的重要課題。本文將帶你了解如何利用先進的監控軟體來提升資訊安全,為您提供全面的解決方案。
Thumbnail
政府、法令是資訊安全的最後防線,本文從政府及法律層面探討網路安全議題,以及資通安全管理法和個資法的重要性。政府擴大進用資安人才,以及執行資通安全管理法、個資法的相關規定,對維護數位平臺安全有著重要作用。除此之外,文章還強調了民眾的資安素養及企業、政府的連手防禦對抗駭客組織及詐騙集團的重要性。
Thumbnail
談了許多網路安全的議題,提醒民眾要注意哪些事情,建構哪些網路安全思維,讓我們可以降低踏入詐騙陷阱的風險。但除了民眾本身要不斷學習、提升防詐意識外,是不是還有其他方面的作法呢? 本文就來聊聊在企業端可以做些什麼。 要打造一個密不可破的防護網,企業端就不能夠缺席。 舉幾個例子讓大家知道。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
隨著企業在數位轉型過程中,愈來愈依賴多雲端架構,對雲端安全性和合規性的需求變得前所未有的重要。 雲原生應用程式保護平台(CNAPP)提供了一套全面的解決方案,讓企業能夠有效地管理多雲端環境中的安全性和合規性。
在現代社會,網絡扮演著越來越重要的角色。我們的生活和工作都依賴著互聯網和各種數字設備,從銀行帳戶到智慧家居,再到政府和企業的重要系統,這一切都需要確保良好的網絡安全。 網絡安全的重要性可以從以下幾個方面體現: 個人資訊保護個人隱私和金融信息極其敏感,一旦遭到黑客攻擊或數據洩露,都會給個人帶來巨大
在當今數位化和資訊化程度越來越高的環境下,企業面臨的資安挑戰也日益嚴峻。資料外洩不僅可能造成重大財務損失,還可能觸犯法律法規,影響企業的聲譽和運營。因此,選擇合適的防毒軟體對於企業來說至關重要。本文將探討企業在選擇防毒軟體時需要考慮的關鍵因素,以及如何避免因資料外洩而觸法的問題。
在今天的數字世界中,網站安全性是極為重要的議題。隨著越來越多的網站選擇採用HTTPS協議加密數據傳輸,但這並不意味著它是絕對安全的。事實上,HTTPS本身也存在著一些安全隱患,這些隱患可能會影響網站的安全性和用戶的數據隱私。 1. SSL/TLS 憑證漏洞 HTTPS的加密基於SSL/TLS
Thumbnail
電腦跟手機是我們每天不可或缺的工具,大家一定都有過這種經驗,那就是「電腦或手機中毒」!病毒會把我們設備中的重要資料刪除或竄改,甚至會讓整個作業系統癱瘓! 為了防止這種情況,各種防毒軟體也因應而生,幾乎每台電腦都會安裝防毒軟體或「防火牆」,避免病毒入侵我們倚賴的重要工具
在現今數位時代,網路安全已成為企業和個人必須面對的首要挑戰。隨著網路犯罪活動的日益猖獗,如何有效地保護敏感資訊並確保網絡環境的安全,成為每個組織和個人不可忽視的重要課題。本文將帶你了解如何利用先進的監控軟體來提升資訊安全,為您提供全面的解決方案。
Thumbnail
政府、法令是資訊安全的最後防線,本文從政府及法律層面探討網路安全議題,以及資通安全管理法和個資法的重要性。政府擴大進用資安人才,以及執行資通安全管理法、個資法的相關規定,對維護數位平臺安全有著重要作用。除此之外,文章還強調了民眾的資安素養及企業、政府的連手防禦對抗駭客組織及詐騙集團的重要性。
Thumbnail
談了許多網路安全的議題,提醒民眾要注意哪些事情,建構哪些網路安全思維,讓我們可以降低踏入詐騙陷阱的風險。但除了民眾本身要不斷學習、提升防詐意識外,是不是還有其他方面的作法呢? 本文就來聊聊在企業端可以做些什麼。 要打造一個密不可破的防護網,企業端就不能夠缺席。 舉幾個例子讓大家知道。