青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

loop_in_codes

低調做技術__歡迎移步我的獨立博客 codemaro.com 微博 kevinlynx

淺析軟件工程開發方法學RUP

前言

因為之前一直處在游戲開發行業,由于種種原因一直對軟件工程中的項目管理、項目開發方法缺乏體驗。雖然項目中也曾倡導編寫更多的文檔,無論是模塊說明文檔還是設計文檔,但效果一直不好。不甚理想的地方主要體現在文檔的規范性欠缺、不統一、浮于表面沒有實質內容。文檔的編寫缺乏詳盡的方法指導,那么所謂的設計文檔要么是用來敷衍上級要么就是隨著開發人員的水平不一而千差萬別。

當我開始目前這個非游戲項目時,我也曾想,前期做好結構設計,制定好關鍵問題的解決方案,那么要完成這個項目就不在話下了。但是我很快就面臨了一個問題:需求不定。回想身處游戲公司的那些日子,程序員總是抱怨策劃需求變更過快過多,在每一次策劃提出一個需求變更時,謹慎的程序員都會再三讓策劃保證:放心,不會變了。而我面臨的問題則更為嚴峻。我意識到,項目的需求,就連用戶也無法一一羅列出來。我們需要的是需求調研。但就算你將客戶的所有需求全部挖掘出來后(這幾乎不可能,因為他們自己也不太清楚自己想要什么),當你交付了第一個軟件版本,幾乎可以肯定客戶會提出一大堆的需求變更:我要的不是這個,我要的那個怎么沒有,哦,我當初以為你說的是另一個意思。

當然,需求調研這種工作不是讓程序員去做的(那會更悲劇,無論是對客戶還是對程序員而言,他們都是在對牛彈琴)。但需求的不確定性也總是存在的。

事實上,需求變化本身就是一個很正常的現象。我一向愿意更悲觀地處理軟件開發方面的問題,所謂小心使得萬年船。基于此,我決定擺好心態學學軟件開發的方法學。

概要

本文簡要描述、總結了RUP開發方法學的主要內容,結合我自己的感受闡述了一些RUP的核心原則。我相信我所理解的內容是膚淺的,對于非代碼的表達我更相信其是存在歧義的。所以本文僅當是一種經驗參考,不必當真。

RUP據傳是用于指導大型甚至超大型項目開發的,我們做的不是這樣規模的項目。但是我們需要記錄下整個項目的開發過程,通過這個過程中產出的工件任何一個人可以看出這個項目是如何實現出來的,其目的在于規避唯有從海量代碼中才能熟悉項目實現這種問題。這里出現了一個概念:工件,其指的是軟件項目開發過程中任何留下記錄的事物,例如文檔、圖、代碼等。RUP的一個重要思想,在于其整個軟件開發過程都是可推導的。例如我們通常說的軟件架構,或小一點的模塊結構,都是通過開發過程中前面階段產出的工件推導得出,而不是憑借程序員的經驗拍腦袋想出來的(經驗不太可靠,并且千差萬別,而推導意味著將每個環節變得可靠)。我們借助RUP的這個特性,創建這些工件,用以建立起軟件實現的可靠知識庫。

RUP概覽

以下均摘自<Thinking in UML>中對RUP的描述:

統一過程歸納和集成了軟件開發活動中的最佳實踐,它定義了軟件開發過程中最重要的階段和工作(四個階段和九個核心工作流),定義了參與軟件開發過程的各種角色和他們的職責,還定義了軟件生產過程中產生的工件,并提供了模板。最后,采用演進式軟件生命周期(迭代)將工作、角色和工件串在一起,形成了統一過程。

統一過程是一種追求穩定的軟件方法,它追求開發穩定架構,控制變更

統一過程集成了面向對象方法、UML語言、核心工作流、工件模板和過程指導等知識

簡單來說,RUP作為一種軟件項目開發方法學,它定義了軟件開發的每一個過程,最重要的是它指導了在每一個過程需要產出什么,這些產出又是怎樣得到。它試圖規范化整個流程,以規避需求變更,項目參與者水平不一等帶來的項目不可控等問題,以期一個軟件產品穩定地開發出來。在一個項目開發過程中,最核心的資源是人,最不可控的亦是人。

