You are on page 1of 58

主題: 軟體工程介紹

軟體工程
- 物件導向程式設計與 UML 系統分析實作
軟體
 狹義而言:用各種程式語言所寫成的程式
 廣義而言:指一切能夠控制電腦運作的方
法與技術
 您的看法呢?
 產業:軟體 v.s. 硬體(韌體)
 人物: Bill Gates v.s. 郭台銘
 盍各言爾志
軟體類型
 OS :軟硬體的介面 ( 環境 ) 、分配系統資

 Utility ( 公用程式 ) :管理電腦資源的程式
 Programming Language
 系統軟體: OS 、 Utility 、 PL
 應用軟體 (Application Software) : AP
範例:系統軟體
範例:應用軟體
程式語言
 人類用來指揮電腦的工具
 用來設計程式或應用軟體
 電子計算機能夠了解的語言
 具備一定的程式結構,所以稱為程式語言
 撰寫程式來產生軟體
 Job ? Just for Fun ?…?
程式語言的分類
 依照程式語言年代先後或發展特性:
 第一代 – 機器 語言 (Machine Language)
 第二代 – 組合 語言 (Assembly)
 第三代 – 高階 語言 (High Level Language)
 第四代 – 查詢 語言 (Query Language)
 第五代 – 自然 語言 (Natural Language)
第一代 – 機器 語言
 在電腦內部的訊息中,只有 0 和 1 兩種邏輯狀態
第二代 – 組合 語言
 機器語言使用不便
 從機器語言中找出規則
 以英文字、數字符號來重組組合語言
 助憶碼 (Mnemonics) :成為稍有意義的語

 組譯器 (Assembler ) : ADD R3,R1,R2
3312
第三代 – 高階 語言
 以人類的方便為主要目標
 具有嚴密的區塊結構、更抽象的資料封包
方式、結構化的語法結構、適當的資料形
態、程序與函數的結構相當完整。
 編譯程式 (Compiler) 或直譯程式
(Interpreter)
 Machine independent (Portable)
程序導向高階語言
 BASIC 語言 : 其用法簡單、易學,在教學上廣泛地被使用,版本有:
BASICA 、 GW-BASIC 、 Quick BASIC 。
 FORTRAN 語言 : 其主要功能是在解決工程及科學上的問題。在 PC 上以
Microsoft 公司的 MS-FORTRAN 較為普遍。
 COBOL 語言 : 主要用於商業資料的處理。常見的版本有 MS-COBOL 及 RM-
COBOL 等。
 PASCAL 語言 : 具有結構化程式的特性,資料結構方面有一段時間大都採用
此種語言。常見的版本有 Turbo PASCAL 及 Quick PASCAL 等。
 C 語言適用於撰寫系統上的程式,是一種系統發展必備的語言。常見的版本
有 Microsoft C 、 Turbo C 及 Quick C 等。
 LOGO 語言 : 是一種圖形導向簡單易學易用的教育用電腦語言,具結構化且
有助於人工智慧的研究。
 LISP 語言 : 是一種應用在人工智慧上的語言,用來設計專家系統 (Expert
system) ,具有推理及圖形辨識能力。
 PROLOG 語言 : 是一種以符號邏輯為基礎,且具有推理性的程式語言,在人
工智慧的領域很有貢獻。
 RPG 語言 :1964 年由 IBM 所開發,為一種報表編製的語言。
物件導向高階語言
 C++ 語言 : 將 C 語言加上了物件導向的觀念。在發展 C++ 之後,
C++ 以及物件導向的觀念就開始成為另一種流行。
 C++ 的變種 :
  Borland C++ 語言 :Borland 公司發佈著名的 Borland C++ 3.1
  Visual C++ 語言 :Visual C++ 是一套微軟公司發佈
 Visu al BASI C 語言 : 是一個圖形視窗的程式設計系統,提供了很多
工具讓使用者能夠輕易的設計出視窗、功能表、按鈕等在視窗中常
見的物件,並針對個別物件的相對事件來撰寫 BASIC 程式碼,以設
計此物件的行為程式。
 Dephi 語言 :Dephi 是 Borland 軟體公司開發的應用軟體發展程式,
