l

2012年10月31日 星期三

敏捷開發與軟體架構

Oct. 30 18:14~19:00;  20:24~21:18

螢幕快照 2012-10-30 下午9.16.52

 

上禮拜六(10/27)下午到天瓏買了《Software Architecture in Practice》 第三版。以前念研究所時讀過第二版,裡面的 QAS(Quality Attribute Scenario)作為描述非功能需求還蠻有用的。在第二版中,六種QAS全部在一章裡面介紹完畢,第三版裡面除了多了Interoperability這個QAS之外,每一個QAS都單獨用一章來介紹,可見QAS的重要性日益增大。

關於第二版所介紹的六種QAS,Teddy曾經在《Quality Attribute Scenarios(1):簡介》、《Quality Attribute Scenarios(2):會不會太理論了一點?》、《Quality Attribute Scenarios(3):Availability》、《Quality Attribute Scenarios(4):Availability General Scenarios》、《 Quality Attribute Scenarios(5):Modifiability》、《Quality Attribute Scenarios(6):Modifiability General Scenarios》、《Quality Attribute Scenarios(7):Performance》、《Quality Attribute Scenarios(8):Performance General Scenarios》、《Quality Attribute Scenarios(9):Security》、《Quality Attribute Scenarios(10):Security General Scenarios》、《Quality Attribute Scenarios(11):Testability》、《Quality Attribute Scenarios(12):Testability General Scenarios》、《Quality Attribute Scenarios(13):Usability》、《Quality Attribute Scenarios(14):Usability General Scenarios》介紹過。今天要談的不是QAS,而是第三版第15章的新內容「Architecture in Agile Projects」。

***

Teddy在很多介紹Scrum或是敏捷開發的場合中,經常會被鄉民們問到一個問題:「軟體架構勒?採用Scrum何時要設計軟體架構?沒有設計好架構要怎麼估算 story point?」這類的問題。雖然Teddy寫過《軟體架構也可逐步成長》、《軟體架構也可逐步成長(2)》、《軟體架構也可逐步成長(3):往下展開實例》,但是好像沒什麼鄉民買單 挑眉質疑。那看看這本書中介紹Agile和軟體架構的關係,會不會比較有說服力一點。

先引用書中第275頁的一段話,證明 說明「軟體架構也可逐步成長」真的是可行的,至少人家都寫在書中了:「The question for a software project is not "Should I do Agile or architecture?", but rather questions such as "How much architecture should I do up front versus how much should I defer until the project's requirements have solidified somewhat?", "When and how should I refactor?", and "How much of the architecture should I formally document, and when?"」。

書中提到一個例子,Boehm和Turner兩位學者研究161個業界專案,試圖找出up-front design(事先設計)和rework(事後重工)之間的關係。理論上,如果軟體需求變動不大,做越多的up-front design,可以減少事後rework的工作量。這個研究將專案大小用行數(LOC,Line of Code)來區分成三個區間:

  • 10 KLOC(一萬行)
  • 100 KLOC(十萬行)
  • 1000 KLOC(一百萬行)

該研究顯示,假設在相同的應用領域中,對一萬行大小的專案而言,花太多時間(超過5%的專案時間)在up-front design上將形成浪費。對十萬行的專案而言,20%的時間在up-front design是合理的。而對一百萬行的專案,合理的up-front design時間則是40%的專案時程。對於這樣的數據,鄉民們當作參考就好,其中的變數還很多,不要當成絕對的標準答案。書中有提到,專案的應用領域、可靠度與安全性要求、開發團隊的經驗等等,都會影響這個數據。。

Teddy之前有一個經驗,一個80幾萬行的專案,剛開始的第一年,大概只花5%的時間在軟體架構的設計上面。但是這個專案第一年結束的時候,當然不到80萬行,當時也沒計算到底有幾行 挑眉質疑。不過重點是,在決定將最初的軟體架構採用client-server與plug-ins之後,整體架構隨著專案的進行,雖然有些大小不一的修正,但是大體來講還是可以做到「逐步成長」的境界,這很可能是因為套用了plug-ins架構的緣故。

