แฟ้มประวัติ人世本苦,其苦何鉅-無我詩文舖รูปถ่ายบล็อกรายการเพิ่มเติม เครื่องมือ วิธีใช้

บล็อก


14 พฤษภาคม

一個SD部門成員對前景的憂心

  對於SD部門的前景,開發能力是SD部門唯一能立於公司IT營運的核心能力;系統化則是本質。但整個SD部門想要維繫這個能力,不是只有組織與流程就足夠了。以程式設計到開發過程的角度來看,一個開發專案的運作組織與流程形成的架構僅止於運作的表面條件而已;但整個開發架構是要具有可驅動性,仍需要平台與溝通的語言來維繫整個資訊的流通,最重要是要有操作的行為(Operation;與Method是有區分的),屬於物件開發最重要的兩種本質之一。一般公司,除了組織看起來是正常的,流程就沒有精神做Base。什麼精神,就是行為,在軟體工程的術語而言:『就是方法論』。ITIL不是開發流程,是營運流程。所以在微軟的ESF模型中,開發流程(MSF)與營運流程(MOF;即MS版的ITIL)是分開來的。
  MSF不算是方法論,它僅能列為一種基於開發歷程上的開發架構。PMP是一種專案管理的方法論,也與開發專案相去甚遠。一個方法論必須能夠擁有它的溝通語言,驅動流程。國語文字是溝通語言,卻無法轉化為開發語言,所以,更遑論是開發方法表達的本質。圖形也是語言,它也不能直接轉化為開發語言。那什麼才是適合開發的溝通語言,個人想法是同時結合文字與圖像的語言,在方法的驅動下,才能成為自需求/設計到開發程式碼,一脈相承的溝通語言;而溝通的過程中,流程自然而然的就會被驅動。
  而文件,是溝通之後留下的具有回溯性的垃圾。
18 มีนาคม

對於ITIL Notify設置的想法

  Sample

對於,ITILNotify的設置,有幾點想法提供考量;

            第一、ITIL的變更流程管理,是以角色形式定義在管理功能之中,而非是與組織的職位相呼應。若需要與組織職務相呼應,請考慮BPM,而非Remedy

            第二、變更流程的簽核是以授權完成變更流程擁有權的遞轉,而非依賴非作業內容所需的所謂『關卡』,非以角色為考量的宜撤除。但撤除並非代表無法執行責權,此責權應由CM決定CAB時將之選入,如此才能回歸ITIL基本的管理精神。

            第三、延續第二點的觀點,不以『關卡』觀點來看授權。而CM動態在選擇CAB時,可考量將需求的MOT納入參與決議之列。而CM在決定CAB時,應以變更的品質為考量人選,而每個被選入的CAB成員,則以各自專具的專業觀點的品質提昇為變更決定是否授權或是提出建議,每個成員對於所參與的變更所下的決定,均是變更是否成功的重大關鍵。所以,不應以組織的職務來混雜Remedy的管理服務。必竟,多數的變更,並不是每個MOT Leader需要關注的事物。豈可因少數的變更,在簡明的流程中再加油添醋。
            第四、管理品質的提昇,組織的簡單原則應納入流程改善的考量。

27 มกราคม

談論主題 [心得]使用 Microsoft Visual Studio 2005 Team System

 

引述