RUP過程與實踐

我覺得要快速學習一種知識,需要首先獲得這門知識的總體框架。另一方面,在我們獲得更多信息后,我們需要挖掘出這門知識的核心思想。學習RUP我覺得從這兩方面入手是相對比較快速和有效的手段。

RUP框架

RUP定義了軟件開發過程的四個階段,以及9個工作流程。一張極為經典的RUP開發過程框架圖如下:

rup

RUP將整個軟件開發過程分為四個階段:

  • 先啟(Inception)、
  • 精化(Elaboration)
  • 構建(Construction)
  • 產品化(Transition)

每一個階段的工作分為9個流程:

  • 業務建模
  • 需求
  • 分析設計
  • 實施
  • 測試
  • 部署
  • 配置與變更管理
  • 項目管理
  • 環境

其中,前6個流程被統稱為”engineering disciplines”,后3個流程被稱為”supporting disciplines”。當然,我們主要關注前6個流程。那么,這些工作流程和開發階段又有什么關系呢?上圖中其實已經闡明了這些關系。

RUP指導迭代開發。在軟件開發的這4個階段中,每一個階段會被分為若干次迭代。而每一次迭代則涵蓋了這9個工作流程。隨著開發階段向產品化靠近,自然而然地,需求的變更、增加自然會減少,所以從圖中可以看出,開發過程越到后期,其工作流程中關于需求的工作則越少。同樣,在先啟階段,其需求相關的工作則占據了該階段的主要工作內容。

RUP中的迭代要求在每一次迭代中,都會完整地實施一遍整個工作流程。在軟件實施階段,甚至會在每一個迭代過程完后輸出一個可運行的軟件版本。這個版本可能會被交付給客戶,以期進一步地在功能需求上取得與客戶一致的意見。這倒是同敏捷開發有點類似。

既然制定了工作流程,那每一個工作流程該如何去實施呢?RUP制定了每個工作流程需要參與的角色,這些角色需要從事的活動,以及這些活動產生的工件。

這句話實際上反映了RUP的一個重要信息,摘自wiki:

RUP is based on a set of building blocks, or content elements, describing what is to be produced, the necessary skills required and the step-by-step explanation describing how specific development goals are to be achieved. The main building blocks, or content elements, are the following:

  • Roles (who) – A Role defines a set of related skills, competencies and responsibilities.
  • Work Products (what) – A Work Product represents something resulting from a task, including all the documents and models produced while working through the process.
  • Tasks (how) – A Task describes a unit of work assigned to a Role that provides a meaningful result.

RUP建模

在我看來,RUP每個工作流程所完成的工作,就是一個建模的過程。所謂建模,簡單來說就是將需要描述的事物通過更系統的形式表達出來,以期獲得對該事物更深入的理解。<Thinking in UML>中定義建模概念為:

建模(modeling),是指通過對客觀事物建立一種抽象的方法用以表征事物并獲得對事物本身的理解,同時把這種理解概念化,將這些邏輯概念組織起來,構成一種對所觀察的對象的內部結構和工作原理的便于理解的表達。

在這里,建模的過程需要使用一些工具。在RUP中建模使用UML來完成。在<Thinking in UML>中講述了UML的核心模型,包括:

  • 業務用例模型
  • 概念用例模型
  • 系統用例模型
  • 領域模型
  • 分析模型
  • 軟件架構和框架
  • 設計模型
  • 組件模型
  • 實施模型

可能在大家的普遍認識中,UML無非就是幾種圖,并且粗看一眼理解起來也不困難,甚至還能用來畫畫類圖做下代碼結構設計。但UML的作用不僅僅如此。

以上所描述的UML核心模型中,每個模型并不單指的的是一種UML圖。每個模型實際上都會包含幾種UML圖,會包含若干張UML圖。這些模型基本上滲透于RUP的9個工作流程中,只不過不同的工作流程使用的模型比重不一而已。

例如在“分析設計”工作流程中,可能會使用到系統用例模型、分析模型、軟件架構和框架、設計模型等,而業務用例模型可能在這個流程中根本不會用到;相反,業務用例模型則可能在“業務建模”流程中被廣泛使用。

