@hunter129

          天天學(xué)習(xí),好好向上!

             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            21 隨筆 :: 5 文章 :: 37 評(píng)論 :: 0 Trackbacks

          轉(zhuǎn)的~~
          原文
          http://www.cnblogs.com/yxonline/archive/2007/07/09/811434.html
          我們期待自己成為一個(gè)優(yōu)秀的軟件模型設(shè)計(jì)者,但是,要怎樣做,又從哪里開(kāi)始呢?

          將下列原則應(yīng)用到你的軟件工程中,你會(huì)獲得立桿見(jiàn)影的成果。

          1. 人遠(yuǎn)比技術(shù)重要

          你開(kāi)發(fā)軟件是為了供別人使用,沒(méi)有人使用的軟件只是沒(méi)有意義的數(shù)據(jù)的集合而已。許多在軟件方面很有成就的行家在他們事業(yè)的初期卻表現(xiàn)平平,因?yàn)樗麄? 那時(shí)侯將主要精力都集中在技術(shù)上。顯然,構(gòu)件(components),EJB(Enterprise Java Beans)和代理(agent)是很有趣的東西。但是對(duì)于用戶(hù)來(lái)說(shuō),如果你設(shè)計(jì)的軟件很難使用或者不能滿(mǎn)足他們的需求,后臺(tái)用再好的技術(shù)也于事無(wú)補(bǔ)。多 花點(diǎn)時(shí)間到軟件需求和設(shè)計(jì)一個(gè)使用戶(hù)能很容易理解的界面上。

          2. 理解你要實(shí)現(xiàn)的東西

          好的軟件設(shè)計(jì)人員把大多數(shù)時(shí)間花費(fèi)在建立系統(tǒng)模型上,偶爾寫(xiě)一些源代碼,但那只不過(guò)是為了驗(yàn)證設(shè)計(jì)過(guò)程中所遇到的問(wèn)題。這將使他們的設(shè)計(jì)方案更加可行。

          3. 謙虛是必須的品格

          你不可能知道一切,你甚至要很努力才能獲得足夠用的知識(shí)。軟件開(kāi)發(fā)是一項(xiàng)復(fù)雜而艱巨的工作,因?yàn)檐浖_(kāi)發(fā)所用到的工具和技術(shù)是在不斷更新的。而且, 一個(gè)人也不可能了解軟件開(kāi)發(fā)的所有過(guò)程。在日常生活中你每天接觸到的新鮮事物可能不會(huì)太多。但是對(duì)于從事軟件開(kāi)發(fā)的人來(lái)說(shuō),每天可以學(xué)習(xí)很多新東西(如果 愿意的話(huà))。

          4. 需求就是需求

          如果你沒(méi)有任何需求,你就不要?jiǎng)邮珠_(kāi)發(fā)任何軟件。成功的軟件取決于時(shí)間(在用戶(hù)要求的時(shí)間內(nèi)完成)、預(yù)算和是否滿(mǎn)足用戶(hù)的需求。如果你不能確切知道用戶(hù)需要的是什么,或者軟件的需求定義,那么你的工程注定會(huì)失敗。

          5. 需求其實(shí)很少改變,改變的是你對(duì)需求的理解

          Object ToolSmiths公司(www.objecttoolsmiths.com)的Doug Smith常喜歡說(shuō):“分析是一門(mén)科學(xué),設(shè)計(jì)是一門(mén)藝術(shù)”。他的意思是說(shuō)在眾多的“正確”分析模型中只存在一個(gè)最“正確”分析模型可以完全滿(mǎn)足解決某個(gè)具 體問(wèn)題的需要(我理解的意思是需求分析需要一絲不茍、精確的完成,而設(shè)計(jì)的時(shí)候反而可以發(fā)揮創(chuàng)造力和想象力 - 譯者注)。

          如果需求經(jīng)常改動(dòng),很可能是你沒(méi)有作好需求分析,并不是需求真的改變了。

          你可以抱怨用戶(hù)不能告訴你他們想得到什么,但是不要忘記,收集需求信息是你工作。

          你可以說(shuō)是新來(lái)的開(kāi)發(fā)人員把事情搞得一團(tuán)糟,但是,你應(yīng)該確定在工程的第一天就告訴他們應(yīng)該做什么和怎樣去做。

          如果你覺(jué)得公司不讓你與用戶(hù)充分接觸,那只能說(shuō)明公司的管理層并不是真正支持你的項(xiàng)目。

          你可以抱怨公司有關(guān)軟件工程的管理制度不合理,但你必須了解大多同行公司是怎么做的。

          你可以借口說(shuō)你們的競(jìng)爭(zhēng)對(duì)手的成功是因?yàn)樗麄冇辛艘粋€(gè)新的理念,但是為什么你沒(méi)先想到呢?

          需求真正改變的情況很少,但是沒(méi)有做好需求分析工作的理由卻很多。

          6. 經(jīng)常閱讀

          在這個(gè)每日都在發(fā)生變化的產(chǎn)業(yè)中,你不可能在已取得的成就上陶醉太久。

          每個(gè)月至少讀2、3本專(zhuān)業(yè)雜志或者1本專(zhuān)業(yè)書(shū)籍。保持不落伍需要付出很多的時(shí)間和金錢(qián),但會(huì)使你成為一個(gè)很有實(shí)力的競(jìng)爭(zhēng)者。

          7. 降低軟件模塊間的耦合度

          高耦合度的系統(tǒng)是很難維護(hù)的。一處的修改引起另一處甚至更多處的變動(dòng)。

          你可以通過(guò)以下方法降低程序的耦合度:隱藏實(shí)現(xiàn)細(xì)節(jié),強(qiáng)制構(gòu)件接口定義,不使用公用數(shù)據(jù)結(jié)構(gòu),不讓?xiě)?yīng)用程序直接操作數(shù)據(jù)庫(kù)(我的經(jīng)驗(yàn)法則是:當(dāng)應(yīng)用程序員在寫(xiě)SQL代碼的時(shí)候,你的程序的耦合度就已經(jīng)很高了)。

          耦合度低的軟件可以很容易被重用、維護(hù)和擴(kuò)充。

          8. 提高軟件的內(nèi)聚性

          如果一個(gè)軟件的模塊只實(shí)現(xiàn)一個(gè)功能,那么該模塊具有高內(nèi)聚性。高內(nèi)聚性的軟件更容易維護(hù)和改進(jìn)。

          判斷一個(gè)模塊是否有高的內(nèi)聚性,看一看你是否能夠用一個(gè)簡(jiǎn)單的句子描述它的功能就行了。如果你用了一段話(huà)或者你需要使用類(lèi)似“和”、“或”等連詞,則說(shuō)明你需要將該模塊細(xì)化。

          只有高內(nèi)聚性的模塊才可能被重用。

          9. 考慮軟件的移植性

          移植是軟件開(kāi)發(fā)中一項(xiàng)具體而又實(shí)際的工作,不要相信某些軟件工具的廣告宣傳(比如java 的宣傳口號(hào)write once run many ? 譯者注)。

          即使僅僅對(duì)軟件進(jìn)行常規(guī)升級(jí),也要把這看得和向另一個(gè)操作系統(tǒng)或數(shù)據(jù)庫(kù)移植一樣重要。

          記得從16位Windows移植到32位windows的“樂(lè)趣”嗎 ?當(dāng)你使用了某個(gè)操作系統(tǒng)的特性,如它的進(jìn)程間通信(IPC)策略,或用某數(shù)據(jù)庫(kù)專(zhuān)有語(yǔ)言寫(xiě)了存儲(chǔ)過(guò)程。你的軟件和那個(gè)特定的產(chǎn)品結(jié)合度就已經(jīng)很高了。

          好的軟件設(shè)計(jì)者把那些特有的實(shí)現(xiàn)細(xì)節(jié)打包隱藏起來(lái),所以,當(dāng)那些特性該變的時(shí)候,你的僅僅需要更新那個(gè)包就可以了。

          10. 接受變化

          這是一句老話(huà)了:唯一不變的只有變化。

          你應(yīng)該將所有系統(tǒng)將可能發(fā)生的變化以及潛在需求記錄下來(lái),以便將來(lái)能夠?qū)崿F(xiàn)(參見(jiàn)“Architecting for Change”,Thinking Objectively, May 1999)

          通過(guò)在建模期間考慮這些假設(shè)的情況,你就有可能開(kāi)發(fā)出足夠強(qiáng)壯且容易維護(hù)的軟件。設(shè)計(jì)強(qiáng)壯的軟件是你最基本的目標(biāo)。

          11. 不要低估對(duì)軟件規(guī)模的需求

          Internet 帶給我們的最大的教訓(xùn)是你必須在軟件開(kāi)發(fā)的最初階段就考慮軟件規(guī)模的可擴(kuò)充性。

          今天只有100人的部門(mén)使用的應(yīng)用程序,明天可能會(huì)被有好幾萬(wàn)人的組織使用,下月,通過(guò)因特網(wǎng)可能會(huì)有幾百萬(wàn)人使用它。

          在軟件設(shè)計(jì)的初期,根據(jù)在用例模型中定義的必須支持的基本事務(wù)處理,確定軟件的基本功能。然后,在建造系統(tǒng)的時(shí)候再逐步加入比較常用的功能。

          在設(shè)計(jì)的開(kāi)始考慮軟件的規(guī)模需求,避免在用戶(hù)群突然增大的情況下,重寫(xiě)軟件。

          12. 性能僅僅是很多設(shè)計(jì)因素之一

          關(guān)注軟件設(shè)計(jì)中的一個(gè)重要因素--性能,這好象也是用戶(hù)最關(guān)心的事情。一個(gè)性能不佳的軟件將不可避免被重寫(xiě)。

          但是你的設(shè)計(jì)還必須具有可靠性,可用性,便攜性和可擴(kuò)展性。你應(yīng)該在工程開(kāi)始就應(yīng)該定義并區(qū)分好這些因素,以便在工作中恰當(dāng)使用。性能可以是,也可以不是優(yōu)先級(jí)最高的因素,我的觀點(diǎn)是,給每個(gè)設(shè)計(jì)因素應(yīng)有的考慮。

          13. 管理接口

          “UML User Guide”(Grady Booch,Ivar Jacobson和Jim Rumbaugh ,Addison Wesley, 1999)中指出,你應(yīng)該在開(kāi)發(fā)階段的早期就定義軟件模塊之間的接口。

          這有助于你的開(kāi)發(fā)人員全面理解軟件的設(shè)計(jì)結(jié)構(gòu)并取得一致意見(jiàn),讓各模塊開(kāi)發(fā)小組相對(duì)獨(dú)立的工作。一旦模塊的接口確定之后,模塊怎樣實(shí)現(xiàn)就不是很重要了。

          從根本上說(shuō),如果你不能夠定義你的模塊“從外部看上去會(huì)是什么樣子”,你肯定也不清楚模塊內(nèi)要實(shí)現(xiàn)什么。

          14. 走近路需要更長(zhǎng)的時(shí)間

          在軟件開(kāi)發(fā)中沒(méi)有捷徑可以走。

          縮短你的在需求分析上花的時(shí)間,結(jié)果只能是開(kāi)發(fā)出來(lái)的軟件不能滿(mǎn)足用戶(hù)的需求,必須被重寫(xiě)。

          在軟件建模上每節(jié)省一周,在將來(lái)的編碼階段可能會(huì)多花幾周時(shí)間,因?yàn)槟阍谌嫠伎贾熬蛣?dòng)手寫(xiě)程序。

          你為了節(jié)省一天的測(cè)試時(shí)間而漏掉了一個(gè)bug,在將來(lái)的維護(hù)階段,可能需要花幾周甚至幾個(gè)月的時(shí)間去修復(fù)。與其如此,還不如重新安排一下項(xiàng)目計(jì)劃。

          避免走捷徑,只做一次但要做對(duì)(do it once by doing it right)。

          15. 別信賴(lài)任何人

          產(chǎn)品和服務(wù)銷(xiāo)售公司不是你的朋友,你的大部分員工和高層管理人員也不是。

          大部分產(chǎn)品供應(yīng)商希望把你牢牢綁在他們的產(chǎn)品上,可能是操作系統(tǒng),數(shù)據(jù)庫(kù)或者某個(gè)開(kāi)發(fā)工具。

          大部分的顧問(wèn)和承包商只關(guān)心你的錢(qián)并不是你的工程(停止向他們付款,看一看他們會(huì)在周?chē)舳嚅L(zhǎng)時(shí)間)。

          大部分程序員認(rèn)為他們自己比其他人更優(yōu)秀,他們可能拋棄你設(shè)計(jì)的模型而用自己認(rèn)為更好的。

          只有良好的溝通才能解決這些問(wèn)題。

          要明確的是,不要只依靠一家產(chǎn)品或服務(wù)提供商,即使你的公司(或組織)已經(jīng)在建模、文檔和過(guò)程等方面向那個(gè)公司投入了很多錢(qián)。

          16. 證明你的設(shè)計(jì)在實(shí)踐中可行

          在設(shè)計(jì)的時(shí)候應(yīng)當(dāng)先建立一個(gè)技術(shù)原型, 或者稱(chēng)為“端到端”原型。以證明你的設(shè)計(jì)是能夠工作的。

          你應(yīng)該在開(kāi)發(fā)工作的早期做這些事情,因?yàn)椋绻浖脑O(shè)計(jì)方案是不可行的,在編碼實(shí)現(xiàn)階段無(wú)論采取什么措施都于事無(wú)補(bǔ)。技術(shù)原型將證明你的設(shè)計(jì)的可行性,從而,你的設(shè)計(jì)將更容易獲得支持。

          17. 應(yīng)用已知的模式

          目前,我們有大量現(xiàn)成的分析和設(shè)計(jì)模式以及問(wèn)題的解決方案可以使用。

          一般來(lái)說(shuō),好的模型設(shè)計(jì)和開(kāi)發(fā)人員,都會(huì)避免重新設(shè)計(jì)已經(jīng)成熟的并被廣泛應(yīng)用的東西。http://www.ambysoft.com/processPatternsPage.html收藏了許多開(kāi)發(fā)模式的信息。

          18. 研究每個(gè)模型的長(zhǎng)處和弱點(diǎn)

          目前有很多種類(lèi)的模型可以使用,如下圖所示。用例捕獲的是系統(tǒng)行為需求,數(shù)據(jù)模型則描述支持一個(gè)系統(tǒng)運(yùn)行所需要的數(shù)據(jù)構(gòu)成。你可能會(huì)試圖在用例中加 入實(shí)際數(shù)據(jù)描述,但是,這對(duì)開(kāi)發(fā)者不是非常有用。同樣,數(shù)據(jù)模型對(duì)描述軟件需求來(lái)說(shuō)是無(wú)用的。每個(gè)模型在你建模過(guò)程中有其相應(yīng)的位置,但是,你需要明白在 什么地方,什么時(shí)候使用它們。

          19. 在現(xiàn)有任務(wù)中應(yīng)用多個(gè)模型

          當(dāng)你收集需求的時(shí)候,考慮使用用例模型,用戶(hù)界面模型和領(lǐng)域級(jí)的類(lèi)模型。

          當(dāng)你設(shè)計(jì)軟件的時(shí)候,應(yīng)該考慮制作類(lèi)模型,順序圖、狀態(tài)圖、協(xié)作圖和最終的軟件實(shí)際物理模型。

          程序設(shè)計(jì)人員應(yīng)該慢慢意識(shí)到,僅僅使用一個(gè)模型而實(shí)現(xiàn)的軟件要么不能夠很好地滿(mǎn)足用戶(hù)的需求,要么很難擴(kuò)展。

          20. 教育你的聽(tīng)眾

          你花了很大力氣建立一個(gè)很成熟的系統(tǒng)模型,而你的聽(tīng)眾卻不能理解它們,甚至更糟-連為什么要先建立模型都不知道。那么你的工作是毫無(wú)意義的。

          教給你開(kāi)發(fā)人員基本的建模知識(shí);否則,他們會(huì)只看看你畫(huà)的漂亮圖表,然后繼續(xù)編寫(xiě)不規(guī)范的程序。

          另外, 你還需要告訴你的用戶(hù)一些需求建模的基礎(chǔ)知識(shí)。給他們解釋你的用例(uses case)和用戶(hù)界面模型,以使他們能夠明白你要表達(dá)地東西。當(dāng)每個(gè)人都能使用一個(gè)通用的設(shè)計(jì)語(yǔ)言的時(shí)候(比如UML-譯者注),你的團(tuán)隊(duì)才能實(shí)現(xiàn)真正的合作。

          21. 帶工具的傻瓜還是傻瓜

          你給我CAD/CAM工具,請(qǐng)我設(shè)計(jì)一座橋。但是,如果那座橋建成的話(huà),我肯定不想當(dāng)?shù)谝粋€(gè)從橋上過(guò)的人,因?yàn)槲覍?duì)建筑一竅不通。

          使用一個(gè)很優(yōu)秀的CASE工具并不能使你成為一個(gè)建模專(zhuān)家,只能使你成為一個(gè)優(yōu)秀CASE工具的使用者。成為一個(gè)優(yōu)秀的建模專(zhuān)家需要多年的積累,不 會(huì)是一周針對(duì)某個(gè)價(jià)值幾千美元工具的培訓(xùn)。一個(gè)優(yōu)秀的CASE工具是很重要,但你必須學(xué)習(xí)使用它,并能夠使用它設(shè)計(jì)它支持的模型。

          22. 理解完整的過(guò)程

          好的設(shè)計(jì)人員應(yīng)該理解整個(gè)軟件過(guò)程,盡管他們可能不是精通全部實(shí)現(xiàn)細(xì)節(jié)。

          軟件開(kāi)發(fā)是一個(gè)很復(fù)雜的過(guò)程,還記得《object-oriented software process》第36頁(yè)的內(nèi)容嗎?除了編程、建模、測(cè)試等你擅長(zhǎng)工作外,還有很多工作要做。

          好的設(shè)計(jì)者需要考慮全局。必須從長(zhǎng)遠(yuǎn)考慮如何使軟件滿(mǎn)足用戶(hù)需要,如何提供維護(hù)和技術(shù)支持等。

          23. 常做測(cè)試,早做測(cè)試

          如果測(cè)試對(duì)你的軟件來(lái)說(shuō)是無(wú)所謂的,那么你的軟件多半也沒(méi)什么必要被開(kāi)發(fā)出來(lái)。

          建立一個(gè)技術(shù)原型供技術(shù)評(píng)審使用,以檢驗(yàn)?zāi)愕能浖P汀?/p>

          在軟件生命周期中,越晚發(fā)現(xiàn)的錯(cuò)誤越難修改,修改成本越昂貴。盡可能早的做測(cè)試是很值得的。

          24. 把你的工作歸檔

          不值得歸檔的工作往往也不值得做。歸檔你的設(shè)想,以及根據(jù)設(shè)想做出的決定;歸檔軟件模型中很重要但不很明顯的部分。 給每個(gè)模型一些概要描述以使別人很快明白模型所表達(dá)的內(nèi)容。

          25. 技術(shù)會(huì)變,基本原理不會(huì)

          如果有人說(shuō)“使用某種開(kāi)發(fā)語(yǔ)言、某個(gè)工具或某某技術(shù),我們就不需要再做需求分析,建模,編碼或測(cè)試”。不要相信,這只說(shuō)明他還缺乏經(jīng)驗(yàn)。拋開(kāi)技術(shù)和 人的因素,實(shí)際上軟件開(kāi)發(fā)的基本原理自20世紀(jì)70年代以來(lái)就沒(méi)有改變過(guò)。你必須還定義需求,建模,編碼,測(cè)試,配置,面對(duì)風(fēng)險(xiǎn),發(fā)布產(chǎn)品,管理工作人員 等等。

          軟件建模技術(shù)是需要多年的實(shí)際工作才能完全掌握的。好在你可以從我的建議開(kāi)始,完善你們自己的軟件開(kāi)發(fā)經(jīng)驗(yàn)。

          以雞湯開(kāi)始,加入自己的蔬菜。然后,開(kāi)始享受你自己的豐盛晚餐吧。

          posted on 2008-01-31 22:59 hunter129 閱讀(306) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): 設(shè)計(jì)

          評(píng)論

          # re: 怎么成為優(yōu)秀的軟件模型設(shè)計(jì)者? 2008-02-01 08:18 如坐春風(fēng)
          這只是Tips,不是方法論。  回復(fù)  更多評(píng)論
            

          # re: 怎么成為優(yōu)秀的軟件模型設(shè)計(jì)者? 2008-02-01 09:43 落N(xiāo)icety
          @如坐春風(fēng)
          恩 本來(lái)也不是一篇高深的論文
          但是在實(shí)踐中還是可以得到很多啟示的  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 两当县| 攀枝花市| 曲麻莱县| 诏安县| 乡宁县| 武宣县| 历史| 长治县| 济源市| 新昌县| 五峰| 前郭尔| 攀枝花市| 盐城市| 台南市| 金阳县| 商都县| 汉源县| 宁陵县| 武强县| 郧西县| 泾阳县| 成安县| 陆河县| 镇雄县| 宣化县| 通州市| 灵宝市| 山东省| 武汉市| 德清县| 金坛市| 许昌市| 灵宝市| 冷水江市| 诸暨市| 东港市| 唐山市| 华池县| 宁德市| 尚志市|