[心得]使用 Microsoft Visual Studio 2005 Team System
這本書的內容,是我一直很想了解 VSTS 的新增功能,如果沒錢買書的話,可參考:
這邊已經有翻譯過的線上手冊,軟體附贈的 MSDN for Visual Studio 只有英文版,我記得前陣子有 MSDN for Visual Studio 2005 的中文更新,我下載並安裝了,居然沒有更新這部份... 好可惜阿。書的內容,已經整合過了,所以看書會比較有結構。
看完這本書後,我想該不會是微軟自己需要,先做給自己用,用的感覺不錯以後,再改成一般化變成套裝軟體吧?台灣很多中小企業不會這麼複雜,能設計到這麼複雜的邏輯,本身也要有相當的經驗,所以滿有這種感覺的,有點像是微軟經驗轉成套裝軟體。
這本書要怎樣說呢,所需要的預先知識並不在這本書內,所以裡面會有很多原則、目的等,會讓剛入門者搞不清楚,我自己是先唸過兩本專案管理、兩本軟體專案管理及經濟部工業局所發布的規範,所以算是知道一點預先知識,但是看起來還是很吃力。
這本書... 這本書... 基本上企業的基層程式設計師應該會很不希望老闆或是主管看到吧?整個專案開發全部納入管理後,有的時候想摸魚可能都不太合適,當然,就企業主、中高階主管、專案經理或是協助專案經理或研發經理管理的人滿適合先看,但不建議立即導入,因為這本寫的還不夠深入。當然,已經導入這類管理模式的單位,所有人員大概都要看。
舉個例子,學校教授做計劃或合作做計劃、或是顧問公司標政府採購案等,都可以適用 VSTS 。
整本書是一整體的,在書的內容是有針對腳色來分,但是不管你是哪一個腳色。都有瞭解的必要,整本沒看完,可能會有霧裡看花的感覺,我自己建議,先看第一章,再翻附錄 B ,再翻第 8 章,知道大概用詞有哪些後,再從頭依照簡介的順序來看。
至於 MSF for Agile Software Development 跟 MSF for CMMI Process Improvement ,我比較建議測試時,直接試用、導入 CMMI ,因為經濟部工業局那邊已經採用 CMMI ,並擬妥國家規格,在國內開發軟體多多少少會跟政府單位有接觸,也許是上游,也許是上上游,所以採用政府要求的格式,將來比較不會有轉換適應的問題。
測試專案部份,我是覺得 Developer 也要用,過去我都是在類別內包含一些測試方法,所以我看完這本後,應該會改用測試專案來玩看看。
我自己今年接個案子,也有這些要求,所以猛畫 UML 圖,如果可以,我也想導入,但是裡面有一些問題,先前我用 VS2005 畫圖,畫完後,不知道該怎樣用向量檔方式轉到 Word 上,畢竟要出報告,最後還是回頭用 Visio 畫,當然先前沒看過這本,所以很多細節不清楚。
整體功能要架個測試站來玩看看,可是流程的導入,對於企業行政是很大的干擾,好像不太能無痛導入,在很趕的專案最好先不要碰。我目前只是看完書,還沒測試過,所以有些疑慮要考慮。
  1. 幾乎各企業來說,不管是專案經理 (這本書居然不是用專案經理,而是用專案領導者之類的用詞) 、各各腳色,多半都參與多個專案,所以面臨的是混合專案的問題。有些系統部分,可能是企業核心,有些可能是數個專案共用,有些可能是專案系統內共用,裡面並沒有看到混合的問題。
  2. 裡面是以新專案為例,就算企業打算在新專案才開始導入,但是有很多會跟既存專案牽扯在一起,就是前面的問題1 ,混合到其他專案的問題,這邊並沒有明確的介紹與說明。
  3. 專案管理的觀念與精神幾乎都整合到 Microsoft Project 內,VSTS 也支援直接使用 Project 當成瀏覽器,軟體專案管理是在專案管理內加上軟體專有的架構、開發、驗證過程,但是很多專案管理的行政部分,在 VSTS 內並不支援,比如說專案人力分配與管理、時薪計算、PERT 圖、甘梯圖等,這部分應該納入整合,甚至包含專案結束後的檢討、歸檔,供新增專案規劃參考時程、成本使用。
  4. 專案執行過程中,需要定期備份、出報告,比如說把目前最新版本整個燒成光碟交給業主,作為階段性驗收與撥款,似乎只能備份資料庫。另外針對文書支援似乎完全不考慮,可是專案人員也是要打報告,打各種規劃書,而測試結果雖然會出成 HTML Report ,可是拷貝到 Word 後,又要重調樣式、表格,似乎對於行政支援的部分不太足夠。
  5. 在本書裡面,代號要交由系統決定,但是在寫初稿時,通常會一直改,這時自動編號就會重傷,因為無法向業主解釋跳號的問題,而定稿後,比如說測試規劃書送出後,再變更時,則應以新的編號給定,這部份好像不是這樣規劃的。
  6. 帳號採用的是 Windows 帳號,有時候很麻煩。有時後專案在投標時,可能提供了人力配置圖跟表給委辦單位,之後企業內部作人力調整時,可能這個人力因為不適任,調去支援其他專案,而為了避免文書行政往來,通常不會爆給委辦單位,這時可能會將該人力分配給多個其他人等,若是有自定帳號系統時,可以由各部份接替人員來登入,或是專案可能有代理人制度,由代理人來處理,所以會覺得一定要對應真實系統時,有時有綁手綁腳的問題。甚至有的時候可能是人頭人力,利用某個高階主管名氣來接案,實際上專案由另外一個主管主持,這個高階主管只是顧問層級。
  7. 部分用詞可能有點混淆,比如說簽入,從整本書的說明來說,應該是指包含修改過的程式碼上傳,可是一般來說,簽入通常會以為類似登入的行為。
  8. 模組的分類不清。基本上整個管理是以物件類別為基礎,可是我滿偏好模組構成的函式庫,大概學界過去都慣用這類吧,在這本無法窺知模組到底該怎樣配合,都是以物件為單位。
  9. 似乎沒有包含原始碼的移交與部署?裡面有二進位檔的佈署考量,不過有些專案契約會要移交原始碼,依照著作權法及專利法來說,非專案內開發的既有功能屬於原公司所有,不需要交接,所以這部份就牽扯到部份二進位碼與部分原始碼的移交,通常契約並不會規範到原始碼要包含使用說明或註解,所以交給委辦單位的原始碼可能想把註解拿掉,來作為下個維護案的技術門檻,這類考量似乎都沒有。
  10. 在國內,通常管理階層只出一張嘴,所以專案經理要負責的開新專案、架構可能都是由下面的秘書或助理或菜鳥工程師代為執行,然後在定時會議上拿出來討論、修改,這部份可能要考慮加入簡報的支援能力,最主要的就是圖與報表的展示與彙整,此外,畫上去的元件可能要能轉屬性,比如說原先定義的位階比較高,要降階到某個子系統內,可能從系統元件降為類別等。
我自己很想導入啦。因為今年寫了一堆報告,我也想藉由這個機會學習與導入更制式化的流程,建立維護、開發、設計的基準。
我有空後,應該會去抓些範例來測試與變更,希望能盡快熟悉這套軟體,不過我覺得這套比 Project + Visio 還複雜... 目前只能各部份先行行政作業...

