內容簡介
第1部分引言與係統工程。這部分由前3章構成,它提供瞭觀察軟件生命周期行為的視角。尤其是,它覆蓋瞭軟件過程模型、方法學的概念、過程與方法的區彆以及係統工程。
第2部分分析和體係結構設計。這部分介紹瞭計劃階段的行為,包括需求提取、領域建模和架構設計。
第3部分交互式係統的建模和設計。這部分主要處理建模與交互係統設計問題,共包括6章。這6章介紹瞭如何根據需求識彆齣用例、如何對參與者�蠶低辰換ヒ約岸韻蠼換バ形�進行建模和設計、如何應用職責分配模式、如何得到作為設計藍本的設計類框圖,以及如何設計用戶交互界麵。
第4部分其他類型係統的建模和設計。這部分包括3章,每章介紹一種類型係統的建模與設計。具體來說,第13章介紹事件驅動係統的建模與設計;第14章介紹遷移係統的建模與設計;第15章介紹基於業務規則的係統的建模與設計。
第5部分應用情景特定模式。這部分由兩章構成,主要介紹如何應用情景特定模式。其中使用瞭一個案例分析,即狀態圖編輯器的設計來幫助理解這個過程。
第6部分實現和質量保證。這部分包括3章,包括實現時要考慮的問題、軟件質量保證的概念和行為以及軟件測試。
第7部分維護和配置管理。這部分包括兩章,內容覆蓋瞭軟件維護與軟件配置管理。
第8部分項目管理和軟件安全。本書的最後一部分由兩章構成,一章介紹軟件項目管理,另一章介紹軟件安全,包括涉及安全軟件係統的建模與設計的生命周期行為。
內頁插圖
前言/序言
譯者序
計算機已經滲透到社會生活的方方麵麵。計算機之所以能夠被廣泛使用,其背後的推動力就是市場經濟。但是,實際上是軟件在指揮著計算機按照人們想要的方式在工作。軟件或者說計算機程序由成韆上萬條指令構成,這些指令指揮著計算機進行復雜的運算並且控製計算機硬件設備的運行。近些年對於計算機軟件的需求快速增長。為瞭能夠滿足軟件開發工程師或係統分析師的工作需求,學習軟件工程的相關知識是非常必要的。
軟件工程關注三個環節(軟件開發過程、軟件質量保證和軟件項目管理)的行為,這些行為貫穿於軟件生命周期中,並同時發生;而麵嚮對象的軟件工程(object�瞣riented software engineering, OOSE)是軟件工程的一個專門學科。OOSE將世界和各種係統看作是由相互聯係和相互作用的對象構成。
在20世紀80年代,C++的迅速傳播激起瞭對引導OO軟件開發工作的開發方法的需求。提齣瞭三個有影響的、在軟件業內被廣泛使用的OO軟件開發方法,即Booch框圖、對象建模技術(Object Modeling Technique, OMT)和用例工程。業界很快發現使用不同的方法將設計和實現的係統集成起來是一個非常大的挑戰,原因就是不同的方法使用不同的建模概念和標記。為瞭解決這個問題,對象管理組織(Object Management Group, OMG)采用統一建模語言(Unified Modeling Language, UML)作為OMG標準。UML是一個框圖的集閤,這些框圖用於給一個OO係統的方方麵麵進行建模和設計。UML框圖用於需求分析階段來幫助開發團隊理解綫性係統的業務流程,也作為設計說明的一部分用於設計階段。本書大量展示瞭UML框圖。
感謝德剋薩斯大學阿靈頓分校的David C. Kung先生。敏捷過程、設計模式以及測試驅動的開發(test�瞕riven development, TDD)激發瞭他寫本書的巨大興趣。敏捷過程強調團隊閤作、為改變而設計、對軟件係統的每個小增量進行快速部署,以及與客戶和用戶共同開發。設計模式是對常見設計問題的有效解決方案,設計模式促進瞭軟件重用並增進瞭團隊溝通。總之,本文主要關注將UML、設計模式、OO軟件測試、TDD集成起來的敏捷統一方法學。
軟件是你的作品,需要用心血去創作。我們可以用編程語言來準確反映我們的思想,我們應該做得更好,也可以做得更好。隻要遵循科學的方法學,一定可以創作齣好的軟件作品。
本書由邢穎翻譯,牟永敏統稿。由於譯者水平有限,譯文中的不當之處在所難免,真誠希望廣大讀者和同行不吝賜教,我們將不勝感激。
譯者
2016年11月麵嚮對象軟件工程序言序言
背景
計算機被廣泛應用於人類社會的方方麵麵,它與基於其運行的應用軟件一起發揮瞭很多不同的作用。因此,軟件工程師的崗位需求也在井噴式增長。2006年3月的Money雜誌將軟件工程師評為美國最好的50個工作崗位的第一名。根據美國勞工統計局(Bureau of Labor Statistics, BLS)2010—2020預測,應用程序開發工程師崗位將從520 800增長到664 500(27.6%),而係統分析師的崗位將從544 400增長到664 800(22.1%)。為瞭能夠滿足對應用程序開發工程師或係統分析師的要求,接受軟件工程方麵的教育是非常有必要的。但是根據BLS發布的數據,2006年在軟件工程領域隻授予瞭160個學士學位和600個碩士學位,而在計算機科學領域則授予瞭10 289個學士學位和4512個碩士學位。因此,在軟件工程人纔的需求和供給之間有巨大的鴻溝,尤其是研究生。
很多人都不清楚軟件工程的研究範圍以及它到底有什麼用途,這門學科也經常被誤解。許多媒體似乎將軟件工程定義為寫Java程序。有的學生認為軟件工程包括與軟件相關的一切。另外一些人則認為軟件工程就是畫UML框圖,這個我們後麵會提到。多年前,在第一節麵嚮對象的軟件工程(object�瞣riented software engineering, OOSE)課後,一位學生對我說: “教授,你應該知道這門課對於我來說很容易,因為我們以前都畫過太多的UML圖瞭。”學期末,那個學生又來找我,他說: “教授,我想說我們很努力地學習,但我們學的是OO設計。這門課並不是我想象的畫UML圖。”所以到底什麼是軟件工程呢?作為一門學科,它包含為瞭明顯提高軟件的生産率和質量,同時降低成本和投放到市場的時間所需的工程過程、方法、質量保證和項目管理研究、教育及應用。OOSE是軟件工程的一個分支,其特點是將世界和係統看成是相關聯係和相互作用的獨特視角。20世紀80年代C++語言的齣現標誌著OOSE時代的到來。從那時起,軟件産品開始瞭其前所未有的世界範圍的增長,並因統一建模語言(unified modeling language, UML)和統一過程(unified process, UP)的産生以及世界範圍的應用而進一步加速增長。嚴格來說,軟件過程描述瞭一些階段以及在各個階段應該做什麼。它不會(詳細)定義在每個階段如何實施各種行為。類似UML這樣的建模語言會定義用於交流和記錄分析及設計思路的標記、語法和語義。UML和UP都很好,也很必需,但是還不夠。這是因為還沒有介紹如何産生畫UML圖的分析和設計思路。
動機
為瞭填補上文提到的鴻溝,我們需要一個方法學,或者稱之為“食譜”。與過程不同,方法學是對於一些步驟的詳細描述,或者是如何實施一些行為使得初學者也可以學習從而生成並部署所需的軟件係統。沒有方法學,一名剛入門的軟件工程師可能會花費數年在職的訓練纔能學會OO設計、實現和測試技巧。
寫本書的動機也包括作者被敏捷過程、設計模式以及測試驅動的開發(test�瞕riven development, TDD)所激發的巨大興趣。敏捷過程強調團隊閤作、為改變而設計、對軟件係統的每個小增量進行快速部署,以及與客戶和用戶共同開發。設計模式是對常見設計問題的有效解決方案。設計模式促進瞭軟件重用並增進瞭團隊溝通。TDD鼓勵可測試的軟件,並需要在軟件實現前産生測試腳本從而使得軟件可以立刻被測試,經常被測試。
這類似開發一個遊樂場的思路。整個過程包括如下階段: 計劃、公共支持、分析設計、籌措資金、畫施工圖紙、施工、采購設備、安裝設備、試運行、剪彩。但是,光瞭解整個過程是不夠的。開發團隊必須知道如何實施各階段的行為。例如,計劃行為包括産生初步概念、可行性分析、總體規劃。主題公園團隊必須知道如何實施這些行為。分析設計行為包括從利益相關者那裏獲取需求、實地調查、公園布局設計、公園不同區域主題設計、建模從而研究布局設計和主題、進行總體規劃。與描述不同階段行為的過程不同,一套方法學詳細描述瞭一些步驟,或者是如何實施這些行為。
遊樂場的開發是一個數年的項目,且花費達數十億美元。投資者希望公園越早産生收益越好,但是如果按照上述方法開發,投資者必須一直等到公園完工。由於傳統過程所施加的約束,總體規劃一旦結束就不能被輕易修改。而一旦公園完工,如果公園不能滿足利益相關者的期待,則其改變的代價很大。
敏捷開發旨在解決這些問題。使用敏捷開發,主題公園初步需求被迅速獲取,並允許在開發過程中進行演化。然後從中提取齣遊樂和娛樂設施的需求,並將其認真歸類。生成計劃來在相對短的時期內開發和部署這些分類設施,即小增量的快速部署。因此,不同於一刀切的總體規劃,開發過程每次隻設計和部署一類設施。在這些設施部署好並投入運營後,就尋求反饋,並與利益相關者製訂齣關於開發計劃、預算和時間錶的需求變化,即聯閤開發。另外,應用架構設計模式來提高公園對改變的適應能力和質量,也即為改變而設計。強調團隊閤作是因為團隊之間以及團隊成員之間有效的協作能夠確保這些設施按時無縫地開發和部署。敏捷過程有一些優點: 投資者能較早獲得收益,因為這些設施能按照計劃投入運營而且是可行的;由於少量的設施是同時開發和部署的,可以容易改正錯誤並進行改變。
總之,本文主要關注將UML、設計模式、OO軟件測試、TDD集成起來的敏捷統一方法學。本書中的方法學叫做“統一方法學”,因為它使用UML作為建模語言並遵循敏捷統一過程。當然這並不意味著對於所有項目都將其他方法統一起來或被當成一個“統一”方法使用。
讀者
本書的讀者為計算機科學或軟件工程的學生,以及軟件開發的專門人士。本書尤其適閤作為高年級本科生的基礎教材,以及研究生課程和IT業專業培訓課程的入門教材。本書包含過去十年間的很多內容,既有在美國以及全球的大學和公司裏講授的課程,也有行業內外軟件工程項目的應用素材。這些素材讓我能夠近距離觀察學生和軟件工程師如何應用UP、UML、設計模式和TDD,以及他們所麵對的睏難。他們的反饋讓我能夠持續更新本書的內容。
組織
本書有24章,被分為以下8個部分:
第1部分引言與係統工程。這部分由前3章構成,它提供瞭觀察軟件生命周期行為的視角。尤其是,它覆蓋瞭軟件過程模型、方法學的概念、過程與方法的區彆以及係統工程。
第2部分分析和體係結構設計。這部分介紹瞭計劃階段的行為,包括需求提取、領域建模和架構設計。
第3部分交互式係統的建模和設計。這部分主要處理建模與交互係統設計問題,共包括6章。這6章介紹瞭如何根據需求識彆齣用例、如何對參與者�蠶低辰換ヒ約岸韻蠼換バ形�進行建模和設計、如何應用職責分配模式、如何得到作為設計藍本的設計類框圖,以及如何設計用戶交互界麵。
第4部分其他類型係統的建模和設計。這部分包括3章,每章介紹一種類型係統的建模與設計。具體來說,第13章介紹事件驅動係統的建模與設計;第14章介紹遷移係統的建模與設計;第15章介紹基於業務規則的係統的建模與設計。
第5部分應用情景特定模式。這部分由兩章構成,主要介紹如何應用情景特定模式。其中使用瞭一個案例分析,即狀態圖編輯器的設計來幫助理解這個過程。
第6部分實現和質量保證。這部分包括3章,包括實現時要考慮的問題、軟件質量保證的概念和行為以及軟件測試。
第7部分維護和配置管理。這部分包括兩章,內容覆蓋瞭軟件維護與軟件配置管理。
第8部分項目管理和軟件安全。本書的最後一部分由兩章構成,一章介紹軟件項目管理,另一章介紹軟件安全,包括涉及安全軟件係統的建模與設計的生命周期行為。
本書素材可以滿足若乾軟件工程課程的需求,例如:
1. 第1~3部分與第6~8部分的一些主題對於麵嚮對象的軟件工程(OOSE)或軟件工程課程的入門,都是一個很好的組閤。既可以作為大學本科的課程,也可以作為入門的研究生課程。
2. 第2部分和第5部分以及其他部分的部分章節可以構成軟件設計模式的課程。建議將上述OOSE課程作為這門課的先修課。但是可能有些國外的學生沒學過OOSE這門課,在這種情況下,建議先使用2~4周的時間大概瞭解一下第2和第3部分介紹的方法,因為這些方法為應用模式提供瞭框架。
3. 第6和第7這兩部分可以以很多種方式講授。它們可以形成一門課——質量保證、測試和維護。也可以當成兩門課來教,分彆是軟件質量保證,以及軟件測試和維護。當然也可以作為三門課來教,分彆是軟件質量保證、軟件測試和軟件維護。
4. 第13~15章和第19~20章以及其他章的部分模式可以形成關於建模、設計、復雜係統的驗證與確認這門課。
5. 第1和第6~8這幾部分以及其他部分的部分章節可以形成軟件項目管理這門課。
6. 最後,第1部分和第2部分以及第24章加上其他章節的部分模式和主題可以構成軟件安全概論這門課程。教員可以增加素材使得課程內容更加豐富。
在網站http://www.mhhe.com/kung上可以找到教學輔助素材,包括PowerPoint教學幻燈片、隨堂測試題和測試生成軟件、測試問題的數據庫、課程描述及要點、實驗手冊,以及軟件工具。尤其對於沒上過這門課的新教師來說,這些教學工具可以幫助減少備課的時間和工作量。
緻謝
我想感謝我的眾多學生,他們的提問、反饋、熱情,以及將課程內容應用於實際項目的努力都在不斷激勵我。學生們也閱讀和使用本書以及教學素材。他們提供給我寶貴的反饋和改進的建議。有些人實地參加到瞭本書中某些方法的設計和實現中。有些人參加到瞭評估本書方法效果的實驗中。很多人畢業後繼續將本書方法應用於行業內,並和我分享他們的寶貴經曆。我想感謝我的女兒Jacquelyn Kung幫我編輯草稿的部分章節。感謝McGraw Hill環球齣版社的工程和計算機科學部的Raghu Srinivasan提供給我寶貴的改進建議和對齣版流程的指導。感謝評論傢們提齣的意見和建議。這些意見和建議對於本書的結構組織、內容顯示以及很多方麵都有極大的幫助。在漫長的寫作過程中,我的妻子Cindy Kung和很多學術界及業內的同事都給予我持續的鼓勵和無私的幫助,在此也對他們錶示感謝。
都誌輝2012年8月於清華園
麵嚮對象軟件工程/清華計算機圖書譯叢 下載 mobi epub pdf txt 電子書