2008年8月29日 星期五

專案需要管理?

這兩天把自己腦中的思維做了整理, 試圖回答以下兩個簡單的問題,
  1. 專案的本質是?
  2. 專案要管理啥?
各位先花 10 分鐘探索心中的答案, 不要急著看我的報告,
希望這段旅程能帶來更多新(心)迴響...

2008年8月11日 星期一

有趣:軟體 Bug 的起源

軟體運行中因為程式本身有錯誤而造成的功能異常、當機...等現象統稱為臭蟲 (Bug), 這名詞是怎樣來的?

Software Bug 一詞起源於1945年後期,當時還是真空管電腦的時代,9月9日當天哈佛大學實驗室內的計算機出現了問題,Hopper 女士仔細地檢查過 Mark II 計算機後,發現繼電器上有一隻蛾貼附在上頭,後來他們將這隻蛾拿掉後,貼在工作日誌上頭,此後,我們就開始指稱電腦系統異常為 Bug 了。

Bugs



以下是原文的片段
In 1946, when Hopper was released from active duty, she joined the Harvard Faculty at the Computation Laboratory where she continued her work on the Mark II and Mark III. Operators traced an error in the Mark II to a moth trapped in a relay, coining the term bug. This bug was carefully removed and taped to the log book September 9th 1945 [sic]. Stemming from the first bug, today we call errors or glitches [sic] in a program a bug


^_^ 真有趣

相關文章:品質與度量

2008年8月8日 星期五

Google App Engine 練習<1>

Google App Engine 練習

GAE 基本概念

鑑於WEB應用程式從概念、分析、開發到建置過程有太多的問題需要克服,Google 提供了更簡單的方式,讓概念成真的過程變得更加迅速&容易,投資者更可減少概念驗證過程中的各項投資,包括:軟體、硬體、時間與成本…等。

為什麼筆者會這樣說呢?沒有Google App Engine (簡稱GAE)之前,我們要發展 WEB 應用,需要申請頻寬、架設伺服器、安裝各種系統軟體、每月支付主機代管費用給 ISP 業者…,然而,以上這些費用都會在我們無法確定概念是否真能成功之前就需要投入的,更不用說每月要付出的其他成本了。

Google 提供的GAE 其實是一種開放的環境,讓許許多多的網路應用可以在這樣的平台上運作,而且幾乎免費,只有當使用頻率高到某種程度的時候才要收費,也就是說,從概念到成功之前,幾乎不會發生各種不必要的花費,看到這裡,你是否躍躍欲試了呢! 讓我們一起學習吧!

講在前面

  • GAE 目前支援的程式語言是 Python 2.5,如果你想用其他程式語言,可能要再等等

  • GAE 目前沒有支援 SSL,如果你的 WEB 須要用到 SSL,建議採用 proxy

  • GAE 採用 schema less 的分散式資料儲存模式,跟關聯式資料庫的觀念截然不同,要有心理準備


除了以上三點之外,GAE 真的很好用 ^_^

準備動作

  1. 下載並安裝Python 2.5開發工具
    網址:http://python.org/download/

  2. Google 申請 GAE 服務
    網址:http://code.google.com/appengine/

  3. 下載並安裝 GAE SDK 程式
    網址:http://code.google.com/appengine/downloads.html

  4. IDE或者文字編輯工具開發WEB 應用程式
    參閱:http://code.google.com/appengine/docs/gettingstarted/

Eclipse 安裝 Python 開發工具

PyDev Plugin

  1. 使用功能表中選擇 [Help]/[Software Updates]/[Find and Install]

  1. 選擇 Search for new features to install 後點選[Next]按鍵

  2. 點選 [New Remote Site] 建立PyDev 的下載點
    name : PyDev
    url : http://pydev.sourceforge.net/updates/

  1. 設定完成後,勾選PyDEV 並點選 [Finish] 按鍵

  2. 安裝完成後,重新啟動 Eclipse 即可