具有:
a. 完全物件導向設計概念,可以自行定義、修改、重組其各部元件
,或甚至撰寫新元件來使用。
 Java 語言 :Java 是美國 Sun( 昇陽 ) 公司所開發的語言,兼具 C 語言
及 HTML 語言的特性,主要用來發展網際網路上的網站建立、管理
、網頁資料的製作等。
第四代 – 查詢 語言
 比高階語言更容易使用的語言,使用者只
需將步驟設計出來,不必費心思考程式碼
該怎麼寫?電腦要如何去執行?
 目標:在套裝軟體內選取工具、介面、資
料庫或控制項,即可完成程式的開發。
 Visual Studio.NET
第四、五代語言種類
 查詢語言 (Query Language) :查詢語言是資料庫管理系統的主要工
具,它提供用戶對資料庫進行查詢的功能。例如 : SQL(Structure
Query Language) 。
 報表產生器 (Report Generator) :是爲用戶提供的自動産生報表的
重要工具,它提供非過程化的描述手段讓用戶很方便地根據資料庫
中的資訊來生成報表。例如 :RPG-III 。
 圖形化語言 (Graphics Language) :圖形資訊較之一維的字串、二
維的表格資訊更爲直觀、鮮明。在軟體發展過程中所使用的資料流
程圖、結構圖、框圖等均是圖形。人們自然要設想,是否可以用圖
形的方式來進行軟體發展呢?例如 : 統計分析軟體 SAS , Systat
 應用程式產生器 (Application Generator) :讓用戶不必使用多個
軟體,而只用這樣一個綜合工具來實現多種功能。例如 :Power
Builder 。
 Parser 、 Information Retrieval (剖析器、資料檢索)
程式語言特性的演進
程式語言特性的演進 一
 機器導向語言 (Machine-Oriented Language)
 和機器相關的組合語言,尤其是和 CPU 息
息相關,要學某一種機器語言,就必須先
學該 CPU 的結構。
 可充分發揮 CPU 硬體之特性、功能,執行
時又快又省記憶體,但編寫程式仍然不容
易(比機器語言容易許多)。
程式語言特性的演進 二
 程序導向語言 (Procedure-Oriented Language)
 電腦會按程序語句的次序,由起始至結束
,順序執行電腦程序。
 透過程序語句,教導、指示或命令電腦如
何工作或解決問題。
 例如: BASIC 、 FORTRAN 、 COBOL…
程式語言特性的演進 三
 應用導向語言 (Application-Oriented
Language)
 一種具有助於解決一類或多類應用問題的
程式語言,應用導向語言也大都是程序導
向語言,可視為其中一個子集合。
 例如:
 為解決數值科學問題之 FORTRAN 語言
 為解決商業資料處理之通用商業導向語言之
COBOL 。
程式語言特性的演進 四
 查詢語言 (Query Language)
 SQL 是結構化查詢語言的簡稱,是對關連
式資料庫管理系統的標準查詢語言。
 利用 SQL ,可以用來定義資料庫結構、指
定資料庫表格與欄位的型態與長度、新增
資料、修改資料、刪除資料、查詢資料,
以及建立各種複雜的表格關聯。
程式語言特性的演進 五
 物件導向語言 (Object-Oriented Language)
 在物件導向語言中,程式被看作是相互協
作的物件集合,每個物件都是某個類別的
實例,所有的類別構成一個透過繼承關係
相聯繫的層次結構。
 物件導向的語言常常具有以下特徵:物件
建構的功能、訊息傳遞機制、類別和繼承
的機制。例如: C++ , Java 。
程式語言特性的演進 六
 自然語言 (Natural Language)
 使用者只須輸入自己的用字來告訴電腦做什麼,而不須
輸入正確的命令及資料名稱。
 使用者可以用多種方式來敘述同一件事情,例如: “給
我三月份的電腦銷售量” 和 “我要三月份電腦的銷售數
目” 。像這種敘述可能有拼字上的錯誤 ,缺少物件和動
詞 ,甚至出現了俚語。
 自然語言須將人們錯誤的文法、俚語以及敘述轉換成電
腦可接受的機器碼。
 尚在發展中。因為尚未成熟,所以市面上尚未看到類似
