■ 常用特殊字符
只要你認識了 HTML 標記,你便會知道特殊字符的用處。
HTML 原代碼 | 顯示結果 | 描述 |
< | < | 小于號或顯示標記 |
> | > | 大于號或顯示標記 |
& | & | 可用于顯示其它特殊字符 |
" | " | 引號 |
® | ? | 已注冊 |
© | ? | 版權 |
™ | ? | 商標 |
  | 半個空白位 | |
  | 一個空白位 | |
| 不斷行的空白 |
HTML 原代碼 | 顯示結果 | 描述 |
Æ | ? | Uppercase AE diphthing |
Á | á | Uppercase A, acute accent |
 | ? | Uppercase A, circumflex accent |
À | à | Uppercase A, grave accent |
Å | ? | Uppercase A, ring |
à | ? | Uppercase A, tilde |
Ä | ? | Uppercase A, dieresis or umlaut mark |
Ç | ? | Uppercase C, cedilla |
Ð | D | Uppercase Eth, Icelandic |
É | é | Uppercase E, acute accent |
Ê | ê | Uppercase E, circumflex accent |
È | è | Uppercase E, grave accent |
Ë | ? | Uppercase E, dieresis or umlaut mark |
Í | í | Uppercase I, acute accent |
Î | ? | Uppercase I, circumflex accent |
Ì | ì | Uppercase I, grave accent |
Ï | ? | Uppercase I, dieresis or umlaut mark |
Ñ | ? | Uppercase N, tilde |
Ó | ó | Uppercase O, acute accent |
Ô | ? | Uppercase O, circumflex accent |
Ò | ò | Uppercase O, grave accent |
Ø | ? | Uppercase O, slash |
Õ | ? | Uppercase O, tilde |
Ö | ? | Uppercase O, dieresis or umlaut mark |
Þ | T | Uppercase THORN, Icelandic |
Ú | ú | Uppercase U, acute accent |
Û | ? | Uppercase U, circumflex accent |
Ù | ù | Uppercase u, grave accent |
Ü | ü | Uppercase U, dieresis or umlaut mark |
Ý | Y | Uppercase Y, acute accent |
æ | ? | Lowercase ae diphthing |
á | á | Lowercase a, acute accent |
â | a | Lowercase a, circumflex accent |
à | à | Lowercase a, grave accent |
å | ? | Lowercase a, ring |
ã | ? | Lowercase a, tilde |
ä | ? | Lowercase a, dieresis or umlaut mark |
ç | ? | Lowercase c, cedilla |
ð | e | Lowercase eth, Icelandic |
é | é | Lowercase e, acute accent |
ê | ê | Lowercase e, circumflex accent |
è | è | Lowercase e, grave accent |
ë | ? | Lowercase e, dieresis or umlaut mark |
í | í | Lowercase i, acute accent |
î | ? | Lowercase i, circumflex accent |
ì | ì | Lowercase i, grave accent |
ï | ? | Lowercase i, dieresis or umlaut mark |
ñ | ? | Lowercase n, tilde |
ó | ó | Lowercase o, acute accent |
ô | ? | Lowercase o, circumflex accent |
ò | ò | Lowercase o, grave accent |
ø | ? | Lowercase o, slash |
õ | ? | Lowercase o, tilde |
ö | ? | Lowercase o, dieresis or umlaut mark |
ß | ? | Lowercase sharp s, German (sz ligature) |
þ | t | Lowercase thorn, Icelandic |
ú | ú | Lowercase u, acute accent |
û | ? | Lowercase u, circumflex accent |
ù | ù | Lowercase u, grave accent |
ü | ü | Lowercase u, dieresis or umlaut mark |
ý | y | Lowercase y, acute accent |
ÿ | ? | Lowercase y, dieresis or umlaut mark |
CMMI(Capability Maturity Model Integration,能力成熟度模式整合)
CMMI( Capability Maturity Model Integration)的本質是軟件管理工程的一個部分。軟件過程改善是當前軟件管理工程的核心問題, 50多年來計算的發展使人們認識到要高效率、高質量和低成本地開發軟件,必須改善軟件生產過程。基於模型的過程改進是指用採用能力模型來指導組織的過程改進,使之過程能力穩定的進行改善,該組織也能變得更加成熟。
然而,軟件組織形成一套完整而成熟的軟件過程不是一蹴而就的事情,需要經歷一系列的成熟度。軟件組織首先要進行差異分析,評定自己比較接近哪一個成熟度,然後再根據自身的情況來決定要採取哪些改進活動,來更有效地改進自己的軟件過程。這就對軟件過程的評定提出了一個客觀的標準。美國卡內基梅隆大學軟件工程學院於1987年研究成功的SW-CMM(Capability Maturity Model for Software)就是這樣的一個理論模型,其目的在於幫助軟件組織改善軟件生產流程,以探索一個保證軟件產品質量、縮短開發週期、提高工作效率的軟件工程模式與標準規範。
CMMI是一個可以改進系統工程和軟件工程的整合模式。1997年10月SEI停止對CMM的研究,改而致力於CMMI,以解決使用多個過程改進模型的問題。SEI同時宣佈CMMI將取代CMM,與2000年8月11日頒布了CMMI-SE/SW 1.0版本,2001年12月頒布了1.1版本,這次發佈標誌著CMMI正式啟用,並準備今年內完成CMM到CMMI的過渡。
CMM是由美國軟件工程學會(Software engineering inStitute)制定的一套專門針對軟件產品的質量管理和質量保證標準。該標準最初是為美國軍方選擇軟件產品提供商時評價軟件企業的軟件開發質量保證能力而制定,所以稱為軟件企業能力成熟度模型(Capability Maturity Model,簡稱CMM)。該標準將軟件企業的能力成熟度劃分為5個等級,級別越高表明該企業在提供合格軟件產品方面的能力越強。
CMMCapability Maturity Model 是能力,成熟度模型的縮寫。CMM的工作最早開始于 1986年11月,當時為了滿足美國聯邦政府評估軟件供應商能力的要求,美國卡內基·梅隆大學的軟件工程研究院Sei 牽頭,在Mitre公司的協助下,于1987年9月發布了一份能力成熟度框架Capability Maturity fraMework 以及一套成熟度問卷 Maturity QueStionnaire .很多人認為這套問卷就代表了CMM模型,其實它只是用于探索軟件過程成熟度的一個工具,真正的模型出現在四年以后。Sei總結了自1987年以來對成熟度框架和初版成熟度問卷的實戰經驗,并以此為基礎,推出了CMM1.0 版。這個推出于 1991年的 CMM1.0 集中了四年來對軟件公司評估的經驗以及廣泛的用戶反饋,在成熟度框架的基礎上建立了一個可用的模型,這個模型可以更加有效地幫助軟件企業建立和實施過程改進計劃。
CMM1.0 版使用兩年之后,于1992年四月進行了一個研討會,參加研討會的有約兩百名富有經驗的軟件專業人員。在廣泛聽取了他們的反饋意見之后,Sei于 1993 年推出了CMM1.1 版。近幾年來,CMM又推出了2.0 版本,同時進入了iSo 體系,稱為 iSo/ieC15504 或 SpiCe. SpiCe從1995年起進入實地測試階段,可能于2001年發布 。
CMM 致力于軟件開發過程的管理及工程能力的提高與評估。該模型在美國和北美地區已得到廣泛應用同時正在被越來越多的歐洲和亞洲等國家的大型信息技術企業所采納,實際上已成為軟件開發過程改進與評估的事實上的工業標準。
印度是軟件大國,十分重視軟件開發過程的管理及與其相關的理論與標準的發展。據統計,在印度的2000多家軟件公司中有75家軟件公司通過了iSo9000認證,60多家軟件公司通過了CMM認證,其中達到CMM5級一家,4級三家,3級4家。
CMM與iSo9000的區別主要有以下幾點:CMM是專門針對軟件產品開發及服務的,而iSo9000則有寬得多的范圍;CMM強調軟件開發過程的成熟度,即過程的不斷改進和提高,而iSo9000則僅描述可接收的質量體系的最低標準;CMM3級的覆蓋范圍要大于iSo9000的覆蓋范圍。
引進CMM的意義有兩個方面
1.對軟件企業:
提高軟件開發的管理能力:CMM提供了軟件企業自我評估的方法和自我提高的手段;提高軟件生產率;加強軟件生產的國際競爭力。
2.對軟件項目發包單位和軟件用戶:
提供了對軟件開發商開發管理水平的評估手段,有助于軟件開發項目的風險識別。
CMM與CMMI對比
來源:Worthy Tech
CMMI:
CMMI 全稱是Capability Maturity Model Integration, 即軟件能力成熟度模型集成模型,是由美國國防部與卡內基-梅隆大學和美國國防工業協會共同開發和研制的。CMMI是一套融合多學科的、可擴充的產品集合,其研制的初步動機是為了利用兩個或多個單一學科的模型實現一個組織的集成化過程改進。CMMI可以解決現有不同CMM模型的重復性、復雜性,并減少由此引起的成本、縮短改進過程,它將軟件CMM2.0版草案(SW-CWW)、EIA過渡標準731(系統工程CMM)及IPD-CMM集成為一體,同時還與 ISO15504相兼容。 CMMI是有效過程元素的集合,目前有如下模型:?
CMMI是有效過程元素的集合,目前有如下模型:
CMMI-SE/SW/IPPD/SS,V1.1
CMMI-SE/SW/IPPD V1.1
CMMI-SE/SW V1.1
CMMI-SW V1.1?
CMMI自推出以來,在世界各地得到了廣泛的推廣與接受。在日本、歐洲、臺灣、印度等地都有很多企業在推廣與應用CMMI模型。尤其在印度CMMI的應用甚至超過了美國。
CMMI階段式的基本結構從CMM演變而來,但是CMMI的結構更加的形式化和精致,也更加的復雜,尤其為了保證連續式和階段式的同一性,更加增加了結構的理解難度。
CMMI強調了對需求的管理,有兩個過程域說明對需求的控制:需求管理REQM、需求開發RD。而在CMM中只有一個關鍵過程域需求管理RM以及軟件產品工程SPE中的一個實踐來說明對需求的管理和控制。
CMMI加強了對工程過程的重視,提供了更加細致的要求和指導,而CMM中卻只有一個SPE關鍵過程來進行要求和指導CMMI強調了度量,并且從項目的早期就已經進行了度量,在階段式中CMMI二級由一個過程域度量和分析;而在CMM中沒有專門的要求和指導。
CMMI對比CMM更加強調了對風險的管理,在CMM中風險只“是項目策劃”SPP中的一個活動,而在CMMI中風險管理作為一個單獨的過程域。
CMM:
CMM作為較早推出的軟件過程改進標準,目前已在世界范圍被廣泛地推廣和應用。不可否認,CMM在建立有效的開發系統、控制軟件產品開發過程式、降低軟件企業內外部故障成本、提高企業的經濟效益和社會效益等方面,取得了巨大成功。
但CMM也存在著一些不足,如CMM中的一個關鍵過程域“組間協調”IC在CMMI中地位下降,只是作為“集成化項目管理”IPM中的一個目標。
CMM中的關鍵過程域“同行評審”PR,在CMMI中得到了更高的抽象;對應CMMI的“驗證”VER,說明了對產品進行相應的QC活動。(同行評審本身就是一種QC活動)。
CMMI的公共特性中,沒有了測量(ME),這些度量內容被組織起來形成了一個支持過程“度量和分析”。具體理由如下:
度量和分析本身應用的復雜性和它執行的高成本在原來的CMM中每個KPA均有單獨的測量要求,容易造成“過度測量”,也沒有形成對組織級的、統一的度量體系的指導和要求,造成實施中的困難。例如在CMM中如果一個組織達到了CMM三級,由于各個KPA均要求了測量(ME),實際上已經建立了全組織過程的測量,這和CMM的等級劃分思想是有著沖突的。
總結:
CMMI改進了這個方面,要求組織從組織級的統一要求出發建立度量體系。這樣的想法也符合過程改進理論的思想;這樣組織在實施過程中可以選擇必要的過程進行測量,而不是全部過程的測量,從這個意義上,CMMI對比CMM降低了對度量的要求和實施難度,但是更加具有全局性和可實施性。
CMM是作為評估標準出現的,所以是“必要”的才能保證評估的標準。
CMMI是作為改進模型出現的,羅列了較多的最佳實踐,利于過程的改進。
EasyMock 2 版本必須要 JDK5 才能使用 EasyMock 1.2 可以在 JDK 1.4 使用
也可以使用 Retrotranslator 將 EasyMock 2 版本改為 JDK 1.4 也可以使用的。
目前使用的是 EasyMock 2.2
準備:
先弄個接口 Haha 用來 Mock 的,兩個方法
void haha(String s);
String hehe(String s);
開始 Mock:
靜態導入 EasyMock
import static org.easymock.EasyMock.*;
然后
Haha haha=createMock(Haha.class);
無返回值的調用可以直接調用 Mock 方法
haha.haha("haha");
有返回值的可以
expect(haha.hehe("hehe")).andReturn("ok");
這樣做完后
你要 replay(haha); 一下,表示錄完 mock ,準備重放了。
就可以調用 haha.haha("haha") 了,同樣的,調用 haha.hehe("hehe") 的返回值是 "ok"
全部調用完了,使用 verify(haha); 查看一下預期的調用是不是都調了,如果預期要調用一次,卻沒調,那就會 AssertionError 哦。
調用次數
上面這些都是默認調用一次,就相當于 expect(haha.hehe("hehe")).andReturn("ok").times(1); 或 expect(haha.hehe("hehe")).andReturn("ok").once();
如果想調用任意次,就 expect(haha.hehe("hehe")).andReturn("ok").anyTimes();
如果想最少調用一次,就 expect(haha.hehe("hehe")).andReturn("ok").atLeastOnce();
如果想調用 1 至 3 次,就 expect(haha.hehe("hehe")).andReturn("ok").times(1,3);
預期的結果
還可以 expect(haha.hehe("hehe")).andReturn("ok").andReturn("ok too").andThrow(new RuntimeException());
這樣,第一次調用 haha.hehe("hehe") 時返回 "ok" ,第二次返回 "ok too",第三次調用就比較慘了,會拋出一個 RuntimeException,需要注意 的是,如果拋出的異常是 unchecked 的,就是 Runtime 的,就隨便拋,如果是 checked 的,那就一定要拋這個方法定義的,否則會在 andThrow 這行出 IllegalArgumentException 。
終極解決辦法還可以使用 andAnswer(IAnswer<T> answer) 傳一個實現 IAnswer 接口的實例,這個接口只有一個方法
T answer() throws Throwable;
隨便你返回什么,或是拋出什么異常。
調用順序
不 過如上面所說,haha.haha("haha") 與 haha.hehe("hehe") 是沒有順序的,將 createMock 改成 createStrictMock 或在 createMock 后面加一行 checkOrder(haha,true) 就可以了,這時,就一定要按照定義的順序來調用了。
如果多個不同的 mock 也要保證順序呢?那就不能使用 createMock 來創建這些 mock 了,因為每次 createMock 都會使用一個新的 IMocksControl 實例來單獨控制這個 mock ,我們希望將多個 mock 用同一個 IMocksControl 控制,只需要
IMocksControl ctrl = createStrictControl();
Haha haha1= ctrl.createMock(Haha .class);
Haha haha2 = ctrl.createMock(Haha .class);
haha1.haha("haha1");
haha2.haha("haha2");
ctrl.replay();
就可以了
預期的參數
剛才 haha.haha("haha") 中的 "haha" 就是預期的參數,EasyMock 提供了很多預期參數的方法,比如 haha.haha(eq("haha")),與前面的方法功能完全一樣
haha.haha((String)anyObject) 隨便你傳什么參數都沒問題。
haha.haha(not(eq("haha"))) 這個只要不傳 haha ,其它什么都成
同 樣可以自定義,只要調用 ??? public static void reportMatcher(IArgumentMatcher matcher) 方法,將自定義的 IArgumentMatcher 傳進去就可以了,這個接口有兩個方法 boolean matches(Object argument)?? 和 void appendTo(StringBuffer buffer) 第一個方法的參數是調用實際傳入的值,返回是否匹配,第二個方法是錯誤時向 buffer 中 append 錯誤信息。
將方法弄成 Stub
Stub 方法,我想應該就是隨便調,愛怎么調就怎么調,返回的都是那個值,最后也不會驗證到底調用了多少次。
如果想把一個方法弄成 Stub,無返回值的只要 asStub() 就是 expect(haha.haha("haha")).asStub() ,有返回值的就 andStubReturn() , andStubAnswer() 這樣就可以了。
友好的Mock
我們使用 createMock 創建出來的 mock 對象,如果沒有錄過,調用這個方法都會出 AssertionError ,但如果使用 createNiceMock 就不會了,會返回 0 , null , false 這樣的。