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 跑。透過單元測試,我們可以更有信心地面對未來的挑戰。

留言
avatar-img
詹姆士的軟體易開罐
33會員
93內容數
這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
2024/12/22
這是我第一次參加 iThome 鐵人賽,原本並沒有打算參加,但在整理專案時,我忽然想把屬於自己的內容公開分享,而不僅僅藏在雲端裡。於是,我獨自規劃、撰寫並完成了一個完整的開發系列文章。在這段過程中,我體會到獨自開發的挑戰與成就,並希望能將這些經驗分享給每一位正在努力前行的你。
Thumbnail
2024/12/22
這是我第一次參加 iThome 鐵人賽,原本並沒有打算參加,但在整理專案時,我忽然想把屬於自己的內容公開分享,而不僅僅藏在雲端裡。於是,我獨自規劃、撰寫並完成了一個完整的開發系列文章。在這段過程中,我體會到獨自開發的挑戰與成就,並希望能將這些經驗分享給每一位正在努力前行的你。
Thumbnail
2024/12/15
這篇文章介紹建立分類列表頁面以及新增和編輯功能。文中詳細說明瞭頁面結構、資料取得、錯誤處理等重要步驟,並強調了共用元件和資料驗證的一致性。通過這次開發,讀者將獲得關於如何在Nuxt中操作動態路由的深入理解,同時提高使用者體驗。希望本篇能幫助讀者順利完成相關功能建置。
Thumbnail
2024/12/15
這篇文章介紹建立分類列表頁面以及新增和編輯功能。文中詳細說明瞭頁面結構、資料取得、錯誤處理等重要步驟,並強調了共用元件和資料驗證的一致性。通過這次開發,讀者將獲得關於如何在Nuxt中操作動態路由的深入理解,同時提高使用者體驗。希望本篇能幫助讀者順利完成相關功能建置。
Thumbnail
2024/12/14
哈囉,大家好!在前面的文章中,我們已經規劃了前端介面,並盤點了所需的頁面與功能。 現在,是時候開始動手實作了。今天,我們將專注於 銀行帳戶列表頁面(Bank Accounts)以及 新增/編輯銀行帳戶頁面(Add/Edit Bank Account)的開發。 透過這次的實作,我們將學習如何在 N
Thumbnail
2024/12/14
哈囉,大家好!在前面的文章中,我們已經規劃了前端介面,並盤點了所需的頁面與功能。 現在,是時候開始動手實作了。今天,我們將專注於 銀行帳戶列表頁面(Bank Accounts)以及 新增/編輯銀行帳戶頁面(Add/Edit Bank Account)的開發。 透過這次的實作,我們將學習如何在 N
Thumbnail
看更多
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
📷 【寫在前面的三言二語】 【看圖好樂趣】 【▼】趨勢科技PC-cillin 2022雲端版防毒軟體操作介面簡潔易懂!電腦小白也能快速無痛上手! 📷 【▼】定期開啟一鍵執行趨勢科技PC-cillin 2022雲端版防毒軟體!及早發現問題防範未然是趨吉避凶的上上之策! 📷 📷 📷 📷
Thumbnail
📷 【寫在前面的三言二語】 【看圖好樂趣】 【▼】趨勢科技PC-cillin 2022雲端版防毒軟體操作介面簡潔易懂!電腦小白也能快速無痛上手! 📷 【▼】定期開啟一鍵執行趨勢科技PC-cillin 2022雲端版防毒軟體!及早發現問題防範未然是趨吉避凶的上上之策! 📷 📷 📷 📷
Thumbnail
近年來AI技術快速發展,企業導入AI應用也日益普遍,但伴隨而來的資安風險不容忽視。本文探討如何利用CNS 27001:2023強化AI應用的資安管理,涵蓋雲端安全管理、AI數據隱私保護以及防止提示注入攻擊等面向,協助企業在AI時代建立完善的資安防禦機制,降低資安風險。
Thumbnail
近年來AI技術快速發展,企業導入AI應用也日益普遍,但伴隨而來的資安風險不容忽視。本文探討如何利用CNS 27001:2023強化AI應用的資安管理,涵蓋雲端安全管理、AI數據隱私保護以及防止提示注入攻擊等面向,協助企業在AI時代建立完善的資安防禦機制,降低資安風險。
Thumbnail
在資訊性的時代,幾乎每個企業都有自己的網站,提供最大價值及免費的資訊吸引受眾及潛在客戶,從而提高曝光率及點擊率,有助將其轉換成銷量。若資訊安全的預防措施不足,容易受到網絡攻擊及內部安全問題。在這情況下更顯得網站漏洞掃描對企業的重要性,下文會為大家一一講解網站漏洞掃描。 為什麼企業需要網站漏洞掃描?
Thumbnail
在資訊性的時代,幾乎每個企業都有自己的網站,提供最大價值及免費的資訊吸引受眾及潛在客戶,從而提高曝光率及點擊率,有助將其轉換成銷量。若資訊安全的預防措施不足,容易受到網絡攻擊及內部安全問題。在這情況下更顯得網站漏洞掃描對企業的重要性,下文會為大家一一講解網站漏洞掃描。 為什麼企業需要網站漏洞掃描?
Thumbnail
談了許多網路安全的議題,提醒民眾要注意哪些事情,建構哪些網路安全思維,讓我們可以降低踏入詐騙陷阱的風險。但除了民眾本身要不斷學習、提升防詐意識外,是不是還有其他方面的作法呢? 本文就來聊聊在企業端可以做些什麼。 要打造一個密不可破的防護網,企業端就不能夠缺席。 舉幾個例子讓大家知道。
Thumbnail
談了許多網路安全的議題,提醒民眾要注意哪些事情,建構哪些網路安全思維,讓我們可以降低踏入詐騙陷阱的風險。但除了民眾本身要不斷學習、提升防詐意識外,是不是還有其他方面的作法呢? 本文就來聊聊在企業端可以做些什麼。 要打造一個密不可破的防護網,企業端就不能夠缺席。 舉幾個例子讓大家知道。
Thumbnail
OWASP是一個開源的、非盈利的全球性安全組織,致力於應用軟件的安全研究。其使命是使應用軟件更加安全,使企業和組織能夠對應用安全風險作出更清晰的決策。目前OWASP全球擁有220個分部近六萬名會員,共同推動了安全標準、安全測試工具、安全指導手冊等應用安全技術的發展。
Thumbnail
OWASP是一個開源的、非盈利的全球性安全組織,致力於應用軟件的安全研究。其使命是使應用軟件更加安全,使企業和組織能夠對應用安全風險作出更清晰的決策。目前OWASP全球擁有220個分部近六萬名會員,共同推動了安全標準、安全測試工具、安全指導手冊等應用安全技術的發展。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
戴明強調系統運作一定會有異常,而解決問題的關鍵在於正確判明原因並提出對策。改善系統時,不應該只憑經驗,而應該依據知識理論來訂出行動方案。文章探討了事件中的特殊和共同因,並強調要讓系統回到原有的運作狀態。
Thumbnail
戴明強調系統運作一定會有異常,而解決問題的關鍵在於正確判明原因並提出對策。改善系統時,不應該只憑經驗,而應該依據知識理論來訂出行動方案。文章探討了事件中的特殊和共同因,並強調要讓系統回到原有的運作狀態。
Thumbnail
最近各種資安案件層出不窮,像是聯合新聞網的新聞,就有提到國泰世華銀在10月發生系統大當機,造成ATM、網銀和信用卡收單,以及好市多、全聯結帳程序癱瘓。跟在做資安的朋友討論,才知道原來源碼檢測(偵測整個原始碼架構)可以解決相關問題,這邊分享相關內容給需要的朋友囉!
Thumbnail
最近各種資安案件層出不窮,像是聯合新聞網的新聞,就有提到國泰世華銀在10月發生系統大當機,造成ATM、網銀和信用卡收單,以及好市多、全聯結帳程序癱瘓。跟在做資安的朋友討論,才知道原來源碼檢測(偵測整個原始碼架構)可以解決相關問題,這邊分享相關內容給需要的朋友囉!
Thumbnail
Windows事件紀錄檔是電腦系統管理中一個重要的工具。透過定期檢視事件紀錄檔,使用者可以及早發現系統異常、追蹤問題根源,並掌握系統安全性狀況。本文介紹了事件紀錄的分類、各類事件篩選項目,及如何自訂檢視和自動執行篩檢作業,幫助使用者提高檢查效率,強化系統安全性,從而減少潛在的運作風險。
Thumbnail
Windows事件紀錄檔是電腦系統管理中一個重要的工具。透過定期檢視事件紀錄檔,使用者可以及早發現系統異常、追蹤問題根源,並掌握系統安全性狀況。本文介紹了事件紀錄的分類、各類事件篩選項目,及如何自訂檢視和自動執行篩檢作業,幫助使用者提高檢查效率,強化系統安全性,從而減少潛在的運作風險。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News