Pydev 開發 Python 程式

  1. 建立 Pydev 專案

    • 功能表中選擇 [File]/[New]/[Pydev Project]

    • 輸入專案名稱並點選 Python 2.5,然後點選 [Finish] 按鍵
      專案名稱:HelloWorld

  1. 設定 GAE SDK HelloWorld專案中

    • HelloWorld 專案中點選滑鼠右鍵,並選擇 [properties] 選項

    • 於屬性設定畫面中,選擇 [Pydev – PYTHONPATH]頁籤,並於External Source Folder當中指定GAE 安裝路徑

    • 點選 [OK] 按鍵完成設定

  1. 撰寫第一支 Python程式

    • 功能表中選擇 [File]/[New]/[Other]

    • 選擇 [Pydev]/[Pydev Model] 後點選 [NEXT] 按鍵

    • 選擇檔案存放路徑並輸入檔案名稱後,點選 [FINISH] 按鍵
      檔案名稱:helloworld

    • IDE 中撰寫程式,寫好程式後請存檔,開發者將會在Package Explore 專案畫面中看到剛剛存檔的Python程式。
      以下是 HelloworldPython 範例:

      print 'Content-Type: text/plain'

      print ''

      print 'Hello, world!'

    • Package Explore點選 helloworld 程式並點選滑鼠右鍵,選擇 [Run As]/[Python Run] 執行這支程式

    • 開發者可以在 Console 畫面中看到本程式的執行結果

    • 確認後,就可以把程式上傳並安裝到 GAE 平台了,


上傳Python 程式到 GAE

  1. 連線到 GAE 並完成 Sign In 動作
    網址:http://appengine.google.com/

  2. Sign In 後,請點選 [Create an Application] 申請本WEB應用程式的上傳空間

  1. 申請過程中請務必輸入 Application ID 並點選 [Check Availability] 按鍵確認沒有其他人申請過,請記住Application ID以便後續上傳&識別
    我申請的Application ID是:isample

  1. 申請完成後,請到Helloworld 專案中建立一份設定檔,檔名一般為:app.yaml 但開發者仍可自行決定檔名。
    檔案內容如下:

    application: isample

    version: 1

    runtime: python

    api_version: 1


    handlers:

    - url: /.*

    script: helloworld.py

    指定上傳的Application ID,剛剛申請的

    說明設定檔的版本

    說明採用的runtime, 目前僅有 python

    說明採用的 GAE SDK 版本



    說明 WEB 網站的進入點, 本例為根目錄

    指定 Python 程式檔名

  2. 上傳到 GAE 環境

    • 啟動命令提示畫面,並切換到HelloWorld 專案目錄,從該目錄底下,應該可以看到剛剛完成的程式(helloworld.py)跟設定檔(app.yaml)

    • 輸入並執行以下命令

      appcfg.py update .

      appcfg.py GAE 的上傳指令
      update
      是其中一個參數

      . 則是用來指出設定檔(app.yaml)的所在路徑

    • 請依照提示輸入你的 Google 帳號與密碼即可完成上傳

註:關於appcfg.py的用法,請參閱以下
網址:http://code.google.com/appengine/docs/appcfgpy.html

  1. 連線到 GAE 網站即可看到上傳完成的程式及其版本
    網址:http://appengine.google.com/

  1. 只要點選該版本連結即可執行我們開發好的 WEB 應用,恭喜你成功了 ^_^

衍生閱讀:
1. Python WiKi
2. Python 教學文件

2008年8月6日 星期三

反思:品質與度量?

關於品質的想法

  1. 測試要測哪些?對應的測試項目與規格?

  2. 測試人員與時間是否充分?

  3. 測試人員的素質?

    • 測試人員該怎樣發揮?(提問的藝術)

    • 問答過程能不能找到問題背後的原因?

    • 問答過程能否釐清可能的解決方案?

    • 問答過程都可以有效地追蹤與管理?

    • 我是一個知識工作者?反思:問題應該修正成『身為一位知識工作者,我應該多做些甚麼?


觀點:問對問題比較重要

  1. 該怎樣提問呢?

  2. 重要性如何決定?

  3. 練習提問的藝術

  4. 換個角度思考,例如:工作管理,工作涉及到的人員、任務與進度該怎樣管理比較恰當?是否有其他可能方案?