產品。
 勉強舉例:可想像搜尋引擎的搜尋機制,只輸入關鍵字
就可將你想要的資訊,搜尋出來送至您面前。
軟體開發流程的正規方式
軟體開發流程的正規方式
 需要某軟體解決特定問題
 決定軟體要自製或外包
 假如決定軟體外包
 找尋合適的外包廠商
 簽訂軟體委外開發合約
 監督外包廠商整個軟體開發進度
軟體開發流程的正規方式
 開始整個軟體系統的開發(同步進行)
 系統開發
 選一適當軟體工程方法論
 依據軟體工程方法論開發軟體
 管理文件和軟體
 選一適當方法論來管理系統相關文件和軟體, 例如 : 選
CMMI
 依據 CMMI 精神管理系統相關文件, 例如 : 需求文件,系統
分析文件,系統設計文件 .. 等
 專案管理
 選一適當經理和團隊 : 通常慎選一專案經理和適當的團隊,
分派適當任務。
 依據專案管理的範疇和步驟管理好整個專案。
軟體開發流程的正規方式
 完成交付軟體:不管是自製或外包,除非失敗放
棄開發,否則完成軟體後交付使用者 (User) 使用

 持續使用和維護:軟體持續使用,通常會有或多
或少和原始的需求不同,而必須維護和修改

 軟體退休:功成身退、自然淘汰…
軟體危機 ( Software Crisis )
 容易忽略:我絕不是那一個「萬一」?
 Y2K 警告開始出現在事件發生的 10 年前,
企業及工業領袖 2 年前才開始正視並投入
「預防」工作。經過全世界的努力,才平
安的度過此危機。
 但是也讓我們深刻體驗到設計軟體的不易
,稍一不慎(周全),極容易設計出有臭
蟲 (Bug) 的產品,很可能會造成一連串的
錯誤,而導致重大傷害與損失。
軟體危機( Software Crisis )
 定義:在軟體開發及維護的過程中所面臨
的嚴重問題,這些問題可能導致軟體產品
的壽命縮短、甚至夭折。
 調查統計研究,只有 5% 的軟體設計後可
以使用 (見下頁)
 專題製作的成果調查?
 再給多少時間?人力?資源?%可提升?
軟體開發後產品使用統計圖

直接使用
軟體危機常見的問題
 專案的時程估計錯誤
 開發好的系統臭蟲 (Bug) 很多
 維護時修改一個問題常會產生更多問題
 沒有系統分析與設計的文件
 軟體的生產力低
 程式版本混亂沒有控管
 其它:說說看!
 專題製作過程:您遇到了哪些問題?
失敗的案例:物件導向技術的 Web-Based 系

 OOA/OOD ( Object-Oriented Analysis/Design )觀
念不清處
 設計樣版 (Design Pattern) 的了解不易
 不懂物件導向語言的特性,增加系統除錯和維護
困難度
 開發維護所需要的技能增加,必須了解
UML 、 Java 、 VisualAge for Java 和 SanFrancisco
 物件導向資料庫和關連式資料庫的特性不同
 統採用 Web 3-tier 架構,增加了系統除錯及整
合測試的難度,除錯更為困難
軟體的 迷思
 依循軟體工程方法論、知道過程、技術…
 為何開發者在開發過程中會陷入混亂?
 原因:人常會自然產生許多的迷思,包括
技術上的、管理上的、來自使用者的…
 以專案管理人的角度思考,如何面對與處
理?
 當局者迷、旁觀者清。你會怎麼想?
 可否以專題製作的經驗回答下列的迷思?
軟體迷 思一
 軟體迷思 :
 使用者認為只要告訴程式設計師軟體上的概略
需求,開發程式應可快速完成。
 實際狀況 :
 需求必須要完整且詳實,才不會一再造成變更
程式 。
 開發軟體,還必須依據軟體開發程序,經過系
統分析和系統設計。
 您的情況?
軟體迷 思二
 軟體迷思 :
 增加程式設計人員可以趕上落後的進度
 跟比較會寫程式的同學同組,比較有保障?
 實際狀況 :
 軟體工業不像傳統工業可以由增加人手、生產
線來加快速度。
 比較會寫程式等於比較會開發軟體系統?
 您的情況?
