顯示具有 軟體開發流程 標籤的文章。 顯示所有文章
顯示具有 軟體開發流程 標籤的文章。 顯示所有文章

2009-06-16

我對 Strong Typing vs. Strong Testing 這篇文章的意見



今天下午在看這本書,裡頭有篇文章,看完之後,在噗浪上面寫了一句話,覺得這篇文章的說法似是而非(意思就是說,這文章看來有道理,事實上卻說不太通)。

下班的途中在捷運上又想了想,就把感想寫在這裡(噗浪還是不適合回長文啊)

文章裡說得對的地方:
If it's not tested, it's broken. 這是符合現代程式開發的普遍說法,根據我的經驗,這點我同意。

我覺得有問題的說法:
Python會在程式執行時才發現型別問題,然後丟出實行期錯誤,這個機制看來有問題,但是 Python 還是獲得巨大的成功,所以,執行時期才做型別檢查沒啥問題,只要靠完整的 unit test 就好。
我的回應是:如果你有完整的測試,整個程式都沒問題了,執行時期當然不會有問題啊(廢話)。所以,這個問題被轉換成:如何保證你的程式有"足夠"的測試。
千萬不要跟我說,執行時期才做型別檢查這個作法沒有問題。執行時期才檢查型別的不堅固(爛)程式語言一堆,我應該不需要舉例子吧。

再來舉兩個例子:
  1. 假設你有定期完整詳盡的健康檢查與醫療照護,你會因為這樣就放棄運動跟正常作息嗎?
  2. 假設你是七龍珠裡的孫悟空,你會因為會使元氣玉(大絕)就不用龜派氣功嗎?
舉上面兩個怪怪的例子的原因是:要寫文章推廣好的觀念是不錯,但是不能因為要推廣"大絕"就把容易又有效的小絕招放棄吧。所以,文中的這句 Strong testing, not strong typing.
應該可以改成 Strong testing, and strong typing.

根據我的開發經驗,如果可以在開發初期就做對決策,把軟體的品質放進產品裡(利用基本機制帶來的品質保護),這會比事後再做補救措施來得容易&節省資源。

再回來談大絕(就是文中的 adequate unit tests
就像大絕很難練成一樣,要能執行 adequate unit tests,跟團隊的能力/制度有關,不能假設開發團隊都有能力&資源執行夠質足量的 unit test,更不能為了假設有大絕,就放棄簡單易用的小絕招。

最後的補充:
程式的錯誤,一般來說,有語法錯誤跟邏輯錯誤兩種,如果有編譯器可以多幫你一些忙,處理掉一些錯誤,這是好事。軟體開發耗神費力,可以有多些幫助,就該謝天謝地了。

一些背景資料:
這篇文章的作者 Bruce Eckel 很有名啊,就是Thinking in Java的作者。我以前就是看了他的書才去學Python的。
聽說這篇也很有名(沒時間細查)。但在我看來,這篇說理的邏輯不太通(這就是會有這篇的原因),講述測試的重要性也沒有特別令人信服的地方,我實在看不出這篇的重要性在哪裡。

最後的最後:
多測試沒事,沒事多測試

2008-05-28

重新學習RUP

The Unified Software Development Process (Addison-Wesley Object Technology Series)
大約13年前,Rational的三位好朋友公布了第一版的 Rational Unified Process,4年後(1999)也合出了一套三本書,介紹各自擅長的部份。作者中我最熟悉的是 Grady Booch (他老人家好像最有名),當年看過他的Object-Oriented Analysis and Design with Application》第二版。當時,我已經寫了幾年程式,開始做一些大型的產品設計,才剛從經驗裡知道會動手做木造狗屋跟做大型建築的差異。因為需求,對OOD有很大的興趣,買了很多書來看。所以,三本書中,我當時只買了Booch 的The UML User Guide》。對於 RUP,當時的感覺是: "還是寫程式跟OOD好玩,流程的事以後再說吧"。一晃眼,幾年過去了....

後來,在軟體產品開發的過程裡,我學到一些經驗,靠著經驗及讀管理書籍,自己發展出一套實用的做法。2000年開始,自從第一次看到Kent Beck 的 Extreme Programming 方法
,我就以XP為主要的開發流程。當然不是照單全收,而是改裝成適當可用的版本。這與我前陣子看的書:《Balancing Agility and Discipline: A Guide for the Perplexed在精神上倒是有些類似。

最近因為工作的需要,專心看軟體開發流程的書,主要看的是CMMI,TSP/PSP與RUP。
CMMI的相關文件很多,讀過一些,覺得無聊,現在我靠學習市場上的相關產品學習其中的精神。
TSP/PSP看 Watts S. Humphrey的書。
至於RUP,我看以前買卻沒細看,
Ivar Jacobson的《The Unified Software Development Process。最近在回家的捷運上,看的應該都是這一本。這兩天看了一些 我的感覺是: 深得我心 (稱一位大師深得我心,這句還蠻怪的)。在歷經多年的軟體產品開發與實際XP開發經驗後,我覺得現在看這本書,時機剛剛好。有句話說: 經典就是「 那些沒有人看, 但人人都在談的書」。不知道這本書是不是算在裡面。

從這些歷程裡我歸納出一些原則:
1.學習還是要有需求,才會學得好。
2.從經驗裡學來的知識會有侷限性,要看大師寫的書來增廣見聞。
3.我的學習歷程 有往抽象性高的領域發展的趨勢


這篇是聽老人家在講古嗎?
當然不是! 因為:
1. 我不是老人家。
2. 我的學習歷程才剛要從新起步咧,這是現在進行式...

PS: 這篇是中午吃完飯,午睡前寫的,時間還蠻緊湊的。