<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    走在架構(gòu)師的大道上 Jack.Wang's home

    Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks

    近來讀了一篇《怎樣成為優(yōu)秀的軟件模型設(shè)計(jì)者》的文章,感觸頗深。仔細(xì)對(duì)比分析,發(fā)現(xiàn)原來我自己和周圍的軟件開發(fā)人員平常的一些自認(rèn)為對(duì)的做法,有很多是有問題的。

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

    你開發(fā)軟件是為了供別人使用,沒有人使用的軟件只是沒有意義的數(shù)據(jù)的集合而已。許多在軟件方面很有成就的行家在他們事業(yè)的初期卻表現(xiàn)平平,因?yàn)樗麄兡菚r(shí)候?qū)⒅饕Χ技性诩夹g(shù)上。顯然,構(gòu)件(components),EJB(EnterpriseJavaBeans)和代理(agent)是很有趣的東西。但是對(duì)于用戶來說,如果你設(shè)計(jì)的軟件很難使用或者不能滿足他們的需求,后臺(tái)用再好的技術(shù)也于事無補(bǔ)。多花點(diǎn)時(shí)間到軟件需求和設(shè)計(jì)一個(gè)使用戶能很容易理解的界面上。從微軟操作系統(tǒng)和OFFICE套件在市場(chǎng)上的成功可以得到對(duì)這個(gè)問題的最佳解釋。

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

    好的軟件設(shè)計(jì)人員把大多數(shù)時(shí)間花費(fèi)在建立系統(tǒng)模型上,偶爾寫一些源代碼,但那只不過是為了驗(yàn)證設(shè)計(jì)過程中所遇到的問題。這將使他們的設(shè)計(jì)方案更加可行。有效的系統(tǒng)分析和架構(gòu)是減少后期錯(cuò)誤或復(fù)雜實(shí)現(xiàn)的必要保證。

    3.謙虛是必須的品格

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

    4.需求就是需求

    如果你沒有任何需求,你就不要?jiǎng)邮珠_發(fā)任何軟件。成功的軟件取決于時(shí)間(在用戶要求的時(shí)間內(nèi)完成)、預(yù)算和是否滿足用戶的需求。如果你不能確切知道用戶需要的是什么,或者軟件的需求定義,那么你的工程注定會(huì)失敗。我們進(jìn)行的很多需求分析,實(shí)際上是想當(dāng)然的認(rèn)為用戶的需求和自己認(rèn)為的應(yīng)該是一樣的。

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

    需求分析需要一絲不茍、精確的完成,而設(shè)計(jì)的時(shí)候反而可以發(fā)揮創(chuàng)造力和想象力。

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

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

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

    6.經(jīng)常閱讀

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

    每個(gè)月至少讀2、3本專業(yè)雜志或者1本專業(yè)書籍。保持不落伍需要付出很多的時(shí)間和金錢,但會(huì)使你成為一個(gè)很有實(shí)力的競(jìng)爭(zhēng)者。這一條在我周圍能夠真正實(shí)現(xiàn)的人很少。

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

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

    你可以通過以下方法降低程序的耦合度:隱藏實(shí)現(xiàn)細(xì)節(jié),強(qiáng)制構(gòu)件接口定義,不使用公用數(shù)據(jù)結(jié)構(gòu),不讓應(yīng)用程序直接操作數(shù)據(jù)庫(kù)。

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

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

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

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

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

    9.考慮軟件的移植性

    移植是軟件開發(fā)中一項(xiàng)具體而又實(shí)際的工作,不要相信某些軟件工具的廣告宣傳。

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

    當(dāng)你使用了某個(gè)操作系統(tǒng)的特性,如它的進(jìn)程間通信(IPC)策略,或用某數(shù)據(jù)庫(kù)專有語言寫了存儲(chǔ)過程。你的軟件和那個(gè)特定的產(chǎn)品結(jié)合度就已經(jīng)很高了。

    好的軟件設(shè)計(jì)者把那些特有的實(shí)現(xiàn)細(xì)節(jié)打包隱藏起來,所以,當(dāng)那些特性該變的時(shí)候,你僅僅需要更新那個(gè)包就可以了。這些說到容易做到很難,沒有扎實(shí)的基本功是很難成功的。

    10.接受變化

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

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

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

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

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

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

    在設(shè)計(jì)的開始考慮軟件的規(guī)模需求,避免在用戶群突然增大的情況下,重寫軟件。同時(shí)也不能只因?yàn)榭紤]未知的用戶量而花費(fèi)太大的成本。需求分析是平衡控制的依據(jù)。

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

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

    但是你的設(shè)計(jì)還必須具有可靠性,可用性,便攜性和可擴(kuò)展性。你應(yīng)該在工程開始就應(yīng)該定義并區(qū)分好這些因素,以便在工作中恰當(dāng)使用。性能可以是,也可以不是優(yōu)先級(jí)最高的因素,我的觀點(diǎn)是,給每個(gè)設(shè)計(jì)因素應(yīng)有的考慮。花哨的、運(yùn)行快速但是不能解決用戶問題的系統(tǒng),是不會(huì)得到用戶的滿意的。

    13.管理接口

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

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

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

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

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

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

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

    避免走捷徑,只做一次但要做對(duì)。

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

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

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

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

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

    一般來說,好的模型設(shè)計(jì)和開發(fā)人員,都會(huì)避免重新設(shè)計(jì)已經(jīng)成熟的并被廣泛應(yīng)用的東西。

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

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

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

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

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

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

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

    使用一個(gè)很優(yōu)秀的CASE工具并不能使你成為一個(gè)建模專家,只能使你成為一個(gè)優(yōu)秀CASE工具的使用者。成為一個(gè)優(yōu)秀的建模專家需要多年的積累,不會(huì)是一周針對(duì)某個(gè)價(jià)值幾千美元工具的培訓(xùn)。一個(gè)優(yōu)秀的CASE工具是很重要,但你必須學(xué)習(xí)使用它,并能夠使用它設(shè)計(jì)它支持的模型。現(xiàn)在的編程工具越來越容易上手,有不少的人已經(jīng)不去加強(qiáng)對(duì)基礎(chǔ)知識(shí)的學(xué)習(xí),這是很危險(xiǎn)的。

    20.理解完整的過程

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

    軟件開發(fā)是一個(gè)很復(fù)雜的過程,除了編程、建模、測(cè)試等你擅長(zhǎng)工作外,還有很多工作要做。好的設(shè)計(jì)者需要考慮全局。必須從長(zhǎng)遠(yuǎn)考慮如何使軟件滿足用戶需要,如何提供維護(hù)和技術(shù)支持等。

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

    如果測(cè)試對(duì)你的軟件來說是無所謂的,那么你的軟件多半也沒什么必要被開發(fā)出來。建立一個(gè)技術(shù)原型供技術(shù)評(píng)審使用,以檢驗(yàn)?zāi)愕能浖P汀T谲浖芷谥校酵戆l(fā)現(xiàn)的錯(cuò)誤越難修改,修改成本越昂貴。盡可能早的做測(cè)試是很值得的。測(cè)試工作一貫是得不到重視的,即便你天天掛在嘴上,但是請(qǐng)看看你的行動(dòng)。黑盒測(cè)試將壓力給了測(cè)試人員,實(shí)際上很多的無用測(cè)試的根源應(yīng)該從白盒測(cè)試中查找,這是軟件開發(fā)人員的問題。

    22.把你的工作歸檔

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

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

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

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

    要想成為優(yōu)秀的軟件架構(gòu)師或軟件開發(fā)人員,必須要有一個(gè)端正的態(tài)度,如果只是想依靠這個(gè)所謂的名份做幌子、混日子。我勸你還是不要踏入這個(gè)行業(yè),以免誤人誤己。

     

    作者簡(jiǎn)介:晏高明,中原油田地質(zhì)錄井處信息管理中心工作,2006年獲國(guó)家級(jí)“系統(tǒng)分析員”認(rèn)證資格證書。原文地址:http://www.zylj.com/Article_Show.asp?ArticleID=1184





    本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見可給我留言,愿共同學(xué)習(xí)進(jìn)步。
    posted on 2008-10-15 15:01 Jack.Wang 閱讀(4872) 評(píng)論(6)  編輯  收藏 所屬分類: 架構(gòu)師篇

    Feedback

    # re: 《怎樣成為優(yōu)秀的軟件架構(gòu)師》解析 (好文轉(zhuǎn)載) 2008-11-28 12:49 leke_斌
    閱讀本文中后,明白自己在某些方面還需要更多的改進(jìn)和努力。  回復(fù)  更多評(píng)論
      

    # re: 《怎樣成為優(yōu)秀的軟件架構(gòu)師》解析 (好文轉(zhuǎn)載) 2008-12-19 11:34 lbom
    有點(diǎn)冗余,但都在點(diǎn)子上,構(gòu)架中稍加注意即是了  回復(fù)  更多評(píng)論
      

    # re: 《怎樣成為優(yōu)秀的軟件架構(gòu)師》解析 (好文轉(zhuǎn)載)[未登錄] 2009-01-17 19:15 Atman
    很好 看到了 這篇文章 我知道了我未來的路該怎么走了 非常感謝你!  回復(fù)  更多評(píng)論
      

    # re: 《怎樣成為優(yōu)秀的軟件架構(gòu)師》解析 (好文轉(zhuǎn)載) 2009-02-25 10:16 北京小強(qiáng)
    呵呵,看了你這篇文章,感覺不錯(cuò),有所啟發(fā),謝了.  回復(fù)  更多評(píng)論
      

    # re: 《怎樣成為優(yōu)秀的軟件架構(gòu)師》解析 (好文轉(zhuǎn)載) 2009-06-05 19:00 abbott
    在需求輸入的時(shí)候,架構(gòu)師最頭疼的是,需要太淺顯,沒有抽出需求問題的本質(zhì),如果按照需求的原意進(jìn)行構(gòu)建,就會(huì)沒有重用性,總是一次性的解決問題,對(duì)于潛在問題的解決就沒有兼容和擴(kuò)展的設(shè)計(jì)考慮。
    所以,好的架構(gòu)師需要好的系統(tǒng)分析師的配合,才能設(shè)計(jì)出好的架構(gòu)。架構(gòu)師本身并不會(huì)獨(dú)立考慮架構(gòu),他們會(huì)從業(yè)務(wù)模型中需求架構(gòu)構(gòu)建的平衡點(diǎn)。有時(shí),一個(gè)好的架構(gòu)師遇到一個(gè)蹩腳的需求分析師,忍不住就想自己做需求。可惜,公司的流程制度有不會(huì)要求這樣處理,人才結(jié)構(gòu)的錯(cuò)位,是大部分工作錯(cuò)位的基礎(chǔ)。
    現(xiàn)在的公司大部分知道需求的作用,從流程結(jié)構(gòu)上,分解出需求分析師的崗位和角色,但合適的人才有很難勝任,但需求分析師具有許多決策權(quán),而架構(gòu)師卻沒有產(chǎn)品的決策權(quán)。反過來,如果架構(gòu)師具有很好的決策權(quán)的話,架構(gòu)師,就會(huì)影響和要求需求分析師用更深遠(yuǎn)的眼光來捕獲需求和定義需求。
    一個(gè)公司的高層技術(shù)管理者,首先應(yīng)該是一個(gè)好的架構(gòu)師師,一個(gè)好的產(chǎn)品規(guī)劃師,其次才是一個(gè)好的需求分析師。
      回復(fù)  更多評(píng)論
      

    # re: 《怎樣成為優(yōu)秀的軟件架構(gòu)師》解析 (好文轉(zhuǎn)載) 2012-10-11 15:06 tassardge
    這篇文章的內(nèi)容一般的軟件工程教材都有寫啊  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲综合一区二区三区四区五区| 亚洲爆乳无码专区| 成人久久久观看免费毛片| 亚洲高清国产拍精品青青草原 | 亚洲无限乱码一二三四区| 日韩在线免费电影| a级毛片视频免费观看| 最新国产精品亚洲| 亚洲免费人成在线视频观看| 波多野结衣在线免费观看| 一级毛片免费在线| 亚洲一区二区三区免费在线观看 | 国产真实伦在线视频免费观看| 在线免费视频你懂的| 亚洲一线产品二线产品| 亚洲乱码日产一区三区| 免费无码又爽又高潮视频| 久久久久久AV无码免费网站下载| 亚洲av日韩av永久在线观看| 久久亚洲精品成人| 亚洲精品无码av天堂| 欧亚精品一区三区免费| 暖暖日本免费中文字幕| 无人视频免费观看免费视频| 亚洲videos| 亚洲人成在线影院| 亚洲一区日韩高清中文字幕亚洲| 国产精品视频永久免费播放| 久久黄色免费网站| 国产精品午夜免费观看网站| 亚洲国产欧洲综合997久久| 亚洲国产日韩在线成人蜜芽| 亚洲国产三级在线观看| 亚洲日韩在线中文字幕第一页| 在线观看成人免费| av无码久久久久不卡免费网站 | 国产国产人免费人成免费视频 | 欧洲一级毛片免费| 永久免费A∨片在线观看| 一级毛片在线免费视频| 亚洲国产成人久久精品软件|