軟體迷 思三
 軟體迷思 :
 一旦寫好程式並交給客戶,工作就算完成了
 程式寫出來了,專題就完工了?
 實際狀況 :
 軟體第一次交給客戶之後,必須要繼續維護和
除錯。根據統計有 75% 的花費是在維護軟體

 整合、測試、簡報、成果展、文件…?
 您的情況?
軟體迷 思四
 軟體迷思 :
 「系統分析」是不事生產的工作。
 懶得記錄下來?寫程式時再想一次?
 實際狀況 :
 系統分析很重要,因為它位居承先啟後的戰略
位置,任何一個小小的錯誤,都可能導致開發
大業功虧一簣。
 走過必留下痕跡,想到了,卻遺漏了?
 您的情況?
軟體迷 思五
 軟體迷思 :
 程式在“可執行”之前,無法評估其品質
 太在乎看到結果?程式可執行等於成功了?
 實際狀況 :
 在專案一開始時,便需監控其品質
 未及早發現錯誤,可能要花更多時間?
 您的情況?
軟體迷 思六
 軟體迷 思:
 管理者常認為引進最新的程式語言、技術或套裝軟體
,即可開發出最好用的軟體。
 修過這些技術課程了嗎?
 實際狀 況:
 新技術只有公司少數人會,且無法提昇產量
 新技術往往和舊技術衝突,變成必須全面重新設計軟
體,耗時又耗力
 新技術常尚未成熟,而導致整個軟體開發的失敗
 不相信自己的自我學習能力?缺乏挑戰精神?
 您的情況?
軟體迷 思七
 軟體迷 思:
 這麼多有關軟體開發、規範的書籍,這樣應該能提供
員工所需來生產優質軟體
 會去複習、自學相關專業知識的資料或書籍嗎?
 實際狀 況:
 員工真的有遵循規範做事嗎?
 應該選用那一種規範?
 規範合適這家公司嗎?
 看了?消化吸收?要不要用?猶豫不決?算了?
 您的情況?
軟體迷 思八
 軟體迷 思:
 軟體工程要求我們製作大量文件,減緩我們的速度
 沒時間了、最後再寫? 交差了事?及格就好?
 實際狀 況:
 文件製作可以提高軟體品質
 優質可降低重複工作
 減少重複工作可以增加整體速度
 文件可幫助我們容易維護系統
 不會寫?不想寫?沒時間寫?沒有寫!您的作品!
 您的情況?。
軟體工程 (S oftw are
Eng ineeri ng)
 軟體工程簡單的說就是有系統的進行軟體
的規劃、分析、設計、程式製作、維護等
工作。
 其目的是運用科學化的方法和技術,來提
高軟體的生產力和軟體的品質。
各種相關定義
 軟體工程是一個框架的技術,可以提供建立電腦
軟體的人們使用,讓人們對軟體的的建立成為正
確的決定。這個技術包含一個過程、一組方法,
及一系列的工具。
 軟體工程是一門研究如何用系統化、規範化、數
量化等工程原則和方法去進行軟體的開發和維護
的學科。
 軟體工程 : (1) 對軟體的開發、操作及維護以有
系統的、有訓練的、可以量計的方法所做的應用 ;
(2) 對 (1) 中所提方法的研究。
 軟體工 程:「為一系統化的、透過訓練有紀律的
及可量化的應用方式來著手處理軟體發展,運作
及維護 。」( IEEE 1993 )
軟體工程範圍
 軟體工程所涵括的範圍很廣,主要包括兩
方面內容:軟體發 展技術 和軟體專 案管
理。
物件導向技術
 特性:
 封裝( Encapsulation )
 繼承( Inheritance )
 多型( Polymorphism )
 提供系統發展人員在不增加複雜度的情況
下擴大系統的方法
 最適合用來發展強調再利用( Reuse )的
軟體系統
物件導向技術在應用方面的特色
 可經由直接塑模企業物件,讓資訊系統與
企業管理完全整合
 讓應用系統不受限於執行環境、開發環境
、程式語言而能彼此互通
 讓發展者可以很容易的再用或修改物件
UML
 UML ( Unified Modeling Language )屬