任務

人員

待處理

執行中

已解決

張三



李四



王五



典型的工作分配表



任務

人員

待處理

執行中

已解決

張三



李四



王五



換個角度思考之後的分配表


追問:兩個方案的優缺點分別為何?兩方案分別適用怎樣的情況?有無假設與前提?



問:IT 專案可以度量的項目為何?好處與缺點?

  1. 很多地方都會提到的基本度量如時間、成本、範疇、品質。

    • 直覺看到的是時間、投入、產出、瑕疵(defects) 等輸出,但真的只是這樣?還有沒有其他可能性?

    • 反思:以上這些量化資訊是在怎樣的假設或者前提之下建立的?

    • 反思:這些資訊的真正用途為何?只為了取得認證?

  2. 有的度量可以很多,通常都會包括非常多的衍生性數據,差異就是很有用的資訊,例如:投入與產出的差異、規劃與實際的差異、需求改變的次數…

    • 反思:為了量化所投入的成本是否值得?

    • 反思:真正適合公司/組織的核心指標為何?


觀點:如何評估真正的baseline?


自省:我是 IT 經理人?

身為資訊產業經理人,我應該把時間投入在哪些面向?

9 PAs

  1. 整合性專案管理

  2. 人力資源與團隊發展

  3. 有效溝通

  4. 風險追蹤與管理

  5. 品質確保

  6. 時程

  7. 範疇

  8. 成本

  9. 委外


以上 9 PAs是書本上教導的,也是很多人的智慧結晶,實務上,也常常發生類似的狀況需要應用以上知識去處理,但,主管們迫切擔心的事情,卻往往是另外一回事,


主管真正擔心的事有:

  1. 沒有業務、訂單、合約

  2. 營收不正常,現金流量管制失衡

  3. 員工無法於時限內完成交付的任務


捫心自問,我們究竟有沒有投入時間去思考這些問題的成因與解決方案?

問:業務開展困難的原因究竟為何?

  1. 時間、成本、品質或者專案範疇控制不當?

  2. 市場供給過剩?需求降低?市場供需失衡的因應之道?

    • 委外,我們是否有足夠的能力確保委外的成果?

    • 擴大需求,有看到潛在的市場?還是打算壓低售價?品質能同時兼顧?

    • 減少供給,退出紅海?

    • 少量多樣,怎樣做到?

  3. 市場售價過低?

    • 為何其他公司仍能承擔?

  4. 業務受限、觸角不夠深遠?

    • 公司希望業務做到甚麼程度?

    • 業務的疑問是,公司到底能做些甚麼?

    • 反思,我們是否有給公司清楚的資訊反饋?(客戶心聲)


問:降低售價提高品質的方法?

  1. 有效率的標準化作業

  2. 採取預防型的QA/QC測試優先

  3. 可重複使用的標準化元件設計,例:OSGi, SOA 的概念

  4. 提升員工素質

  5. 只做擅長的事,並且25 周更新擅長的領域知識

  6. 正視成本結構,清楚理解自己跟競爭廠商的差異


問:可以最常被重用的元件有哪些?特性為何?

  1. 底耦合度

  2. 高內聚力

  3. 品質可以掛保證,有品質防火牆

  4. Self Contained

  5. 具焦於特定 Features,例:SSO


問:因為沒有團隊配合就不能做事?

答:應該思考的面向是,還可以多做些什麼?

  • IT 知識共享

  • Domain Know How 共享

  • 知識延續之外,智慧是否能累積?


問:我到底擅長甚麼?

  1. 團隊培養,我真的有培養出高級團隊?怎樣才稱得上是高級團隊?

    • 人材人才,技術能力養成、溝通協調

    • 人才人財,解決方案提供、共好

  2. 能夠盡一己之力的地方

    • 專案管理與團隊合作

    • 品質追蹤與標準化製程

    • 有效率的元件規劃與系統架構


觀念:要做就要追求極致,而非完美