關於「軟體架構逐步成長」這件事,書中也有提到一些作法。例如:

  • 在設計軟體架構時,要同時採用top-down(從軟體架構層面,分析架構是否可以滿足quality attribute requirements)與bottom-up(分析實作面以及環境相關的限制,例如,有哪些現成的軟體元件、框架、或技術可以使用,取捨的依據是什麼)的設計。
  • 當專案開始時,要能夠快速地建立一個初始的軟體系統,用以驗證軟體架構的概念。然後依據使用者的需求優先順序,按步就班實作與修正架構(這一點頗有RUP所提到的use-case driven的味道,幾年前Teddy在開發系統的時候,也是借用這樣的概念)。
  • 當新需求冒出的時候,或是團隊成員對於問題領域有更深入的了解之後,團隊成員調整現有架構,並且重構設計(Teddy注釋:要能夠調整架構並且執行重構,顯然需要自動化測試與持續整合的幫忙)。
  • 隨著專案演進,持續地實驗與評估軟體架構是否合用。

***

軟體架構要能夠逐步成長,軟體系統的 modifiability(可修改性)是很重要的關鍵。快速翻完這一章,書中講了一些敏捷專案與軟體架構設計的觀念,實際上要有能力讓軟體架構逐步成長的具體方法當然還是要回歸到技術面:architecture and design patterns、 refactoring、automated testing、continuous integration、rapid feedback(這些都是硬功夫啊)。

Teddy 覺得第三版比較合適用來當做現代的教科書,第二版是10年前出版的,裡面的很多內容用現在的角度來看有點不合時宜,而第三版除了保留QAS、ATAM、CBAM 這些歷久彌新的方法以外,增加了不少新的內容,對軟體架構有興趣的鄉民可以參考一下。

最後下一個結論,要具備「軟體架構逐步成長」基本功,快來報名第二梯次的「Design Patterns這樣學就會了:入門實作班熱戀

***

友藏內心獨白:教科書還是有它存在的意義啊。

2012年10月30日 星期二

只有一位開發人員的專案也需要了解如何消除七種浪費

Oct. 30 07:50~09:10

螢幕快照 2012-10-22 下午6.19.58

Teddy昨天幫「敏捷軟體專案開發流程改善策略:從減少七種浪費做起」這個講座打廣告之後,有一位鄉民留言問了一個問題:

請問一下:『從減少七種浪費做起』這個主題適合專案只有一位程式開發者的人參加嗎?」

答案很簡單:非常適合 微笑

***

消除七種浪費的作法來自於《Implementing Lean Software Development: From Concept to Cash》這本書。該書將「Toyota Production System (TPS)」所提到藉由減少七種不必要的浪費來提昇產品品質的精神,套用到軟體開發中,用以降低開發成本並且改善軟體品質。這七種浪費分別是(括號為TPS所採用的原始名稱):

  1. 半成品,Partially Done Work (In-Process Inventory)
  2. 多餘功能,Extra Features (Over-Production)
  3. 重複學習,Relearning (Extra Processing)
  4. 交接,Handoffs (Transportation)
  5. 工作切換,Task Switching (Motion)
  6. 延遲,Delays (Waiting)
  7. 缺陷,Defects (Defects)

這系列的主題,Teddy在2010年10月的時候就已經在部落格上介紹過前六種浪費,請參考《消除浪費 (1):Partially Done Work》、《消除浪費 (2):Extra Features》、《消除浪費 (3):Relearning》、《消除浪費 (4):Handoffs》、《消除浪費 (5):Task Switching》、《消除浪費 (6):Delays》。在《笑談軟體工程:敏捷開發法的逆襲》這本書的「Part 3 精實生產,減少不必要的浪費」中,Teddy也完整地介紹這七中浪費以及消除這些浪費的方法。

從2010年寫完這一系列的文章,2年後的現在回頭看,Teddy覺得了解這七種浪費,對於軟體從業人員,無論是產品經理、專案經理、Scrum Master、軟體架構師、程式設計師、設計師、測試人員等,都非常有用。