看『寫給C++程式設計師的UML實務手冊』

 

UML4C  數年來,一直無法搞清楚UML的那13張圖,到底要怎麼使用,才能適度表達分析或設計階段的意念;甚而,將物件導向觀念結合,單位系統開發流程中,使開發流程更為順暢。

  而今,在Hsdc一次課程因緣中,結識了本書作者─邱郁惠老師,她以十餘年對於OOADUML至最近MDA的開發技術的專案經驗,推出了『寫給SAUML/MDA實務手冊』的課程,對於她結合實務的寫作方式,讓我真是驚豔萬分。因為,為了研究UMLOOAD的開發流程的開發,買了數十本的書,並且四處上課學習物件導向開發觀念,卻始終不得其門而入的我,真是醍糊灌頂,受益無窮。

  當郁惠老師再出『寫給C++程式設計師的UML實務手冊』這本工具書,僅以14個章節藉以進一步闡述MDAPSM轉換設計到實作的方法技術,簡明而約要的陳述。不禁讓我觀想起前田約翰曾提出「盡可能減少,隱藏多餘的一切,同時避免失去固有的價值感」的簡單原則,藉以分散或隱藏來掩飾設計產品的擁擠程度,那種等值的藝術價值。

  在零散而有限的時間中,好不容易斷斷續續的以兩個月時間拜讀完UML4C++,有一些以前一直無法組織起來的觀念,似乎就有了一些形狀,或許是無名且不可言諭。想著,想著,又回過頭去翻閱了其它UML的書目,包含了XP與軟體工程、VSTS等相關書目。似乎無意中,就將這些零散的知識,串起了一個開發,由SAPG應有階段與作為的初始架構。

  心中真是無限的欣喜與讚嘆。

  「部分之總和不等於整體,因此整體不能分割,而整體是由部分所決定。反之,各部份也由整體所決定。」這是出自完形心理學的一項理論。

  不約而同的,在本書中仍承襲MDA4SA的主題──

  第一章到第四章,仍以一個基金系統作為貫穿全書工作流的整體主題前要方法的陳述。第五章開始,到第八章,則是以系統的部份,配以靜態類別圖與動態循序圖,實作出系統類別的屬性與操作,逐步地描繪出系統整體的部分功能。疊代反覆的動作在第九章又回過頭藉由使用者案例繁簡形式的描述,再與第二階段的類別和循序物件間產生出來的程式碼相互照映;提供了一個由部分需求設計到開發,看出這個基金系統的整體目標。

  最後,再加上狀態圖與活動圖,來強化出系統核心要件內的關鍵狀態與系統整體的營運流程。

  本書的架構,以UML作為設計工具,由第一章到第四章提供了整體到部分的設計觀點;從第五章起的章節,則反道而行,以部分觀點的設計與實作,延展出了對於整個基金系統開發的流程線視圖。

  一個簡單的方法,僅僅使用四套圖表,就可以完成一個功能複雜的系統嗎?

  答案,似乎是肯定的。

  或許,不應該如此簡略的答覆。

  就軟體工程的觀點而言,MDA應再結合專案觀點與測試、部署的觀點,才能成就一個完整的開發流程;才能確保一個完整系統的服務品質需求吧。

01 มกราคม

談論主題 專案管理>開發流程>軟體設計思維與觀點>利用UML class diagram 表達CMMI content

關於 CMMI

  • 與其說 CMMI 是流程框架(Process Framework),倒不如說 CMMI 是目標框架(Objective Framework)。
  • CMMI 是以 “流程區域(Process Area)” 為主要完成目標。無論是以 “Continuous” 或 “Staged” 的途徑(approach),均以 “Process Area” 為單位,來檢驗 “軟體能力” 的成熟度。
  • Ex. “需求管理(Requirement Management)” 為一個 “Process Area”,是 CMMI level 2 必須完成的主要目標。(level 2 需完成 7 個主要的 “Process Area”;level 3 需完成 14 個”)。
  • 每一個 “流程區域” 會細分為多個子目標。若該子目標只對應單一的流程區域,稱為 “特定目標(Specific goal)”;若子目標會涵跨多個流程區域,則稱為 “一般目標(Generic goal)”。
  • 每一個特定目標/一般目標會列出一到多個 “期望(expected)” 的特定實務(specific-practice, sp)/一般實務(generic-practice, gp)。實務為一段陳述(statement),表達了完成子目標時的作法。
  • 實務並非為絕對、唯一達成子目標的唯一作法,它是 CMMI 建議、期望的作法,但仍可就現實狀況來找出 “自己” 的的實務作法,重點是,能達成(achieve)子目標(GG/SG)的規範與要求。
  • 既然實務僅為敘述性的陳述,可以把它視為是 “抽象(abstract)” 的 “How-to”,要能找出符合實務的作法,可以從主流軟體開發流程,如 RUP/Agile/XP 等,找出實踐的具體手段。

CMMI 的 Model Content 為:Process Area, GG/SG, GP/SP。其中,Process Area 與 GG/SG 為達成軟體能力成熟度的必要元件(required component);GP/SP 則為 "期望(expected)" 的元件,屬建議性,並非絕對需要。若以 UML 類別圖表達 CMMI Content 之間的關連,如下圖1 表示。

