2009年1月24日 星期六
專案管理_假的Lession Learn
在一般專案結束之後 , 也會進行 Lession Learn ,
看看可以學到些甚麼教訓(做錯的事) 或是經驗(作對的事) ,
不論要學到甚麼 , 都必須要誠實的面對問題 , 才能發現真正的問題所在
但是我要說的是在專案的過程中 , 就應該不斷的檢視與檢討 ,
而不是等到專案結束的時候才來進行Lession Learn...
當專案發生進度延宕 , 廠商一再提出相同的作法 , 而一延再延的時候
正確的作法應該是找出真正的問題所在 , 針對真正的問題所在去解決
但是因為在職場上 , 很多人不願意誠實的面對問題 ,
不願意面對問題 , 採用相同的錯誤作法 , 只會讓錯誤一再重複發生
當進度落後時 , 可以採行幾個方式去檢查 , 可能的問題所在
a.請廠商提出他們的專案成員組織文件 , 看一下 , 有多少人 ,角色為何 , 每個角色負責的工作為何 ,
再去抽樣詢問廠商的專案成員 , 看看他們是否都知道自己所負責的角色為何? 應該負責的工作為何?
實例: 曾經看過廠商的PM完全沒有這樣的文件紀錄 , 然後抽問廠商的專案成員 ,
廠商的專案成員完全不知道自己要負責那項工作事項,
在經過我直接詢問廠商PM寫下廠商的專案成員組織文件後 , 明顯的發現廠商的人力嚴重不足 ,
廠商PM才開始進行人力的interview, 這個時候已經過了3個月
b.確認一下廠商的專案是否上下游可以銜接一致
上下游可以銜接一致 , 舉例來說就是下游的所需要輸入就是上游的產出 , 如果下游需要 A 當作輸入 , 但是上游完全沒有產生 A 當作產出
這時候你就可以確定廠商的上下游沒有銜接一致 ,
沒有銜接一致會有甚麼問題?
如果你的專案的許多區塊可以是完全獨立沒有關聯的 , 哪就沒有關係,
但是你的專案想要平行開發許多區塊 , 但是又沒有先找出關鍵點(諸多區塊會相依使用的那個重點區塊 , 如果沒有先作 ,後續的區塊可能會有問題)
另外一個很重要的問題 , 當廠商的進度一延再延 , 完全沒有完成的產出時 ,
停下吧 , 千萬不要再跟廠商說: "你自己說 , 你自己排 WBS , 舖出一個可以做的到的時程"
如果廠商真的沒有問題 , 他自己怎麼會一延再延 , 東西出不來 ,
千萬不要這樣作 , 因為這樣不能解決問題 ,
應該請廠商提出他們對自己的狀態與問題的檢視與檢討 ,
如果廠商認為他們完全沒問題 , 那大概這個專案也差不多完了 ,
為什麼?
專案一定是有問題 , 才會一延再延 , 完全沒有產出 ,
但是廠商又認為自己沒問題 ,
沒問題的問題 , 才是最可怕的大問題 ,
廠商連自己錯在哪裡 , 哪裡有問題都弄不清楚 , 你說不可怕嗎?
在廠商沒有真正的認知到自己的問題出在哪裡之前 , 請千萬不要再叫廠商自己去舖 WBS 與排時程了
(如果他沒問題 , 又怎會修改了 n 版的 WBS 與時程 , 仍然沒有半點產出 , n 大於 10 )
(這種作法 , 用台語的俗諺說 , 叫: , 請鬼開藥單)
專案管理的課程中 , 有提到 Milestone , 我聽過的一種說法是 ,
Milestone 是 Kill Point ,
意思是每一個Milestone都會是用來審視與決定專案是否要Kill 或是繼續往下走的決定...
如果廠商不斷的延誤 , 連第一個 Milestone 都沒完成 , 已經過了專案預定的完成時間 , (意思就是 100% 延誤 ) , PM還決定要繼續給廠商機會的 , 那就有問題了....
2009年1月17日 星期六
專案管理_是交付比例還是完成比例?
實例:
有的PM在面對廠商的產出時 , 跟必須要上交給公司高層的status report時 , 跟實際狀況竟然不一樣 ,
PM跟廠商講好,只有有交付,他就會掛進度 ,
(PM同意廠商PM 可以不作SA , SD先有開發[這又是另外一個大問題])
經過 n 個月後 , 在廠商完全不作 SA , SD 的狀況下 ,進行開發
廠商交付了十來個Java Class Source Code ,
就這樣 , 進行Code Review的時候發現,
這些Source Code 無法完整的被編譯 , 因為還有Source Code沒有交付 ,
即便可以可編譯 , 也無法執行 , 因為還有必要的設定檔沒有交付 ,
經過人工的審閱之後發現 , 這些Source Code 無法被編譯 , 執行 , 更何況是測試與上線
基本上可以說完成度 是 0% ,
公司簽約金付頭款就 一百多萬 , 得到甚麼?
(如果加上購買另一個軟體套件的費用 , 至少投入 兩百多萬 , 更不提公司內的專案成員 , 加上 User單位的人力投入 , )
投入兩百多萬 , 加上公司人力至少 70人月的投入(包含其他單位的人力)
公司能夠得到甚麼? Nothing , 沒有分析文件 ,沒有設計文件 , 沒有可執行系統 , 甚麼都沒有 ,... ,
有交付不等於有完成 ,
專案管理雖說是以產出為導向 , 但是也從來沒有說拿著沒有完成的產出當作進度的
但是PM的Status Report中的進度回報可不從來都不是掛零 ,....
現在專案有問題了 , 可能會被中止 , 那就牽扯到什麼是有效(完成)產出
迄至目前為止 ,
沒有 SA 文件 , 沒有SD文件 , 更沒有可執行的系統模組 , 一個都沒有
等於專案的完成產出是零
但是PM在先前的 Status Report 中可不是掛零 , 為什麼會有這種差異頗大的落差?
因為 PM 掛的是進度都是只要廠商有開始作 , 就算數 , 而不是以廠商完成了才算數 ,
也就因此種下此惡果的因之來源
現在PM要為了掩飾他先前所交付的Status Report 是有進度的 , 有產出的 ,
現在又在玩一些把戲 , 說看看專案要被中止了 , 什麼樣的產出對公司是有價值的?
要廠商已交付那些產出為目標 , 至少交出文件來...
甚至還要潑污水給專案成員 , 說有些專案成員希望專案被中止 , 而不說因為他的問題導致今日的果,
這個就是會做事的 PM...
<從一開始 , 專案就偏差了 , >
2009年1月12日 星期一
專案管理_QC不是萬靈丹
最近碰到品質很差的開發商 , 交付完全沒有品質的半成品時
老闆跟 PM 的反應竟然是只要多多投入人力去作 QC , 就可以了
請問 , 投入一萬個人力去作QC , 能夠把 搖搖欲墜的小木屋 , QC成為 鋼骨結構的摩天大樓嗎?
明明知道要蓋摩天大樓 , 但是看到開發商連地基都沒準備 , 就開工了 , 到目前為止交付的都是一片一片的木板 , 然後說這樣叫有產出 ?
PM 也收...
如果有那家公司可以說 , 他們可以投入人力去作 QC , 然後可以把 搖搖欲墜的小木屋 , QC 成摩天大樓的
請告訴我,....
2009年1月7日 星期三
VMWARE SERVER 2.0 Ctrl + Alt + Del 無法登入 (UBUNTU 8.10)
VMWARE SERVER 2.0 Ctrl + Alt + Del 無法登入 (UBUNTU 8.10)
最近把整台機器重灌 (UBUNTU 8.10)
然後重新安裝 VMWARE SERVER 2.0
(完全不需要在 安裝前進行任何其他額外的下載 , 使用預設的UBUNTU 8.10 安裝 )
然後啟動新的VM , 發現 使用 Ctrl + Alt + Del 無法登入 Windows Guest 的登入畫面
Ctrl + Alt + INS 也不行 ,....
發 現需要在
~/.vmware 目錄下 手動建立一個檔案名稱為 config
內容為
xkeymap.nokeycodeMap = TRUE
然後啟動 VM 時 , 就可以使用Ctrl + Alt + INS 登入 Windows Guest 的登入畫面
2009年1月5日 星期一
專案管理-不好的專案改善方式
當專案發生延誤的時候 , 通常 PM 會召開會議 , 請專案成員參與 ,
然後請專案成員提出建議 看看要如何改善專案 ,
最糟糕的說法就是那種
(a)¨ 大家都是專案成員 , 專案的成敗大家都有責任¨
然後補上一句
(b)誰誰有沒有甚麼方法可以改善的
然後就開始大家大眼瞪小眼 ,呆著...
這個不是Brain Storming 好不好
更慘的就是 , 還會有那種不負責的人在旁邊說風涼話(所謂的不負責 , 就是他完全沒有能力可以解決那個問題 , 或是完全不知道怎麼作 , 又不用負任何責任的人)
風涼話例如:(c) ¨大家繼續撐著 ...¨ , 或是 (d)¨只要大家有信心 , 專案一定可以完成的¨
實際上 , 應該是要找出專案發生延誤的真正原因 , 真正問題 ,
唯有面對問題 , 才能找出問題的原因 , 也才能找出真正的解法 ,...
如果 PM 不能面對問題 , 則不論採行任何方案 , 該問題始終會一再出現 , 專案就會一再延誤
如果專案成員有人在說風涼話例如:(c) ¨大家繼續撐著 ...¨ , 或是 (d)¨只要大家有信心 , 專案一定可以完成的¨ ,
請問這樣的風涼話可以找出真正的問題嗎 ? 可以真的把問題解決嗎?
再說
(a)¨ 大家都是專案成員 , 專案的成敗大家都有責任¨ / (b)誰誰有沒有甚麼方法可以改善的
這個是不面對問題的說法 ,
應該是找出問題 , 該誰負責 , 誰就負責 , 如果誰的能力或技能不足 , 則應該對外(其他部門單位)或對上求援就該求援 , 儘速把問題解決 ,
一個問題會出現 , 不管如何 , 一定要指派一個人員負責去追蹤處理 , 打混仗是最糟糕的事(就是說是大家都有責任 , 但是完全不會有人撿起來作)
然後請專案成員提出建議 看看要如何改善專案 ,
最糟糕的說法就是那種
(a)¨ 大家都是專案成員 , 專案的成敗大家都有責任¨
然後補上一句
(b)誰誰有沒有甚麼方法可以改善的
然後就開始大家大眼瞪小眼 ,呆著...
這個不是Brain Storming 好不好
更慘的就是 , 還會有那種不負責的人在旁邊說風涼話(所謂的不負責 , 就是他完全沒有能力可以解決那個問題 , 或是完全不知道怎麼作 , 又不用負任何責任的人)
風涼話例如:(c) ¨大家繼續撐著 ...¨ , 或是 (d)¨只要大家有信心 , 專案一定可以完成的¨
實際上 , 應該是要找出專案發生延誤的真正原因 , 真正問題 ,
唯有面對問題 , 才能找出問題的原因 , 也才能找出真正的解法 ,...
如果 PM 不能面對問題 , 則不論採行任何方案 , 該問題始終會一再出現 , 專案就會一再延誤
如果專案成員有人在說風涼話例如:(c) ¨大家繼續撐著 ...¨ , 或是 (d)¨只要大家有信心 , 專案一定可以完成的¨ ,
請問這樣的風涼話可以找出真正的問題嗎 ? 可以真的把問題解決嗎?
再說
(a)¨ 大家都是專案成員 , 專案的成敗大家都有責任¨ / (b)誰誰有沒有甚麼方法可以改善的
這個是不面對問題的說法 ,
應該是找出問題 , 該誰負責 , 誰就負責 , 如果誰的能力或技能不足 , 則應該對外(其他部門單位)或對上求援就該求援 , 儘速把問題解決 ,
一個問題會出現 , 不管如何 , 一定要指派一個人員負責去追蹤處理 , 打混仗是最糟糕的事(就是說是大家都有責任 , 但是完全不會有人撿起來作)
2009年1月3日 星期六
沒有軟體開發經驗的人去作SA會有甚麼問題?
沒有軟體開發經驗的人去作SA會有甚麼問題?
沒有軟體開發經驗的人去作SA會有甚麼問題?
我在 "OCUP UML初級認證攻略" 書上看到作者的一段話 ,
她提到要考UML認證的理由六:
"理由六: 資料的程式設計師 , 女性程式設計詩 , 或者是打算邁入軟體業的女性新鮮人 , 要趕快往UML轉型或投入 , 否則年紀越來越大 , 不僅敵不過年輕小伙子的熬夜拼命 , 女性朋友還會因為熬夜而青春難保"
看到這段話 , 我是深深的不以為然 , 因為這段話中 , 提到要往UML轉型的理由極度的牽強 , 且不合理 ,
我特別認為這段話會誤導很多人 , 這也就是為什麼 , UML 在台灣會呈現兩個極端 ,
(a)會用UML收集需求 , 進行分析設計 , 進而根據UML規劃去開發系統 的人 , 會認為UML是好東西
(b)不會用UML的人 , 只會認為這個對於他的軟體開發一點幫助都沒有 , 只是為了應付業主的要求為了文件而文件 , 只會讓自己開發系統的速度變得更慢 , 甚至乾脆就是等軟體開發完 , 再用反向工程去把程式碼轉為 UML 圖形....
我一直強調一點 , 完全沒有OOAD程式開發經驗的人 , 沒有資格去當SA , SD ...
因為軟體開發中 , 上游的產出是下游的輸入 ,
上游如果完全不了解下游的作業 , 或是下游的需要 , 那麼規格一定是亂開....
EX1:
我曾經碰到過廠商針對我們的需求 , 開出了這麼一個系統規格要求:
"系統需要把目前的報表紀錄匯出成為 EXCEL檔(.xls / or .csv ) , 要能使用 EXCEL 開啟"
實際上廠商也寫出來了 , 但是這樣的一個系統規格要求是由問題的 ,
因為他們發現EXCEL打不開檔案 , 為什麼 ,
因為 EXCEL的一個工作表的列數限制是 1~65536 列 ,
而要匯出的報表紀錄筆數超過了 65536 列 ,....
當然如果你匯出的是 .csv 檔 , 你可以用 記事本 notepad 開啟 , 但是你用 Excel 應該是打不開....
同理如果你是用 POI 匯出 .xls , 應該也是會有問題 , 因為 一個工作表的列數上限就是 65536 列
這個限制很簡單也很單純 , 但是打敗一堆人 , 一堆人在哪裡猛查程式哪裡有問題 , 查了很久沒有查出來...
(這樣的規格 , 到現在 , 你去看網路上 , 仍然有不少人在開這樣的系統規格 , 而且完全沒有理會到未來可能會有甚麼問題發生) ,
這樣的系統規格需求不能說它不對 , 而是它有限制 , 如果你知道你的系統匯出筆數永遠小於 65536 筆 , 一定沒有問題....
(這也是我對某些人員很感冒的一點 , 他們都很會說話 , 讓老闆認為他們做的很好 , 但是常常喇賽的時候 , ...就要我去幫忙查問題 , 看原因 , 最後還要把賽幫他們擦乾淨(特別是那些莫名其妙的SA))
這也就是為什麼我一直認為沒有軟體開發經驗的人去作SA會有很多問題發生 ,...
但是偏偏還是有一堆人以為只要考過 UML 就可以去作 SA , SD , 等到他們開始去開規格時 , 完全不理會系統是屬於 Client / Server , 或是 Rich Client / Thin Client 或者是 Internet / Intranet 等等需求 ,
反正就是亂畫一通 , 以為自己畫了圖 , 系統就會自己長出來 , 但是當下游的 Programmer 來問的時候 , 自己又完全講不來要如何把圖形轉換為程式碼 ,...
就這樣子 , 就會發生 , 新鮮人 雖然採用了 UML 進行系統開發 , 但是完全上下游無法串連 , 結果導致系統開發失敗 , 最後就會發生像是 "UML 對系統開發一點幫助都沒有 , 還不如直接寫程式的看法..."
又或者完全沒有寫過 Web App的人 , 只會AS400 , 然後又要去開出 Web App的系統需求跟規格 , 完全不了解 Java / .NET 架構的人在開規格,...連Web程式的限制是甚麼都搞不清楚 , 常常就會開出莫名其妙的規格...
(發現說著說著又離題了之二 )
2008年12月30日 星期二
UML概念說明
UML概念說明
初學UML的人可能只是把UML當作是單純的繪圖表示法 ,
以為UML就是放上Use Case Diagram , Class Diagram , Sequence Diagram就是UML了 ,....
錯 , ....UML會跟你的方法論有關 , 會跟你的開發程序有關 ,
但是常常還是有人會誤以為UML只是繪圖表示法 ,
所以當你要求外包商 , 要針對他們正在開發的系統去繪製UML產出時 , 常常看到的是 上帝的歸上帝 ,
嗯 , 說錯 , 是UML文件歸UML文件 , 系統程式歸系統程式 , 兩者完全沒有關聯性 , 純粹只是為了文件而文件 , 這樣的狀況是最糟糕的 , 但是偏偏這種方式卻常常有不少人能夠接受 , 讓我完全無法理解 ,
基本概念一: UML就是系統的藍圖 , 系統的開發應該是根據規劃的藍圖去實做
這麼說好了 , UML , 你可以把它想像是房子的藍圖 , 房子的所有規劃 , 包含電線管路要怎麼拉 , 怎麼走 , 污水管理怎麼走 , 電梯要裝幾個 , 逃生梯開在房子的左邊或是房子的右邊 , 戶與戶之間的大門是向內開還是向外開(之前 , 有大陸的新聞說 , 有棟房子 , 住戶與住戶的大門是向外開的 , 所以 住戶A開了大門就會堵住住戶B的大門 ...) ,
那你可以想像說 , 明明是電梯大廈的藍圖 , 結果蓋出 18樓沒有電梯的房子嗎? ,
如果你能接受房子的實體應該是根據房子的藍圖蓋出來的 ,
那你怎會能接受 做出來的系統程式完全不根據藍圖(UML)去開發???
基本概念二: UML 的每個Diagram 是有關聯性 , 有可追蹤性的
舉例來說 , Use Case Diagram 談的是User Requirement的蒐集 ,
也就是說你在圖上畫的每個Use Case , 它都應該會被實現(Use Case Realization) , 而每個Use Case Realization 都會被轉化為 SA , (產生 Boundary , Control , Entity) , 再由此衍生出相關的SD , 而產生出 對應的Class , Class Diagram , Sequence Diagram , 等等 ,
這其中就衍生出可追蹤性(traceability) , 照道理來說 , 你可以正向由來源去追蹤每個項目的下一個產生是甚麼 ,
就舉 Use Case 來說 , 如果你的系統有畫了 10 個 Use Case , 那麼你可以看一下每個Use Case 是否有被實做 , 這個Use Case 實做的衍生物是哪些 , 一路追下去 , 保證你絕對不會短缺有任何該做的功能被遺漏沒有實現....(反向也是如此 , 你隨便挑出一個Class , 它一定是某個或某幾個use case實做必須的衍生物 , 絕對不會有那種無中生有的Class , 除非那是垃圾Class或是雞肋Class )
但是 , 一般人員很少有這樣的認知 , 多半是為了交文件而文件...
基本概念三: 是不是一定要畫UML才能開始作系統
這點我的答案是看狀況而定 , 如果你的系統很小 , 然後你也都明確的了解使用者的需求 , 然後要開發的功能與平台都十分明確 , 你也已經評估過程式碼不多 , 甚至你都不打算拆出系統階層 ,或是類別 ,
那根本就不需要UML的介入 ,
還有你是那種做到哪裡才想到哪裡的 , 也不需要 , 因為當你不作規劃 , 那UML對你也沒有幫助...
因為UML的開端就是 Use Case Diagram , 藉由 Use Case 去蒐集與釐清使用者的需求 , 系統的邊界 ,
有哪些系統外部的人或系統(這個就是Actor)會與我們的系統有互動 , 而那些Use Case 就是我們的系統會對外提供的服務(功能) , 也是我們的系統實做的清單 ,....
我看過廠商畫了 某些Actor , 我問廠商說 , XXX Actor , 它會跟我們的系統有互動嗎? , 如果 XXX Actor 是人 , 那他會登入我們的系統嗎? , 如果 XXX Actor 是另一個系統 , 那麼它跟我們的系統之間是如何溝通互動的....
廠商答不出來 , 因為他根本只是隨便亂畫 , 為了交文件而文件 ,
審閱這些為了交文件而文件 , 連寫文件的人自己都說不出個道理的文件 , 實在是浪費人生...
基本概念四:UML是否一定要畫的巨細靡遺?
我的答案是看你的開發模式是哪一種 , 或者說你是奉行或是採行哪一種方法論 ,
像如果你是採行MDA的開發模式 , 則UML Model 一定要畫的清清楚楚 ,
因為你的Model 就是要產生的系統程式碼的原始規格 ,
不過 MDA 一般也都會搭配類似程式碼產生器的工具 ,
舉例來說 , 像是 Eclipse 之下的 EMF , GEF , GMF 就是你先規劃好不同物件之間的關係 , 關聯 , 限制等等 . 就可透過工具轉換模型變成可執行的程式碼 , 所以有些類型繪圖工具 , 你只要詳細的設定好 Model , 幾乎就可以透過工具完成80%以上的工作 , 讓要寫的程式減少 ,
但是也有人堅持 , UML 只是單純的繪圖表示法 , 只要挑重點畫就可以 ,
這樣也不是不行 , 前提是: 你必須要了解你的系統的全貌 , 每個類別間的關係.. , ...之類的
另外要交接時 , 也可能會因為你畫的十分簡略 , 所以你會有很多東西不在UML圖形中 ,
如果你接手前人這樣的遺產時 , 當你要接手維護時 , 你想要知道某某Class有沒有XX功能 , 或是你想要換掉它 , 但是你又無法從前人留給你的UML中 , 看出端倪時 , 那你只好自求多福 , 或是拜託前人還在公司沒有離職可以讓你問....
或者是當幾年前你開發的系統 , 後續的系統維護者有問題需要詢問你的時候 , 最好是你的記憶好到可以記得 n 年你實做的系統明細....
突然發現又在離題 ...
以為UML就是放上Use Case Diagram , Class Diagram , Sequence Diagram就是UML了 ,....
錯 , ....UML會跟你的方法論有關 , 會跟你的開發程序有關 ,
但是常常還是有人會誤以為UML只是繪圖表示法 ,
所以當你要求外包商 , 要針對他們正在開發的系統去繪製UML產出時 , 常常看到的是 上帝的歸上帝 ,
嗯 , 說錯 , 是UML文件歸UML文件 , 系統程式歸系統程式 , 兩者完全沒有關聯性 , 純粹只是為了文件而文件 , 這樣的狀況是最糟糕的 , 但是偏偏這種方式卻常常有不少人能夠接受 , 讓我完全無法理解 ,
基本概念一: UML就是系統的藍圖 , 系統的開發應該是根據規劃的藍圖去實做
這麼說好了 , UML , 你可以把它想像是房子的藍圖 , 房子的所有規劃 , 包含電線管路要怎麼拉 , 怎麼走 , 污水管理怎麼走 , 電梯要裝幾個 , 逃生梯開在房子的左邊或是房子的右邊 , 戶與戶之間的大門是向內開還是向外開(之前 , 有大陸的新聞說 , 有棟房子 , 住戶與住戶的大門是向外開的 , 所以 住戶A開了大門就會堵住住戶B的大門 ...) ,
那你可以想像說 , 明明是電梯大廈的藍圖 , 結果蓋出 18樓沒有電梯的房子嗎? ,
如果你能接受房子的實體應該是根據房子的藍圖蓋出來的 ,
那你怎會能接受 做出來的系統程式完全不根據藍圖(UML)去開發???
基本概念二: UML 的每個Diagram 是有關聯性 , 有可追蹤性的
舉例來說 , Use Case Diagram 談的是User Requirement的蒐集 ,
也就是說你在圖上畫的每個Use Case , 它都應該會被實現(Use Case Realization) , 而每個Use Case Realization 都會被轉化為 SA , (產生 Boundary , Control , Entity) , 再由此衍生出相關的SD , 而產生出 對應的Class , Class Diagram , Sequence Diagram , 等等 ,
這其中就衍生出可追蹤性(traceability) , 照道理來說 , 你可以正向由來源去追蹤每個項目的下一個產生是甚麼 ,
就舉 Use Case 來說 , 如果你的系統有畫了 10 個 Use Case , 那麼你可以看一下每個Use Case 是否有被實做 , 這個Use Case 實做的衍生物是哪些 , 一路追下去 , 保證你絕對不會短缺有任何該做的功能被遺漏沒有實現....(反向也是如此 , 你隨便挑出一個Class , 它一定是某個或某幾個use case實做必須的衍生物 , 絕對不會有那種無中生有的Class , 除非那是垃圾Class或是雞肋Class )
但是 , 一般人員很少有這樣的認知 , 多半是為了交文件而文件...
基本概念三: 是不是一定要畫UML才能開始作系統
這點我的答案是看狀況而定 , 如果你的系統很小 , 然後你也都明確的了解使用者的需求 , 然後要開發的功能與平台都十分明確 , 你也已經評估過程式碼不多 , 甚至你都不打算拆出系統階層 ,或是類別 ,
那根本就不需要UML的介入 ,
還有你是那種做到哪裡才想到哪裡的 , 也不需要 , 因為當你不作規劃 , 那UML對你也沒有幫助...
因為UML的開端就是 Use Case Diagram , 藉由 Use Case 去蒐集與釐清使用者的需求 , 系統的邊界 ,
有哪些系統外部的人或系統(這個就是Actor)會與我們的系統有互動 , 而那些Use Case 就是我們的系統會對外提供的服務(功能) , 也是我們的系統實做的清單 ,....
我看過廠商畫了 某些Actor , 我問廠商說 , XXX Actor , 它會跟我們的系統有互動嗎? , 如果 XXX Actor 是人 , 那他會登入我們的系統嗎? , 如果 XXX Actor 是另一個系統 , 那麼它跟我們的系統之間是如何溝通互動的....
廠商答不出來 , 因為他根本只是隨便亂畫 , 為了交文件而文件 ,
審閱這些為了交文件而文件 , 連寫文件的人自己都說不出個道理的文件 , 實在是浪費人生...
基本概念四:UML是否一定要畫的巨細靡遺?
我的答案是看你的開發模式是哪一種 , 或者說你是奉行或是採行哪一種方法論 ,
像如果你是採行MDA的開發模式 , 則UML Model 一定要畫的清清楚楚 ,
因為你的Model 就是要產生的系統程式碼的原始規格 ,
不過 MDA 一般也都會搭配類似程式碼產生器的工具 ,
舉例來說 , 像是 Eclipse 之下的 EMF , GEF , GMF 就是你先規劃好不同物件之間的關係 , 關聯 , 限制等等 . 就可透過工具轉換模型變成可執行的程式碼 , 所以有些類型繪圖工具 , 你只要詳細的設定好 Model , 幾乎就可以透過工具完成80%以上的工作 , 讓要寫的程式減少 ,
但是也有人堅持 , UML 只是單純的繪圖表示法 , 只要挑重點畫就可以 ,
這樣也不是不行 , 前提是: 你必須要了解你的系統的全貌 , 每個類別間的關係.. , ...之類的
另外要交接時 , 也可能會因為你畫的十分簡略 , 所以你會有很多東西不在UML圖形中 ,
如果你接手前人這樣的遺產時 , 當你要接手維護時 , 你想要知道某某Class有沒有XX功能 , 或是你想要換掉它 , 但是你又無法從前人留給你的UML中 , 看出端倪時 , 那你只好自求多福 , 或是拜託前人還在公司沒有離職可以讓你問....
或者是當幾年前你開發的系統 , 後續的系統維護者有問題需要詢問你的時候 , 最好是你的記憶好到可以記得 n 年你實做的系統明細....
突然發現又在離題 ...
訂閱:
文章 (Atom)