前已述及在RUP的每個工作流程中,RUP定義了該流程需要參與的角色,以及這些角色需要進行的活動,例如這里可以看看“分析設計”流程中的角色和活動集(摘自<Thinking in UML>):

analyse-action

相應的,在該工作流程中需要產出的工件集為(摘自<Thinking in UML>):

analyse-ar

既然使用了UML作為建模工具,所以可以簡單地說這些工件主要就是UML圖,當然也會有其他文檔性質的事物,例如網絡協議結構、數據庫表等UML無法描述的東西則通過普通文字性文檔描述。

RUP最佳實踐

到目前為止我們已經了解到RUP定義了開發過程(phase),定義了每個過程包含的若干工作流程,還定義了每個工作流程需要哪些角色從事哪些活動來完成哪些工件。除此之外,RUP還提供了6條最佳實踐用以指導軟件開發:

  • 迭代開發
  • 管理需求
  • 使用基于組件的架構
  • 可視建模
  • 持續的質量驗證
  • 控制變更

這些實踐在我看來僅僅是一些項目開發的指導原則,它們滲透到每一個過程,每一個工作流程。在項目過程中實踐這些原則,用以確保項目的成功。例如我們使用UML建模,以達到“可視建模”。我們通過建立需求用例,以“管理需求”。

RUP核心思想

似乎沒有文檔來專門闡述RUP的核心思想,但我覺得掌握其核心思想才是學習的要點所在。要理解一種軟件開發方法學的核心思想,其實最好是將其與別的方法學做比較。這里先就我的一些感想做闡述。

用例驅動

用例驅動指的是整個軟件項目的推進過程,是依靠“用例”來完成。<Thinking in UML>:

在實際的軟件項目中,一個軟件要實現的功能通過用例來捕獲,接下來的所有分析、設計、實現、測試都由用例來取得,即以實現用例為目標。在統一過程中用例能夠驅動的不僅僅是分析設計。

用例簡單來說就是描述了一個系統功能。但必須注意的是,這僅僅是它定義的一小部分。用例主要分布在“業務建模”、“需求”、“分析設計”這些工作過程中。在不同的過程中用例的粒度和性質都不一樣。例如對于一個借書系統而言,在業務建模階段,我們可以獲取出一個“借書”用例,其系統邊界甚至不是系統而可能僅關注這個業務本身(因為這個階段還沒有考慮到計算機如何實現這個借書業務);在系統分析階段,我們就可以將“借書”這個用例細化為用戶和計算機軟件系統的交互;進一步地,我們可能會進一步精化這個用例,例如用戶通過網頁終端“借書”。(這里描述了很多建模的細節,可不必深究,本文只給出一個概要性的介紹)

我們說用例驅動軟件開發,但它如何驅動的呢?我在實際的建模過程中,最明顯的感受就是用例驅動了整個建模過程。

  • 在需求分析階段,我以系統使用者的角度繪制出了一份用例圖,用于表達使用者對該系統的需求
  • 然后我繪制序列圖(活動圖等)來實現這些用例,也就是闡述使用者具體是如何與系統交互的
  • 從之前的建模過程中我獲得對系統功能需求方面的認識
  • 基于前面的分析我可以繪制出系統用例圖,以明確系統的各個功能需求
  • 同樣針對用例繪制用例實現圖
  • 用例本身應該包含更多的文檔,因此我編寫用例規約用以詳細描述各個用例
  • 從用例規約、用例實現中我可以抽離出一些分析類(較設計類更高抽象的類),包含用例場景中涉及到的實體,控制邏輯
  • 細化這些分析類,將分析類組織起來形成系統,我會用界面類去銜接各個控制類
  • 將得到的分析類按模塊來劃分,從而可以得到一個初步的系統架構
  • 初步考慮系統實現,我甚至會得到一個初步是的系統部署圖
  • 回過頭不斷審視系統用例,以確認我是否實現了所有用例,這可以保證我的分析實現了所有需求,我不用枚舉所有系統特性是否被我考慮周全,我僅需在已有用例圖中核實
  • 基于模塊實現各個用例,或者基于分析類來實現系統用例
  • 通過重新繪制以及核實用例,可以進一步精化分析類,分析類在很大程度上會一一對應到設計類,而設計類則對應到實際的代碼
  • 可以進入設計階段,設計階段會考慮到系統的實現細節,例如使用的語言,使用的框架等