利用UML 類別圖表達 CMMI Content 之間的關連

圖1、範例-利用 RUP/XP 方法論實現 Requirement Development -> SG3

CMMI Content 類別圖說明:

  • CMMI Level (2~5) 包含(aggregate) 多個“流程區域(Process Area)”。
  • 每一個流程區域會包含多個子目標(Goal),子目標依性質區分為“一般目標(Generic Goal, GG)”與“特定目標(Specific Goal, SG)”。
  • 將 GG/SG 設計為“Interface”的意涵在於,任一個具體(concrete)的實務(practice)類別,只要符合該子目標的介面規範即可,也就是說,CMMI 不規定“how-to”,只要能確實達成(achieve)子目標的規範即可。
  • GP/SP 可視為是“抽象(abstract)”的“how-to”陳述(statement),因此,具體實務類別也可以依循 GP/SP 內的陳述來具體實現。

[More:]

從主流開發流程找 How-to

  • CMMI 只規範達成目標的標準,但並沒有規定該如何(how)達成目標。
  • “如何”達成目標,需要找出具體的方法與解決方案,”How-to”的參考來源可以從 RUP/Agile/XP 方法論內的實務經驗與工作流程(Workflow)、樣版(Template)、實務案例等(當然,也可以由團隊內部自行找出最佳的實務經驗(Best Practices) )。
  • 具體的 “How-to” 會對應(mapping) 至 CMMI 內的 GG/SG (goal),也可以是 GP/SP (practice)。

範例一、Requirement Development -> SG3

Process Area: Requirement Development (需求開發)
Purpose:

The purpose of Requirements Development is to produce and analyze customer, product, and product-component requirements.
SG3: Analyze and Validate Requirements
The requirements are analyzed and validated, and a definition of required functionality is developed.

範例-利用 RUP/XP 方法論實現 Requirement Development -> SG3

圖2、範例-利用 RUP/XP 方法論實現 Requirement Development -> SG3

RUP 透過需求工作流程(Requirements Workflows) 內的幾個活動(activity),來達成主要對 CMMI “需求開發” 流程區域內對 SG-3 的實現:

  • 分析問題,找出關係人(stakeholder),找出系統邊界與限制,瞭解關係人的需要(Need)。
  • 定義系統範圍,利用使用案例模型(Use-case Model)描述系統的需求,以達成與客戶對系統功能性的共識;捕捉其它重要的需求,例如非功能性需求與設計限制等。
  • 撰寫測試案例(以 Use Case 為單位),由客戶提供測試腳本與數據,以作為在實作(Implementation)工作流程的自動化測試的契約。
  • 實現(Realize)使用案例,將需求工作轉移至 分析/設計 的工作流程。

XP 是透過 “使用者陳述 (User story)” 來達成主要對 CMMI “需求開發” 流程區域內對 SG-3 的實現:

  • 將需求寫成陳述(statement),並且寫在卡片(4x6 索引卡)上。
  • 客戶有權要求每個需求功能最細小的環節;程式設計師有權知道需求到底是什麼。
  • 每一個敘述必須都是可以測試的(testable),也就是可以寫成功能測試程式碼,來驗證敘述是否可以運作。
  • 若一個功能敘述無法在一至兩個星期內完成,代表敘述可能太大了,必須對其分割為多個敘述。切成適當的大小,以便於評估其難易度,並做為未來量化時,估算的計量單位(功能點, functional point)。

範例二、Risk Management -> SG1 -> SP 1.3-1

Process Area: Risk Management (風險管理)
Purpose:

The purpose of Risk Management is to identify potential problems before they occur, so that risk-handling activities may be planned and invoked as needed across the life of the product or project to mitigate adverse impacts on achieving objectives.
Specific Goal-1: Prepare for Risk Management
Specifice Practice:
  SP 1.1-1 Determine Risk Sources and Categories

 
SP 1.2-1 Define Risk Parameters

 
SP 1.3-1 Establish a Risk Management Strategy

範例-利用 RUP/Agile 方法論實現 Risk Management -> SG1 -> SP 1.3-1

圖3、範例-利用 RUP/Agile 方法論實現 Risk Management -> SG1 -> SP1.3-1

RUP 透過專案管理工作流程(Project Management Workflows) 內的風險管理的部分,來達成主要對 CMMI “風險管理” 流程區域內對 SG 1-> SP 1.3-1 的實現:

  • 採用循環與漸進(I&I, iterative and incremental)的開發方式,及早降低風險。
  • 列出風險清單,並制訂風險高低指標(risk magnitude indicator) 辨識與描述風險的高低程度。
  • 利用架構 POC (proof of concepts),來找出會影響架構的風險因子,包括系統整合、人員技術與技能等問題。
  • 建立測試工作流程,及早獲得系統品質的相關回饋(feedback),並找出在分析設計與實作階段的隔閡(gap)。

Agile 並沒有建立與風險管理相關的計畫,而是透過頻繁溝通、大量取得回饋,儘早釐出風險,並透過實務來克服與解決風險。

  • 採用循環與漸進(I&I, iterative and incremental)的開發方式,及早降低風險。
  • 客戶與開發人員在專案進行期間一起工作,以降低溝通的風險。
  • 採測試先行與接受度測試,以降低需求變更的風險。
  • 早一點作整合,經常做整合測試,以降低系統整合的風險。
  • 經常釋出(release)可用的版本,週期可是數週到數個月(最好三個月內),較短時間間隔為佳。

