目錄表

國立屏東大學 資訊工程學系 物件導向軟體工程 (last updated September 22, 2017)

1. 軟體工程概述

本章將就軟體工程(Software Engineering,SE)加以簡介,其相關主題包含軟體與軟體工程、軟體專案、軟體品質、軟體塑模以及各種常見的軟體生命週期模型。身為一個開發軟體的軟體工程師,除了應熟悉軟體工程的各項程序與方法外,本章末也列舉身為一個好的軟體工程師所應遵從的職業道德規範。


$\tau_i$ $a+b$ $\frac{i^2}{x}$

1.1 軟體(Software)

1.1.1 何謂軟體?

何謂軟體(Software)? 相較於有形的「硬體(Hardware)」,「軟體(Software)」則是無形的。舉例來說,XBox游戲機以及其相關的感測裝置、操作搖桿等就是硬體裝置;而「NBA 2K18」、「Age of Empires」等游戲就是軟體。同樣的,音響設備是硬體,音樂作品則是軟體。硬體與軟體必須搭配使用,才能發揮功能或提供使用者相關的服務。例如單有遊戲主機,而無遊戲光碟;或是單有音響主機,卻沒有音樂光碟。反之,單有遊戲或音樂光碟,但卻沒有對應的執行或播放硬體,也都是沒有意義的。

<note> 用來存放軟體或是音樂作品的光碟則被稱為載具(carrier)。 </note>

本書著重電腦軟體(computer software),意即必須在電腦系統上才能執行並提供服務的軟體。電腦軟體可以被視為是一些電腦程式(Computer Program)的集合,當其被加以執行時可以提供特定的功能或服務。有時候,在電腦程式中用以儲存資料的資料結構、處理資料的演算法以及程式的說明文件,也都會被視為是軟體的一部份。

<note> 一個電腦程式又可以被視為是一些程式碼(code)的集合,用以完成特定的功能。 </note>

綜合上述,我們可以將「軟體」定義為:為了在電腦系統上執行以達成特定目的一組電腦程式、數位資料及其文件的組合。

1.1.2 軟體的特性

基本上,軟體是無形的(intangible),它沒有一般商品存在的耗損(wear out)問題,不過它可能存在效能退化(deteriorate)的問題(你有沒有遇過隨著時間的推移,軟體執行效率退化的情況?)。另一方面,軟體是極為容易再製的(reproduce),不管製做多少份複本,其成本不會隨之增加(只要一個複製的指令即可完成)。一般而言,軟體的成本集中在其開發階段,一但開發完成,其再製成本極低,不過後續的軟體維護也必須投入相當的人力與物力。整體而言,軟體產業可算是一個勞力密集(labor-intensive)的產業,不像其它的製造業,其製作或開發的過程很難加以自動化。

1.1.3 軟體的分類

依造軟體的用途與使用者的不同,軟體可以分為幾種不同的類別,例如「客製型軟體(Custom Software)」,是針對特定使用者、特定的用途所加以製作,通常此類軟體只有有少數的複本存在。另一方面,非客製型的軟體則被稱為「通用型軟體(Generic Software)」,它是由軟體廠商針對特定市場所開發的軟體產品(Product),通常在市場上公開向所有使用者販售,有時又稱為「Commercial Off-the-Shelf,COTS」(開架式產品)。這兩種軟體的差別在於,Custom Software是針對明確已知的使用者及其需求客製化設計開發,Generic Software則是由軟體開發者預想使用者可能的需求而加以設計開發;就如同量身定製的西裝和大量生產的成衣西裝的差別。

1.2 軟體工程(Software Engineering)

軟體工程(Software Engineering)一詞,首見於1968年的NATO的Software Engineering Conference.1)2),用以面對當時已注意到的軟體危機。在當時,軟體產業以客制型的軟體專案開發為主,但許多大型的軟體專案,往往會面臨開發成本不對追加且難以再利用(reuse)的困境。不像其它的製造業或營建業,已存在許多自動化或是專案管理的方法,軟體產業在當時還沒有任何方法可以解決這些困境。