為什麼一個人的團隊也適用?

只要是開發軟體,無論是一個人開發,或是團隊開發,都有機會遇到這七種浪費。以下簡單說明一個人的軟體專案為何也需要了解這七種浪費。

  1. 半成品:廣義的來講,半成品就是無法交付給客戶的(軟體)產品。例如,尚未被實作的需求、尚未送交到版控系統的程式碼、尚未被測試的程式碼、尚未部署的系統。就算是一個人開發的專案,還是會產生以上這些半成品。在開發專案的時候,只要能夠減少半成品,就可以減少浪費並專注於思考如何增加客戶的價值。
  2. 多餘功能: 多餘的功能就是已經做好但是客戶卻不需要的功能。做出客戶不需要的東西,耗費人力、物力,當然是一種浪費。這種浪費,不管是一個人的專案,或是一個團隊的專案,都有可能會發生。
  3. 重複學習:這個浪費也叫做 「額外處理」。一個人的專案應該就沒有什麼「重複學習」或「額外處理」的問題了吧?錯,還是有。例如,手動測試就是一種重複學習。原本寫好的程式用人工的方式通過測試,但是只要程式稍有修改,「理論上」整個人工測試就必須要重做一次,這也算是一種重複學習(重新學習、確認有沒有任何東西被打壞)。
  4. 交接:嘿嘿,一個人應該就沒有「交接」的問題了吧?一個人的專案的確是大大減少交接的浪費(因為沒有交接的對象啊 挑眉質疑),但是也不能完全排除這種浪費。例如,雖然系統是自己一個人開發的,但是需求有可能是PM(專案經理)告訴你的,這就算是一種交接。好,那如果從需求訪談、實作、交貨都是自己一個人包辦的話,這樣就幾乎沒什麼交接的浪費。但是,因為只有一個人做案子,所以有可能無法加速專案開發,或是自己遇到問題卡住,而增加了「延遲」這種浪費。由於需要自己一個人完成專案所需的所有不同類型的工作,因此自己需要在不同的工作中進行切換,也可能會造成 「工作切換」這種浪費。
  5. 工作切換:至少有兩種情況會造成一個人的專案產生「工作切換」這種浪費。首先,如果這一個人同時接了兩個以上的專案,就會造成「工作切換」這種浪費。其次,因為案子只有一個人,同時間除了寫程式以外,可能還需要回覆客戶的email或是電話或是聯絡配合的軟體體廠商,這些都算是工作切換。
  6. 延遲:在一個人的專案中,很容易發生自己遇到問題無法解決卡很久,而造成延遲的浪費。也有可能是客戶無法即時釐清需求導致於你要等待客戶的答覆,或是等待配合的軟硬體廠商把需要的設備送過來。
  7. 缺陷:只要有寫程式,就可能會發生缺陷,所以這個浪費無論是一個人的專案,或是多人的專案都會發生。

***

結論:只要是開發軟體,不管鄉民們在專中扮演何種角色(產品經理、專案經理、高階主管、Scrum Master、設計師、開發工程師、測試工程師),都很合適來參加這個講座。報名網址再貼一次:http://www.accupass.com/go/1211improve

***

友藏內心獨白:消除七種浪費真的很有用啊。

2012年10月29日 星期一

十一月夜間聚會與講座預告

Oct. 29 11:21~11:57

螢幕快照 2012-10-29 上午11.05.56

 

剛剛Teddy才發現,好像從來沒有在「搞笑談軟工」介紹C. C. Agile每月聚會。這個活動是今年九月ezScrum團隊和泰迪軟體所發起的社群活動,希望透過每個月舉辦的小小聚會,讓對敏捷開發有興趣的鄉民們,可以有一個互相交換心得的平台。每次活動「表定」時間為兩小時,其中包含一位主講者針對特定主題做50分鐘的分享,其餘時間則為參加者彼此互相聊天的時間。活動免費,但參加者需自行負擔活動場地的「最低消費」。目前活動暫定在「果子咖啡」舉辦,低消為150元。