結語:CMMI 綱要

  • CMMI 非高度儀式且為重型的開發製程,它是指導軟體開發的綱要,CMMI 也沒有給具體的實務手段,它是制訂了目標與方向,來引領軟體開發往 “對的方向” 走。
  • 找出達成 CMMI 所制訂的手段,可以透過主流的軟體開發流程,包括 RUP/Agile/XP 等,並依據專案的規模與性質,來對開發流程與產出(Artifacts),作適當的裁適(Tailor)。
  • 可以利用倒推式的目標設定與規劃(Backward Planning)的方式,來找出如何達成目標的手段。所以,若 CMMI 為目標(Goal),那麼,RUP/Agile/XP 就是可以達成目標的手段(How-to),兩者是互補,而非衝突。
  • 回到最本質的一面,“人” 才是影響軟體開發最關鍵的因子,我們更需要知道的是,在團隊開發人員的角色裡,應該具備的素養與修練是什麼,而要學習的技能與技術,又是那些,然後,才來找出適合軟體開發人員的 "利器(Tool)"。專案管理者,切莫本末倒置,先從工具與製程著手,而忘掉根本。

目標設定規劃與行動的精要

  1. 檢視目標與方向 → 找出手段(how-to) → 瞭解技能與技術/心理素養 → 善用利器
  2. 調整與修正手段→循環與漸進→往目標前進!

談論主題 敏捷的軟體開發流程

作者:林耀珍

2003 年 11 月

速度是企業競爭致勝的關鍵因素,軟體專案的最大挑戰在於一方面要應付變動中的需求,一方面要在緊縮的時程內完成專案,所以軟體團隊除了在技術上必須日益精進,更需要運用有效的開發流程,以確保團隊能夠發揮綜效。這正是 Agile Process (敏捷的軟體開發流程) 於近年來興起的主要原因,本文將介紹數種廣為接受的軟體開發流程,及其在運用上的建議。

Agile Process - 敏捷的開發流程

幾乎所有的軟體專案都會在起始階段面臨選擇開發流程的困難,一種是完備的開發流程,另一種是簡易輕便的流程。雖然我們了解採用完備的開發流程可以提高軟體的品質,但是因為欠缺人力、工具與時間,我們常會被迫採用簡化的流程,但事與願違,大部分的情況我們仍然難以在預算內及時完成專案。

Agile Process (敏捷的開發流程) 是一種軟體開發流程的泛稱,Agile Process 具有下列幾項共通的特性:

  1. 客戶與開發人員形成密切合作的團隊,因為客戶無法於初期定義完整的規格,而開發人員於開發過程中也常常無法知悉外在環境或業務的變動,所以需要兩者密切合作方能開發適用的軟體。
  2. 專案最終的目標是可執行的程式,因此所有的中間產品必須經過審慎評估,確認有助於最終目標,才需要製作中間產品。
  3. 採用 Iterative 與 Incremental 方式分階段進行,密集 review 是否符合需求。
  4. 流程可以簡單,但規劃與執行必須嚴謹。
  5. 強調團隊合作,賦予高度的責任,團隊有自主權得以因應變化做調整。

RUP 開發流程 - Rational Unify Process

RUP 為 IBM Rational 公司經過多年的研發與經驗所提出的軟體開發流程,其內容含蓋 Business modeling, Requirement Modeling, Logical Design, Implementation, Testing, Deployment 等軟體開發生命週期的直接工作,與 Project Management, Change & Configuration Management,Environment support 等支援性工作。RUP 的內容非常豐富,不同的專案需要不同調整,IBM Rational 提供 RUP workbench 工具,方便調整 RUP,並公佈於 Web,方便專案成員遵循統一的流程規範進行工作。

RUP 的主要精神為:1. 專案進行採用 Iterative 程序分階段漸進地完成專案功能;2. 廣泛使用 Visual Modeling 於商業需求分析、系統分析與系統設計;3. 強調架構設計;4. 對每項工作所需要的技術、工具、做法、範本、檢查項目均有詳細的定義,架構完備且具有可調整的彈性。

因為 RUP 的流程規範與相關技術較複雜,所以導入時必須注意幾個因素:1. 主管的支持以確保足夠的資源投入;2. 分階段導入;3. 適當的訓練與密切的顧問咨詢;4. 使用 Modeling 技術時需要考量 Coding 的實作環境;5. 良好團隊的管理,以溝通、耐心與堅持解決變革的人性阻力。

XP 開發流程 - eXtreme Programming

XP 亦稱為終極流程,是最輕量級的開發流程,其最主要的精神是『在客戶有系統需求時,給予及時滿意的可執行程式』,所以最適合需求快速變動的專案。XP 經過 6 年的實作與修改,已演化為精緻的開發流程,但仍不失其精簡的特性,它強調客戶所要的是 workable 的執行碼,所以把與撰寫程式無關的工作降至最低,並要求客戶與開發人員最好以 side-by-side 的方式一起工作。

