Blog

整合測試還是單元測試比較有價值?

** 本文同步發表於 軟體設計鮮思維FB社群 **

看到國外某作者的一篇論述:「Lean Testing or Why Unit Tests are Worse than You Think」。這篇文章我瀏覽了兩遍,思考原作者從什麼樣的角度來看待所謂的單元測試 (unit test)。

文內有提,他純粹從經濟 (economic)的觀點來看待測試,然後接著從三項因子:成本 (Cost)、速度 (Speed)、信心 (Confidence)來比較 整合測試 (integration test) 與 單元測試 (unit test)的價值。

他的結論是認為:整合測試相對來得有價值許多。🤔

然後接著他再用 投資報酬率 (ROI, Return on Investment)與 程式覆蓋率 (Code Coverage)來佐證 整合測試 的高投資率。

這就讓我更肯定了,原作者是站在專案經理人 (PM, Project Management)的角度來看待整合測試,PM 最是偏好用指標來衡量投報率與顯性價值等。

問題是,投報率、覆蓋率等這些指標,是極難衡量隱性的因子與其所創造的價值啊! 試想想,該如何衡量軟體產品的彈性度、擴展性與維護性議題呢?

再則,整合測試與單元測試根本是兩種不同的構面與不同角色的人所負責的:

o 整合測試:產品釋出 (release)前涵蓋所有元件的測試,一般由 QA 品管專職人員擔任。

o 單元測試:系統開發期間對必要 (essential)性類別 (如 控制物件、資料存取物件、企業物件等)的測試,這必然由撰寫該類別的開發人員負責撰寫,不得假手他人。

閱讀全文 »

我家蓁妮的北韓遊記暨心得文章分享

2018_0614-0617_蓁妮的北韓遊記

才不到兩個星期,我家蓁妮從西藏旅遊會到她當交換學生的上海師範學校後,竟然緊接著又跟團去北韓玩耍了四天。哇勒,前一天才告訴我,我要阻止也沒辦法。😧

本來都以為她是說說而已,像要去大陸當交換學生、要去西藏旅遊、要去北韓玩等,都是她一年前很不經意的說出來。沒想到如今一年內都成行,真的太讓人意外。我還能說啥?!就只能祝福蓁妮能從北韓旅遊順利回來,千萬不能大嘴巴、不要隨便拍照、不要散漫不經心,小心忌口為上。

還好她的北韓旅遊平安回來,而且還用她的 iPhone 6S 拍了很多很棒的照片,而且還在她的 Medium 部落格發布平台寫了兩天文章:「北韓遊記
這個國家存在著真實嗎? 上篇 & 下篇」。老實說,我覺得她寫得甚好,充分表現出蓁妮對這次北韓旅遊真切的感想。最後她的心得充滿禪義:

「北韓存在著真實嗎?我只能用出自《紅樓夢》的一句話說明:「假作真時真亦假」意思是說當你把假的當作是真的的時候,真的也變成了假的。

《楚門的世界》裡主角楚門一直生活在巨大的攝影棚中,他不知道所有事物都經過設計和安排,這些虛假就是他的真實,直到一個攝影燈從天空墜落,他慢慢察覺到這個世界不太對勁,才明白那些曾經的真實原來都是假象。

既然沒有所謂「絕對的真」或「絕對的假」,又何必去驗證在北韓所見的是真是假?」

嗯嗯,我這裡就備份了她的旅遊照片,並將其中幾張照片分享於此供欣賞。

閱讀全文 »

大幅提昇實體硬碟讀寫效率的超效工具-PrimoCache

其實我早已購買了對岸研發的「Primo Ramdisk」,一次買三套授權,而且用了好幾年,用得非常滿意。我利用 Ramdisk 切割了約 5~8GB 的 DRAM作為邏輯硬碟 (例如磁碟代號為 R),然後把系統的暫存位置 (TEMP)指向 R磁碟,如此可以大幅提昇系統暫存檔案的讀寫效能,且也比較得以降低 SSD (作為系統碟)的寫入次數,進而延續 SSD 的使用壽命。

該家公司有另一套產品:「PrimoCache」,作用幾乎等同於最近 Intel 新發表的「Optane Cache」,採以 Optane 專屬記憶體 (比 SSD 快上幾倍)來作為 SSD 的內存 (Cache)。不過不同的是 PrimoCache 則採以 DRAM 與 隨身碟 (Flash Memory)於 Windows-based OS 層級 (也就是不能使用在如 Linux 系統)作為包括 SSD、機械硬碟的內存。

    簡單比較:

  • Optane 屬硬體規格,主機板要能有支援;PrimoCache 為 Windows OS層級的工具軟體。
  • Optane 需使用專屬的實體記憶體,目前僅支援 32GB,而且不太便宜;PrimoCache 則採以 DRAM 與 隨身碟作為一級與二級的緩存。

簡而言之,若主機板有 16GB 以上記憶體,且主要的作業系統為 Windows 7/10,那麼採以 PrimoCache 是蠻好的 C/P 值,一套授權約台幣九百,且設定彈性相當十足。

我的桌機就有 32GB 記憶體,還有一條號稱高效讀取 SSD等級的隨身碟 (64GB USB3.0)。而儲存機制除了系統碟是 256GB 的 Intel SSD 外,還有兩顆大容量的機械硬碟 (7200 轉),一顆昨為文書碟、另一則為遊戲碟。

閱讀全文 »

蓁妮的西藏風情旅遊@201806

*** 完整相片欣賞&可下載 @Flickr 相簿 ***

我家蓁妮今年二月底到上海當交換學生,但她很不安分,到處趴趴走 (因為她學分早已修完)。上海逛膩了,6月初竟然跟團跑到西藏旅遊啦。

