Ruddy Lee 分享空間

Emergent Design 演化設計

曳光彈 Tracer ammunition 的原理

leave a comment »

對軟體開發而言;所指的是程式碼在執行時所留下的軌跡。

From: The Pragmatic Programmer一書

.

回答一下;學員在上課時問到的軟體開發時非常實用的原理 — 曳光彈的原理。語出 Andrew Hunt  & David Thomas 所合寫的《The Pragmatic Programmer》一書。原文是隱喻在黑暗中用機槍射擊時找到目標的一種方式。當你在黑暗中進行射擊時,你可以依循與正常子彈參雜在一起的曳光彈的發光軌跡來找出目標的確切位置(距離、角度及方位)。也可以用來確定環境狀況(例如: 溫度、濕度、風,等影響因素)。然後你便可以用計算的方式找到你的目標。(如果每一樣東西都嚴格按照規定的方式工作,你的計算表也正確無誤、而且環境沒有再發生任何變化的話,則你的子彈應該能落在距目標不遠的地方。)

在黑暗中發光的程式碼

“發光的程式碼"是在描述一旦你在程式碼中隱含了擁有曳光彈特性的程式碼後,就能夠透過這些軌跡來查看你所想的或是預設的程式執行方向,是否與假設的軌跡相同。我們可以藉此來偵錯或進一步了解程式的運作(有許多種產生程式軌跡的方法,其中;程式的Log 就是一種曳光彈方式的軌跡紀錄)。

曳光彈

黑暗中的曳光彈

.

含有曳光彈的彈藥箱裡,通常是在三或五顆子彈之後參雜一顆曳光彈,對夜間射擊而言它讓我們容易看到目標,也可以用來確認交織的空間火網,當然相對的敵人也同時能看到我們,也就是我們也成了他所看得見的目標了。所以對射擊而言它不一定是最好的方法。但對軟體開發而言,卻相當有用。而且;曳光程式碼並不是用過就扔掉的,通常你編寫它,是為了保留它。它含有任何一段程式碼都擁有的完整的錯誤檢查、結構、資料。它只不過是功能較不全而已。但是,一旦你在系統的各元件間實現了端到端(end-to-end)的連接,你就可以檢查你離目標還有多遠,並在必要的情況下進行調整。一旦你完成成功的瞄準了目標,對於日後再增加功能時,將是一件容易的事情。對程式的改動或功能增加都是絕佳的利器。他同時也是良好的測試程式。

如果曳光彈的方式對程式的正常運作會有所影響,例如大量的Log會造成程式的負荷加大,則運用參數來關閉它則是一種必要的行為,也就是只有在需要時才打開這項功能。絕對有必要將執行時期與偵錯期作一適當的區分。

容易被忽略的Logger

老實說;在雲端的時代裡沒有程式可以沒有Logger的。沒有Log的程式就好像在黑暗裡憑著記憶在射擊一般的盲目。下面是一個典型的 Logger圖示,經驗不足的程式設計人員很少去運用Log的功能,甚至經常忽略了Log 的特性(通常要等到客戶要求改善程式的執行速度時,才會意識到需要查看程式執行的軌跡)。圖示說明:左側是Log資料的來源種類。一般的Logger 通常會統一把資料交給「Logging Core」來處理。最後再根據所指定的輸出目標作輸出。我們可以透過Output的資料就可以畫出程式執行的路徑了。也就是曳光彈所指出的路徑了。Logger可以很簡單,也可以設計成處裡多種方式的複雜logger,下面是一個典型的範例圖示。(辛苦的畫下面這張圖的目的是希望大家對Logger能有多一分了解。)

logger

可處理多種輸入類型的Logger

.

Written by ruddyllee

2015 年 06 月 16 日 於 10:46:18

張貼於未分類

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: