第 1 章 軟體工程與系統開發概論
1-1 軟體與資訊系統
1-2 軟體工程的基礎
1-3 軟體開發生命週期
1-4 軟體生命週期模型
1-1
軟體與資訊系統
1-1-1 軟體
1-1-1 軟體 - 軟體與硬體
「軟體」( Software )是能夠控制電腦執行工作
的技術和方法,它就是使用程式語言
( Programming Language )建立的程式
( Programs ),一種在電腦上可執行的應用程式
或軟體系統。
「硬體」( Hardware )是我們可以實際看到的東
西,單純擁有電腦硬體並無法發揮電腦的功能,
只有在軟體和硬體都具備的情況下,電腦才能替
我們工作,幫助我們解決問題。
1-1-1 軟體 - 軟體與硬體的差異
軟體和硬體特性上的差異,如下表所示:
軟體( Software ) 硬體( Hardware ) 邏輯元素 實體元素 使用工程化的方法進行開發 使用工廠生產線製造 沒有備用零件,不會損壞,但是功 能可能不再符合需求 有備用零件,因為用久了會損壞,可以替換零件 大部分是客製化的產品 大都是使用大量生產的零件所組裝 而成1-1-1 軟體 - 軟體的種類
對於電腦系統來說,在電腦上執行的軟體可以分
為兩大類,如下所示:
• 系統軟體( System Software ):負責連接電腦硬體與 應用程式,讓電腦可以正常工作的軟體,例如:作業 系統、系統最佳化工具和掃毒程式等。 • 應用程式( Applications ):一種處理特定工作的電腦 程式,例如:數學計算分析、文書處理、試算表和程 式語言整合開發工具等。1-1-1 軟體 - 軟體的組成元素
對於電腦來說,軟體是電腦上執行的一種程式,
但是對於軟體工程來說,完整軟體應該由三部分
所組成( Pressman
, 2001 ),如下所示:
• 電腦程式( Computer Programs ):使用各種程式語言 撰寫程式碼所編譯成的執行檔,這是一種儲存在媒體 上的二進位資料。 • 文件( Documents ):與電腦程式相關的文件,例如 :需求文件、模型和使用手冊等。• 資料與資料結構( Data & Data Structures ):電腦程式 執行時所管理的資料結構。
1-1-2 資訊系統 - 說明
「系統」( System )是一組可以達成特定目的,有組織
、互動和相關元素的集合。「資訊系統」( Information System )是一種軟體,不過,它並不是一種簡單的應用程 式,而是一種大型軟體系統( Large Software System ), 包含多種相關的子系統,在硬體架構上,更可能是多層企 業系統架構,或 Web 基礎的網路應用程式,如下圖所示 :
1-1-2 資訊系統 - 範例
網路銀行的資訊系統,可以讓客戶直接透過網路銀行執行 帳戶管理。基本上,資訊系統包含的元件有:員工(人) 、資料或資訊、程序、軟體、硬體和通訊( Benson &
1-2 軟體工程的基礎
1-2-1 軟體工程
1-2-1 軟體工程 - 說明
軟體工程( Software Engineering )主要是在研究如何使用 系統化、組織化和量化方法來進行軟體系統的開發,也就 是嘗試使用一些經過驗證且可行的方法,在可接受的時間 和預算內開發出高品質的軟體系統。 簡單的說,軟體工程是一門學科,可以整合方法、工具和 流程來將真實世界的需求轉換成軟體世界的軟體,如下圖 所示:1-2-1 軟體工程 - 方法、工具和流程
方法( Methods ):一種建立軟體的方法,即第
1-3 節軟體開發生命週期的各種活動:需求、分析
、設計、實作、測試和部署等。
工具( Tools ):自動或半自動支援方法的工具,
包含語法檢查、文件出版、專案管理和系統分析
設計工具等,即所謂的 CASE 工具(
Computer-Aided Software Engineering Tools )。
流程( Procedures ):定義各活動執行順序的流
程來建立軟體,並且提供軟體品質的管控與變更
的協調。
1-2-1 軟體工程 - 三大階段
定義階段( Definition Phase ): 著重在軟體需求是什麼 ( What ),即軟體提供哪些功能、處理哪些資訊、建立 哪種使用介面、擁有哪些限制條件和驗證標準等。 開發階段( Development Phase ): 著重於如何達成軟體 需求( How ),即決定使用的資料結構、軟體系統架構 、實作程序、撰寫程式碼和執行測試等。 維護階段( Maintenance Phase ):也稱為支援階段( Support Phase ),著重在軟體的變更( Change ),即 除錯、升級、增加功能和提昇效能等。
1-2-1 軟體工程 - 相關術語
術語 說明 專案( Project ) 專案包含軟體開發相關的所有活動( Activities ),簡 單的說,就是走完整個軟體開發生命週期來完成軟體 系統的開發 活動( Activity ) 一組作業( Tasks )集合來達成特別的目的,例如: 需求、分析、設計和實作等 參與者( Participant ) 參與專案的人員,包含客戶( Client )、開發者 ( Developer )、專案管理者( Project Manager )和終端使用者( End User ,即使用者)等 里程碑( Milestone ) 重要的專案事件 主要里程碑( Major Milestone ) 指重要商業決策事件的時間點,例如:預算或預定時 程等 階段( Phase ) 大部分軟體開發模型的階段就是活動,不過, Rational 統一流程是指開發過程的 2 個主要里程碑之間,詳見 第 1-4-5 節的說明 作業( Task ) 活動的組成元素,這是可管理的最小工作單位 工作產品( Work Product ) 在軟體開發過程建立的產品,包含文件或部分軟體的 半成品,也稱為產出物( Artifact )
1-2-2 軟體開發的完整流程
一般來說,當公司或
行號需要軟體來幫助
進行商業活動,或解
決特定問題時,就可
以開始進行軟體開發
的流程,完整的軟體
開發流程如右圖所示
:
1-3 軟體開發生命週期 - 說明
「軟體開發生命週期」( Software Development
Life Cycle
, SDLC )包含軟體開發過程的活動和建
立的工作產品( Work Products ),主要分成兩大
類,如下所示:
• 以活動為中心( Activity-Centered ):專注於整個軟體 開發過程的活動( Activities )。 • 以實體為中心( Entity-Centered ):專注於整個軟體開 發過程中,在上述活動建立的工作產品( Work Products )。1-3 軟體開發生命週期 - 基本活動
雖然目前有相當多種軟體開發生命週期,不過各
種軟體開發生命週期擁有的基本活動,或稱為階
段( Phases )有:
• 需求 • 分析 • 設計 • 實作 • 測試 • 部署1-3 軟體開發生命週期 - 需求
需求( Requirement )是程式開發者與客戶和使
用者共同定義的系統需求,可以擷取出系統的功
能性和非功能性需求,其簡單說明如下所示:
• 功能性需求( Functional Requirements ):描述系統一 定需要提供的功能,也就是定義系統輸入和輸出行為 的規格。例如:選課系統提供註冊和選課功能。 • 非功能性需求( Nonfunctional Requirements ):描述 系統特性或一些限制條件。例如:選課系統限制學生 只能選 15 門課。1-3 軟體開發生命週期 - 分析
在定義出系統需求後,就可以針對需求進行分析
( Analysis ),以便將系統需求抽象化到應用系
統之中。簡單的說,就是從系統需求找出解決方
案。目前仍然是以高階角度來看問題,並不涉及
應用程式的軟硬體架構,和使用哪一種程式語言
來實作。
1-3 軟體開發生命週期 - 設計
在取得系統需求和完成分析( Analysis )後,設計
( Design )是建立完整的解決方案,詳細描述如何
建立整個軟體系統來滿足定義的系統需求。主要可
以分成兩部分,如下所示:
• 系統設計( System Design ):決定系統的軟硬體架構, 使用的作業系統,並且將系統分割成子系統,評估是否 使用資料庫系統來儲存永久性資料( Persistent Data )等 。 • 物件設計( Object Design ):將分析建立的分析模型 ( Analysis Model )或概念模型( Conceptual Model )轉 換成設計模型( Design Model ),也就是找出完整的物 件屬性、方法和更詳細的類別關係( Relationships )。1-3 軟體開發生命週期 - 實作
實作( Implementation )就是撰寫程式碼
( Coding ),將建立的設計模型( Design Model
)使用指定程式語言來撰寫出原始程式碼,例如
: C++ 、 C# 、 Viaual Basic 和 Java 等語言,即所
謂的實作模型( Implementation Model )。
1-3 軟體開發生命週期 - 測試
測試( Testing )如同工廠生產線的品質管制,其
目的是確認已經成功建立一套可用的軟體程式。
其主要工作有兩項,如下所示:
• 證實( Verification ):檢查實作建立的程式是否符合 定義的需求。 • 驗證( Validation ):測試是否真正解決客戶問題和滿 足客戶需求。1-3 軟體開發生命週期 - 部署
部署( Deployment )是在軟體完成測試後,將最
終釋出版本的軟體交至客戶的使用者,包含軟體
安裝、教育訓練和使用手冊等。
1-4 軟體生命週期模型
1-4-1 瀑布式模型
1-4-2 反覆式與漸進式模型
1-4-3 雛型模型
1-4-4 螺旋模型
1-4-5 Rational 統一流程
1-4-6 模型驅動架構
1-4 軟體生命週期模型
「軟體生命週期模型」( Software Lifecycle
Models )簡稱生命週期模型,或稱為系統開發流
程模型( System Development Process Models ),
可以用來指導我們如何進行分析、設計、開發和
維護資訊系統。
1-4-1 瀑布式模型 - 簡介
瀑布式模型( Waterfall Model )源於早期結構化
系統開發( Structured System Development ),屬
於一種傳統的生命週期模型,它是 1970 年代最常
用的生命週期模型,並且成功使用 COBOL 語言建
立多個大型專案。
瀑布式模型對於程式開發者來說,這是一種相當
直覺的軟體開發過程,它就是循序執行一序列的
開發與管理過程( Processes ),每一個過程就是
第 1-3 節的活動,開發過程需要等到前一個活動
完成後,才允許進入下一個活動。
1-4-2 反覆式與漸進式模型 - 簡介
隨著物件導向技術的成熟,再加上物件導向分析
與設計的普及,瀑布式開發過程因為無法快速建
立產品且缺乏彈性的問題,已經逐漸被反覆式與
漸進式模型( Iterative and Incremental Model )所
取代。
反覆式與漸進式模型首先針對幾個主要需求來進
行開發,以便快速建立初期版本的產品,然後將
產品交給客戶試用,程式開發者針對試用結果的
回應來修正系統,以便儘早發現可能的錯誤。
1-4-3 雛型模型 - 簡介
雛型模型( Prototyping Model )主要是針對哪些在專案初 期無法了解完整需求的情況,因為使用者只知道系統部分 功能的大概,而無法詳細描述系統完整的特點和功能。此 時,我們可以使用雛型模型來進行系統開發,而不用一開 始就了解使用者的完整需求。 雛型模型在作法上是先建立一個簡單的初期版本,即雛型 ,然後提交給客戶進行評估,這部分也屬於雛型模型流程 的一部分,等到客戶回應後,再依據回應的需求開發新系 統,通常雛型的程式碼會捨棄,然後依據客戶確認的需求 來開發全新的系統。1-4-4 螺旋模型 - 簡介
螺旋模型( Spiral Model )是整合瀑布式和雛型模
型的優點,並且導入風險分析( Risk Assessment
)的生命週期模型,風險分析是在開發流程新增
步驟來評估每一個版本的雛型,以決定是否繼續
開發,如果客戶覺的風險太高,整個專案可能會
停止。
螺旋模型的整個開發流程是使用螺旋方式來進行
每一次的循環,共分為 4 個象限:計劃
( Planning )、風險分析( Risk Assessment )、
工程( Engineering )和客戶評估( Customer
1-4-5 Rational 統一流程 - 說明
IBM 公司的 Rational 統一流程( Rational Unified
Process , RUP )不僅僅是一個生命週期模型,還是一個支援
開發者的完整開發環境,稱為 RUP 平台( RUP Platform ), 可以使用 IBM 公司的 CASE 工具來進行 Rational 統一流程的物
件導向系統開發,即 Rational Rose 或 Software Architect 。
物件導向方法論
Rational 統一流程是 Ivar Jacobson 、 Grady Booch 和 James
Rumbaugh 融合他們的 OOSE 、 Booch 和 OMT 物件導向方法
論後,在 Rational 公司提出的物件導向方法論,可以使用物 件導向技術來開發軟體或資訊系統。 方法論( Methodology )是指能夠解決各種問題的方法集合 。方法( Methods )則是定義一種可重複使用的技術來解決 指定的問題,這是一個能夠複製的流程,以便取得解決指定 問題的可靠結果,如下圖所示:
1-4-5 Rational 統一流程 - 物件導向方法論
Rational 統一流程是 Ivar Jacobson 、 Grady Booch 和 James
Rumbaugh 融合他們的 OOSE 、 Booch 和 OMT 物件導向方 法論後,在 Rational 公司提出的物件導向方法論,可以使 用物件導向技術來開發軟體或資訊系統。 方法論( Methodology )是指能夠解決各種問題的方法集 合。方法( Methods )則是定義一種可重複使用的技術來 解決指定的問題,這是一個能夠複製的流程,以便取得解 決指定問題的可靠結果,如下圖所示:
1-4-5 Rational 統一流程 - 主要特點
使用案例驅動( Use-Case Driven ): Rational 統一流程是
一種使用案例驅動的軟體程式開發過程,使用案例不只可 以使用在需求階段,它還主導整個開發過程。在方法論的 每一個反覆過程都是由選擇的使用案例來啟動,程式開發 者從使用案例出發進行物件導向分析與設計;測試者以使 用案例來測試實作的系統是否符合使用案例的需求。 架構中心( Architecture-Centric ):因為軟體架構會影響 系統重要的靜態和動態觀點,所以, Rational 統一流程是 以架構為中心來進行軟體系統開發。在選擇的軟體架構下 建立多種使用案例來描述系統功能,不過只有 5% 到 10% 的主要使用案例會用來建構系統的核心功能,呈現出子系 統、建立類別和元件。
反覆式與漸進式( Iterative and Incremental ): Rational
1-4-5 Rational 統一流程 - 工作流程
Rational 統一流程共有 9 個核心工作流程( Core Workflows
),分為 6 個核心處理工作流程( Core Process Workflows )和 3 個核心支援工作流程( Core Supporting Workflows ),如下圖所示:
1-4-5 Rational 統一流程 - 四個階段
Rational 統一流程是一種反覆式與漸進式的生命週期模型 ,提供一套完整的軟體開發工作流程,包括商業塑模、需 求、分析、設計、實作、測試和部署等。基本 上, Rational 統一流程適用在大型資訊系統的開發,其開 發過程分成四個階段,如下圖所示:1-4-5 Rational 統一流程 - 反覆過程
Rational 統一流程的四個階段各自擁有多個反覆過程,每
個反覆過程包含商業塑模、需求、分析、設計、實作、測 試和部署等工作流程,如下圖所示:
1-4-5 Rational 統一流程 - 四個階段的說明
初始階段( Inception Phase ):在此階段訂出專案的範圍 與目標,列出可能的軟體架構,識別出可能的風險和決定 如何處理它。 強化階段( Elaboration Phase ):在此階段的目標是建立 足夠的能力,在開發小組面對財務、時程和其他限制條件 下建立新系統,其主要工作是以使用案例來執行需求擷取 和定義系統架構。 建構階段( Construction Phase ):使用反覆式和漸進式 模型來建立軟體系統,可以在客戶測試環境成功的執行此 系統。 轉換階段( Transition Phase ):將軟體系統安裝與上線使 用,釋出 Beta 測試版本取得使用者回應,以便依據使用 者的回應來更新系統,完成此階段的主要里程碑就是釋出 正式版本。1-4-6 模型驅動架構 - 說明
模型驅動架構( Model Driven Architectiure , MDA )是由
OMG ( Object Management Group )組織開發的生命週期 框架( Lifecycle Framework ),這是使用模型驅動方式 ( Model Driven Approach )來進行軟體系統的開發。
模型( Models )是使用文字或圖形來描述系統規格和其
環境,模型驅動就是在生命週期的分析、設計、實作、測 試和部署流程,專注於不同層次模型的建立。
MDA 是將統一塑模語言( Unified Modeling Language )視
為一種可執行規格( Executable Specifications ),可以將 我們使用 UML 建立的模型直接轉換成不同平台的程式碼 。