進入設計階段后,雖然可以進一步建模,得到會直接映射到代碼的類圖、序列圖等,但這樣的圖在面臨需求變更時,基本上會面臨修改,這意味著維護這些文檔需要耗費精力。所以,<Thinking in UML>中主張將精力放在維護分析類模型中,而通過其他約定實現從分析類到實際代碼的轉換。我覺得這個也在理。

規范化整個過程

我個人覺得RUP的一大特點在于規范化了整個軟件開發過程,每一個步驟需要哪些角色參與,該干什么,怎么去干都有指導。加之這些活動的”可推導性“,這意味著不論參與角色屬于什么水平,都可以穩固地推進項目進程。

此外,這種規范化也會給項目留下詳細的演化過程。你可以明確地看到整個軟件是如何演化出最終的產品代碼,可以深入地理解項目代碼中的設計。

總結

我只是一個RUP新手,即便如此,我依然不覺得RUP是軟件開發的萬能藥。我相信任何軟件開發方法都是有局限性的。我們在實際使用的時候也只是吸取其精華。不同的開發方法其適用范圍也是不一樣的。正如有人將RUP和XP做比較時說,如果你使用RUP去開一個雜貨鋪,在沒開張之前你就已經破產了;同樣如果你用XP去做飛機,飛機毀了十來次也許才能做出來(from <Thinking in UML> again)。

參考文檔