XP 開發流程的基本步驟為:1. 開發人員隨時可以和客戶進行有效溝通,撰寫 user stories 以確認需求。2. 簡易快速的系統設計,撰寫獨立的驗證程式以解決特殊困難的問題,找出演算法即可丟棄驗證程式。3. 規劃多次小型階段的專案計劃,以最快速度完成每一階段的程式交付客戶,客戶負責 Acceptance tests;4. Coding 前必須完成 Unit Test 與 Acceptance tests 程序,所有模組整合前都須經過 Unit Tests;5. 開發人員必須快速回應 Bug 與需求變更;6. 要求二人一組使用一台電腦設計程式,當一人 coding 時,另一人負責思考與設計;7. 程式必須符合程式規範,並常做程式的重整 (Refactoring)。

XP 屬於較精簡的流程,於導入應注意幾件事情:1. 最好有顧問給予協助;2. 持續的 Review;3. 可適當調整流程,但不可失去其基本精神。

SCRUM 開發流程

SCRUM 開發流程是 Agile Process 的一種,以英式橄欖球爭球隊形 (Scrum) 為名,基本假設是『開發軟體就像開發新產品,無法一開始就能定義 Final Product 的規程,過程中需要研發、創意、嘗試錯誤,所以沒有一種固定的流程可以保證專案成功』。Scrum 將軟體開發團隊比擬成橄欖球隊,有明確的最高目標,熟悉開發流程中所需具備的最佳典範與技術,具有高度自主權,緊密地溝通合作,以高度彈性解決各種挑戰,碓保每天、每個階段都朝向目標有明確的推進,因此 SCRUM 非常適用於產品開發專案。

SCRUM 開發流程通常以 30 天為一個階段,由客戶提供新產品的需求規格開始,開發團隊與客戶於每一個階段開始時挑選該完成的規格部份,開發團隊必須盡力於 30 天後交付成果,團隊每天用 15 分鐘開會檢視每個成員的進度與計畫,了解所遭遇的困難並設法排除。

SCRUM 與傳統開發流程及專案管理差異較大,於導入時最好有顧問協助。

總結

Agile Process 的精神已經成為共識,但是沒有一種固定的流程可以重複使用在不同的專案上。而且不管是 RUP、XP、SCRUM、或其他的開發流程都允許相當大的彈性,我們必須按專案性質的不同,調整或混合出適合的開發流程,並允許團隊於進行中做必要的彈性修改,方能達成目標。

參考資料

  RUP:www.rational.com
  XP:www.extremeprogramming.org
  SCRUM:www.controlchaos.com
  AGILE:www.agilealliance.org

UML之我觀


 


UML之於我者,僅實用於系統分析也乎

作業過程,形轉浮閰萬有,循物則化而圖之。靜觀世事,實不外乎『物件』與『關係』之範疇,當以『物件』為體,『關係』為用。曾有言之:「UML之本質,不外哲學。」;自身釋之以謂言「型圖為體,哲學為用」。今就自身依循「存在論」之思考模型以示說。

附件而圖之,四物關連而展。反覆審視,要物為二:『此在』(Dasein)與『時間性』(Timelines)。謂『此在』者,係承自『存在』(Sein)。萬物皆存在,循哲學以觀,『此在』與『存在』之悖異,於『時間性』具否?就「物件導向」以視,『存在』係最高物化單位;或表實物狀態之能,或表自身就是存在模糊之概念。

然,物有崩毀,人有老死,事於始終,根於『時間性』之存在;也就是說:當實物具足時間性限制而存在,『此在』也。海德格曾言:「各種科學均為『此在』的存在方式...『此在』本質上就是:存在世界之中」。「存在與時間」內亦述及:「此在的這種存者的存在之意義…由之出發的地平線就是時間。」云云;或霍金於「時間簡史」所言:「時間之於生命之存在,實是關鍵」,或「時間是上帝賜給宇宙最佳的性質」云云。繼宇宙論所延伸,此般「天上掉下來的禮物」,生命得依不同面貌以顯於;生命者,『此在』之謂。

之,『此在』為塑模型圖之實體物件,『存在』乃抽象而化,轉而為位階最高之抽象實體,於間關係乃【繼承】。

至『時間』者,或為過程,或為程序,具時間性之流程,形物接踵而沓至來之假定關係,故以虛線之實體箭頭表之。事有始終,回歸系統層面而言,資料自系統啟動終有結束之時,於資料之導向乃直接關係,故以實線箭頭以表。

然,塑模為圖,倘無哲學為用,則不明物關係終始源之道,若空有哲思,無塑模以圖,亦陷於空談而無所為也。坊間相關書目眾,均有所細表,反令人無所著力之

UML塑模之圖,除利於溝通,更可假其工具之便,達錄載系統源結啟始之序。部份或與正規UML操作稍有差異;然,精魂應已所映。假數之細索,竟數日事家外之功,述而文,僅提供自身之觀點以享。

UML之『關聯』,箭簇方向,或謂「相依」,或曰「繼承」。

形也,箭首見虛、實,箭()身亦見虛與實。虛實者,電腦語言以語之,即01;於數學言,謂二元數術;之於浮現世,則不外主客是也。主、客者,觀點、視野焦點之不同。於影藝作業,係轉場效果所得焦點求同尋異之趣。

相依者,主依於客物;繼承者,則反主繼於客物

