軟體工程 -物件導向程式設計與UML系統分析實作 第一章 軟體工程 軟體工程 -物件導向程式設計與UML系統分析實作
軟體 廣義而言:電腦軟體是指一切能夠控制電腦運作的方法與技術 狹義而言:用各種程式語言所寫成的程式
系統軟體 系統軟體負責協調電腦系統的各部分,並連接應用程式與電腦硬體。
表1-1 列出幾種常見軟體的種類(系統軟體)
應用程式 應用程式(Application Program) 它專門幫助使用者完成某些特定的工作。
表1-1 列出幾種常見軟體的種類(應用程式)
1.2 程式語言的歷史 電子計算機能夠了解的語言,同時又因為這種語言是一種程式結構,所以稱為程式語言 我們會透過撰寫程式來產生製造一些電腦上的軟體
程式語言年代和特性分類 依照程式語言年代和特性的先後可以分成四類 : 第一代 – 機器語言 第二代 – 組合語言 第三代 – 高階語言 第四代 – 查詢語言
第一代 – 機器語言 在電腦內部的訊息中,只有0和1兩種邏輯狀態
第二代 – 組合語言 由於機器語言在使用上的不便,因此工程師們便從機器語言中找出規則,而以英文字、數字符號來重組機器語言,使成為有意義的語言,這種語言便稱為組合語言。
第三代 – 高階語言 具有嚴密的區塊結構、更抽象的資料封包方式、結構化的語法結構、適當的資料形態、程序與函數的結構相當完整。 透過編譯程式(Compiler)或直譯程式(Interpreter),人們就可以用更簡單的語言來設計電腦程式,
程序導向高階語言 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++以及物件導向的觀念就開始成為另一種流行。 u Borland C++語言:Borland公司發佈著名的Borland C++ 3.1 u Visual C++語言:Visual C++是一套微軟公司發佈 Visual BASIC語言:是一個圖形視窗的程式設計系統,提供了很多工具讓使用者能夠輕易的設計出視窗、功能表、按鈕等在視窗中常見的物件,並針對個別物件的相對事件來撰寫BASIC程式碼,以設計此物件的行為程式。 Dephi 語言:Dephi是Borland軟體公司開發的應用軟體發展程式,具有: a. 完全物件導向設計概念,可以自行定義、修改、重組其各部元件,或甚至撰寫新元件來使用。 Java 語言:Java是美國Sun(昇陽)公司所開發的語言,兼具C語言及HTML語言的特性,主要用來發展網際網路上的網站建立、管理、網頁資料的製作等。
第四代 –查詢語言 比高階語言更容易使用的語言,使用者只需將步驟寫出來,而不必管電腦要如何去執行,這樣的電腦語言稱為查詢語言(Query Language)
4GL語言種類 1. 查詢語言(Query Language):查詢語言是資料庫管理系統的主要工具,它提供用戶對資料庫進行查詢的功能。例如: SQL(Structure Query Language)。 2. 報表產生器(Report Generator):是爲用戶提供的自動産生報表的重要工具,它提供非過程化的描述手段讓用戶很方便地根據資料庫中的資訊來生成報表。例如:RPG-III。 3. 圖形化語言(Graphics Language):圖形資訊較之一維的字串、二維的表格資訊更爲直觀、鮮明。在軟體發展過程中所使用的資料流程圖、結構圖、框圖等均是圖形。人們自然要設想,是否可以用圖形的方式來進行軟體發展呢?例如:SAS, Systat 4. 應用程式產生器(Application Generator):應用生成器讓用戶不必使用多個軟體,而只用這樣一個綜合工具來實現多種功能。例如:FOCUS、Power Builder。
1.2.2 程式語言特性的演進
程式語言特性的演進 一 機器導向語言(Machine-Oriented Language):和機器相關的組合語言,尤其是和CPU息息相關,要學某一種機器語言,就必須先學該CPU的結構。可充分發揮CPU硬體之特性、功能,執行時又快又省記憶體,但編寫程式仍然不容易(比機器語言容易許多)。
程式語言特性的演進 二 程序導向語言(Procedure-Oriented Language):電腦會按程序語句的次序,由起始至結束,順序執行電腦程序。也就是透過程序語句,教導、指示或命令電腦如何工作或解決問題。(check-我 do not like the classification),例如BASIC,FORTRAN,COBOL等皆為程序導向語言
程式語言特性的演進 三 應用導向語言(Application-Oriented Language):一種具有助於解決一類或多類應用問題的程式語言,應用導向語言也大都是程序導向語言,可視為其中一個子集合。例如: 為解決數值科學問題之FORTRAN語言 為解決商業資料處理之通用商業導向語言之 COBOL 。
程式語言特性的演進 四 查詢語言(Query Language):SQL是結構化查詢語言的簡稱,是對關連式資料庫管理系統的標準查詢語言。利用SQL,可以用來定義資料庫結構、指定資料庫表格與欄位的型態與長度、新增資料、修改資料、刪除資料、查詢資料,以及建立各種複雜的表格關聯。
程式語言特性的演進 五 物件導向語言(Object-Oriented Language):在物件導向語言中,程式被看作是相互協作的物件集合,每個物件都是某個類別的實例,所有的類別構成一個透過繼承關係相聯繫的層次結構。物件導向的語言常常具有以下特徵:物件建構的功能、訊息傳遞機制、類別和繼承的機制。例如:C++,Java。
程式語言特性的演進 六 自然語言(Natural Language): 自然語言乃是針對電腦新手產生的,.使用者只須輸入他自己的用字來告訴電腦做什麼,而不須輸入正確的命令及資料名稱。使用者可以用多種方式來敘述同一件事情,例如: "給我三月份的電腦銷售量" 和 "我要三月份電腦的銷售數目" .像這種敘述可能有拼字上的錯誤 ,缺少物件和動詞 ,甚至出現了俚語。而自然語言須將人們錯誤的文法 ,俚語以及敘述轉換成電腦可接受的機器碼。此語言尚在發展中,因為尚未成熟,所以市面上尚未看到類似產品,如果硬要舉例的話,可想像搜尋引擎的搜尋機制,只輸入關鍵字就可將你想要的資訊,搜尋出來送至您面前。
1. 3 軟體開發流程 圖1-6來解釋軟體開發流程的正規方式
圖1-6. 軟體開發流程的正規方式
軟體開發流程的正規方式(圖1-6. ) 1. 需要軟體某軟體解決特定問題: 2.決定軟體要自製或外包: a、 假如決定軟體外包: i. 找尋合適的外包廠商。 ii. 簽訂軟體委外開發合約。 iii. 監督外包廠商整個軟體開發進度。
軟體開發流程的正規方式(圖1-6. ) CONT’D 3. 開始整個軟體系統的開發: a、 系統開發: i. 選一適當軟體工程方法論,例如:選RUP。 ii. 依據軟體工程方法論開發軟體 b、 管理文件和軟體,和系統開發同步進行: i. 選一適當方法論來管理系統相關文件和軟體, 例如:選CMMI。 ii. 依據CMMI精神管理系統相關文件, 例如:需求文件, 系統分析文件,系統設計文件..等 c、 專案管理,和系統開發同步進行: i. 選一適當經理和團隊:通常慎選一專案經理和適當的團隊(組員),分派適當任務,和系統開發同步進行專案管理。 ii. 依據專案管理的範疇和步驟管理好整個專案。
軟體開發流程的正規方式(圖1-6. ) CONT’D 2 4. 完成交付軟體:不管是自製或外包,除非失敗放棄開發,否則完成軟體後會交付使用者(User)使用。 5. 持續使用和維護:軟體持續使用,通常會有或多或少和原始的需求不同,而必須維護和修改。 6. 軟體退休:軟體使用一直到退休,也就是不用為止。
1.4 軟體危機 Y2K警告開始出現在事件發生的十年前,企業及工業領袖才投資了大量的金錢,,經過全員的努力,世界才平安的度過此危機。 但是也讓我們深刻體驗到設計軟體的不易,稍一不甚極容易設計出有臭蟲(Bug)的產品,軟體將很可能會造成一連串的錯誤,而導致世界的停頓。
軟體危機(Software Crisis) 軟體危機是指在軟體開發及維護的過程中所面臨的嚴重問題,這些問題皆可能導致軟體產品的壽命縮短、甚至夭折。
圖1-6 軟體開發後產品使用統計 (只有5%的軟體設計後可以使用 )
軟體危機常見的問題 1. 專案的時程估計錯誤 2. 開發好的系統臭蟲(Bug)很多 3. 維護時修改一個問題常會產生更多問題 1. 專案的時程估計錯誤 2. 開發好的系統臭蟲(Bug)很多 3. 維護時修改一個問題常會產生更多問題 4. 沒有系統分析與設計的文件 5. 軟體的生產力低 6. 程式版本混亂沒有控管
失敗的物件導向技術的Web-Based系統 案例 1. OOA/OOD(Object-Oriented Analysis/Design)觀念不清處 2. 設計樣版(Design pattern)的了解不易 3. 不懂物件導向語言的特性,增加系統除錯和維護困難度。 4. 開發維護所需要的技能增加,必須了解UML、Java、VisualAge for Java和SanFrancisco。 5. 物件導向資料庫和關連式資料庫的特性不同。 6. 系統採用Web 3-tier架構,增加了系統除錯及整合測試的難度,除錯更為困難。
1.5 軟體的迷思 我們常會發生許多的迷思, 包括技術上的、管理上的、使用者的
軟體迷思一 軟體迷思: 實際狀況: 使用者認為只要告訴程式設計師軟體上的概略需求,開發程式應可快速完成。 (1) 需求必須要完整且詳實,才不會一再造成變更程式 。 (2) 開發軟體,還必須依據軟體開發程序,經過系統分析和系統設計。
軟體迷思二 軟體迷思:增加程式設計人員可以趕上落後的進度。 實際狀況:軟體工業不像傳統工業可以由增加人手、生產線來加快速度。
軟體迷思三 軟體迷思:一旦我們寫好一個程式並交給客戶,我們的工作就算完成了。 實際狀況:在軟體第一次交給客戶之後,必須要繼續維護和除錯,根據統計有 75%的花費是在維護軟體上。
軟體迷思四 軟體迷思:「系統分析」是不事生產的工作。 實際狀況:系統分析很重要,因為它位居承先啟後的戰略位置,任何一個小小的錯誤,都可能導致開發大業功虧一簣。
軟體迷思五 軟體迷思:我們的程式在“可執行”之前,無法評估其品質。 實際狀況:我們可在專案一開始時便監控其品質。
軟體迷思六 軟體迷思:管理者常認為引進最新的程式語言、技術或套裝軟體,即可開發出最好用的軟體。 實際狀況:(1). 新的技術只有公司少數人會,且無法提昇產量。 (2). 新的技術往往和舊的技術衝突,變成必須全面重新設計軟體,耗時又耗力。 (3). 新的技術常尚未成熟,而導致整個軟體開發的失敗。
軟體迷思七 軟體迷思:書架上這麼多有關軟體開發、規範的書籍,這樣應該能提供我的員工所需來生產優質軟體。 實際狀況: (1) 員工真的有遵循規範做事嗎? (2) 應該選用那一種規範。 (3) 規範合適這家公司嗎?
軟體迷思八 軟體迷思:軟體工程要求我們製作大量文件,減緩我們的速度。 實際狀況: (1) 文件製作可以提高軟體品質。 (2) 優質可降低重複工作。 (3) 減少重複工作可以增加整體速度。 (4) 文件可幫助我們容易維護系統。
1.6 軟體工程 軟體工程簡單的說就是有系統的進行軟體的規劃、分析、設計、程式製作、維護等工作,其目的是運用科學化的方法和技術, 來提高軟體的生產力和軟體的品質。
體工程(Software Engineering)的各種相關定義 軟體工程是一個框架的技術,可以提供建立電腦軟體的人們使用,讓人們對軟體的的建立成為正確的決定。這個技術包含一個過程、一組方法,及一系列的工具。 軟體工程是一門研究如何用系統化、規範化、數量化等工程原則和方法去進行軟體的開發和維護的學科。 軟體工程 : (1)對軟體的開發、操作及維護以有系統的、有訓練的、可以量計的方法所做的應用;(2)對(1)中所提方法的研究。[IEEE] 軟體工程之定義,以IEEE 1993年為說明:「為一系統化的、透過訓練有紀律的及可量化的應用方式來著手處理軟體發展,運作及維護。」
軟體工程範圍 軟體工程所涵括的範圍很廣,主要包括兩方面內容:軟體發展技術和軟體專案管理。
1.7 物件導向技術 具有封裝、繼承和多型特性的物件導向技術,提供系統發展人員在不增加複雜度的情況下擴大系統的方法,最適合用來發展強調再用的軟體系統。
物件導向技術在應用方面具有的特色 一、 可經由直接塑模企業物件,讓資訊系統與企業管理完全整合。 一、 可經由直接塑模企業物件,讓資訊系統與企業管理完全整合。 二、 讓應用系統不受限於執行環境、開發環境、程式語言而能彼此互通。 三、 讓發展者可以很容易的再用或修改物件。
1.8 UML UML(Unified Modeling Language)屬於物件導向領域裡頭用來將設計概念表現出來的一種符號表現法(notation)。
圖1-7 UML模型圖表達的各種觀點
UML八大模型圖來表達的各種不同的觀點 1. 使用者觀點(User view): 從某些與系統相關角色的使用者觀點來看,使用者會和那些系統互動,相反的也可看出那些使用者會使用到該系統。使用的圖形有使用案例圖(Use Case Diagram)。 2. 結構觀點(Structural view): 從軟體程式或系統的結構觀點來看。使用的圖形有類別圖、物件圖。 3. 行為觀點(Behavior view): 從軟體程式行為(流程)觀點來看,尤其是針對物件與物件之間的行為。使用的圖形有循序圖(Sequence Diagram)、合作圖(Collaboration Diagram)、狀態圖(State Diagram)、活動圖(Activity Diagram)。 4. 建置觀點(Implementation view): 從建置整個系統的觀點來看,那些軟體元件必須建置在何處。使用的圖形有元件圖(Component Diagram)。 5. 環境觀點(Environment view) : 從整個系統的環境觀點來看,那些硬體和軟體必須佈署在何處。使用的圖形有配置圖(Deployment Diagram)。
圖1-8即為某軟體畫UML圖範例。
UML優點 一、 視覺化 二、規格化 三、建置化 四、文件化
1.9 物件導向的開發程序 採用「往覆式」的 RUP流程,規劃時將一個準備開發的系統拆解成好幾個子系統,然後不斷往復循環整個開發流程
圖1-9 RUP循環圖
RUP 的主要精神 1. 專案進行採用 Iterative 程序分階段漸進地完成專案功能。 2. 廣泛使用 Visual Modeling 於商業需求分析、系統分析與系統設計。 3. 強調架構設計。 4. 對每項工作所需要的技術、工具、做法、範本、檢查項目均有詳細的定義,架構完備且具有可調整的彈性。
1.10 CMMI介紹 CMMI(Capacity Mature Model Integration,能力成熟度模式整合)是一個軟體生產標準流程,無關於開發軟體使用何種軟體生命週期模型。
CMMI成熟度等級 CMMI"成熟度等級"分成五個等級(Level) 每個等級都有一組關鍵流程領域(Key Process Areas,KPAs),第二等級至第五等級中又細分為18個KPA 也就是52個目標(Goals)
表 1-2在不同成熟度層級與層面的各KPA名稱 管理層面 組織層面 工程層面 最佳層級(Optimized) 技術變更管理 流程變更管理 缺陷預防 管理層級(Managed) 定量流程管理 軟體品質管理 定義層級(Defined) 整合軟體管理 群體間協調 組織流程特徵 組織流程定義 訓練課程 軟體產品工程 同等審查 重覆層級(Repeatable) 需求管理 軟體專案計劃 軟體專案追蹤與監控 軟體分包管理 軟體品質保證 軟體建構管理 初始層級 (Initial) (無)
圖1-10 CMMI識別標誌
1.11 案例研討-訂房系統 全台灣飯店旅館三千家左右 u 軟體發展流程:將採用RUP的精神,將訂房子系統再拆成若干子系統,每次重覆循環只發展一個重要的子系統,例如: 訂房子系統、取消訂房子系統、Check-in子系統、Check-out子系統。 u 文件的管理:本書的文件管理,將採用CMMI的主要精神。 u 物件導向分析和設計:物件導向分析和設計的塑模(Modeling),採用UML的圖形作為塑模的模型圖。 u 程式語言:主要採用Java物件導向程式語言來設計
1.12 總結 軟體工程是一個整合過程、方法及工具的訓練,用以開發電腦軟體, 確保軟體能順利正確的完成。