由於是社群活動,所以分享者也是無償分享(沒有演講費),只有泰迪軟體贊助的晚餐費用以及不甚精美的小禮物一份 挑眉質疑。前兩次的分享者與分享主題為:

  • 九月份:Teddy Chen,敏捷精神是什麼?
  • 十月份:Calvin Yeh,未完的 Scrum 之旅—勇闖Agile的魔幻之地。


十一月份的C. C. Agile聚會將於11月15日舉辦,本次活動將由Richard Hsiao(遊戲橘子應用技術研發經理)分享「Agile Scrum - 創造多贏局面的軟體開發方法」。活動將在10月30日(禮拜二)下午兩點開放報名,因為場地限制名額有限,有興趣的鄉民們敬請把握。報名網址在這裡:http://www.accupass.com/go/CCAgileSprint03

***

螢幕快照 2012-10-22 下午6.19.58

11日13還有另外一個Teddy主講的收費講座,題目有點長:「敏捷軟體專案開發流程改善策略:從減少七種浪費做起」。這個題目Teddy之前在不同的場合中已經分享過四次,當初是因為自己在導入Scrum一陣子之後,覺得身為Scrum Master,有時對於團隊的開發流程會有一種「不知如何著手改善」的疑惑。後來從Lean Software Development讀到「減少軟體開發的七種浪費可以做為流程改善的方法」,因此針對此方法整理了一個小時的講座內容。在此講座中,Teddy除了介紹七種軟體開發的浪費之外,也會從Scrum與敏捷開發的角度,來說明如何消除這些浪費。

講座報名網址在這裡:http://www.accupass.com/go/1211improve

***

友藏內心獨白:最近工商服務好像多了點。

2012年10月28日 星期日

2011冬遊法國巴黎Day5-E拉德芳斯/大凱旋門(上)

Oct. 26 16:52~18:02

要來大凱旋門之前,Teddy以為這裡只有下圖那個大大的白色框框建築物而已。到了這裡之後才發現,這裡的環境好棒,和巴黎市中心完全不同。這裡都是現代化的建築物,但卻規劃的很好,不會覺得擁擠或是不協調。

螢幕快照 2012-10-26 上午10.43.26

螢幕快照 2012-10-26 上午10.43.51

螢幕快照 2012-10-26 上午10.44.05

 

看兩張全景圖。

螢幕快照 2012-10-26 下午5.03.31

螢幕快照 2012-10-26 下午5.04.21

 

走進大凱旋門的中間平台,有一朵「雲」。

螢幕快照 2012-10-26 下午5.14.22

螢幕快照 2012-10-26 下午5.15.46

 

從大凱旋門往前看,前方的廣場與建築物。

螢幕快照 2012-10-26 下午5.14.40

 

原本這裡可以搭電梯登高望遠,但是…

螢幕快照 2012-10-26 下午5.16.21

 

什麼,永遠關閉(注意下圖右下角的英文字)惱怒

螢幕快照 2012-10-26 下午5.16.04

 

走到大凱旋門的背面,有一串玻璃,應該是用來擋風的(平台上風好大)。

螢幕快照 2012-10-26 下午5.17.16

 

沒想到背面的景色也這麼美。

螢幕快照 2012-10-26 下午5.17.34

 

看一張全景圖。

螢幕快照 2012-10-26 下午5.18.48

 

雲是用地錨固定在地上。

螢幕快照 2012-10-26 下午5.19.25

螢幕快照 2012-10-26 下午5.20.06

 

好大的一片樹林,仔細一看,居然是…

螢幕快照 2012-10-26 下午5.24.08

 

「墓仔埔」。

螢幕快照 2012-10-26 下午5.24.26

 

再來欣賞一下附近的建築物。

螢幕快照 2012-10-26 下午5.24.43

螢幕快照 2012-10-26 下午5.25.00

螢幕快照 2012-10-26 下午5.25.12

螢幕快照 2012-10-26 下午5.25.53

 

這個好像火鍋 挑眉質疑