posted on 2013-03-21 21:41 Kevin Lynx 閱讀(3119) 評論(0)  編輯 收藏 引用 所屬分類: 模塊架構other

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一级免费视频| 国产精品拍天天在线| 午夜亚洲福利| 亚洲欧美日韩一区二区在线 | 亚洲精品欧洲精品| 国产精品一区二区黑丝| 国产精品草草| 亚洲在线网站| 欧美精品 国产精品| 激情久久婷婷| 免费在线国产精品| 欧美一级电影久久| 激情欧美丁香| 麻豆av福利av久久av| 久久综合色8888| 亚洲日本久久| 亚洲美女色禁图| 久久本道综合色狠狠五月| 亚洲午夜精品久久久久久app| 日韩午夜在线观看视频| 久久综合网络一区二区| 欧美成人有码| 亚洲动漫精品| 一区二区三区视频在线播放| 亚洲激情网址| 国产日韩精品在线观看| 欧美一区国产在线| 欧美日本一区二区视频在线观看| 欧美亚洲在线观看| 裸体歌舞表演一区二区| 99精品国产在热久久| 亚洲欧美日韩视频一区| 日韩亚洲精品电影| 西西人体一区二区| 欧美激情免费在线| 欧美高清在线| 日韩午夜中文字幕| 日韩网站在线看片你懂的| 欧美成人在线免费观看| 欧美专区在线播放| 国产精品99久久不卡二区| 亚洲精选一区二区| 你懂的亚洲视频| 欧美日韩国产免费| 欧美gay视频激情| 一区二区在线免费观看| 欧美一区成人| 亚洲欧美日韩成人| 欧美三级特黄| 夜夜嗨av一区二区三区| 91久久精品美女| 久久精品国产999大香线蕉| 亚洲国产日韩欧美综合久久| 欧美午夜免费电影| 欧美一区激情| 欧美午夜精品久久久久久孕妇| 久久精品毛片| 午夜精品视频网站| 欧美国产高清| 国内精品视频在线观看| 亚洲免费视频一区二区| 亚洲欧美国产77777| 国产精品日韩在线| 欧美伊久线香蕉线新在线| 性一交一乱一区二区洋洋av| 欧美日韩免费观看中文| 999亚洲国产精| 亚洲欧美一区二区原创| 国产精品mv在线观看| 久久精品国产69国产精品亚洲| 一区二区毛片| 亚洲在线一区二区三区| 久久成人免费网| 一区二区三区四区精品| 亚洲精品中文字幕在线观看| 日韩亚洲国产精品| 亚洲视频在线播放| 国内外成人在线视频| 久久成人精品电影| 欧美成人亚洲成人| 99在线精品视频| 国产日韩欧美亚洲一区| 久久久激情视频| 亚洲免费av片| 亚洲高清一二三区| 久久中文字幕导航| 久久久欧美精品| 欧美午夜欧美| 国产精品美女主播| 精品成人免费| 欧美一级专区| 欧美成人中文字幕| 国产日本欧美在线观看| 国产无遮挡一区二区三区毛片日本| 国产一区二区久久精品| 国产人久久人人人人爽| 国产精品伊人日日| 欧美精品一区二区在线播放| 欧美亚洲一区二区三区| 亚洲另类在线视频| 亚洲国产成人不卡| 亚洲国产欧美日韩精品| 亚洲高清二区| 91久久精品美女高潮| 免费人成精品欧美精品| 久久综合九色综合久99| 在线播放一区| 亚洲欧美一区二区三区极速播放| 老司机免费视频一区二区三区 | 久久亚洲一区二区| 亚洲国产精品第一区二区| 国产日韩精品一区二区三区| 亚洲色图制服丝袜| 亚洲欧美日韩国产中文| 小嫩嫩精品导航| 久久久亚洲高清| 欧美国产欧美综合| 国产欧美在线播放| 亚洲日本欧美| 久久久久免费观看| 亚洲美女精品成人在线视频| 午夜精品福利在线| 欧美激情精品久久久久久| 久久精品一本久久99精品| 国产精品videosex极品| 一本到12不卡视频在线dvd| 一本久道久久久| 国产精品丝袜91| 亚洲大黄网站| 国产一区导航| 在线精品亚洲一区二区| 在线精品一区二区| 国产一区二区三区成人欧美日韩在线观看 | 欧美久色视频| 黄色亚洲在线| 欧美在线视频网站| 一区二区三区高清在线观看| 蜜臀av在线播放一区二区三区 | 久久久久久久97| 免费日韩成人| 欧美中文字幕在线| 国产精品国产三级国产普通话蜜臀| 久久精品99国产精品日本| 欧美日韩国语| 国产亚洲精品v| 国产精品久久久久久妇女6080| 亚洲性夜色噜噜噜7777| 欧美日韩国产免费观看| 在线一区二区日韩| 亚洲视频观看| 国产亚洲精品久久飘花| 欧美自拍偷拍| 亚洲女爱视频在线| 亚洲国产免费看| 欧美肥婆在线| 欧美视频在线观看| 亚洲欧美日本日韩| 久久精品国产99| 欧美精品成人91久久久久久久| 亚洲专区免费| 国产精品国产三级国产a| 亚洲电影免费在线观看| 亚洲国产乱码最新视频| 久久精品一区二区国产| 欧美电影免费观看大全| 欧美日韩中文在线| 国产精品国产亚洲精品看不卡15| 久久久中精品2020中文| 亚洲视频一起| 亚洲欧美不卡| 美女精品网站| 欧美亚洲自偷自偷| 欧美激情视频一区二区三区在线播放| 亚洲欧美在线视频观看| 欧美电影美腿模特1979在线看 | 亚洲第一中文字幕| 国产精品剧情在线亚洲| 亚洲国产精品综合| 久久久久久香蕉网| 久久亚洲春色中文字幕久久久| 激情久久中文字幕| 国产精品视频网| 欧美午夜不卡影院在线观看完整版免费| 亚洲欧美日韩另类| 亚洲全黄一级网站| 鲁大师成人一区二区三区 | 欧美成人精品| 欧美色区777第一页| 一区二区精品在线| 亚洲欧美日韩人成在线播放| 国产精品乱码| 亚洲女性裸体视频| 久久久久久久综合色一本| 国产亚洲激情在线| 久久九九久精品国产免费直播| 欧美成人亚洲成人| 一级日韩一区在线观看| 国产麻豆9l精品三级站| 久久激情中文| 亚洲精品一区二区三区四区高清|