系統或流程或資訊觀點流轉一如世事,始於有而終於無,於事者或於人者,因循不同『此在』制於時空之有,無論「客隨主便」或「反客為主」,均意屬不同觀點與存在;譬如「系統」之於「公司」此在之意義。

其間異趣,若太極拳義所言:「太極者,無極而生,動靜之機,陰陽之母也。」何謂陰陽?主者靜觀之陰,客而形動謂之陽,此兩者,同出而異名。

P.S 存在模型之成因,可語而盡,謂「每生命(此在)受著(流程)時空(時間性)的限制,僅得使用一條軌跡(言『去存在』,或「至彼岸」,結束也)」,源化自AI人工智慧』尾場,外星人之語矣。

14 ธันวาคม

執行『世界最大的專案管理』

忽焉思散,若有所得:
 
執行『世界最大的專案管理』
 
在開始的時候,先提一個佛經中釋牟尼佛的事例:
一日佛陀帶著弟子經過一堆枯骨,佛陀看了看,便停了下來,跪下身並行五體投地之禮。弟子阿難詢何因由?佛陀回答:在累世之前,祂們曾是我的至親好友;今世,他們因苦難身亡,曝屍荒野,讓我心生不忍;所以,對他們行禮。
 
為何,我會提這個例,在佛教的觀念中,一個重點就是輪迴。但祂卻不是佛教獨有的觀念。
所以,中土大乘佛教教義中,茹素的其中之因,就是,人都會對今世某些人事物產生眷戀,可能對往生的至親而言,妳可能是他最大的眷戀;在離不開的情形下,祂可能投身任何一個妳身邊的生物,在妳身邊徘徊不去。大至牲畜、貓犬寵物,小至螞蟻、飛蛾或跳蚤。所以,不殺生,是對它們無比的敬意。
 
當然在現今觀念中,這些可能都是無稽之談。但在換個角度而言,祂代表了一個人生的態度。
 
在RUP的專案觀念中,我們知道,沒有什麼最完美的專案。但讓專案成功的大前提卻都是以Iteration(疊代)模式推行,可以讓專案項目的能力推展至極限。
人生何嘗不是如此,一開始生命的投入應該是有一個主題,那是我們生命投注進來的目標,可能是帶著天命而來,那個天命的專案,在往生的時刻,他尚未完成。所以,今世的結束,不代表來世專案的目標就此結束。
我們也是如此,我不知我前世是如何的一個人,妳或許知道妳前世是個什麼樣的人。
但我們都應該有個生命專案目標,那才是妳此生的目的。
緣盡則緣滅,想跳脫輪迴,得先找出個人的天命是什麼?
結合的緣總是另人刻骨難忘如斯,緣盡卻不是終點。
 
我一直很喜歡席慕蓉的一首詩:一棵開花的樹
    如何讓你遇見我
    在我最美麗的時刻 為這
    我已在佛前 求了五百年
    求祂讓我們結一段塵緣
 
    佛於是把我化作一棵樹
    長在你必經的路旁
    陽光下慎重地開滿了花
    朵朵都是我前世的盼望
 
    當你走近,請你細聴
    那顫抖的葉是我等待的熱情
    而當你終於無視地走過
    在你身後落了一地的
    朋友啊 那不是花瓣
    是我淍零的心
    很美的意境,那是緣滅的意境,卻不是生命的終點。物件導向裡的觀點,如何在問題領域中找出本質。本質是什麼?黑格爾的「小邏輯」裡有個說明:本質是自己過去的存在。一般地來講,即是反思的觀點。什麼是反思的觀點,換句一位台灣詩人在描述他夫妻間的關係:「因為風,才感到樹的存在」。簡言之,就是相對性。有了過去,才能找到現在的自己或是以後的自己。所以,我說緣滅不是代表終點。
07 กุมภาพันธ์

20051229 讀書心得

在聯合報上,我讀到一篇關於清靜農場裡一位反共救國軍江德昌老先生的故事,心中真是無比痛惜,不斷的掀起父親過去一頁頁斷斷續續的記憶。不由地淚流滿面,零涕無語。
雲南淪陷前,江老先生是雲南建水一酒廠的小開。與第一任妻子生育有六個小孩,並另領養了一個;在雲南就要淪陷前,她妻子對江說著:「你生下來就是少爺命,逃出去後,記得找個人照顧你,不要顧忌我,我不會在意。」。而淪陷後,裹著小腳的她,在文革時,不但被歸類為黑五類,而且,幾乎天天跪在屋簷下拷打,而她的小女兒在紅衛兵進門的那刻就活活嚇死。到她死前,都不再看見她掛念的丈夫了(因為,江老先生在開放大陸探親之前,就已罹患肝硬化過世了)。而台灣出生的小兒子,因為先天性心臟病,在十六歲那年,他告訴他的姐姐,夢到父親來看他,父親一臉慈祥地要他不要害怕,跟著他走。數日後,就真的過世了。
....
分隔兩地的家人,在這個時代裡吃盡了不同的苦。直到開放探親,江德昌已經過世十餘年,他始終沒有機會見到親人,對家人的思念始終無法跨越有形的地理屏障,與許多等待太久的榮民義胞一樣,成為永遠縈繞心頭,揮之不去的遺憾。
                                 --摘自聯合報94.12.29副刊.大時代裡的飄零身世