螢幕快照 2012-10-26 下午5.27.25

 

這棟建築物好像無敵鐵金剛指揮艇要結合的地方 微笑

螢幕快照 2012-10-26 下午5.29.04

 

從背面看大凱旋門。

螢幕快照 2012-10-26 下午5.26.41

下一集到這附近的某買場逛一下

***

友藏內心獨白:別人的廣場是真正的廣場。

2012年10月27日 星期六

2011冬遊法國巴黎Day5-D下水道

Oct. 26 09:17~10:08

螢幕快照 2012-10-26 上午9.13.05

離開羅丹美術館之後,來到巴黎臭水溝下水道參觀。什麼!參觀下水道不是政治人物作秀的時候才會有的行程嗎?錯,人家巴黎下水道不但開放參觀,而且還要買票才可以進去。下水道入口就是上圖不起眼的小亭子。

為什麼會想來參觀下水道?據說理由之一,是因為這裡是「悲慘世界」裡面,男主角尚萬強(Jean Valjean)曾經用來逃難的地方,頗有參觀價值啊 挑眉質疑

門票正反面

螢幕快照 2012-10-26 上午9.25.40

螢幕快照 2012-10-26 上午9.26.03

一進去之後,感覺乾乾淨淨而且非常明亮。但是,這裡的味道,真的是 嚎啕大哭。非常豐富的味道,翻成白話文就是,好臭啊。從味道就可以肯定,這裡真的是下水道,而不是什麼後現代藝術館 挑眉質疑

螢幕快照 2012-10-26 上午9.26.24

 

話說回來,如果不管這些非常主動的味道,整個環境還真的很像是一個博物館。這裡展示了很多下水道的資料,包含汙水處理、巴黎下水道演進、下水道工程所需的設備等。

螢幕快照 2012-10-26 上午9.26.59

螢幕快照 2012-10-26 上午9.28.00

 

據說巴黎下水道錯綜複雜,和地面的道路一樣,下水道也都有路名。。

螢幕快照 2012-10-26 上午9.27.21

 

這張拍得不清楚,下方最粗大的那一根…水管…,就是用來輸送飲用水的。

螢幕快照 2012-10-26 上午9.28.36

 

參觀的人還算不少,但絕對不至於到的地步。

螢幕快照 2012-10-26 上午9.29.23

 

小學生校外教學。

螢幕快照 2012-10-26 上午9.30.04

這張是說明工人如何清理下水道的淤泥。

螢幕快照 2012-10-26 上午9.30.28

這個點是味道最爭先恐後出來見人的地方。突然想到refactoring…挑眉質疑

螢幕快照 2012-10-26 上午9.31.23

 

介紹巴黎下水道系統的演進。

螢幕快照 2012-10-26 上午9.33.16

螢幕快照 2012-10-26 上午9.33.32

螢幕快照 2012-10-26 上午9.33.55

螢幕快照 2012-10-26 上午9.34.08

這台機器(模型)是用來清理下水道淤泥。

螢幕快照 2012-10-26 上午9.34.54

螢幕快照 2012-10-26 上午9.35.20

 

當然會有雨果的介紹啊。

螢幕快照 2012-10-26 上午9.36.47

 

「悲慘世界」男主角尚萬強揹著一個人在地下道中逃難。

螢幕快照 2012-10-26 上午9.36.22

再看一眼就準備要離開了。

螢幕快照 2012-10-26 上午9.38.28

 

所有的景點,出口處幾乎都是紀念品店,這當然也是一個pattern啊。

螢幕快照 2012-10-26 上午9.39.17

 

下水道的吉祥物,當然是大老鼠挑眉質疑。有點小貴,本來想買一隻帶回家的,結果被阻止了…Orz。

螢幕快照 2012-10-26 上午9.38.59

 

出口在這裡。

螢幕快照 2012-10-26 上午9.39.32

 

終於可以呼吸新鮮空氣了微笑

螢幕快照 2012-10-26 上午9.40.09

 

***

友藏內心獨白:如果在地下道戴防毒面具會被認為不禮貌嗎?