第一章軟體工程軟體工程-物件導向程式設計與UML系統分析實作軟體廣義而言:電腦軟體是指一切能夠控制電腦運作的方法與技術狹義而言:用各種程式語言所寫成的程式系統軟體系統軟體負責協調電腦系統的各部分,並連接應用程式與電腦硬體。表1-1列出幾種常見軟體的種類(系統軟體)應用程式應用程式(ApplicationProgram)它專門幫助使用者完成某些特定的工作。表1-1列出幾種常見軟體的種類(應用程式)1.2程式語言的歷史電子計算機能夠了解的語言,同時又因為這種語言是一種程式結構,所以稱為程式語言我們會透過撰寫程式來產生製造一些電腦上的軟體程式語言年代和特性分類依照程式語言年代和特性的先後可以分成四類:第一代–機器語言第二代–組合語言第三代–高階語言第四代–查詢語言第一代–機器語言在電腦內部的訊息中,只有0和1兩種邏輯狀態第二代–組合語言由於機器語言在使用上的不便,因此工程師們便從機器語言中找出規則,而以英文字、數字符號來重組機器語言,使成為有意義的語言,這種語言便稱為組合語言。第三代–高階語言具有嚴密的區塊結構、更抽象的資料封包方式、結構化的語法結構、適當的資料形態、程序與函數的結構相當完整。透過編譯程式(Compiler)或直譯程式(Interpreter),人們就可以用更簡單的語言來設計電腦程式,程序導向高階語言BASIC語言:其用法簡單、易學,在教學上廣泛地被使用,版本有:BASICA、GW-BASIC、QuickBASIC。FORTRAN語言:其主要功能是在解決工程及科學上的問題。在PC上以Microsoft公司的MS-FORTRAN較為普遍。COBOL語言:主要用於商業資料的處理。常見的版本有MS-COBOL及RM-COBOL等。PASCAL語言:具有結構化程式的特性,資料結構方面有一段時間大都採用此種語言。常見的版本有TurboPASCAL及QuickPASCAL等。C語言適用於撰寫系統上的程式,是一種系統發展必備的語言。常見的版本有MicrosoftC、TurboC及QuickC等。LOGO語言:是一種圖形導向簡單易學易用的教育用電腦語言,具結構化且有助於人工智慧的研究。LISP語言:是一種應用在人工智慧上的語言,用來設計專家系統(Expertsystem),具有推理及圖形辨識能力。PROLOG語言:是一種以符號邏輯為基礎,且具有推理性的程式語言,在人工智慧的領域很有貢獻。RPG語言:1964年由IBM所開發,為一種報表編製的語言。物件導向高階語言C++語言:將C語言加上了物件導向的觀念。在發展C++之後,C++以及物件導向的觀念就開始成為另一種流行。C++的變種:uBorlandC++語言:Borland公司發佈著名的BorlandC++3.1uVisualC++語言:VisualC++是一套微軟公司發佈VisualBASIC語言:是一個圖形視窗的程式設計系統,提供了很多工具讓使用者能夠輕易的設計出視窗、功能表、按鈕等在視窗中常見的物件,並針對個別物件的相對事件來撰寫BASIC程式碼,以設計此物件的行為程式。Dephi語言:Dephi是Borland軟體公司開發的應用軟體發展程式,具有:a.完全物件導向設計概念,可以自行定義、修改、重組其各部元件,或甚至撰寫新元件來使用。Java語言:Java是美國Sun(昇陽)公司所開發的語言,兼具C語言及HTML語言的特性,主要用來發展網際網路上的網站建立、管理、網頁資料的製作等。第四代–查詢語言比高階語言更容易使用的語言,使用者只需將步驟寫出來,而不必管電腦要如何去執行,這樣的電腦語言稱為查詢語言(QueryLanguage)4GL語言種類1.查詢語言(QueryLanguage):查詢語言是資料庫管理系統的主要工具,它提供用戶對資料庫進行查詢的功能。例如:SQL(StructureQueryLanguage)。2.報表產生器(ReportGenerator):是爲用戶提供的自動産生報表的重要工具,它提供非過程化的描述手段讓用戶很方便地根據資料庫中的資訊來生成報表。例如:RPG-III。3.圖形化語言(GraphicsLanguage):圖形資訊較之一維的字串、二維的表格資訊更爲直觀、鮮明。在軟體發展過程中所使用的資料流程圖、結構圖、框圖等均是圖形。人們自然要設想,是否可以用圖形的方式來進行軟體發展呢?例如:SAS,Systat4.應用程式產生器(ApplicationGenerator):應用生成器讓用戶不必使用多個軟體,而只用這樣一個綜合工具來實現多種功能。例如:FOCUS、PowerBuilder。1.2.2程式語言特性的演進程式語言特性的演進一機器導向語言(Machine-OrientedLanguage):和機器相關的組合語言,尤其是和CPU息息相關,要學某一種機器語言,就必須先學該CPU的結構。可充分發揮CPU硬體之特性、功能,執行時又快又省記憶體,但編寫程式仍然不容易(比機器語言容易許多)。程式語言特性的演進二程序導向語言(Procedure-OrientedLanguage):電腦會按程序語句的次序,由起始至結束,順序執行電腦程序。也就是透過程序語句,教導、指示或命令電腦如何工作或解決問題。(check-我donotliketheclassification),例如BASIC,FORTRAN,COBOL等皆為程序導向語言程式語言特性的演進三應用導向語言(Application-OrientedLanguage):一種具有助於解決一類或多類應用問題的程式語言,應用導向語言也大都是程序導向語言,可視為其中一個子集合。例如:為解決數值科學問題之FORTRAN語言為解決商業資料處理之通用商業導向語言之COBOL。程式語言特性的演進四查詢語言(QueryLanguage):SQL是結構化查詢語言的簡稱,是對關連式資料庫管理系統的標準查詢語言。利用SQL,可以用來定義資料庫結構、指定資料庫表格與欄位的型態與長度、新增資料、修改資料、刪除資料、查詢資料,以及建立各種複雜的表格關聯。程式語言特性的演進五物件導向語言(Object-OrientedLanguage):在物件導向語言中,程式被看作是相互協作的物件集合,每個物件都是某個類別的實例,所有的類別構成一個透過繼承關係相聯繫的層次結構。物件導向的語言常常具有以下特徵:物件建構的功能、訊息傳遞機制、類別和繼承的機制。例如:C++,Java。程式語言特性的演進六自然語言(NaturalLanguage):自然語言乃是針對電腦新手產生的,.使用者只須輸入他自己的用字來告訴電腦做什麼,而不須輸入正確的命令及資料名稱。使用者可以用多種方式來敘述同一件事情,例如:給我三月份的電腦銷售量和我要三月份電腦的銷售數目.像這種敘述可能有拼字上的錯誤,缺少物件和動詞,甚至出現了俚語。而自然語言須將人們錯誤的文法,俚語以及敘述轉換成電腦可接受的機器碼。此語言尚在發展中,因為尚未成熟,所以市面上尚未看到類似產品,如果硬要舉例的話,可想像搜尋引擎的搜尋機制,只輸入關鍵字就可將你想要的資訊,搜尋出來送至您面前。1.3軟體開發流程圖1-6來解釋軟體開發流程的正規方式圖1-6.軟體開發流程的正規方式軟體開發流程的正規方式(圖1-6.)1.需要軟體某軟體解決特定問題:2.決定軟體要自製或外包:a、假如決定軟體外包:i.找尋合適的外包廠商。ii.簽訂軟體委外開發合約。iii.監督外包廠商整個軟體開發進度。軟體開發流程的正規方式(圖1-6.)CONT’D3.開始整個軟體系統的開發:a、系統開發:i.選一適當軟體工程方法論,例如:選RUP。ii.依據軟體工程方法論開發軟體b、管理文件和軟體,和系統開發同步進行:i.選一適當方法論來管理系統相關文件和軟體,例如:選CMMI。ii.依據CMMI精神管理系統相關文件,例如:需求文件,系統分析文件,系統設計文件..等c、專案管理,和系統開發同步進行:i.選一適當經理和團隊:通常慎選一專案經理和適當的團隊(組員),分派適當任務,和系統開發同步進行專案管理。ii.依據專案管理的範疇和步驟管理好整個專案。軟體開發流程的正規方式(圖1-6.)CONT’D24.完成交付軟體:不管是自製或外包,除非失敗放棄開發,否則完成軟體後會交付使用者(User)使用。5.持續使用和維護:軟體持續使用,通常會有或多或少和原始的需求不同,而必須維護和修改。6.軟體退休:軟體使用一直到退休,也就是不用為止。1.4軟體危機Y2K警告開始出現在事件發生的十年前,企業及工業領袖才投資了大量的金錢,,經過全員的努力,世界才平安的度過此危機。但是也讓我們深刻體驗到設計軟體的不易,稍一不甚極容易設計出有臭蟲(Bug)的產品,軟體將很可能會造成一連串的錯誤,而導致世界的停頓。軟體危機(SoftwareCrisis)軟體危機是指在軟體開發及維護的過程中所面臨的嚴重問題,這些問題皆可能導致軟體產品的壽命縮短、甚至夭折。圖1-6軟體開發後產品使用統計(只有5%的軟體設計後可以使用)軟體危機常見的問題1.專案的時程估計錯誤2.開發好的系統臭蟲(Bug)很多3.維護時修改一個問題常會產生更多問題4.沒有系統分析與設計的文件5.軟體的生產力低6.程式版本混亂沒有控管失敗的物件導向技術的Web-Based系統案例1.OOA/OOD(Object-OrientedAnalysis/Design)觀念不清處2.設計樣版(Designpattern)的了解不易3.不懂物件導向語言的特性,增加系統除錯和維護困難度。4.開發維護所需要的技能增加,必須了解UML、Java、VisualAgeforJava和SanFrancisco。5.物件導向資料庫和關連式資料庫的特性不同。6.系統採用Web3-tier架構,增加了系統除錯及整合測試的難度,除錯更為困難。1.5軟體的迷思我們常會發生許多的迷思,包括技術上的、管理上的、使用者的軟體迷思一軟體迷思:使用者認為只要告訴程式設計師軟體上的概略需求,開發程式應可快速完成。實際狀況:(1)需求必須要完整且詳實,才不會一再造成變更程式。(2)開發軟體,還必須依據軟體開發程序,經過系統分析和系統設計。軟體迷思二軟體迷思:增加程式設計人員可以趕上落後的進度。實際狀況:軟體工業不像傳統工業可以由增加人手、生產線來加快速度。軟體迷思三軟體迷思:一旦我們寫好一個程式並交給客戶,我們的工作就算完成了。實際狀況:在軟體第一次交給客戶之後,必須要繼續維護和除錯,根據統計有75%的花費是在維護軟體上。軟體迷思四軟體迷思:「系統分析」是不事生產的工作。實際狀況:系統分析很重要,因為它位居承先啟後的戰略位置,任何一個小小的錯誤,都可能導致開發大業功虧一簣。軟體迷思五軟體迷思:我們的程式在“可執行”之前,無法評估其品質。實際狀況:我們可在專案一開始時便監控其品質。軟體迷思六軟體迷思:管理者常認為引進最新的程式語言、技術或套裝軟體,即可開發出最好用的軟體。實際狀況:(1).新的技術只有公司少數人會,且無法提昇產量。(2).新的技術往往和舊的技術衝突,變成必須全面重新設計軟體,耗時又耗力。(3).新的技術常尚未成熟,而導致整個軟體開發的失敗。軟體迷思七軟體迷思:書架上這麼多有關軟體開發、規範的書籍,這樣應該能提供我的員工所需來生產優質軟體。實際狀況:(1)員工真的有遵循規範做事嗎?(2)應該選用那一種規範。(3)規範合適這家公司嗎?軟體迷思八軟體迷思:軟體工程要求我們製作大量文件,減緩我們的速度。實際狀況:(1)文件製作可以提高軟體品質。(2)優質可降低重複工作。(3)減少重複工作可以增加整體速度。(4)文件可幫助我們容易維護系統。1.6軟體工程軟體工程簡單的說就是有系統的進行軟體的規劃、分析、設計、程式製作、維護等工作,其目的是運用科學化的方法和技術,來提高