所謂的軟體工程就是關於軟體從無到有的過程。希望透過一些工程科學的方法,讓軟體的開發能夠如同其它商品的開發一樣,具有有效的方法來確保軟體開發的效率、品質以及成本的控管。換具話說,軟體工程被視為是一種專業技能,可以應用在軟體的設計、開發、實作以及修改、維護等過程,並希望能達成軟體開發的品值保證、降低成本、易於維護,同時也希望能透過軟體工程的方法來縮短開發的時程3)。同時,軟體工程也被期望能向許多其它領域一樣,能夠提供包含分析、設計、評量、實作、測試、維護與精進的工程方法4)。這些所謂的工程方法必須是易於理解、管理與應用的方法,同時也被期待是易於再製且能夠具有標準化程序的方法。用更簡單的話來說,軟體工程就是採用系統化、規章化、可量測的方法,來進行軟體的開發與維護5)

用更為簡單的方法來說,軟體工程就是應用工程方法在軟體開發上。通常軟體的開發過程,就是不斷提升抽象化層次的過程,從最高抽象層次的系統分析、設計,到逐漸具體化的程式碼撰寫與測試等過程。我們必須建構出完善的工程原理,來幫助軟體的開發獲致具有經濟效益、且能夠在真實機器上提供穩定與效率的高品質軟體6)。為了回應這些需求,目前的主流做法之一就是將軟體工程視為是建立與使用模型的過程 7),透過一些容易理解的模型,針對不同抽象層次建立並使用這些模型,可在真正開發軟體之前得到可以呈現最終軟體產品的需求與使用者界面模型,有助於軟體開發團隊與使用者進行相關的討論:更具體的設計模型,則可以用來描述實際需要開發的各項軟體組件之功能與設計準則;建置模型則可以應用在軟體的配置與維護等方面的工作。本書後續也將就這些不同的模型加以討論,其中將以UML模型為主要的探討對象。

另一方面,現在的軟體開發愈趨大型化、複雜化,往往不再是一個人或少數人可以獨立完成的,所以軟體工程也與軟體團隊的管理緊密相關。如何在團隊間適切地分工、溝通合作,也成為軟體工程相關領域的重點之一。主要的困難在於以下數點:

1.2.1 軟體工程的目標

軟體工程的主要目標可列示如下:

1.2.2 軟體工程的範疇

以最簡單的方式來說,軟體工程就是從無到有將軟體開發出來的過程,其相關的範疇如下:

1.2.3 Object-Oriented Software Engineering

以物件導向技術進行軟體工程各項活動,包含

1.3 軟體專案(Software Projects)

專案8)係指一項暫時性的工作,其目的在於創造出特定的產品或服務。專案通常具有以下的特性9)

所謂的軟體專案(Software Project)即為以開發軟體為主要目的的專案。就軟體產業而言,不論是客製化的軟體、亦或是通用型軟體,其開發通常都被視為是一項軟體專案。每一項軟體專案都必須針對有限的資源(包含人力、設備、時程等)進行的管理,相關工作稱為軟體專案管理(Software Project Management)。當然也不是每一項軟體專案,都是以開發新軟體為目的,有些軟體專案是針對既有的軟體進行改善或維護等工作。例如有的軟體專案是為了找出既有軟體的缺失並加以修正,又或者有的軟體專案是為了將既有的系統進行修改,使其能適用於更新版本的作業系統、資料庫系統、或是新的商業模式或法規。有些軟體專案則是為了幫既有的軟體增加或修改功能。有時候是由開發人員針對既有的功能進行新的設計,以提升軟體的效能、或透過模組的重新設計提升軟體的可維護性。

軟體專案涉及許多相關人員(Stakeholders),包含:

1.4 軟體品質(Software Quality)

如何評定軟體的品質是一件相當重要的課題,首先必須就軟體的評量指標加以討論,常見的軟體品質評量指標如下:

Fig 1與Fig 2.提供了一些可能的軟體評量指標。

Fig. 1: An example ontology of quality

Fig. 2: Software quality at stakeholders

在相關的評量指標中,有一些指標彼此間是互斥的,例如透過程式碼的精簡可以提升效能,但卻也會降低可維護性與可重用性;反之,若提升了可重用性,則可能會造成效能的下降。所以我們必須在眾多的效能指標中,挑選適合的指標項目來進行評比。

1.5 軟體塑模(Software Modeling)

Fig. 3: 系統與子系統

Fig. 4: 系統與模型

Fig. 5: 系統可以擁有不同的模型

1.6 軟體生命週期模型(Software Lifecycle Model)

Fig. 6: Rigorous Method(嚴謹法)

1.6.1 Waterfall Model

Fig. 7: Waterfall Model Fig. 8: Waterfall Model

1.6.2 Phased-Release Model

Fig. 9: Pahsed-Release Method

1.6.3 Rapid Prototyping Model

1.6.4 Spiral Model

Fig. 10: Spiral Model Fig. 11: Spiral Model (Another Version)

1.6.5 Concurrent Engineering Model

Fig. 12: Concurrent Engineering Model

1.6.6 Unified Process - An Object-Oriented Lifecycle Model

Fig. 13: Four Phases of the Unified Process

figure 13顯示了典型的UP四個階段所需的資源與耗費的時間。

Fig. 14: Iterative Development of UP

Fig. 15: UP的Model集合

1)
P. Naur and B. Randell, (Eds.), “Software Engineering: Report of a conference sponsored by the NATO Science Committee”, Garmisch, Germany, 7-11 Oct. 1968
2)
B. Randell and J.N. Buxton, (Eds.), “Software Engineering Techniques: Report of a conference sponsored by the NATO Science Committee”, Rome, Italy, 27-31 Oct. 1969
3) , 4)
Phillip A. Laplante, “What Every Engineer Should Know about Software Engineering”, ISBN 9780849372285, 2007.
5)
Alain Abran, James W. Moore, Pierre Bourque, Robert Dupuis, Pierre Bourque and Robert Dupuis, “Guide to the Software Engineering Body of Knowledge”, 2004 Version, IEEE Computer Society, ISBN 0-7695-2330-7, 2004.
6)
P. Naur and B. Randell, (Eds.), “Software Engineering: Report of a conference sponsored by the NATO Science Committee”, Garmisch, Germany, 7-11 Oct. 1968.
7)
I. Jacobson, M. Ericsson, and A. Jacobson, “The Object Advantage: Business Process Reengineering With Object Technology”, Addison-Wesley Professional, ISBN: 978-0201422894, September 30, 1994.
8)
William R. Duncan, “A Guide to the Project Management Body of Knowledge”, Project Management Institute, 1996.
9)
林信惠, 黃明祥, 王文良,“軟體專案管理”,初版,智勝文化, 2002.
10)
Michael Jackson, “The World and the Machine”, ICSE, pp. 283-292, 1995.
11)
Webster Dictionary
12)
Martin Fowler, “Analysis Patterns: Reusable Object Models”, Addison-Wesley, ISBN 0-201-89542-0, 1997.
13)
John Daniels, “Models and Abstraction”, Object Expert, Vol.1(3), Mar./Apr. 1998.
14)
Jeff Rothenberg, “The Nature of Modeling”, Artificial Intelligence, Simulation, and Modeling, John Wiley & Sons, New York, pp. 75-92, 1989.
15)
Sebastiá Tyrrell, “The Many Dimensions of the Software Process”, ACM Crossroads, 2001.
16)
B. Boehm , “A Spiral Model of Software Development and Enhancement”, ACM SIGSOFT Software Engineering Notes, 11(4):14-24, August 1986.
18) , 19) , 20)
Ivar Jacobson, Grady Booch, and James Rumbaugh, “The Unified Software Development Process”, Addison-Wesley Professional, 1 edition, ISBN: 978-0201571691, February 14, 1999.