於物件導向領域裡頭用來將設計概念表現
出來的一種符號表現法( Notation )。
UML 模型圖表達的各種觀點
UML 八大模型圖表達的各種觀

 使用者觀點 (User view): 從某些與系統相關角色的使用者觀點來看,
使用者會和那些系統互動,相反的也可看出那些使用者會使用到該
系統。使用的圖形有使用案例圖 (Use Case Diagram) 。
 結構觀點 (Structural view): 從軟體程式或系統的結構觀點來看。使
用的圖形有類別圖、物件圖。
 行為觀點 (Behavior view): 從軟體程式行為 ( 流程 ) 觀點來看,尤其
是針對物件與物件之間的行為。使用的圖形有循序圖 (Sequence
Diagram) 、合作圖 (Collaboration Diagram) 、狀態圖 (State
Diagram) 、活動圖 (Activity Diagram) 。
 建置觀點 (Implementation view): 從建置整個系統的觀點來看,那些
軟體元件必須建置在何處。使用的圖形有元件圖 (Component
Diagram) 。
 環境觀點 (Environment view) : 從整個系統的環境觀點來看,那些硬
體和軟體必須佈署在何處。使用的圖形有配置圖 (Deployment
Diagram) 。
某軟體畫 UML 圖範例。
UML 優點
 視覺化
 規格化  
 建置化
 文件化
物件導向的開發程序
 採用「往覆式( Iterative )」的
RUP ( Rational Unified Process 、 Rational
統一流程)流程,規劃時將一個準備開發
的系統拆解成好幾個子系統,然後不斷往
復循環整個開發流程 。
RUP 循環圖
RUP 的主要精神
 專案進行採用 Iterative 程序分階段漸進地
完成專案功能。
 廣泛使用 Visual Modeling 於商業需求分
析、系統分析與系統設計。
 強調架構設計。
 對每項工作所需要的技術、工具、做法、
範本、檢查項目均有詳細的定義,架構完
備且具有可調整的彈性。
CMMI 介紹
 能力成熟度模式整合 CMMI (Capacity Mature
Model Integration)
 是一個軟體生產標準流程
 SEI/CMU 於 2000 年底發表此方法論
 基本要素:文件管理、內容管理
 完整有效的儲存產品發展到交付過程中所產生的
文件、紀錄、經驗等資料,並進一步轉換成知識
 與開發軟體使用何種軟體生命週期模型無關
CMMI 成熟度等級
 CMMI 將模型表示為一系列成熟度等級
 分成五個等級 (Level)
 每個等級都有一組關鍵流程領域 (Key
Process Area , KPA)
 第二等級至第五等級中總計有 18 個 KPA
 必需透過相關活動 (Activity) 達到要求
 總計有 52 個目標 (Goals)
在不同成熟度層級與層面的 KPA
管理層面 組織 層面 工程層面
最佳 層級 技術變更管理 缺陷預防
(Optimized) 流程變更管理
管理 層級 定量流程管理 軟體品質管理
(Managed)
定義層 級 整合軟體管理 組織流程特徵 軟體產品工程
(Defined) 群體間協調 組織流程定義 同等審查
訓練課程
重覆 層級 需求管理
(Repeatable) 軟體專案計劃
軟體專案追蹤與監控
軟體分包管理
軟體品質保證
軟體建構管理

初始層 級 (Initial) 無 無 無
CMMI 識別標誌
經濟部 工業 局提昇 軟體 品質 計畫網 址: http://www.cmmi-
taiwan.org.tw/
案例研討 - 訂房系統
 全台灣飯店旅館三千家左右
 軟體 發展 流程 :將採用 RUP 的精神,將訂房子系統再
拆成若干子系統,每次重覆循環只發展一個重要的子系
統,例如 : 訂房子系統、取消訂房子系統、 Check-in 子
系統、 Check-out 子系統。
 文件 的管 理:文件管理,將採用 CMMI 的主要精神。
 物件 導向 分析和設 計:物件導向分析和設計的塑模
(Modeling) ,採用 UML 的圖形作為塑模的模型圖。
 程式 語言 :主要採用 Java 物件導向程式語言來設計
總結
 軟體工程是一個整合過程、方法及工具的
訓練,用以開發電腦軟體,確保軟體能順
利正確的完成。

You might also like