Sunday, December 21, 2008
老闆只要軟體上線前要有另一位QA人員QQQ~~
Tuesday, November 11, 2008
一個系統可以沒有Owner嗎?
Friday, October 31, 2008
軟體專案準時達交的風險控制
Saturday, April 19, 2008
SDLC : 軟體開發生命週期

1. 瀑布式
發展階段一段一段往下推, 一定要一個階段作完才能往下做, 因此要準備的文件相當多, 不適於小型專案開發.
2. 漸進式每個階段的產出都是產品, 所以每個階段產出都非常明顯, 但完成的產品會一直因為上一階段的產出而有所變動. 可以減少產品需求更動的影響, 開發成果較易顯現.
3. V型
每個階段都有對等的關係, 從當初的設計, 開發, 架構…等, 都會對應到一個方法來驗證. 強調品管是最有助益的方式, 確保所開發的產品符合設計規格.
4. 原型快速開發
但每個階段都有強烈的回饋, 需求上的溝通確認較容易.
5. 螺旋型
將瀑布模型的最終結果導回源頭, 成為一個往復式的圓圈, 使整個流程具備回饋與檢驗機制, 改善傳統瀑布式的需求更動影響缺點, 結合風險管理與原型快速發展的觀念.
6. Extreme Program (XP)
從人的本質考慮如何讓程式設計師, 可以提高品質的軟體 . 主要的精神是『在客戶有系統需求時, 給予及時滿意的可執行程式』.
4 個核心價值觀, 5項最優先的原理及 12 項的基本實務作法.
4個核心價值觀 : 溝通, 簡單, 回饋, 勇氣.
5項最優先的原理
1.提供迅速的回饋
2.簡化,不為未來的可延展性而使程式架構變複雜
3.漸進式改變
4.擁抱改變
5.做有品質的工作
12 項的基本實務作法
1.規劃
2.小量發行
3.簡化設計
4.測試
5.持續性整合
6.程式碼重構
7.雙人程式設計
8.程式碼共享
9.每週40 工時
10.客戶駐點
11.客戶與程式人員使用相同術語
12.遵行程式碼慣例
7. Unified Process(RUP)
由 IBM 提出, 具三大特點, 四個階段和九個核心流程.
主要精神為:1. 專案進行採用 Iterative 程序分階段漸進地完成專案功能;2. 廣泛使用 Visual Modeling 於商業需求分析、系統分析與系統設計;3. 強調架構設計;4. 對每項工作所需要的技術、工具、做法、範本、檢查項目均有詳細的定義,架構完備且具有可調整的彈性。
三大特點
1. 軟體開發是一個疊代(Iteration)過程.
2. 軟體開發是由使用案例(Use Case)驅動.
3. 軟體開發是以構架設計(Architectural Design)為中心.
四個階段
1. 起始階段(Initial phase):進行可行性研究, 定義專案大小及涵蓋範圍, 評估專案所需的能力, 時程與經費, 及資訊系統預期達到之效益, 了解商業模型及需求.
2. 精細規劃階段(Elaboration phase):擬定專案計畫, 系統特性與架構, 確認商業模型及需求, 進行系統分析與設計.
3. 建構階段(Construction phase):建構產品並進行單元, 整合測試.
4. 移轉階段(Transition phase):將產品分批交付給客戶驗收測試, 並進行使用者訓練.
九個核心流程
1.商業建模
2.需求
3.分析和設計
4.實現
5.測試
6.部署
7.配置和變更管理
8.項目管理
9.環境
8. Agile Process
特色有
1. 強調客戶與開發人員形成密切合作的團隊, 因為客戶無法於初期定義完整的規格.
2. 採用 Iterative 與 Incremental 方式分階段進行, 密集 review 是否符合需求.
3. 強調團隊合作, 賦予高度的責任, 團隊有自主權得以因應變化做調整.
4. 流程可以簡單, 但規劃與執行必須嚴謹.
Wednesday, April 16, 2008
UML 有我需要的嗎
我的程式都很小約三,四千行以內, 每一隻獨立運作, 有時可能會有關聯, 互相影響.
我的問題情境是這樣的, URL 我要使用嗎?
想來想去, 覺得我有一個困擾, 是這樣的 -
程式雖小, 但缺少概觀性的說明, 無論是文字或是圖表. 所謂的概觀就是粗略的說明輸入/出, 處理邏輯這樣就好. 但要達到可以讓新人快速的了解, 也可以協助資深人員追查問題.
那 UML 有哪些可以協助我呢...
- 使用案例圖(Use-case diagram) - 這不是我的主題, 我不需要 : 一個使用案例可用來說明系統所提供的一項功能, 使用案例圖主要的目的在幫助開發團隊設想系統功能的需求, 其中包含了參與者(actor, 也就是跟系統互動的人)與基本處理程序的關係, 還有不同使用案例之間的關係.
- 類別圖(Class diagram) - 看起來也不需要 : 類別圖描述不同的個體(人, 事物和資料)相互的關係, 換句話說它表示了系統的靜態結構.
- 循序圖(Sequence diagram) - 沒有這麼複雜吧 : 循序圖描述特定使用案例或是特定使用案例的一部份詳細的流程, 它們大多能讓人望圖生義, 並可以依照順序描述不同物件之間的呼叫關係, 也能夠詳細地描述給不同物件的各種呼叫.
- 狀態圖(Statechart diagram) - 我們的邏輯處理中好少 State 觀念 : 狀態圖為一個類別模擬了所有可能的狀態, 還有該類別要如何從一個狀態轉換到另一個狀態.
- 活動圖(Activity diagram) - 有時可能只有一個 Class 呢, 那這要嗎? : 活動圖用來描述在進行一項活動時,兩個或是多個類別 件之間程序的控制流程.
- 元件圖(Component diagram) - 哎呀到底有沒有我要的 : 元件圖描述系統的實體狀況, 它的目的在於描述該系統中的軟體跟其他軟體元件的依存關係.
- 部署圖(Deployment diagram) - 談的有點遠了, 不是我要解決的主題 : 部署圖描述一個系統要如何部署到實際的硬體環境上, 它的目的是要表示系統裡面不同元件實際上所要運作的地點, 還有這些元件要如何互相溝通.
結束了嗎?
Friday, April 04, 2008
迴歸測試(Regression Test)
迴歸測試的目的在於測試之前(上一個版本)已經測試過的系統功能是否在系統變更之後, 仍然能夠保有運作的正常.
簡單的說就是常見的A改好, 卻又另外出現了B的問題, 這種問題是寫程式的人都遇到的問題, 卻是主管最不願意看見的問題.
近來單元測試(unit test)的觀念已廣為接受, 如果單元測試的案例建立的足夠完整, 那麼進行迴歸測試的成本也就可以省起來, 這也是我認為 unit test 最大的優點, 這些案例就好比是一劑強心針濟一般, 可以讓我安心的上新版的程式.
Thursday, April 03, 2008
如何確保軟體品質
本人使用VS Studio + NUnit 已經有一年多的時間了, NUnit 其實是一個很簡單的工具.
重點還是在測試計畫這件事上到底做了怎樣才是? . 而不是有做Unit 就表示有做到軟體品質...
最近一直有一個想法, 可以不要做測試可以確保軟體品質? 如果有這樣實在太好了, 因為測試這件事真的很辛苦.
先來想想目的好了 : 簡單的一句話 : 確保軟體品質.
品質這件事所含的事太多了, 找 Google 問去, 不多說.
換個方式想, 先列出違反品質的事情, 行為, 如果這些事情我都可以避免, 那我是不是可以不要做測試了? 簡而言之 : 我有一個簡單的方式達到確保軟體品質. 哈哈~~ 這就是我最近一直想的.
或者說為達確保軟體品質, 創造一個制度, 有一定的制式步驟, 並且有防範的措施, 稽核, 但就是簡單.
...
想想目前的工作型態.
1. 維護的工作居多, 而且目前程式正確的在跑, 在被使用, 所以假設沒有Bug.
2. 既然沒有 Bug, 那我只是加一個小功能, 我夠 Quality, Careful, 我寫了程式就是一種保障.
居於以上兩項前提, 我需要做 Unit Test 嗎?
這樣的想法很像有點偏見, 再想想 Unit Test 有怎樣的好處好了.
1. 杜絕再犯.
2. 有Unit Test 就表示有一定的品質, 具有被認可性, 說服信.
3. 可以重複被使用.
4. 對於新手可以快速的驗證.
這些好處, 對我而言是好處嗎? 有其它方式可以彌補嗎?
1. 杜絕再犯. -> Review, 改善機制.
2. 有Unit Test 就表示有一定的品質, 具有被認可性, 說服信. -> 有時人就表示了, 好比信譽.
3. 可以重複被使用. -> 我需要嗎?
4. 對於新手可以快速的驗證. ->
Monday, March 13, 2006
人月神話 之 人月 (man-month)
記得大約四年前的一個專案,那個專案只有兩個人,一位是專案負責人兼系統分析師 Tim ,另一位是系統分析師兼程式撰寫也就是本人。
專案進行兩三個月後,專案負責人就把整個專案交給我一個人負責了,也就是說本人負責整個專案的系統分析及程式撰寫。專案接近尾聲的一個月左右,我估計不管我怎樣加班,怎樣順利的進行,我都無法在期限內完成。於是我向我的專案負責人提出這個問題,並且向他要取一個人力 Wendy 幫我寫報表,在我們協調後的結果,我只要 Wendy 協助撰寫報表的 SQL Code 的工作,以我對 Wendy 的能力認知,我相信這一個專案應該可以在時間內準時交件。
Day1 :
我利用大約 2 小時的時間向 Wendy 解說他的工作內容,並且向他解釋了資料庫中的部份 E-R ,我想這樣 Wendy 就可以開始工作了。
Day3 :
Wendy 完成了大約 5 隻 SQL Code,這裡面的幾隻 SQL Code 尚有部份欄位沒有擷取的,原因是因為 Wendy 還不是很清楚,這些欄位要從哪一個 Table 取得。當我看指細的檢查這 5 隻 SQL Code 後,我把沒有擷取的欄位補上。在這個過程中,我發現有些資料欄位的擷取連來源的 Tables 都錯誤了。當天我立刻決定把計畫取消,把這個工作拿回來自己做。
回想這整個過程。當我和 Tim 討論我的人力需求問題時,Tim 就告訴我,要安插一個人力進到專案中,會有一定的困難,沒有想像中的容意,要我先有心理準備。當事情結束後,我也終於體會到這其中的困難。
當專案已經延誤時,增加人力的投入,還必須付出教育順練,溝通,新手學習等的成本。是必需要詳細評估與計畫,這樣的投入才會有成果。不然就會如同我上面的經歷依樣徹底宣告失敗。
案例二
今天和客戶開完會議,客戶和我們再次確認下週行程。
1. 完成 N 個需求的功能.
2. 完成 1 張報表, 以 Crystal Report 製作.
問題來了,這個專案中,我們沒有人使用過 Crystal Report,並且所有的人力估計投入第 1 項工作已經吃力了。唯一的方法就是請求一位人力 judy 支援 ,專門完成工作項目 2 。Judy 具有開發 Crystal Report 的經驗,並且可以獨立與客戶溝通,是我們的不二人選。因為專案的某些特性,我決定使用客戶的資源,請客戶的 DBA 及 SA 向 Judy 解說資料擷取的細節及需求規格,使得這一件工作不會用到已經投入工作項目 1 的任何資源。一星期後順利完成我們的目標。