BDD/TDD差別是什麼? 手把手用 Cucumber 實作示範BDD

本文同步刊載於 ALPHA Camp Blog

上一篇文章介紹了 TDD (Test-Driven Development) 開發流程,並示範了如何五步驟實戰應用。

TDD 傳送門:TDD五步驟 手把手帶你實戰 Test-Driven Development 範例

TDD 重點回顧:

  1. 先寫測試再開發。
  2. 依循「紅燈/綠燈/重構」循環(Red/Green/Refactor)。
  3. 優點是在初期就確保測試程式的撰寫,而且更容易在初期定義出更貼近使用方的介面。

但 TDD 所撰寫出來的測試案例是一連串程式碼,過於偏重技術人員,不利與其他非技術的專案參與者討論,例如 PM (Product Manager) 或 PO (Product Owner)。此外,也不利產生一份如下圖這樣一目瞭然、容易閱讀的測試報告:

閱讀更多BDD/TDD差別是什麼? 手把手用 Cucumber 實作示範BDD

TDD五步驟 手把手帶你實戰 Test-Driven Development 範例

本文同步刊載於 ALPHA Camp Blog

「撰寫測試」已成為現代軟體開發的顯學。隨著軟體產品的規模越長越大,在不斷增加新功能、重構優化既有程式碼的過程,如何確保軟體既有功能不受影響,又能減少繁瑣的人工作業,靠的就是自動化測試。尤其當系統的業務邏輯龐大繁瑣,平時養成撰寫測試的好習慣更是保障軟體品質的關鍵。

閱讀更多TDD五步驟 手把手帶你實戰 Test-Driven Development 範例

Memcached 實作示範 — 用Memory Cache優化系統效能

本文同步刊載於 ALPHA Camp Blog

「為什麼網頁這麼慢!」

相信每個人都有類似經驗:遇到熱門新聞、限量特價商品、演唱會搶票,當短時間內大量流量湧入,網頁的存取常常因此失敗或異常緩慢,使用者抱怨連連。這不是因為程式功能寫錯,而是因大量運算或大流量導致系統表現不佳所產生的問題,屬於非功能性需求,也就是「效能優化」的範疇。隨著接觸的專案規模越大,除了功能實作,效能也是重要的課題。

閱讀更多Memcached 實作示範 — 用Memory Cache優化系統效能

[Java] BDD 測試框架 Cucumber 入門範例教學

Cucumber 是一個支援 BDD (Behaviour-Driven Development) 行為的自動化測試框架,支援多種常見的實作語言,包含 Java、Node.js、Go、Ruby 等。

關於 Cucumber 的入門介紹和基本術語可以參考以下文章:

本文示範如何在 Java 使用 Cucumber。

閱讀更多[Java] BDD 測試框架 Cucumber 入門範例教學

[Node.js] 安裝 NVM (Node Version Manager) 來切換 Node.js 版本 for Windows

NVM (Node Version Manager) 是 Node.js 的版本管理工具。Node.js 發展快速,迭代頻繁,很可能同時間在不同專案需要配置不同 Node.js 版本。因此會建議在安裝 Node.js 前先安裝 NVM,利用 NVM 幫助 Node.js 的版本控管和快速切換。

在 Windows 作業系統上的 NVM 是使用 coreybutler/nvm-windows,和 Unix-like 作業系統 (例如 Mac/Linux) 上的安裝方式不一樣,nvm 的指令也略有差異。

閱讀更多[Node.js] 安裝 NVM (Node Version Manager) 來切換 Node.js 版本 for Windows

[Node.js] 安裝 NVM (Node Version Manager) 來切換 Node.js 版本 for MacOS/CentOS/Ubuntu

NVM (Node Version Manager) 是 Node.js 的版本管理工具。Node.js 發展快速,迭代頻繁,很可能同時間在不同專案需要配置不同 Node.js 版本。因此會建議在安裝 Node.js 前先安裝 NVM,利用 NVM 幫助 Node.js 的版本控管和快速切換。

在 Unix-like 作業系統上的 NVM 都是使用 nvm-sh/nvm,因此安裝方式大同小異。

閱讀更多[Node.js] 安裝 NVM (Node Version Manager) 來切換 Node.js 版本 for MacOS/CentOS/Ubuntu

[Java] 印出物件內容的好幫手 – ReflectionToStringBuilder (3) 客製化輸出格式 ToStringStyle 範例

ReflectionToStringBuilder 除了能排除特定屬性名稱,還能對印出內容的格式進行客製化,達到更靈活的效果。

例如:自訂日期格式長相、敏感欄位資料馬賽克等等。

要達到輸出客製化,需要實作 ToStringStyle 抽象類別。本篇將就自訂日期輸出格式長相以及敏感欄位資料馬賽克這兩個效果進行示範。

閱讀更多[Java] 印出物件內容的好幫手 – ReflectionToStringBuilder (3) 客製化輸出格式 ToStringStyle 範例

[Java] 印出物件內容的好幫手 – ReflectionToStringBuilder (2) 排除指定欄位 toStringExclude 範例

上一篇介紹了 ReflectionToStringBuilder 的基本用法,這篇進一步示範 ReflectionToStringBuilder 提供的另一個功能:排除指定名稱的欄位。

自訂類別裡可能有非常多成員變數,在印出自訂類別的內容來進行 log 儲存時,我們需要的也許只是其中較關鍵的幾項,印出所有變數不僅不具意義,甚至是浪費儲存空間。這時候就可以使用 ReflectionToStringBuilder 的 toStringExclude 功能,來排除不需要的欄位名稱。

閱讀更多[Java] 印出物件內容的好幫手 – ReflectionToStringBuilder (2) 排除指定欄位 toStringExclude 範例

[Java] 印出物件內容的好幫手 – ReflectionToStringBuilder (1) 基本用法介紹與範例

在開發程式時,時常需要印出物件屬性內容來進行 log 或 debug。最簡單的方法就是呼叫物件的原生 toString(),但當物件不是基本型態(Primitive Data Types),而是陣列或自訂類別,原生的 toString() 可能就不敷使用。去逐個類別覆寫(Override) toString() 函式又過於繁瑣且不切實際。

這篇文章將介紹一個方便的 API —— ReflectionToStringBuilder,該 API 利用映射技巧,協助我們便利地印出物件資訊。

閱讀更多[Java] 印出物件內容的好幫手 – ReflectionToStringBuilder (1) 基本用法介紹與範例