我很擔心她會有高山不適應的症狀,特地問了我的美女好朋友慧娟。她可是一年固定會去西藏修習佛法兩三次以上,非常虔誠,當然是西藏通。她說前一個禮拜要每天喝紅景天,然後到高原地方千萬不要亂跑免得缺氧,最好也不要洗頭免得著涼會頭痛欲裂。

所以蓁妮確是有喝紅頂天,但其它根本不聽,竟然在大昭寺跑步追著狗狗玩,然後每天洗頭,她是超愛乾淨的。結果還真有些高山反應人不舒服,甚至還去衛生所打了一針 400cc 針筒身體才逐漸恢復。她的好友謝佳恩在 FB 留言說「再跑啊,蓁妮!」;但她另一位好同學唐霜霜回說「奔跑吧,蓁妮!」,哈,真是最佳損友。 🙂

蓁妮用她的 iPhone 6S 拍了西藏諸多美麗的風景人文。老實說,她取景的功力真的很棒,連我那美女好友惠娟傳給她照片瞧都讚嘆不已。喔,說起這 iPhone 6S,還是她媽媽前一個月買新的托同學媽媽回上海時拿給她的。因為蓁妮不是普通糊塗蛋,她用了一年多的 iPhone 6S 跟著衣服放入洗衣機洗然後就壞掉了;這次到西藏也發生了她的台胞證掉落在西藏的書展地上,還好有一位好心也是台胞特別傳簡訊給她才拾回的。

蓁妮在西藏旅遊大概有一個多星期,每一天到各處旅遊時會把照片透過 Line 傳給我瞧。所以說連西藏的無線上網都相當便利,這點對岸作得比台灣好上太多太多了。

其中我節錄幾張照片在此瞧瞧,若想觀賞完整的照片可至上述 Flick 相簿瀏覽。而且我家蓁妮不是只有待在拉薩市區,竟然還跑到海拔5千2百公尺高的珠穆朗瑪峰啦,所以也拍了好幾張珠穆朗瑪峰的山區照片。

布達拉宮

布達拉宮

閱讀全文 »

實作 Enterprise MVC 巨觀結構的 POC-觀念篇

*** 本文同步發表於 FB 社團-軟體設計鮮思維 ***

關於 POC (Proof of Concepts)的說明,可參考:「淺論架構的 POC (Proof of Concepts)」。

關於系統結構設計 (system structure design),個人把它分為兩個構面來看:巨觀與微觀 (Macro/Micro View)

巨觀結構設計是基於現實系統的分散議題-展示層 (如 Web UI)、永續儲存機制 (如 關聯資料庫),所提出核心業務邏輯應不相依於特定實體元件與實作連結技術的解決方案。這裡推出最實用具應變與可重構的實體分層框架-Enterprise MVC (Model-View-Control)模式 (並非是廠商針對 Web 端提出的 Web MVC 技術),讓系統主結構 (業務邏輯/資料存取)有效隔離展示層與永續儲存機制的直接耦合 (coupling)。

微觀結構設計則是傳統物件導向所談及從領域概念模型 (domain conceptual model),導出到軟體物件與資料模型 (class/data model)。這裡使用的分析設計技能包括了運用 Peter Coad 的「交易模式 (Transaction Pattern)」與 GoF 四人幫的「設計模式 (Design Patterns)」。有別於古典OO 一開始就要求較完整的設計 (太過理想化),現今系統開發則更為務實-運用重構 (re-factoring)的技巧,持續逐漸地重整系統,效果即是簡潔易維護的程式碼 (clean code)。而伴隨著重構的一項必要機制與紀律就必然要求一開始就要撰寫單元測試程式碼 (unit test code)。

上述兩個構面是互補的。軟體主結構一開始就不會實作於特定的UI/資料庫端,以最純淨的 POCO/POJO (plain-old CLR/Java Object)物件來實作,如此才有機會得以實施後續的重構,而重構則取決於某一功能的複雜度與價值來評估,進而創造出系統整體的再利用價值。

本文著重於巨觀結構分層界定與實踐,藉以驗證巨觀結構 POC 的可行性。觀念說明利用 UML 設計圖表現巨觀分層結構;實作則各以 C#.NET 與 Java/Spring 實現一個極小的案例來貫穿整個系統的分層結構元素。

C#.NET 採以 ASP.NET Web MVC 與 E-F (Entity Framework)實作;Java/Spring 則採以 Spring Web MVC 與 傳統 JDBC (也可改 Hibernate Framework)實作。兩者會再佐以 UML 循序圖 (sequence diagram),來輔助解讀案例執行時物件之間的互動合作關係。

巨觀分層結構基本責任界定

把主要分層結構當成元件 (component)看待,以界定各元件主要的責任 (responsibility)。

Enterprise MVC 主要元件責任界定

閱讀全文 »

[美食推薦] 滿滿盡是配料好是特別的泡麵-螺螄粉

第一次聽到這怪異的泡麵名竟然是前幾天看到知名的美籍台灣女婿 Youtuber 小貝在他這集-跟我老婆一起吃螺獅粉/辣泡麵介紹後才知道有這麼神奇卻其實早已大受諸多部落客歡迎的螺螄粉泡麵。

小貝的影片很有魔力,總是能感受到他滿滿的熱情與亢奮,所以廠商找他業配就對了啦。從影片知道可以在蝦皮打關鍵字「螺螄粉」,然後看銷量找第一名購買就好。這次共花了 NT$1080 買了10碗各類不同口味,以及一些配料 (如青木瓜絲、辣蘿蔔),不到兩天就送到 7-11 取貨付款了。
螺螄粉

盡量各種口味都選買來嚐嚐看,至於最受歡迎的好歡螺與螺霸王就再多買一碗。
螺螄粉

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal