改進管理方法,增進員工激情 (轉)


          制造激情第一招,改變并制造危機:

          變化能讓人心理上有新鮮感,新鮮帶來好奇,沒有人不圖新鮮,新的東西對老人不能躺在原有的功勞簿上睡大覺,他為了維持自己的權威不得不奮勇爭先,新人可算有了顛覆格局的機會,一馬當先,激情澎湃,都是常見的現象。很多創業團隊的人,既沒有股份,也不是什么經理,依然那么強的歸屬感,那么拼命,反而是公司發展起來后,待遇好了,激情卻褪了。所以要改變,并在改變的時候制造出危機來,讓核心團隊成員生活在市場競爭和市場危機中,不過注意一點,大家辛辛苦苦干半天,生于憂患了,不要太吝惜金錢,該獎勵就要獎勵點,以免心力交瘁時還要考慮家庭生活負擔,那他極有可能就真得不玩了。

          制造激情第二招,制造勢均力敵的競爭:

          在日常生活和工作中設置競爭的組織機構職責和評價方法,讓經理之間競爭去。注意兩個問題:競爭者之間要勢均力敵,差得太多也就沒近了;對放棄競爭的要處理,對競爭成的要精神獎勵;讓受獎勵的是70%以上的人,寒磣的是小部分人,千萬不要做反了,人都有從眾心理,獎勵人多的,差的小部分會努力往上靠,少數優秀的被獎勵,優秀的往庸人堆里扎,切記。

          制造激情第三招,讓我干的管理模式改成我要干的模式:

          劉紹勇董事長發現飛行員缺乏激情,于是開啟了自費學飛行的先河,符合條件的人都可以報名,缺錢公司可以貸款,飛行員是公司的資源,最難管,老人躺著睡大覺也不敢把他怎么樣,劉先生的一招使許多具備專業素質的年輕人積極參與進來,后備梯隊就有了,以積極的后備梯隊給老的人制造了無形的壓力。原來是公司認為需要必須把某人派去,這是讓我干,現在是通過放開,成了我要干。你不干,別人干,原來比你下一層次的人要干,上一層的人就坐不住了。

          制造激情第四招,強壓并有讓其有成就:

          下屬不能主動進取,就強行加壓,讓他加班,頻繁檢查,并讓他有短期的成就,幾個要素缺一不可。

          維持激情第五招,不斷發展自己的組織

          對下屬最大的激勵是不斷發展你的組織,不斷膨脹的規模,不斷增加的市場份額,忙不過來的業務讓員工會有很強的受感染力,究竟是為什么我也不知道原因。

          創造激情第六招,選擇認同這個業務并能在執行中發現樂趣和知識點的人:

          有的人就從來不缺乏激情,只是能否找到宣泄的窗口,所以一定要找到這種人,他認同這個業務,并能在這個業務的執行中發現很多的學習點和樂趣,然后他才能執行好。天生缺乏激情的人,不能感染他人,有激情但沒在您所希望他負責的崗位職責上的人,通過描述業務的點看能否點燃他的激情,因為有的年輕人可能接觸某類業務少,不了解細節的學問,一旦深入可能會沉迷其中,這時候就需要引路人指給他。

          維持激情第七招,領導者個人感染力和管理方法:

          以上都是外圍的因素,領導者本身也是有文章可做的,激情的創造和維持基本上來自于中上層管理者,基層經理如果被授權足夠多,也能起到一點作用,比如個人的激情能感染周圍的人,再加上一些具體方法,讓團隊的氣氛和諧,爭論但不詆毀。具體的術方面的方法和工具未來會有專門的文章講述,不再細化了。

          內因決定外因,外因通過內因起作用,激情是內心的表現,是內因,攻心為上,有了內因,外因的條件再艱苦,都將無往而不勝。泥腿子趕走了日本鬼子,土八路打敗了蔣正規軍,靠的是激情,革命歌曲大比賽,連隊之間大比武,支部建在連上,嚴明的紀律,整齊劃一的生活規矩等等細節都是創造和維持激情的戰術。激情的人、激情的方法將創造出激情的事業。

          posted @ 2008-01-08 19:21 靈! 閱讀(267) | 評論 (0)編輯 收藏

          自我訓練

          自我訓練
           
          1.程序
           
          (1)訓練員詢問成員,怎樣才算自我肯定的人?摘要寫在海報紙上。
           
          (2)說明堅定者與軟弱者的特質,請成員三人一小組討論其影響。
           
          (3)說明妨礙自我肯定的內在恐懼,請成員三人一小組填表,并分享填寫內容。
           
          (4)說明反應類型表,請成員閱讀資料(之二)的情境,并填入自己的反應,三人小組
           
          并核對反應類別。
           
          (5)說明權利的意義與重要性,請成員填寫“我有哪些權利”,三人小組分享,并推派一
           
          人報告填寫的內容。
           
          (6)三人小組討論、練習資料的例子,訓練員檢核成是否確實了解自我肯定行為的做法。
           
          (7)請成員回想自己在生活中有哪些不能自我肯定的行為,填入資料(之五),并斟酌自我肯定反應的行為,由三人小組討論,直到滿意為止。
           
          (8)團體統整,訓練員檢核成員不能自我肯定的行為,進行討論或演練。
           
          2.注意事項
           
          (1)訓練員于活動中應多聯系,例如成員間相似的軟弱點、權利與成就,須以客觀的角度觀察,不能自我肯定的原因是否來自文化、角色或社會階層,引發成員信任、開放的氣氛 ,促成行動改變的意愿。
           
          (2)注意傳統規范所造成的不能自我肯定行為,不必急于要求成員改變,讓成員體驗這些規范他的關系,協助成員了解這些規范對他的意義與影響。
           
          (3)三人小組于活動開始即成立,全部活動組內人員不變動,以增加安全感,組成三人小組時,訓練員可鼓勵成員,主動邀請自己關心的組員。
           
          3.資料
           
          [之一] 妨礙自我肯定的內在恐懼
           
          1.害怕傷了別人的感情
           
          例:_________________________________________________________
           
          2.害怕被拒絕
           
          例:_________________________________________________________
           
          3.害怕失敗
           
          例:_________________________________________________________
           
          4.害怕被傷害
           
          例:_________________________________________________________
           
          5.害怕有經濟困難
           
          例:_________________________________________________________
           
          [之二] 分辨你的行為反應模式
           
          1.情境
           
          你正搭高速列車到紐約途中,鄰座男士抽起煙來,于是空氣變得很差,使你難以忍受。在這種情況下,你會如何反應?閱讀下面的反應,并找出最接近你自己反應的句子。
           
          2.我的反應是
           
          (1)我覺得生氣、憤怒,可是我不會有什么反應。 
          (2)我覺得生氣、憤怒,而且會用攻擊性字眼和聲調告訴對方他不應該在車上抽煙。
           
          (3)我覺得生氣,但我會用平靜的語調告訴他,請他不要在車上抽煙。
           
          (4)我覺得生氣、憤怒,但不對他說什么,而是去對乘務員抱怨這個人抽煙,看看她以 做什么。 
          3.反應類型
           
          (1)非肯定型。
           
          (2)直接攻擊型。
           
          (3)自我肯定型。
           
          (4)間接攻擊型。 
          [之三] 我有哪些權利?
           
          1、生涯計劃與事業選擇方面
           
          (1)我有沒有權利去要求別人幫助?
           
          (2)我有沒有權利決定是否繼續進修?
           
          (3)那些對我很重要的選擇,我有沒有權利不同意父母的意思而自己決定?
           
          (4)我有沒有權利不接受別人給我的忠告?
           
          (5)我有沒有權利決定如何利用我自己的時間?
           
          (6)--------------------------------------------------------------
           
          (7)--------------------------------------------------------------
           
          (8)--------------------------------------------------------------
           
          (9)--------------------------------------------------------------
           
          (10)-------------------------------------------------------------
           
          2.人際關系方面
           
          (1)我有沒有權利讓別人知道我很生氣?
           
          (2)我有沒有權利選擇與誰做朋友,不與誰做朋友?
           
          (3)我有沒有權利拒絕人情請托?
           
          (4)與朋友交談,當不想繼續時,我有沒有權利停止這個談話?
           
          (5)我有沒有權利請鄰座的人不要吸煙?
           
          (6) ------------------------------------------------------------
           
          (7) ------------------------------------------------------------
           
          (8) ------------------------------------------------------------
           
          (9) ------------------------------------------------------------
           
          (10)------------------------------------------------------------
           
          3.感情婚姻方面
           
          (1)在男女朋友之間,我有沒有權利拒絕對方的親密舉動?
           
          (2)我有沒有權利主動追求我喜歡的異性朋友?
           
          (3)我有沒有權利讓對方了解我的感覺?
           
          (4)我有沒有權利決定自己的終身伴侶?
           
          (5)我有沒有權利決定自己什么時候結婚?
           
          (6) ----------------------------------------------------------
           
          (7)----------------------------------------------------------
           
          (8)----------------------------------------------------------
           
          (9)----------------------------------------------------------
           
          (10)---------------------------------------------------------
           
          [之四]:我肯定行為練習
           
          1.主管對部屬說:“你必須更努力工作,我們需要的是一個在這個領域中的哈佛經理,而不是一個跟隨者,我實在很懷疑你是不是有這個能力?”
           
          如果你是部屬,你是反應是:
           
          _______________________________________________________________
           
          請對照“反應型表”,看看你的反應是屬于哪一型?
           
          如果不是自我肯定型,請修改成自我肯定型的反應:
           
          _______________________________________________________________
           
          2你排隊買票,要看七點的電影。這是一部精采的得獎影片,所以觀眾很多,排在你
           
          前面的人不少,你耽心若是買不到票,又得排兩小時等下一場。但這時候,卻有人在你面前
           
          插隊。你的反應是:
           
          _______________________________________________________________
           
          請對照“反應類型表”,看看你的反應是屬于哪一型?
           
          如果不是自我肯定型,請修改成我肯定型的反應:
           
          ________________________________________________________________
           
          [之五] 我不能自我肯定的行為
           
          請你想一想,在生活中有哪些你覺得不甘心 、委屈、挫折或誤解的經驗?在這些經驗中是不是有些你重視的權利被侵犯被壓抑了?請把這些經驗寫下來,并嘗試將自我肯定的反應方式寫出來。
           
          經驗一:________________________________________________________
           
          自我肯定的反應:________________________________________________
           
          經驗二:________________________________________________________
           
          自我肯定的反應:________________________________________________
           
          [之六] 自我肯定量表
           
          姓名: 性別: 日期:
           
          評分標準:1.從來沒有 2.很少 3.偶爾 4.大多是 5.經常是
           
          1.當一個人對你非常不公平時,你是否讓他知道? 1 2 3 4 5
           
          2.你是否容易作決定? 1 2 3 4 5
           
          3.當別人占了你的 位置時,你是否告訴他? 1 2 3 4 5
           
          4.你是否經常對你的判斷有信心? 1 2 3 4 5
           
          5.你是否能控制你的脾氣? 1 2 3 4 5
           
          6.在討論或辯論中你是否覺得很容易發表意見? 1 2 3 4 5
           
          7.通常你是否表達你的感受? 1 2 3 4 5
           
          8.當你工作時如果有人注意你,你是否不受影響? 1 2 3 4 5
           
          9.當你和別人說話時,你是否能輕易地注視對方的眼睛?1 2 3 4 5
           
          10.你是否易于開口贊美別人? 1 2 3 4 5
           
          11.你是否因很難對推銷售員說不,而買些自己實在不需要或并不想要的東西? 1 2 3 4 5
           
          12.當你有充分的理由退貨給店方時,你是否遲疑不決? 1 2 3 4 5
           
          13.在社交場合你是否覺得沒有困難去保持交談? 1 2 3 4 5
          14.你是否覺得別人在言行中很少表示不歡迎你? 1 2 3 4 5
          15.如果有位朋友提出一種無理要求,你能拒絕嗎? 1 2 3 4 5
           
          16.如果有人恭維你,你知道說些什么嗎? 1 2 3 4 5
           
          17.當你和異性談話時,你是否感到緊張? 1 2 3 4 5
           
          18.當你生氣時是否會嚴厲地責罵對方? 1 2 3 4 5
           
          [之七]:自我肯定量表計分與解釋
           
          1.高度自我肯定:分數相加,得分在77分以上者,表示非常自我肯定,經常能適當、時地表露自己的意見與感受。
          2.中偏高度自我肯定:分數相加,得分在52—76分之間,表示大多數時候能表露自己的意見與感受,但偶爾做不到。
           
          3.中偏低度自我肯定:分數相加,得分在26—51分之間,表示偶爾能自我肯定,但大多數時候不能表達自己的意見和感受。
           
          4.低度自我肯定:分數相加,得分在26分以下者,表示非常不自我肯定,經常不能表露自己的意見與感受。

          posted @ 2008-01-08 19:20 靈! 閱讀(197) | 評論 (0)編輯 收藏

          將培訓融入游戲

                 80后可望迅速擠滿IBM光板凳

            “80后這一代非常渴望學習,渴望為自己的職業生涯做出更好的規劃。現在每個人都是知識工作者,如果今天企業不對他們做一些投資,他們馬上就會找另一家愿意做投資的人。”

            IBM大中華區人力資源總監郭希文說,IBM為員工提供了一個不斷學習和進步的環境,具有一整套完善而創新的體制。在和IBM共事的時間,員工可以學習到很多東西,展現自己的能力,同時我們還可以幫助他們挖掘潛能,在這樣雙贏的情況下雙方會有很好的伙伴關系。

            “不學習的人呆不下去”

            龐大全面的培訓系統一直是IBM的驕傲。

            進入IBM的新員工首先會按照職屬不同進行相應的集中培訓,考核合格后,進入實習期,每個新員工都會有一位指定的師傅一對一進行幫帶。師徒共同制定一個實習計劃,定期反饋實習情況。實習結束后,員工可以提出還需要哪些培訓內容,也可以要求繼續有一個師傅。 

            對老員工也有非常完備的員工培訓制度,有傳統的教師培訓和網上培訓等多種方式。員工還可以提出公司外部的培訓要求,只要要求合理,公司都會同意并給予經費。

            對一些優秀有潛力的員工,IBM提供了經理培訓,即將升職的員工在升任之前有本地化培訓;升任后有為期一年、全球統一的e-learning或其他培訓,同時也會為參加這類培訓的經理各自指定輔導員。

            另外,IBM每個主管級以上員工在上任伊始都有一個硬性目標:確定自己的位置未來由誰接任。接班人的成長關系到主管自己的位置和未來,也作為業績進行考核,所以經理層員工會盡力培養他們的接班人,這就是著名的“長板凳計劃”。它使IBM有備無患,每個重要的管理職位都有“替補隊員”。

            在IBM,培訓從來都不會停止。鼓勵員工學習和提高,是IBM培訓文化的精髓。
          將傳統培訓融入現代游戲

            在虛擬學習的趨勢日漸興起時,IBM大中華區人力資源總監郭希文開始著手推動IBM的培訓方式變革。

            今年7月IBM人力資源部門主導開發的“Sales Quest”培訓游戲正式面向400名銷售人員試推行。在“Sales Quest”中,參與游戲的玩家(員工),需要在限定的時間內,了解客戶、代理和競爭對手的情況,建立整體的銷售策略,維護客戶關系,滿足客戶的需求,最后完成項目目標,虛擬完成整個銷售過程。IBM培訓部門將一些真實案例加入游戲中,通過智能引擎對玩家(員工)表現做出判斷。游戲過后,會給出玩家一份報告,指出優點和不足,督促下次改進。

            據調查有80%的受試者玩了這個游戲,其中有1/3的人玩了兩次,1/6以上的人玩了三次或更多。IBM大中華區人力資源部學習總監Lauge Sorensen說,這一代年輕人從小就生活在電子游戲、電腦游戲的環境中,因此“Sales Quest”這個環境對于他們來說非常自然。在第一個試點成功推出后,IBM計劃把受眾進一步擴大到IBM中國的1500人,同時準備面向印度銷售人員推行這款游戲培訓方式。除了銷售人員外,IBM也在考慮為項目經理人和新員工等提供以游戲為基礎的虛擬環境學習。

            此前,IBM已經通過Second Life上的虛擬島嶼,幫助新員工盡快熟悉和適應工作,他們在這個虛擬島上溝通交流,解決他們在業務中遇到困難。

          posted @ 2008-01-08 19:20 靈! 閱讀(200) | 評論 (0)編輯 收藏

          CMM的結構和基本內容

          CMM描述了五個級別的軟件過程成熟度(初始級可重復級已定義級已管理級優化級 ,成熟度反映了軟件過程能力(Software Process Capability)的大小,任何一個軟件機構的軟件過程必定屬于其中某個級別。除了第一級以外,每級成熟度又由若干關鍵過程域(Key Process Area)構成。五個成熟度及其關鍵過程領域如圖所示:

          圖中的每個關鍵過程域分別針對軟件過程的某一方面,具體描述了某級成熟度下軟件過程在該方面所應達到的的一組目標和實現這些目標的一組關鍵活動(Key Practice)。所有關鍵活動被劃分為五類,分別為完成該組目標所需的承諾(Commitment to Perform)、前提條件(Ability to Perform)、實際動作(Activities performed)、度量分析(Measurement and Analysis)以及驗證(Verifying Implementation)。上述五方面被稱為五個Common Features。

          CMM的結構如圖所示:

           

          需要提出的是,任何一個成熟度級別的關鍵過程域集都是本級描述的關鍵過程域集和所有下級的關鍵過程域集的并集。如3級的關鍵過程域就應有13個不同的域,其中7個是3級自己包含的,6個屬于2級成熟度,而4級應有15個域。

          第一級:初始級( The Initial Level

          初始級的軟件機構缺乏對軟件過程的有效管理,其軟件項目的成功來源于個人英雄主義而非機構行為,因此它不是可重復的。

          第二級:可重復級( The Repeatable Level

          概述:

          第二級軟件機構的主要特點是:項目計劃和跟蹤的穩定性,項目過程的可控性和以往成功的可重復性。更具體的說:

          • 機構建立了管理軟件項目的策略和實現這些策略的過程。
          • 新項目的計劃和管理基于類似項目的經驗。
          • 過程能力的增強基于以各個項目為基礎的有紀律的基本過程管理。
          • 不同的項目可有不同的過程,而對機構的要求是具有指導項目建立適當管理過程的策略。
          • 每個項目都確定了基本的軟件管理控制,包括:
            • 基于前面項目的經驗和新項目特點,做出現實的項目承諾(如預算、交付期、軟件質量等);
            • 軟件項目管理者要跟蹤開支、日程、軟件功能;
            • 滿足承諾的過程中的出現的問題要及時發現,妥善解決;
            • 定義了軟件項目標準,且機構確保其被遵守。

          構成:

          本級的關鍵過程領域(KPA)包括:

           

          客戶的需求是軟件項目的基礎。軟件需求管理的目的是在客戶和軟件項目之間達成對客戶需求的一致理解。

           

          為軟件工程和項目管理建立一個合理的計劃。

           

          使管理者對實際的軟件項目進展過程有足夠的了解,以在項目效能偏離計劃太多是采取有效措施。

           

          選擇合格的分包商,并有效管理之。

           

          對軟件項目過程及其間生產的各個產品進行監管以保證最終軟件質量。

           

          在整個軟件生命周期里建立并維護軟件項目的工作產品的完整性。

           

          第三級:已定義級( The Defined Level

          概述

          第三級的主要特征在于軟件過程已被提升成標準化過程,從而更加具有穩定性、可重復性和可控性。處于第三級的企業具有如下一些特征:

          • 機構采用標準的軟件過程,軟件工程和管理活動被集成為一個有機的整體。標準化的目的是使之可使管理者和技術人員有效工作。
          • 有一組人員專門負責機構的軟件過程,并且在機構中有培訓計劃來確保 stuff manager 有知識和技能完成所賦予的角色。
          • 標準的軟件過程結合項目的特點即形成定義的軟件過程,它包括一組集成的定義良好的軟件工程和管理過程。
          • 一個定義良好的過程包括就緒準則、輸入、完成工作過程、驗證機制、輸出和完成準則。
          • 在已建立的產品線上 cost, schedule, functionality 均可控制,軟件質量被加以跟蹤。
          • 過程能力體現在在機構范圍內對一個定義的軟件過程活動、角色和責任的共同理解。

          構成

          第三級主要處理以下的 KPA:

          確立機構對于改進機構的軟件過程能力的軟件過程活動的責任。

           

          開發和維護一組有用的軟件過程assets和提供一個用于定義定量過程管理的有意義的數據的基礎

           

          開發個體的技能和知識以使他們能夠更加有效的完成他們的角色

           

          基于業務環境和項目的技術需要,從機構的標準軟件過程和相關的過程assets經過剪裁,將軟件工程和管理活動集成為一個有機的定義的軟件過程。

           

          一致地完成定義良好的工程過程。它描述了項目的技術活動,如需求分析,設計,編碼和測試。

           

          確立軟件工程組主動介入其它工程組以便項目能更好滿足客戶要求的手段

           

          早而且有效的排除軟件工作產品中的缺陷。它可通過 inspection,structured walkthrough等手段進行。

           

          概括來說,第三級企業的重點是 Engineering processes and organizational support

           

          第四級:已管理級( The Managed Level

          概述:

          第四級的軟件機構中軟件過程和軟件產品都有定量的目標,并被定量地管理,因而其軟件過程能力是可預測的,其生產的軟件產品是高質量的。具體地說,第四季的機構具有如下特征:

          • 軟件過程和產品有定量質量目標。
            • 重要的軟件過程活動均配有生產率和質量度量;
            • 數據庫被用來收集和分析定義軟件過程的數據;
            • 項目的軟件過程和質量的評價有定量的基礎;
          • 項目的產品和過程控制具有可預測性。
            • 縮小過程效能落在可接受的定量界限內的偏差;
            • 可區分過程效能的有效偏差和隨機偏差;
            • 面向新領域的風險是可知并被仔細管理;

          構成

          本級的關鍵過程領域包括:

               定量地控制軟件項目的過程效能。

           

                定量了解項目軟件產品的質量,并達到既定的質量目標。

           

           

          第五級: The Optimizing Level

          概述

          概括來說,第五級的主要特點是技術和過程改進被作為常規的業務活動加以計劃和管理。處于第五級的企業具有如下一些特征:

          • 機構集中于連續的過程改進
            • 具有標識弱點和增強過程的手段。
            • 采用過程數據分析使用新技術的代價效益并提出改進。
            • 項目隊伍能夠分析出錯原因并防止其再次出現。
            • 防止浪費是第五級的重點。
          • 改進的途徑在于已有過程的增量改進和使用新技術和新方法的革新

          構成

          識別出錯原因,防止錯誤再現 (通過改變定義的軟件過程)

           

          識別有益的新技術 (工具、方法和過程),并按有序的方式將其轉移至機構之中。其重點在于在變化的世界中有效的完成革新。

           

          連續改進機構所采用的軟件過程,以改進軟件質量,提高生產率和減少產品開發時間

          概括來說,第五級企業的重點是連續的過程改進  

           

          縱觀整個 CMM,軟件企業提高自身成熟度的歷程是一個從無序到有序,從特殊到一般,從定性到定量,最后不斷自我完善的過程。

          posted @ 2008-01-08 19:18 靈! 閱讀(335) | 評論 (0)編輯 收藏

          CMM簡介

          從第一臺計算機出現至今,計算機的發展速度令人瞠目。在應用方面,計算機從由少數科學家從事數學計算到今天遍及社會生活的各個領域,人們可以通過它對弈,也可以通過它預測天氣。在技術方面,計算機硬件的發展是日新月異,例如中央處理器(CPU)的速度是每隔6個月翻一倍,而成本則是每隔6個月減少一倍。但在計算機軟件方面,其發展卻是差強人意,雖然也有很多新的軟件開發方法和技術不斷提出,但軟件無論在生產率還是在質量方面總是達不到預期效果。

          計算機軟件開發的問題一直是困擾軟件企業的關鍵問題。隨著時代的發展人們開始意識到這些企業的基本問題不在于新技術是否使用,而在于軟件過程的管理問題。軟件過程包括兩個方面,其一是軟件開發的管理過程(Software Management Process),其二則是軟件開發的工程過程(Software Engineering Process)。軟件企業的開發機構在形成一套完整而成熟的軟件過程后,軟件的開發才能夠步入正軌,才能保證在約定的期限內以固定的成本生產出客戶滿意的產品。

          軟件機構形成一套完整而成熟的軟件過程不是一蹴而就的,它需要一個從無序到有序,從特殊到一般,從定性到定量,最后再從靜態到動態的歷程,或者說軟件機構在形成成熟的軟件過程之前必須經歷一系列的成熟階段(Maturity Level)。軟件機構首先要判斷自己屬于哪一個成熟階段,然后再根據自身的實際情況決定應該重點采取哪一些活動(Activity)來更有效地改進自己的軟件過程。其他企業在同軟件企業訂立軟件開發合同時也可以根據該企業機構所處的成熟階段判斷其軟件開發能力,進而判斷相關的軟件風險。所有這些都需要一個理論指導來作出相關判斷,能力成熟度模型(CMM)就是這樣一個理論模型,它規定了機構成熟階段的框架,以及如何據之判斷軟件機構所處的成熟階段和機構為改進自己的軟件過程應該采取的辦法。

          CMM產生背景

          主要問題

          在過去的二十年里,新的軟件開發方法和技術的使用并未使軟件生產率和生產質量得到有效的提高。軟件生產商開始意識到他們的基本問題在于對軟件的生產過程管理不力,主要體現在:軟件產品不能按時完成、超出預算的成本、以及采用新的技術和工具后其好處難以體現。

          主要作用

          CMM可以指導軟件機構如何控制軟件產品的開發和維護過程,以及如何向成熟的軟件工程體系演化,并形成一套良性循環的管理文化。具體說來,一個企業要想改進其生產過程,應該采取如下策略和步驟:

          • 確定軟件企業當前所處的過程成熟級別;
          • 了解對改進軟件生產質量和加強生產過程控制起關鍵作用的因素;
          • 將工作重點集中在有限幾個關鍵目標上,有效達到改進機構軟件生產過程的效果,進而可持續地改進其軟件生產能力。

          CMM的基本概念

          • 軟件過程

          人們在開發和維護軟件及其相關產品時所涉及的各種活動、方法、實踐和改革等。其中軟件相關產品包括軟件項目計劃、設計文檔、程序代碼、測試用例和用戶手冊等。

          • 軟件過程能力

          當遵循某個軟件過程時所能達到的期望效果,它可以有效預測企業接收新的軟件項目時可能得到的結果。

          • 軟件過程性能

          當遵循某個軟件過程時所達到的實際效果。它可以用于驗證軟件過程能力。

          • 軟件過程成熟度

          指一個特定的軟件過程被顯式定義、管理、度量、控制和能行的程度。成熟度可以用于指示企業加強其軟件過程能力的潛力。 當一個企業達到了一定的軟件過程成熟級別后,它將通過制定策略、建立標準和確立機構結構使它的軟件過程制度化。而制度化又促使企業通過建立基礎設施和公司文化來支持相關的方法、實踐和過程。從而使之可以持續并維持一個良性循環。

          • 成熟與不成熟

          企業要通過選擇最關鍵的目標來進行過程改進,應該搞清成熟的軟件過程和不成熟的過程之間的差異。

          不成熟的企業有如下標志:

          • 缺乏確定的軟件過程和相應的管理和控制;
          • 即使給出了軟件過程,也不嚴格的遵循和強制執行;
          • 管理是完全被動的,管理者采用的策略是救火式的,即出了事才去解決,解決的時候也難以縱觀全局,往往只顧眼前;
          • 由于缺乏有依據的估算,制訂軟件預算和生產計劃時往往跟著感覺走,實際生產時則常常超標;
          • 如果強制在預定期限內完成,那么軟件的功能和質量肯定是得不到保證;
          • 缺乏評價軟件產品質量和解決產品缺陷和過程問題的客觀基礎。

          成熟的企業則有如下標志:

          • 具有在企業范圍內管理、控制軟件開發和維護過程的能力;
          • 現有人員和新進人員均了解所遵循的軟件過程,且工作活動均按照事先的計劃完成;
          • 在定義好的軟件過程中,所有項目和機構中的角色和責任分明;
          • 制定的計劃是有效的且與實際的工作進展一致;
          • 軟件過程在必要時可按照一定規則和程序加以修改;
          • 軟件產品和過程的具有一定的可控性。這主要體現在:
            1. 管理者能夠監督軟件產品的質量和生產過程;
            2. 具有客觀的和定量化的措施來判斷產品質量并分析產品與生產過程中的問題;
            3. 計劃和預算有章可循,它是基于歷史數據的,從而是實際可行的;
            4. 預算的結果,包括成本、時間表、產品功能和質量等,通常能夠達到;
            5. 有關的參與者完全理解遵循軟件過程的價值并認真地遵循之;
            6. 具有支撐軟件過程的基礎設施,如標準過程庫、歷史數據庫等。

          CMM的五級成熟度

          基本前提

          • 軟件質量在很大程度上取決于產生軟件的軟件過程的質量和能力;
          • 軟件過程是一個可管理、可度量并不斷改進的過程;
          • 軟件過程的質量受到用以支撐它的技術和設施的影響;
          • 企業在軟件過程中所采用的技術層次應適應于軟件過程的成熟度。

          基本原理

          • CMM強調連續的軟件過程改進。該連續的改進基于多個演化步驟。CMM將這些演化步驟劃分成五個級別。這種分級結構的理論依據是軟件質量原理。
          • 每一級別都包括若干目標。當滿足某一目標后,軟件過程的相應部分便確定下來。
          • 五級成熟度定義了一個標準,用以度量機構的軟件過程成熟度和評價其軟件過程能力。

          基本內容

          CMM的成熟度理論目前主要涉及如下內容:

          • 機構和資源的管理: 涉及機構本身的責任,人員和其它資源設施。
          • 軟件工程過程及其管理: 涉及軟件工程過程,即軟件過程的深度、范圍和完整性以及如何度量、管理和改進這樣的過程。
          • 工具和技術: 軟件工程過程中使用的開發工具和技術。

          五個成熟度級別

          • 初始級
          • 可重復級:有規章的過程
          • 定義級:標準化、一致的過程
          • 管理級:可預測過程
          • 優化級:可持續改進的過程

          成熟度的行為刻劃

          第一級:初始級

          • 成功來源于個人英雄主義而非機構行為,因此它不可重復,更換人員后成功便難以維持。

          第二級:可重復級

          • 針對特定軟件項目建立管理該項目的策略和實現這些策略的過程。
          • 新項目的計劃和管理基于類似項目的經驗。
          • 軟件過程能力主要通過管理單個項目的軟件生產過程來得到提高和增強。
          • 不同的項目可有不同的軟件過程,機構應當建立一定的方針和策略以針對具體的項目選擇合適的軟件生產過程并進行管理。

          可重復級的主要特點在于確定了基本的軟件生產管理和控制,具體來講,有:

          • 結合已有項目的經驗和新項目的特點來確定本項目的責任和承諾;
          • 軟件生產成本、時間表和實現的功能被有效跟蹤;
          • 識別實現承諾所需解決的關鍵問題;
          • 定義軟件項目過程標準,機構要確保其被遵守。

          概括來說,第二級的主要特點是項目計劃和跟蹤是確定且有效的,項目的軟件過程是可控的,以及已有的成功經驗是可重復的。

          第三級:定義級

          • 有一個機構范圍內標準的軟件過程,軟件工程活動和管理活動被集成為一個有機的整體。標準化的目的是使高層管理者和軟件技術人員能夠有效合作。
          • 有一個組例如軟件工程組(SEPG)專門負責訂立機構的標準軟件過程,并且在機構中制定培訓計劃來確保相關人員和管理者有足夠的知識和技能完成標準過程所賦予的角色。
          • 標準的軟件過程結合具體項目的特點經過裁剪即形成項目定義軟件過程,它是一組集成的完善定義的軟件工程和管理過程。
          • 一個完善定義的軟件過程應包括就緒準則、輸入、工作過程、驗證機制、輸出和完成準則。
          • 對于已建立的產品生產線,其成本、時間表和實現功能均可跟蹤和控制,軟件產品的質量可以得到保證。
          • 軟件過程能力的實現主要基于在機構范圍內對一個定義軟件過程的活動、角色和責任的共同理解。

          概括來說,第三級的主要特征在于軟件過程已被提升成標準化過程,從而更加具有穩定性、重復性和可控性。

          第四級:管理級

          • 軟件的過程和產品有定量的質量指標。
            • 重要的軟件過程活動均配有生產率和質量方面的度量指標;
            • 應用數據庫來收集和分析定義軟件過程中涉及的各種數據;
            • 對項目軟件過程和軟件質量的評價有定量的基準。
          • 軟件項目的產品和生產過程的控制具有可預測性。
            • 將軟件過程性能可能出現的偏差控制在可接受的量化界限內;
            • 具體區分影響過程性能發生偏差的有效因素和偶然因素;
            • 向新領域拓展的風險是可預知的并被仔細管理和權衡。

          概括來說,第四級的主要特征是定量化、可預測、異常控制和高質量。

          第五級:優化級

          • 機構集中于持續的過程改進
            • 具有標識過程缺陷和增強過程能力的有效手段。
            • 利用試驗數據分析使用新技術所需的代價和帶來的效益,然后再有選擇地采用。
            • 當出現偏差時,軟件項目人員能夠分析出錯原因并采取有效手段防止其再次出現。
            • 防止不必要的浪費是第五級的重點。
          • 改進的途徑有兩個,一個是對已有過程的漸進式改進;另一個則是有選擇地使用新技術和新方法所帶來的革新。

          概括來說,第五級的主要特征是新技術的采用和軟件過程的改進被作為日常的業務活動來加以計劃和管理。

          posted @ 2008-01-08 19:17 靈! 閱讀(230) | 評論 (0)編輯 收藏

          Eclicpse3.1.1下配置SWT,打包發布SWT程序,轉EXE一條龍過程記錄

          1.www.eclipse.org上下載SWT.

          我這里用的是1.1.0.1,并且頁面上就有推薦的Eclipse3.1.1EMF,GEF。都下載了!

          2.按照Eclipse安裝插件的方法,安裝SWT,EMF,GEF

          3.如果不出意外,就可以正常使用了!

          這里有一個建議:最好使用純的Eclipse,我開始用WTP版的,怎么配置也不行。

          可以建立Visual Class,但是不能可視化添加控件,或者看不到控件的屬性,或者Text,TextArea控件無法添加。后來按照以上方法,重新來了一次,OK!

          二打包發布SWT程序

          1.因為需要SWTjar.但是Eclipse3.1.1配合的的SWT不是通過SWT.jar發布的!是org.eclipse.swt.win32.win32.x86_3.1.0.jar。里面包括了JINIDLLSWT類文件。

          需要下載

          http://www.eclipse.org/downloads/download.php?file=/eclipse/dow ... 09290840/swt-3.1.1-win32-win32-x86.zip

          這里有SWT.jar,和3DLL,把他們解壓縮出來,備用!

          2.通過Eclipse的導出功能,生成一個可執行的jarMANIFEST.MF文件選擇由Eclipse生成,并且保存到項目中。

          3.上面2的步驟,只是為了得到MANIFEST.MF文件。下面修改一下這個文件。

          加上 Class-Path: SWT.jar

          如果還有其他的jar,用空格分開,加到后面

          4.再生成一次jar,MANIFEST.MF選擇修改后的。

          5.將打包的jar,SWT.jar,3DLL放到一個文件夾下,雙擊可執行的jar,程序運行!

          jarEXE

          1.打開JSmooth0.9.9-7http://www610.fixdown.com/jsmooth-0.9.9-7-setup.exe

          2.選擇skeleton,skeleton properties中先把Launch java app in the exe process,Debug console選中。可以查看生成EXE文件執行過程信息。

          3.選擇Executable.

          選擇生成的EXE文件存放位置。

          選擇EXE文件圖標

          設置當前路徑,選擇要轉換的jar文件所在文件夾

          4.選擇Application

          設置Main Class,可執行jar中的Main Class注意寫類全名

          設置Application Argument,如果需要傳入參數,寫到這里

          設置Embedded jar: 可執行的jar

          設置ClasspathSWT.jar 如果有其他的繼續添加

          5.選擇JVM Selection。默認吧。

          6.JVM Configuration:

          可以設置java properties,內存使用

          7.點齒輪。生成!看是否有錯誤。

          8.EXE執行需要的文件:EXE,3DLLSWT.jar

          把他們考到其他目錄,一樣可以執行!

          9.去掉skeleton properties中的Launch java app in the exe process,Debug console選項。

          重新生成。應該OK了!

          -----

          看了這個,終于完成了SWT程序打包,太爽了

          posted @ 2008-01-08 19:12 靈! 閱讀(432) | 評論 (0)編輯 收藏

          Spring實現發送郵件功能(簡易篇)

          1.Spring配制文件(bean.xml):

           1<?xml version="1.0" encoding="UTF-8"?>
           2<beans xmlns="http://www.springframework.org/schema/beans"
           3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           4    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
           5
           6    <bean id="mailSender"
           7        class="org.springframework.mail.javamail.JavaMailSenderImpl">
           8        <property name="host">
           9            <!-- 公司的郵件服務器 -->
          10            <value>mail.xxx.com</value>
          11        </property>
          12    </bean>
          13    
          14</beans>

          2.測試類(SendMail.java):

           1import org.springframework.context.ConfigurableApplicationContext;
           2import org.springframework.context.support.ClassPathXmlApplicationContext;
           3import org.springframework.mail.MailSender;
           4import org.springframework.mail.SimpleMailMessage;
           5
           6public class SendMail {
           7
           8    public static void main(String[] args) {
           9        SimpleMailMessage message = new SimpleMailMessage();
          10
          11        message.setFrom("zzk@gmail.com");  //髮送者郵件地阯
          12        message.setTo("jakin@xxx.com");            //接收者郵件地阯
          13        message.setSubject("Test SendMail");    //郵件主題
          14        message.setText("Success");                //郵件內容
          15
          16        ConfigurableApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
          17        ((MailSender) applicationContext.getBean("mailSender")).send(message);
          18    }

          19}

          posted @ 2008-01-08 19:00 靈! 閱讀(273) | 評論 (0)編輯 收藏

          Ant在eclipse中的build.xml的配置

          Ant在eclipse中的build.xml的配置
          <?xml version="1.0" ?>
          - <project name="webmodulebuilder" default="deploy" basedir=".">
          - <!--
          set global properties for this build
          -->
          - <!--
          發布WEB路徑
          -->
          <property name="DEPLOY_PATH" value="C:\Tomcat 5.5\webapps\jieshengda" />
          - <!--
          源WEB路徑
          -->
          <property name="WEB_PATH" value="D:\EclipseWork\jiedasheng\WebRoot" />
          - <!--
          源編譯的jar包路徑
          -->
          <property name="JAR_PATH" value="D:\EclipseWork\jiedasheng\WebRoot\WEB-INF\lib" />
          - <!--
          源java文件路徑
          -->
          <property name="SCR_PATH" value="D:\EclipseWork\jiedasheng\src" />
          - <!--
          源class文件路徑
          -->
          <property name="CLASS_PATH" value="D:\EclipseWork\jiedasheng\WebRoot\WEB-INF\classes" />
          - <!--
          定義classpath
          -->
          - <path id="LIB_CLASS_PATH">
          <fileset file="${JAR_PATH}/*.jar" />
          <pathelement path="${CLASS_PATH}" />
          </path>
          - <!--
          初試化
          -->
          - <target name="init">
          <mkdir dir="${DEPLOY_PATH}" />
          <mkdir dir="${DEPLOY_PATH}/WEB-INF" />
          <mkdir dir="${DEPLOY_PATH}/WEB-INF/classes" />
          <mkdir dir="${DEPLOY_PATH}/WEB-INF/lib" />
          </target>
          - <!--
          編譯類
          -->
          - <target name="compile" depends="init" description="compile the source files">
          <mkdir dir="${CLASS_PATH}" />
          - <javac srcdir="${SCR_PATH}" destdir="${CLASS_PATH}">
          <classpath refid="LIB_CLASS_PATH" />
          </javac>
          </target>
          - <!--
          Copy發布
          -->
          - <target name="deploy" depends="init,compile">
          - <copy todir="${DEPLOY_PATH}">
          - <fileset dir="${WEB_PATH}">
          <include name="**/*.*" />
          <exclude name="**/jsp_servlet/*.class" />
          <exclude name="**/build.xml" />
          <exclude name="**/deploy.xml" />
          <exclude name="**/build.properties" />
          <exclude name="**/servers.xml" />
          <exclude name="**/targets.xml" />
          <exclude name="**/*.war" />
          </fileset>
          </copy>
          </target>
          </project>

          posted @ 2008-01-08 18:46 靈! 閱讀(2407) | 評論 (0)編輯 收藏

          JAVA ant build.xml

          內容摘要:
          ANT是一個基于Java的自動化腳本引擎,腳本格式為XML。除了做Java編譯相關任務外,ANT還可以通過插件實現很多應用的調用。
          1)ANT的基本概念:
          2)ANT的安裝:解包,設置路徑
          3)ANT的使用:最好的學習只不過是一個簡單實用的例子起步……

          ANT的基本概念:Java的Makefile

          當一個代碼項目大了以后,每次重新編譯,打包,測試等都會變得非常復雜而且重復,因此c語言中有make腳本來幫助這些工作的批量完成。在Java中應用是平臺無關性的,當然不會用平臺相關的make腳本來完成這些批處理任務了,ANT本身就是這樣一個流程腳本引擎,用于自動化調用程序完成項目的編譯,打包,測試等。除了基于JAVA是平臺無關的外,腳本的格式是基于XML的,比make腳本來說還要好維護一些。

          每個ant腳本(缺省叫build.xml)中設置了一系列任務(target):比如對于一個一般的項目可能需要有以下任務。

          任務1:usage 打印本腳本的幫助信息(缺省)
          任務2:clean <-- init 清空初始化環境
          任務3:javadoc <-- build <-- init 生成JAVADOC
          任務4:jar <-- build <-- init 生成JAR
          任務5:all <-- jar + javadoc <-- build <-- init 完成以上所有任務:jar javadoc

          而多個任務之間往往又包含了一定了依賴關系:比如把整個應用打包任務(jar)的這個依賴于編譯任務(build),而編譯任務又依賴于整個環境初始化任務(init)等。

          注:我看到很多項目的ant腳本中的命名基本上都是一致的,比如:編譯一般叫build或者compile;打包一般叫jar或war;生成文檔一般命名為javadoc或javadocs;執行全部任務all。在每個任務的中,ANT會根據配置調用一些外部應用并配以相應參數執行。雖然ANT可調用的外部應用種類非常豐富,但其實最常用的就2,3個:比如javac javadoc jar等。

          ANT的安裝

          解包后在系統可執行路徑中加入指向ant的bin的路徑就可以了,比如可以在GNU/Linux上把以下配置加入/etc/profile中:
          export ANT_HOME=/home/ant
          export JAVA_HOME=/usr/java/j2sdk1.4.1
          export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin

          這樣執行ant 后,如果不指定配置文件ant會缺省找build.xml這個配置文件,并根據配置文件執行任務,缺省的任務設置可以指向最常用的任務,比如:build,或指向打印幫助信息:usage,告訴用戶有那些腳本選項可以使用。

          ANT的使用

          最好的學習過程就是看懂那些open source項目中的build.xml腳本,然后根據自己的需要簡化成一個更簡單的,ANT和APACHE上很多非常工程派的項目:簡單易用,而且適應性非常強,因為這些項目的建立往往來源于開發人員日常最直接的需求。
          參考資料:http://www.javafan.net/article/20041207142012728.html

          posted @ 2008-01-08 18:44 靈! 閱讀(1038) | 評論 (0)編輯 收藏

          一個簡單的Ant的build.xml示例(附:jar包的正確運行方法)

               以前在寫作業時曾經嘗試用過Ant去編譯和運行Java程序,不過后來好久沒用,都不怎么會用了。下邊是前幾天寫的一個build.xml文件的例子,以后可以拿來當參照了,不過有點小問題還不知道怎么改!以前忘了Jar包的正確運行方式,導致不能正確運行打包以后的jar包,現已更正!

                說明:lib目錄存放第三方類庫,src目錄存放待編譯的Java源文件!

          <?xml version="1.0" encoding="GB2312" ?>

          <!DOCTYPE project>

          <project name="JavaMailClient" default="usage" basedir=".">
                <property name="project-name" value="JavaMailClient"/>

                <property name="build" value="build"/>
                <property name="lib" value="lib"/>
                <property name="src" value="src"/>
                <property name="build.classes"      value="${build}/classes" />
                <property file="build.properties"/>
           

                <property name="jar.dir"     value="jar"/>
                <property name="jar-file-name"      value="${project-name}" />

                <path id="Third-Part Lib">
                      <fileset dir="${lib}">
                            <include name="**/*.jar" />
                      </fileset>
                </path>
           
                <target name="usage" description="Build file usage info (default task)">
                      <echo message=" " />
                      <echo message="${project-name} " />
                      <echo message="-------------------------------------------------------" />
                      <echo message="Available Targets:" />
                      <echo message=" ***" />
                      <echo message=" Compiling:" />
                      <echo message="  compile  - Compiles the source code" />
                      <echo message=" ***" />
                      <echo message=" Cleaning up:" />
                      <echo message="  clean - Delete class files" />
                      <echo message=" ***" />
                      <echo message=" JAR:" />
                      <echo message="  jar  - Generate an .jar for source code" />
                      <echo message=" ***" />
                      <echo message=" Executing:" />
                      <echo message="  run  - Execute the  JavaMail client ! Get email of the latest two days  from server" />
                      <echo message=" ***" />
                      <echo message="-------------------------------------------------------" />
                </target>

                <target name="prepare" >
                      <mkdir dir="${build.classes}" />
                      <mkdir dir="${jar.dir}" />
                </target>

                <target name="clean" >
                      <delete dir="${build}" />
                      <delete dir="${jar.dir}" />
                </target>
           
                <target name="compile" depends="clean,prepare">
                <echo message="Compiling the source code!"/>
                      <javac
                            srcdir="${src}"
                            destdir="${build.classes}"
                            deprecation="true"
                            failonerror="true" debug="true"
                            >
                            <classpath refid="Third-Part Lib"/> 
                      </javac>
                </target>


                <!-- <target name="run" description="Receive email! "  depends="compile"> -->
                <!-- 已經可以正確運行!注意:classpath="${build.classes}" 一定要加上,否則會報"java.lang.NoClassDefFoundError"的錯誤!-->
                <!--
                <target name="run" description="Receive email! ">
                      <java classname="POP3MailReceiver" classpath="${build.classes}" fork="true" maxmemory="256m">
                            <classpath refid="Third-Part Lib"/> 
                      </java>
                </target>
                -->

                
                <target name="run"  description="Receive email! ">
                      <java jar="${jar.dir}/${jar-file-name}.jar" fork="true" maxmemory="256m"/>
                </target>

                <target name="jar" depends="compile">
                      <jar destfile="${jar.dir}/${jar-file-name}.jar" basedir="${build.classes}">
                            <manifest>
                                  <!-- 此處需要根據需要進行修改 -->
                                  <attribute name="Main-Class" value="POP3MailReceiver"/>
                                  <attribute name="Class-Path" value="../${lib}/commons-email-1.0.jar ../${lib}/mail.jar ../${lib}/activation.jar"/>
                            </manifest>
                      </jar>
                </target>
          </project>


          附:Jar包的正確運行方法(轉)

          -jar參數運行應用時classpath的設置方法 

                 你是否在使用java -jar參數運行打包好的jar應用程序的時候發現應用程序無法找到classpath下設置好的第三方類庫的內容?無論怎么設置classpath參數都無濟于事,總是會報ClassNotFound的錯誤?那么本篇帖子可以幫助你擺脫煩惱 :)
                當用java -jar yourJarExe.jar來運行一個經過打包的應用程序的時候,你會發現如何設置-classpath參數應用程序都找不到相應的第三方類,報ClassNotFound錯誤。實際上這是由于當使用-jar參數運行的時候,java VM會屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內部class作為類的尋找范圍。

          解決方案

          一 BootStrap class擴展方案
                Java 命令行提供了如何擴展bootStrap 級別class的簡單方法:
                      -Xbootclasspath:     完全取代基本核心的Java class 搜索路徑.
                                             不常用,否則要重新寫所有Java 核心class
                      -Xbootclasspath/a: 后綴在核心class搜索路徑后面.常用!!
                      -Xbootclasspath/p: 前綴在核心class搜索路徑前面.不常用,避免
                                             引起不必要的沖突.
          語法如下:
           (分隔符與classpath參數類似,unix使用:號,windows使用;號,這里以unix為例)
           java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar

          二 extend class 擴展方案
                Java exten class 存放在{Java_home}\jre\lib\ext目錄下.當調用Java時,對擴展class路徑的搜索是自動的.總會搜索的.這樣,解決的方案就很簡單了,將所有要使用的第三方的jar包都復制到ext 目錄下.
                (自評:不推薦使用,自適應性很差!)

          三 User class擴展方案
               
          當使用-jar執行可執行Jar包時,JVM將Jar包所在目錄設置為codebase目錄,所有的class搜索都在這個目錄下開始.所以如果使用了其他第三方的jar包,一個比較可以接受的可配置方案,就是利用jar包的Manifest擴展機制.
          步驟如下:
          1.將需要的第三方的jar包,復制在同可執行jar所在的目錄或某個子目錄下. 比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包復制到/usrhome目錄下或/usrhome/lib 等類似的子目錄下.
          2.修改Manifest 文件
           在Manifest.mf文件里加入如下行
           Class-Path:classes12.jar lib/thirdlib.jar
           Class-Path 是可執行jar包運行依賴的關鍵詞.詳細內容可以參考:http://java.sun.com/docs/books/tutorial/ext/index.html


                以上三種方法推薦第一種,擴展性好,操作起來也最方便.
                另外編寫自己的ClassLoader,來動態載入class,是更加復雜和高級技術.限于篇幅,不贅述.有興趣了解可以去google一下custom classloader

                Java的安全機制隨不同的JDK版本有不同的變化,會影響很多核心CLASS,比如Thread,所以很多大型商業軟件,要求JDK的版本很嚴格.部分原因也在此.這也要求在發布自己編寫的應用時候,不管大小,都要說明開發和測試的JDK版本.


          本文所述方法測試基于j2sdk 1.4.2_04-b05

          ----------------------------------------------------------------------------------------------

          附:背景知識

                自JDK 1.2以后,JVM采用了委托(delegate)模式來載入class.采用這種設計的原因可以參考http://java.sun.com/docs/books/tutorial/ext/basics/load.html

                歸納來講:是基于JVM sandbox(沙盒)安裝模型上提供應用層的可定制的安全機制.

                Java虛擬機(JVM)尋找Class的順序

          1. Bootstrap classes

          屬于Java 平臺核心的class,比如java.lang.String等.及rt.jar等重要的核心級別的class.這是由JVM Bootstrap class loader來載入的.一般是放置在{java_home}\jre\lib目錄下

          2. Extension classes

          基于Java擴展機制,用來擴展Java核心功能模塊.比如Java串口通訊模塊comm.jar.一般放置在{Java_home}\jre\lib\ext目錄下

          3. User classes

          開發人員或其他第三方開發的Java程序包.通過命令行的-classpath或-cp,或者通過設置CLASSPATH環境變量來引用.JVM通過放置在{java_home}\lib\tools.jar來尋找和調用用戶級的class.常用的javac也是通過調用tools.jar來尋找用戶指定的路徑來編譯Java源程序.這樣就引出了User class路徑搜索的順序或優先級別的問題.

           3.1 缺省值:調用Java或javawa的當前路徑(.),是開發的class所存在的當前目錄
           3.2 CLASSPATH環境變量設置的路徑.如果設置了CLASSPATH,則CLASSPATH的值會覆蓋缺省值
           3.3 執行Java的命令行-classpath或-cp的值,如果制定了這兩個命令行參數之一,它的值會覆蓋環境變量CLASSPATH的值
           3.4 -jar 選項:如果通過java -jar 來運行一個可執行的jar包,這當前jar包會覆蓋上面所有的值.換句話說,-jar 后面所跟的jar包的優先級別最高,如果指定了-jar選項,所有環境變量和命令行制定的搜索路徑都將被忽略.JVM APPClassloader將只會以jar包為搜索范圍.
          有關可執行jar有許多相關的安全方面的描述,可以參考http://java.sun.com/docs/books/tutorial/jar/ 來全面了解.

          這也是為什么應用程序打包成可執行的jar包后,不管你怎么設置classpath都不能引用到第三方jar包的東西了.
           

          posted @ 2008-01-08 18:43 靈! 閱讀(5601) | 評論 (1)編輯 收藏

          僅列出標題
          共6頁: 上一頁 1 2 3 4 5 6 下一頁 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          隨筆分類

          隨筆檔案

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 丹巴县| 原阳县| 佛教| 柳河县| 丰台区| 东莞市| 乐亭县| 长海县| 七台河市| 鄢陵县| 浏阳市| 修文县| 宣武区| 革吉县| 陆河县| 大理市| 秭归县| 南昌县| 乐亭县| 上林县| 湖口县| 彰化市| 阿图什市| 墨脱县| 东至县| 高密市| 银川市| 屏南县| 宜良县| 清徐县| 鹰潭市| 麻栗坡县| 平潭县| 会东县| 军事| 新巴尔虎左旗| 永平县| 白水县| 沙田区| 额敏县| 深水埗区|