【遙思父情】父親在家鄉的生活困苦,為了生活,離鄉背景地一直在外地工作,難得回家一趟;每回鄉一個月,與大娘便生得一個孩子。所以,僅育一子一女。到淪陷前,父親便沒機會回家鄉看她們一回了。在文革時,大娘與奶奶她們也是被打為黑五類,因為父親是國民黨工與國民軍職之故。聽大哥他說著,那時,那有親戚啊!因大姐從小就被外婆撫養,所以,境遇是比較好的。所謂的親戚只知道有個母舅,到父親在開放大陸探親之後,才知道,原來,我們還有那麼多的「親戚」接踵而來!而大娘她啊,一直想念著父親,直到悒鬱而終──臨終之前,她仍一直對著奶奶泣訴著:「媽媽!我再也沒有機會能夠看到祥生(大哥的乳名)他爹了!」。經由父親後來憶起述說後,我才憶想起,為何在我上國中的某日父親會對著一封由美國榮漢叔叔轉來的家鄉信,那般深切地痛哭著。
印象中,那個對著家信的背影,像父親陳舊的相片,色調有些兒黃;冰涼的淚,不只是流了我滿面,也溢滿在我冷冽記憶的框裡。
父親,他老人家卻是離開了我這許多年....

20051203 生活日誌

正懶散躺在媽的床上,看著電視。
不一會兒,就看見昀興沖沖的從客?走道踢踢沓沓地衝進門來。妹妹隨後跟著她從客?走道,走了過來,忽然出聲對著我說:「真有你的!有你的真傳!」
「那個?怎麼啦?!」說得我丈二金剛摸不著腦袋,狐疑地問。
「她啊。」妹妹指著昀說著:「剛剛我看到她搬移著走道電腦桌的那張椅子,把它移到你房裡。我想看看她想做什麼,跟著她走了進去,她居然爬上椅子,顛著腳,伸手拿掛在房門背的置物袋裡的那把梳子。真的跟你小時候一模一樣。」「力氣沒想到也真大。」
我呵呵的笑著,樂瞇了眼,轉過去看著她,正在忙碌的拿著那把梳子要幫她的一個布娃娃梳頭。
呵呵,那張椅子。比她的身體還大哪!

20051222 生活日誌

雖然已經是昨晚的事了。
想來,昀的存在,真是不由讓人感到生活有趣,惹人憐惜。
她對人生充滿了無盡的探索與學習。至今方二歲兩個月大而已,已經有了一大串的成果,有些是如此的讓人感到驚喜與安慰;有些呢?卻是讓人兀自憂心。
驚喜著──
        吃飯的時候,會主動把飯碗發放到每個人手上;
        會對人說「謝謝!」;
        會數說1~10的數目字;
        會辨識英文字母,並念出它們;
        會幫母親大人到冰箱裡母親需要點眼睛的眼藥;
        會逗弟弟開心,也親親弟弟;
        聽到門鈴聲,會跑到後面叫大人開門;
        在上完廁所,也會自己擦屁屁;
        愛拿書,看書,儘管她仍看不懂,卻愛東拿西放;
        上智能開發課程時,不喜歡坐在座位上,而是跟老師搶字卡,學著老師的動作,對同學們展示字卡,並詢問著「麼?」(她對語言,仍無法清楚而完整的表達,「麼?」就是「什麼?」的意思)。
昨晚,她的姑姑(我的妹妹),手拿雜誌在廁所,上著廁所閱讀著。驀見,昀從走道書櫃裡拿了本國家地理雜誌(事實上,她是拿了兩本,一本拿給了在客廳看電視的我。另一本,她自已拿了;並快速地往廚房跑了去),學著她姑姑上廁所的樣子;端坐在她自已專屬的Kity小馬桶上,兀自翻著。妹妹,看著覺得真是有趣極了。當我到廚房整理物品時,妹妹笑著告訴了我。
晚上,上床睡覺時,我把這事告訴了妻。她聽了,倚躺在我肩膀上,笑著又問一次昀的動作。我們均輕笑著。
想著種種,彷彿歷歷在目地,我們不只是笑出了聲,也笑瞇了心眼。

20051212 生活日誌

昀,是越來越聰明了。神情也越來越多樣化。另一點,是妹妹今天也回來得晚!
妹妹臨洗澡前,她正與昀同處在媽的房裡。妻正在廚房忙著整理。一會兒,妻就聽到她對昀說著:「昀昀,妳的球球咧?趕快去收好;不然,姑姑要把妳的球球收起來囉!」昀聽到了,神情就顯得很是緊張。馬上就踢踢沓沓地邁著她的小腳飛快的跑到廚房裡,嘟著小嘴。從架上,撿起她的兩顆螢光跳跳球,緊張的收到她的褲子口袋裡頭。確定她的跳跳球收好了之後,她那迷人的笑容始展露了開來。
然後,蹦蹦跳跳的從廚房裡走回媽的房裡。
「那模樣,真是好笑極了。」妻晚上在床邊。一邊在我耳邊輕輕地說,一邊又嗤嗤的笑著,溫柔的抱著我的臂膀,蜷曲著身,睡著。
「呵呵,那個小傢伙也不知整天在忙什麼?為了找她的球球,比大人顯得還忙。」躺在床上,我閉起眼想像著她那迷人模樣,打心底忍不住湧上一股愉快的笑意。