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 有我需要的嗎

先說明情節好了...其實就是人家說的ETL.
我的程式都很小約三,四千行以內, 每一隻獨立運作, 有時可能會有關聯, 互相影響.

我的問題情境是這樣的, URL 我要使用嗎?
想來想去, 覺得我有一個困擾, 是這樣的 -
程式雖小, 但缺少概觀性的說明, 無論是文字或是圖表. 所謂的概觀就是粗略的說明輸入/出, 處理邏輯這樣就好. 但要達到可以讓新人快速的了解, 也可以協助資深人員追查問題.

那 UML 有哪些可以協助我呢...
  1. 使用案例圖(Use-case diagram) - 這不是我的主題, 我不需要 : 一個使用案例可用來說明系統所提供的一項功能, 使用案例圖主要的目的在幫助開發團隊設想系統功能的需求, 其中包含了參與者(actor, 也就是跟系統互動的人)與基本處理程序的關係, 還有不同使用案例之間的關係.
  2. 類別圖(Class diagram) - 看起來也不需要 : 類別圖描述不同的個體(人, 事物和資料)相互的關係, 換句話說它表示了系統的靜態結構.
  3. 循序圖(Sequence diagram) - 沒有這麼複雜吧 : 循序圖描述特定使用案例或是特定使用案例的一部份詳細的流程, 它們大多能讓人望圖生義, 並可以依照順序描述不同物件之間的呼叫關係, 也能夠詳細地描述給不同物件的各種呼叫.
  4. 狀態圖(Statechart diagram) - 我們的邏輯處理中好少 State 觀念 : 狀態圖為一個類別模擬了所有可能的狀態, 還有該類別要如何從一個狀態轉換到另一個狀態.
  5. 活動圖(Activity diagram) - 有時可能只有一個 Class 呢, 那這要嗎? : 活動圖用來描述在進行一項活動時,兩個或是多個類別 件之間程序的控制流程.
  6. 元件圖(Component diagram) - 哎呀到底有沒有我要的 : 元件圖描述系統的實體狀況, 它的目的在於描述該系統中的軟體跟其他軟體元件的依存關係.
  7. 部署圖(Deployment diagram) - 談的有點遠了, 不是我要解決的主題 : 部署圖描述一個系統要如何部署到實際的硬體環境上, 它的目的是要表示系統裡面不同元件實際上所要運作的地點, 還有這些元件要如何互相溝通.

結束了嗎?

Sunday, April 13, 2008

VISTA-日本BRICs經濟研究團隊所提出

者裡的 VISTA可不是 MS 的新作業系統, 而是 Vietnam, Indonesia, South Africa, Turkey, Argentina - (越南,印尼,南非,土耳其,阿根廷)最具發展的五個國家, 也有人稱新新興市場, 這是日本 BRICs經濟研究團隊於 2006 年底所提出的研究報告.
報告指出 : 未來50年內, 也就是於2056年前, VISTA 的 GDP 將成長 28 倍來到, 268兆美元, 超越七大工業國.
不過2006年的 GDP 約 1 兆美元(約為金磚四國的1/4), 為何有這樣的結果, 其動力如下.
1. 具天然資源 - 諸如石油, 鐵, 黃金..等.
2. 外資引進.
3. 內需強勁 - 2008年這五國的人口約為 5 億, 其中印尼就佔了一半.

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. 對於新手可以快速的驗證. ->