極端編程法
A. xp是什麼意思
Windows XP:
是微軟在2001年10月25日推出的基於X86、X64架構的PC和平板電腦使用的操作系統,包括商用及家用的台式電腦等,大小為575MB~1GB。
其名字「XP」的意思是「體驗(Experience)」,是繼Windows 2000及Windows ME之後的下一代Windows操作系統,也是微軟首個面向消費者且使用Windows NT5.1架構的操作系統。Windows XP主要有32位版本,64位版本和嵌入式版本三個版本。2014年4月,微軟宣布Windows XP正式停止服務。
Windows XP是操作系統中最長壽的,如今XP所代表的早已不只是一款操作系統,而是一個時代的印記,它不僅被寫入各國教科書中伴隨一代人成長,更將永遠被歷史所銘記。
系統簡介:
界面
Windows xpWindows XP擁有一個叫做Luna(月神)的用戶圖形界面,視窗標志也改為較清晰亮麗的四色窗標志。此外,Windows XP還引入了一個「選擇任務」的用戶界面,使得工具條可以訪問任務的具體細節。然而,批評家認為這個基於任務的設計只是增加了視覺上的混亂,因為它除了提供比其它操作系統更簡單的工具欄以外並沒有添加新的特性。而額外進程的耗費又是可見的。
任務管理器
xp系統對任務管理的改變不是很大。相比上一個版本Windows 2000與Windows ME,XP的任務管理器只是更加符合Luna界面效果。
xp系統按下Alt+Ctrl+Delete進入安全界面,間接打開任務管理器。這是Xp系統的一大特色。
開始菜單
Windows XP率先使用雙列菜單,為之後的Windows 版本的開始菜單提供了基礎。雙列菜單一直到Windows 8才被開始屏幕取替。
explorer
Windows XP的文件資源管理器使用了全彩界面。相比上一個版本改變不大。但是也適應了其Luna界面。
軟體
由於微軟把很多以前是由第三方提供的軟體整合到操作系統中,為此XP受到了猛烈的批評。這些軟體包括防火牆、媒體播放器(Windows Media Player),即時通訊軟體(Windows Messenger),以及它與Microsoft Passport網路服務的緊密結合,這都被很多計算機專家認為是安全風險以及對個人隱私的潛在威脅。這些特性的增加被認為是微軟繼續其傳統的壟斷行為的持續。
控制項
Windows XP的控制項有幾個來源,和傳統的桌面應用程序開發或Web開發一樣,有默認提供的控制項和第三方開者發布的第三方控制項。一般而言,如果不是過於復雜的界面布局,使用默認控制項就足矣。MSDN列出了Windows應用程序平台中可用的廣泛控制項集,如 基本控制項、全景控制項、Pivot控制項以及WebBrowser控制項。當這些默認提供給的控制項無法滿足需求,就可以自定義控制項或是尋求第三方控制項。已經有很多類似的Windows的控制項,如ComponentOne Studio,有UI控制項,表格控制項,用於數據顯示、文本編輯、布局控制、導航操作等。
B. 什麼極限編程
ExtremeProgramming(極限編程,簡稱XP)是由KentBeck在1996年提出的。KentBeck在九十年代初期與WardCunningham共事時,就一直共同探索著新的軟體開發方法,希望能使軟體開發更加簡單而有效。Kent仔細地觀察和分析了各種簡化軟體開發的前提條件、可能行以及面臨的困難。1996年三月,Kent終於在為DaimlerChrysler所做的一個項目中引入了新的軟體開發觀念——XP。
XP是一個輕量級的、靈巧的軟體開發方法;同時它也是一個非常嚴謹和周密的方法。它的基礎和價值觀是交流、樸素、反饋和勇氣;即,任何一個軟體項目都可以從四個方面入手進行改善:加強交流;從簡單做起;尋求反饋;勇於實事求是。XP是一種近螺旋式的開發方法,它將復雜的開發過程分解為一個個相對比較簡單的小周期;通過積極的交流、反饋以及其它一系列的方法,開發人員和客戶可以非常清楚開發進度、變化、待解決的問題和潛在的困難等,並根據實際情況及時地調整開發過程。
什麼是軟體開發
軟體開發的內容是:需求、設計、編程和測試!
需求:不僅僅是用戶需求,應該是開發中遇到的所有的需求。比如,你首先要知道做這個項目是為了解決什麼問題;測試案例中應該輸入什麼數據……為了清楚地知道這些需求,你經常要和客戶、項目經理等交流。
設計:編碼前,肯定有個計劃告訴你要做什麼,結構是怎樣等等。你一定要按照這個來做,否則可能會一團糟。
編程:如果在項目截止日,你的程序不能跑起來或達不到客戶的要求,你就拿不到錢。
測試:目的是讓你知道,什麼時候算是完成了。如果你聰明,你就應該先寫測試,這樣可以及時知道你是否真地完成了。否則,你經常會不知道,到底有哪些功能是真正完成了,離預期目標還差多遠。
軟體開發中,客戶和開發人員都有自己的基本權利和義務。
客戶:
定義每個用戶需求的商業優先順序;
制訂總體計劃,包括用多少投資、經過多長時間、達到什麼目的;
在項目開發過程中的每個工作周,都能讓投資獲得最大的收益;
通過重復運行你所指定的功能測試,准確地掌握項目進展情況;
能隨時改變需求、功能或優先順序,同時避免昂貴的再投資;能夠根據各種變化及時調整項目計劃;
能夠隨時取消項目;項目取消時,以前的開發工作不是一堆垃圾,已開發完的功能是合乎要求的,正在進行或未完成的的工作則應該是不難接手的。
開發人員:
知道要做什麼,以及要優先做什麼;
工作有效率;
有問題或困難時,能得到客戶、同事、上級的回答或幫助;
對工作做評估,並根據周圍情況的變化及時重新評估;
積極承擔工作,而不是消極接受分配;
一周40小時工作制,不加班。
這就是軟體開發,除此之外再還有其它要關心的問題!
靈巧的輕量級軟體開發方法
一套軟體開發方法是由一系列與開發相關的規則、規范和慣例。重量級的開發方法嚴格定義了許多的規則、流程和相關的文檔工作。靈巧的輕量級開發方法,其規則和文檔相對較少,流程更加靈活,實施起來相對較容易。
在軟體工程概念出現以前,程序員們按照自己喜歡的方式開發軟體。程序的質量很難控制,調試程序很繁瑣,程序員之間也很難讀懂對方寫的代碼。1968年,EdsgerDijkstra給CACM寫了一封題為的信,軟體工程的概念由此誕生。程序員們開始摒棄以前的做法,轉而使用更系統、更嚴格的開發方法。為了使控制軟體開發和控制其它產品生產一樣嚴格,人們陸續制定了很多規則和做法,發明了很多軟體工程方法,軟體質量開始得到大幅度提高。隨著遇到的問題更多,規則和流程也越來越精細和復雜。
到了今天,在實際開發過程中,很多規則已經難於遵循,很多流程復雜而難於理解,很多項目中文檔的製作過程正在失去控制。人們試圖提出更全面更好的一攬子方案,或者寄希望於更復雜的、功能更強大的輔助開發工具(CaseTools),但總是不能成功,而且開發規范和流程變得越來越復雜和難以實施。
為了趕進度,程序員們經常跳過一些指定的流程,很少人能全面遵循那些重量級開發方法。
失敗的原因很簡單,這個世界沒有萬能葯。因此,一些人提出,將重量級開發方法中的規則和流程進行刪減、重整和優化,這樣就產生了很多適應不同需要的輕量級流程。在這些流程中,合乎實際需要的規則被保留下來,不必要的復雜化開發的規被拋棄。而且,和傳統的開發方法相比,輕量級流程不再象流水生產線,而是更加靈活。
ExtremeProgramming(XP)就是這樣一種靈巧的輕量級軟體開發方法。
為什麼稱為「Extreme」(極限)
「Extreme」(極限)是指,對比傳統的項目開發方式,XP強調把它列出的每個方法和思想做到極限、做到最好;其它XP所不提倡的,則一概忽略(如開發前期的整體設計等)。一個嚴格實施XP的項目,其開發過程應該是平穩的、高效的和快速的,能夠做到一周40小時工作制而不拖延項目進度。
XP的軟體開發是什麼樣
1極限的工作環境
為了在軟體開發過程中最大程度地實現和滿足客戶和開發人員的基本權利和義務,XP要求把工作環境也做得最好。每個參加項目開發的人都將擔任一個角色(項目經理、項目監督人等等)並履行相應的權利和義務。所有的人都在同一個開放的開發環境中工作,最好是所有人在同一個大房子中工作,還有茶點供應;每周40小時,不提倡加班;每天早晨,所有人一起站著開個短會;牆上有一些大白板,所有的Story卡、CRC卡等都貼在上面,討論問題的時候可以在上面寫寫畫畫;下班後大家可以一起玩電腦游戲……。
2極限的需求
客戶應該是項目開發隊伍中的一員,而不是和開發人員分開的;因為從項目的計劃到最後驗收,客戶一直起著很重要的作用。開發人員和客戶一起,把各種需求變成一個個小的需求模塊(UserStory),例如「計算年級的總人數,就是把該年級所有班的人數累加。」;這些模塊又會根據實際情況被組合在一起或者被分解成更小的模塊;它們都被記錄在一些小卡片(StoryCard)上,之後分別被程序員們在各個小的周期開發中(Iteration,通常不超過3個星期)實現;客戶根據每個模塊的商業價值來指定它們的優先順序;開發人員要做的是確定每個需求模塊的開發風險,風險高的(通常是因為缺乏類似的經驗)需求模塊將被優先研究、探索和開發;經過開發人員和客戶分別從不同的角度評估每個模塊後,它們被安排在不同的開發周期里,客戶將得到一個盡可能准確的開發計劃;客戶為每個需求模塊指定驗收測試(功能測試)。
每發布一次開發的軟體(經過一個開發周期),用戶都能得到一個可以開始使用的系統,這個系統全面實現了相應的計劃中的所有需求。而在一些傳統的開發模式中,無論什麼功能,用戶都要等到所有開發完成後才能開始使用。
3極限的設計
從具體開發的角度來看,XP內層的過程是一個個基於測試驅動的開發(TestDrivenDevelopment)周期,諸如計劃和設計等外層的過程都是圍繞這些展開的。每個開發周期都有很多相應的單元測試(UnitTest)。剛開始,因為什麼都沒有實現,所以所有的單元測試都是失敗的;隨著一個個小的需求模塊的完成,通過的單元測試也越來越多。通過這種方式,客戶和開發人員都很容易檢驗,是否履行了對客戶的承諾。XP提倡對於簡單的設計(SimpleDesign),就是用最簡單的方式,使得為每個簡單的需求寫出來的程序可以通過所有相關的單元測試。XP強調拋棄那種一攬子詳細設計方式(BigDesignUpFront),因為這種設計中有很多內容是你現在或最近都根本不需要的。XP還大力提倡設計復核(Review)、代碼復核以及重整和優化(Refectory),所有的這些過程其實也是優化設計的過程;在這些過程中不斷運行單元測試和功能測試,可以保證經過重整和優化後的系統仍然符合所有需求。
4極限的編程
既然編程很重要,XP就提倡兩個人一起寫同一段程序(PairProgramming),而且代碼所有權是歸於整個開發隊伍(CollectiveCodeOwnership)。程序員在寫程序和重整優化程序的時候,都要嚴格遵守編程規范。任何人都可以修改其他人寫的程序,修改後要確定新程序能通過單元測試。
5極限的測試
既然測試很重要,XP就提倡在開始寫程序之前先寫單元測試。開發人員應該經常把開發好的模塊整合到一起(ContinuousIntegration),每次整合後都要運行單元測試;做任何的代碼復核和修改,都要運行單元測試;發現了BUG,就要增加相應的測試(因此XP方法不需要BUG資料庫)。除了單元測試之外,還有整合測試,功能測試、負荷測試和系統測試等。所有這些測試,是XP開發過程中最重要的文檔之一,也是最終交付給用戶的內容之一。
XP中的重要慣例和規則
1項目開發小組(Team)
在XP中,每個對項目做貢獻的人都應該是項目開發小組中的一員。而且,這個小組中必須至少有一個人對用戶需求非常清晰,能夠提出需求、決定各個需求的商業價值(優先順序)、根據需求等的變化調整項目計劃等。這個人扮演的是「客戶」這個角色,當然最好就是實際的最終用戶,因為整個項目就是圍繞最終用戶的需求而展開的。程序員是項目開發小組中必不可少的成員。小組中可以有測試員,他們幫助客戶制訂驗收測試;有分析員,幫助客戶確定需求;通常還有個Coach(教練),負責跟蹤開發進度、解決開發中遇到的一些問題、推動項目進行;還可以又一個項目經理,負責調配資源、協助項目內外的交流溝通等等。項目小組中有這么多角色,但並不是說,每個人做的工作是別人不能插手或干預的,XP鼓勵每個人盡可能地為項目多做貢獻。平等相處,取長補短;這就是最好的XP開發小組。
2計劃項目(PlanningGame)、驗收測試、小規模發布(SmallReleases)
XP開發小組使用簡單的方式進行項目計劃和開發跟蹤,並以次預測項目進展情況和決定未來的步驟。根據需求的商業價值,開發小組針對一組組的需求進行一系列的開發和整合,每次開發都會產生一個通過測試的、可以使用的系統。
計劃項目
XP的計劃過程主要針對軟體開發中的兩個問題:預測在交付日期前可以完成多少工作;現在和下一步該做些什麼。不斷的回答這兩個問題,就是直接服務於如何實施及調整開發過程;與此相比,希望一開始就精確定義整個開發過程要做什麼事情以及每件事情要花多少時間,則事倍功半。針對這兩個問題,XP中又兩個主要的相應過程:
軟體發布計劃(ReleasePlanning)。客戶闡述需求,開發人員估算開發成本和風險。客戶根據開發成本、風險和每個需求的重要性,制訂一個大致的項目計劃。最初的項目計劃沒有必要(也沒有可能)非常准確,因為每個需求的開發成本、風險及其重要性都不是一成不變的。而且,這個計劃會在實施過程中被不斷地調整以趨精確。
周期開發計劃(IterationPlanning)。開發過程中,應該有很多階段計劃(比如每三個星期一個計劃)。開發人員可能在某個周期對系統進行內部的重整和優化(代碼和設計),而在某個周期增加了新功能,或者會在一個周期內同時做兩方面的工作。但是,經過每個開發周期,用戶都應該能得到一個已經實現了一些功能的系統。而且,每經過一個周期,客戶就會再提出確定下一個周期要完成的需求。在每個開發周期中,開發人員會把需求分解成一個個很小的任務,然後估計每個任務的開發成本和風險。這些估算是基於實際開發經驗的,項目做得多了,估算自然更加准確和精確;在同一個項目中,每經過一個開發周期,下一次的估算都會有更過的經驗、參照和依據,從而更加准確。這些簡單的步驟對客戶提供了豐富的、足夠的信息,使之能靈活有效地調控開發進程。每過兩三個星期,客戶總能夠實實在在地看到開發人員已經完成的需求。在XP里,沒有什麼「快要完成了」、「完成了90%」的模糊說法,要不是完成了,要不就是沒完成。這種做法看起來好象有利有弊:好處是客戶可以馬上知道完成了哪些、做出來的東西是否合用、下面還要做些什麼或改進什麼等等;壞處是客戶看到做出來的東西,可能會很不滿意甚至中止合同。實際上,XP的這種做法是為了及早發現問題、解決問題,而不是等到過了幾個月,用戶終於看到開發完的系統了,然後才告訴你這個不行、那個變了、還要增加
哪個內容等等。
驗收測試
客戶對每個需求都定義了一些驗收測試。通過運行驗收測試,開發人員和客戶可以知道開發出來的軟體是否符合要求。XP開發人員把這些驗收測試看得和單元測試一樣重要。為了不浪費寶貴的時間,最好能將這些測試過程自動化。
頻繁地小規模發布軟體(SmallReleases)
每個周期(Iteration)開發的需求都是用戶最需要的東西。在XP中,對於每個周期完成時發布的系統,用戶都應該可以很容易地進行評估,或者已經能夠投入實際使用。這樣,軟體開發對於客戶來說,不再是看不見摸不著的東西,而是實實在在的。XP要求頻繁地發布軟體,如果有可能,應該每天都發布一個新版本;而且在完成任何一個改動、整合或者新需求後,就應該立即發布一個新版本。這些版本的一致性和可靠性,是靠驗收測試和測試驅動的開發來保證的。
3簡單設計,PairProgramming,測試驅動開發,重整和優化
XP程序員不但做為一個開發小組共同工作,還以兩個人為一個小開發單元編寫同一個程序。開發人員們進行簡單的設計,編寫單元測試後再編寫符合測試要求的代碼,並在滿足需求的前提下不斷地優化設計。
簡單設計
XP中讓初學者感到最困惑的就是這點。XP要求用最簡單的辦法實現每個小需求,前提是按照這些簡單設計開發出來的軟體必須通過測試。這些設計只要能滿足系統和客戶在當下的需求就可以了,不需要任何畫蛇添足的設計,而且所有這些設計都將在後續的開發過程中就被不斷地重整和優化。
在XP中,沒有那種傳統開發模式中一次性的、針對所有需求的總體設計。在XP中,設計過程幾乎一直貫穿著整個項目開發:從制訂項目的計劃,到制訂每個開發周期(Iteration)的計劃,到針對每個需求模塊的簡捷設計,到設計的復核,以及一直不間斷的設計重整和優化。整個設計過程是個螺旋式的、不斷前進和發展的過程。從這個角度看,XP是把設計做到了極致。
PairProgramming
XP中,所有的代碼都是由兩個程序員在同一台機器上一起寫的——這是XP中讓人爭議最多、也是最難實施的一點。這保證了所有的代碼、設計和單元測試至少被另一個人復核過,代碼、設計和測試的質量因此得到提高。看起來這樣象是在浪費人力資源,但是各種研究表明事實恰恰相反。——這種工作方式極大地提高了工作強度和工作效率。
很多程序員一開始是被迫嘗試這點的(XP也需要行政命令的支持)。開始時總是不習慣的,而且兩個人的效率不會比一個人的效率高。這種做法的效果往往要堅持幾個星期或一兩個月後才能很顯著。據統計,在所有剛開始PairProgramming的程序員中,90%的人在兩個月以後都很認為這種工作方式更加高效。
項目開發中,每個人會不斷地更換合作編程的夥伴。因此,PairProgramming不但提高了軟體質量,還增強了相互之間的知識交流和更新,增強了相互之間的溝通和理解。這不但有利於個人,也有利於整個項目、開發隊伍和公司。從這點看,PairProgramming不僅僅適用於XP,也適用於所有其它的軟體開發方法。
測試驅動開發
反饋是XP的四個基本的價值觀之一——在軟體開發中,只有通過充分的測試才能獲得充分的反饋。XP中提出的測試,在其它軟體開發方法中都可以見到,比如功能測試、單元測試、系統測試和負荷測試等;與眾不同的是,XP將測試結合到它獨特的螺旋式增量型開發過程中,測試隨著項目的進展而不斷積累。另外,由於強調整個開發小組擁有代碼,測試也是由大家共同維護的。即,任何人在往代碼庫中放程序(CheckIn)前,都應該運行一遍所有的測試;任何人如果發現了一個BUG,都應該立即為這個BUG增加一個測試,而不是等待寫那個程序的人來完成;任何人接手其他人的任務,或者修改其他人的代碼和設計,改動完以後如果能通過所有測試,就證明他的工作沒有破壞願系統。這樣,測試才能真正起到幫助獲得反饋的作用;而且,通過不斷地優先編寫和累積,測試應該可以基本覆蓋全部的客戶和開發需求,因此開發人員和客戶可以得到盡可能充足的反饋。
重整和優化(Refactoring)
XP強調簡單的設計,但簡單的設計並不是沒有設計的流水帳式的程序,也不是沒有結構、缺乏重用性的程序設計。開發人員雖然對每個USERSTORY都進行簡單設計,但同時也在不斷地對設計進行改進,這個過程叫設計的重整和優化(Refactoring)。這個名字最早出現在MartinFowler寫的《Refactoring:》這本書中。
Refactoring主要是努力減少程序和設計中重復出現的部分,增強程序和設計的可重用性。Refactoring的概念並不是XP首創的,它已經被提出了近30年了,而且一直被認為是高質量的代碼的特點之一。但XP強調,把Refactoring做到極致,應該隨時隨地、盡可能地進行Refactoring,只要有可能,程序員都不應該心疼以前寫的程序,而要毫不留情地改進程序。當然,每次改動後,程序員都應該運行測試程序,保證新系統仍然符合預定的要求。
4頻繁地整合,集體擁有代碼(CollectiveCodeOwnership),編程規范
XP開發小組經常整合不同的模塊。為了提高軟體質量,除了測試驅動開發和PairProgramming以外,XP要求每個人的代碼都要遵守編程規范,任何人都可以修改其他人寫的代碼,而且所有人都應該主動檢查其他人寫的代碼。
頻繁地整合(Integration)
在很多項目中,開發人員往往很遲才把各個模塊整合在一起。在這些項目中,開發人員經常在整合過程中發現很多問題,但不能肯定到底是誰的程序出了問題;而且,只有整合完成後,開發人員才開始稍稍使用整個系統,然後就馬上交付給客戶驗收。對於客戶來說,即使這些系統能夠通過終驗收測試,因為使用時間短,客戶門心裡並沒有多少把握。
為了解決這些問題,XP提出,整個項目過程中,應該頻繁地,盡可能地整合已經開發完的USERSTORY(每次整合一個新的USERSTORY)。每次整合,都要運行相應的單元測試和驗收測試,保證符合客戶和開發的要求。整合後,就發布一個新的應用系統。這樣,整個項目開發過程中,幾乎每隔一兩天,都會發布一個新系統,有時甚至會一天發布好幾個版本。通過這個過程,客戶能非常清楚地掌握已經完成的功能和開發進度,並基於這些情況和開發人員進行有效地、及時地交流,以確保項目順利完成。
集體擁有代碼(CollectiveCodeOwnership)
在很多項目開發過程中,開發人員只維護自己的代碼,而且很多人不喜歡其他人隨意修改自己的代碼。因此,即使可能有相應的比較詳細的開發文檔,但一個程序員卻很少、也不太願意去讀其他程序員的代碼;而且,因為不清楚其他人的程序到底實現了什麼功能,一個程序員一般也不敢隨便改動其他人的代碼。同時,因為是自己維護自己的代碼,可能因為時間緊張或技術水平的局限性,某些問題一直不能被發現或得到比較好的解決。針對這點,XP提倡大家共同擁有代碼,每個人都有權利和義務閱讀其他代碼,發現和糾正錯誤,重整和優化代碼。這樣,這些代碼就不僅僅是一兩個人寫的,而是由整個項目開發隊伍共同完成的,錯誤會減少很多,重用性會盡可能地得到提高,代碼質量是非常好。
為了防止修改其他人的代碼而引起系統崩潰,每個人在修改後都應該運行測試程序。(從這點,我們可以再次看到,XP的各個慣例和規則是怎樣有機地結合在一起的。)
編程規范
XP開發小組中的所有人都遵循一個統一的編程標准,因此,所有的代碼看起來好像是一個人寫的。因為有了統一的編程規范,每個程序員更加容易讀懂其他人寫的代碼,這是是實現CollectiveCodeOwnership的重要前提之一。
5Metaphor(系統比喻),不加班
XP過程通過使用一些形象的比喻讓所有人對系統有個共同的、簡潔的認識。XP認為加班是不正常的,因為這說明關於項目進度的估計和安排有問題。
Metaphor(系統比喻)
為了幫助每個人一致清楚地理解要完成的客戶需求、要開發的系統功能,XP開發小組用很多形象的比喻來描述系統或功能模塊是怎樣工作的。比如,對於一個搜索引擎,它的Metaphor可能就是「一大群蜘蛛,在網上四處尋找要捕捉的東西,然後把東西帶回巢穴。」
不加班
大量的加班意味著原來的計劃是不準確的,或者是程序遠不清楚自己到底什麼時候能完成什麼工作。而且,開發管理人員和客戶也因此無法准確掌握開發速度;開發人員也因此非常疲勞。XP認為,如果出現大量的加班現象,開發管理人員(比如Coach)應該和客戶一起確定加班的原因,並及時調整項目計劃、進度和資源。
XP中一些基本概念的簡介
UserStory:開發人員要求客戶把所有的需求寫成一個個獨立的小故事,每個只需要幾天時間就可以完成。開發過程中,客戶可以隨時提出新的UserStory,或者更改以前的UserStory。
StoryEstimates和開發速度:開發小組對每個UserStory進行估算,並根據每個開發周期(Iteration)中的實際情況反復計算開發速度。這樣,開發人員和客戶能知道每個星期到底能開發多少UserStory。
ReleasePlan和ReleaseScope:整個開發過程中,開發人員將不斷地發布新版本。開發人員和客戶一起確定每個發布所包含的UserStory。
Iteration(開發周期)和IterationPlan:在一個Release過程中,開發人員要求客戶選擇最有價值的UserStory作為未來一兩個星期的開發內容。
TheSeed:第一個開發周期(Iteration)完成後,提交給客戶的系統。雖然這不是最終的產品,但它已經實現了幾個客戶認為是最重要的Story,開發人員將逐步在其基礎上增加新的模塊。
ContinuousIntegration(整合):把開發完的UserStory的模塊一個個拼裝起來,一步步接近乃至最終完成最終產品。
驗收測試(功能測試):對於每個UserStory,客戶將定義一些測試案例,開發人員將使運行這些測試案例的過程自動化。
UnitTest(單元測試):在開始寫程序前,程序員針對大部分類的方法,先寫出相應的測試程序。
Refactoring(重整和優化):去掉代碼中的冗餘部分,增加代碼的可重用性和伸縮性。
小結
XP的一個成功因素是重視客戶的反饋——開發的目的就是為了滿足客戶的需要。XP方法使開發人員始終都能自信地面對客戶需求的變化。XP強調團隊合作,經理、客戶和開發人員都是開發團隊中的一員。團隊通過相互之間的充分交流和合作,使用XP這種簡單但有效的方式,努力開發出高質量的軟體。XP的設計簡單而高效;程序員們通過測試獲得客戶反饋,並根據變化修改代碼和設計,他們總是爭取盡可能早地將軟體交付給客戶。XP程序員能夠勇於面對需求和技術上的變化。
XP很象一個由很多小塊拼起來的智力拚圖,單獨看每一小塊都沒有什麼意義,但拼裝好後,一幅美麗的圖畫就會呈現在你面前。
C. 什麼是極限編程
極限編程(Extreme Programming,XP)是一門針對業務和軟體開發的規則,它的作用在於將兩者的力量集中在共同的、可以達到的目標上。它是以符合客戶需要的軟體為目標而產生的一種方法論,XP使開發者能夠更有效的響應客戶的需求變化,哪怕是在軟體生命周期的後期。它強調,軟體開發是人與人合作進行的過程,因此成功的軟體開發過程應該充分利用人的優勢,而弱化人的缺點,突出了人在軟體開發過程中的作用。極端編程屬於輕量級的方法,認為文檔、架構不如直接編程來的直接。
D. 在開發過程中怎樣利用單元和功能測試
這種方法要求我為新加入的每個函數都編寫單元測試,並且維護這些測試。沒有通過單元測試,我就不能將任何一個的代碼加到模塊中。在代碼基數增長的同時,這些測試允許開發者有依據地將改變集成起來。起初,我認為這些單元測試就足以應付全局,沒有必要涉及到功能測試。噢,又錯了。功能測試和單元測試完全不同的兩者。我花費了很長的時間才理解到兩者的區別,以及如何將它們結合起來,用以改進開發進程。 本文探討了單元測試和功能測試之間的差別,同時介紹在你的日常開發的過程中如何來利用它測試和開發過程作為一個開發人員,測試如此之重要,以至於你甚至應該花費幾乎所有的時間來完成它。它不僅需要只被劃分為開發過程中的某個特定階段。顯然,它不該是在你把系統交付給客戶之前完成的最後一項任務。然而,你又如何得知它在何時結束呢?或是你如何得知是否因為修改一個微小的bug而破壞了系統的主要功能呢?或是系統可能會演化成超乎現在想像的模樣?測試,單元的和功能的都應該是開發的過程中的一部分。 單元測試應成為你編寫代碼的核心環節,尤其當你在從事一個項目時,緊張的時間約束你的開發進度,你也很想讓它是在可控的有序下進行。我希望測試也是在你編寫代碼之前編寫測試時的重要內容。 一套適用的單元測試應具備以下功能: 說明可能的最佳適用設計 提供類文檔的最佳格式 判斷一個類何時完成 增強開發人員對代碼的信心 是快速重構的基礎 在系統中自然要包含單元測試所需的設計文檔。重新閱讀它,你會發現這是軟體開發進程中的聖杯,文檔跟隨系統的變化而逐步演化。為每一個類提供完備的文檔比起為它提供一系列的使用框架,或是一系列可控的輸入要好得多。這樣,設計文檔就會因為單元測試的逐步通過而隨時更新。 你應該在你編寫代碼之前完成編寫測試的工序。這樣做會為測試所涉及的類提供設計方案,並促使你關注代碼中更小的程序模塊。這種練習也會使設計方案變得更加簡單。你不能試圖去了解將來的情形,去實現不必要的功能。編寫測試工作也會讓你清楚類會在什麼時間結束。可以說,當所有的測試通過時,任務也就完成了。 最後,單元測試會提供給你更高級別的依據,這絕對會滿足開發者的。如果你在改動代碼的同時,進行單元測試,你就會在你破壞的同時立即察覺到事態的發生。 功能測試甚至比單元測試更加重要,因為它們說明了你的系統就要預備發布了。功能測試將把你的工作系統放置於一個可用的狀態中。 一套適用的功能測試應具備以下功能: 有效地掌握用戶的需求 向項目組成員(包括用戶和開發者)給出系統面臨這些需求的依據 功能測試要在有效地情況下掌握用戶的需求。而傳統的開發者是在使用的過程中發現需求的。通常,人們贊同使用項目工程並且花費相當的時間去重新定製它們。當它們被完成時,它們所得到的僅僅是一堆廢紙。功能測試雷同於自行生效的使用項目的情況。極端程序設計方法(ExtremeProgramming)能夠說明這種概念。XP 的說法就是對未來發生在用戶和開發者之間的交流技巧的描述。功能測試也是這種交流的結果。而沒有功能測試,這種說法也不會建立起來的。 功能測試恰好填充了在單元測試和向項目小組提交的代碼依據之間的空隙。單元測試會漏過許多的bug。它可以給出代碼中你所需的所有有效部分,它也會給你所需的整個系統。功能測試可以使單元測試里漏掉的問題曝光。一系列可維護的,自動化的功能測試也會有漏網的情況,但是它至少比獨立地進行最全面的單元測試要有用得多。 單元測試VS 功能測試 單元測試告訴開發者代碼使事情正確地被執行,而功能測試所說的則是代碼在正確地發揮功效。 單元測試 單元測試是從開發者的角度來編寫的。它們確保類的每個特定方法成功執行一系列特定的任務。每一個測試都要保證對於給定的一個已知的輸入應該得到所期望的輸出。 編寫一系列可維護、自動化、沒有測試框架的單元測試幾乎是不可能的。在你開始之前,選擇一個項目小組都認可的框架。不斷地應用它,逐漸地喜歡它。在極端編程的介紹網頁上(見資源一節),有很多適用的單元測試框架。我喜歡用的是Juint 來進行Java 代碼的測試。</P> 功能測試 功能測試則是從用戶的角度來編寫的。這些測試保證系統能夠按照用戶所期望的那樣去運行。很多時候,開發一個完整的系統更像是建造一座大樓。當然,這種比喻並不是完全地恰當,但我們可以擴展它,來理解單元測試和功能測試之間的區別。 單元測試類似於一個建築檢查員對房屋的建設現場進行檢查。他注重的是房屋內部不同的系統,地基,架構設計,電氣化,垂直的線條等等。他檢查房屋的某個部分,以確保它在安全狀態下,正確無誤地工作,即是說,直接針對房屋的代碼。功能測試在這個劇本里類似於房屋的主人在檢查同樣的建設場地。他所期望的是房屋的內部系統正常地運轉,並且房屋檢查員執行了他的任務。房屋的主人看重的是生活在這樣的房屋中會是什麼樣子。他關注這間房屋的外貌,不同的房間有合適的空間,房屋適用於家庭的需要,窗戶恰好位於最佳採光的位置。房屋的主人運行的是對房屋的功能測試,他站在用戶的角度上。房屋檢查員運行的是單元測試,他是站在建設者的角度上。 象單元測試一樣,編寫一系列可維護、自動化、沒有測試框架的功能測試幾乎是不可能的。Junit在單元測試方面做得很好;然而,它在試圖編寫功能測試時就顯得比較鬆散。Junit 不等同於功能測試。現在已經有滿足這個功能的產品問世了,但是我還沒有看到它們被應用於開發產品過程里。如果你不能找到一個測試框架的話,就只好自己創建一個了。無論我們在建立一個項目時多麼聰明,建立的系統多麼靈活,如果我們的產品不能用,我們就是在浪費時間。結論是,功能測試是開發進程中最重要的一部分。 因為兩種類型的測試都是必要的,你會需要編寫它們的指南。 如何編寫單元測試<BR></STRONG>在你開始編寫單元測試很容易被激動的情緒感染。最簡單的起步方式就是為新的代碼創建單元測試。為已經存在的代碼創建單元測試是一種比較有難度的開始方式,但是也是可行的。)從新的代碼開始,習慣了這樣的步驟後,還要堅持重新閱讀現有代碼,並為它們創建一套測試程序。 就像前面提到過的一樣,你應該在你編寫要測試的代碼之前編寫單元測試。如何做到為還不存在的事物編寫測試呢?好問題!掌握這個能力需要90%的智力和10%技巧。我的意思是你只需假裝是在為已有的類編寫測試。接下來,進行編寫的工作。最初,你將出現很多語法錯誤,但是let it be,不要理會它。緊接著進行單元測試,修改語法錯誤(即是說,只用你自己定義的測試介面來實現類),再一次進行測試。重復這個過程,每一次都寫下充足的代碼去修改錯誤,進行測試直到它們通過為止。當所有的單元測試都通過時,代碼才算真正地完成了。 一般地說,你的類應具有開放的單元測試方式。然而,帶有直截了當的功能性的方法比如說,Java 語言里的Getting 和Setting 讀寫方法,就不需要單元測試,除非它們是以「特殊」的方式進行的。接下來的指導就是,當你感到需要對代碼中的某些特性添加註釋時,同時要編寫出單元測試。如果你同很多的程序員一樣,厭惡為代碼寫注釋,單元測試就是將你的代碼的特性文檔化的一種好方法。 將單元測試同被測試的相關的類打包在一起。(這種組織的方式允許每一個單元測試都能夠直接訪問類中被打包和保護的方法和參數)。要避免在單元測試中用到域對象(domain object)。域對象就是對於一個應用程序特定的對象。 例如,電子表格應用程序有個工作簿對象,它就是一個域對象。如果你的一個類已經知道了域對象,在你的測試中用到這些對象是很好的。但是如果你的類沒有涉及到這些對象,就不要在測試里讓它們同類糾纏不清了。不這樣做的話,就會產生打包的代碼被重用。經常是為一個項目創建的類也可以應用於其他的項目,這樣可能會出現直接重用這些類的情況。但是如果針對這些類的測試也用於另外的項目對象,讓測試生效會很費時,通常測試不是被拋棄掉就是被重新編寫。 以上的一些技巧會讓你從中受益,但最重要的是如果你不實際地去做,就永遠不會對單元測試有全面、深入的理解。更早地運行測試,並且在整個過程中都在代碼中給出全面的依據。當項目進展時,你會隨時添加更多的特性。運行測試就會提醒你,實現剛添加的特性會不會破壞已有的東西。 在你已經掌握編寫單元測試的技巧之後,你需要重新閱讀已存在的代碼。的確,為它們編寫代碼可能會是一場挑戰。但是千萬不要為了測試的目的而測試。可以說,編寫測試是一件緊跟時效的事情,尤其是當你發現要修改一個沒有好的測試程序的類時,那就是添加測試的恰當時機。和平常一樣,單元測試應該具備類每個方法的特性。實現測試的一個最簡單的方法就是,測試的同時一定要注意代碼的注釋。在單元測試中,不能放過任何一個注釋,在描述測試方法的開始就要為單元測試添加大量的注釋中。 如何編寫功能測試 盡管功能測試是如此重要,它也有個開發過程里醜陋的繼生子的壞名聲。在大多數的項目里,是由一個獨立的工作組來完成功能測試的工作。通常需要一群人在系統中的相互協助才能保證工序的正確運行。這種通常的看法和隊伍的組建的做法,都是非常愚蠢的。 功能測試同單元測試相類似。一旦要編寫有用戶涉入的產品的代碼(例如,對話框)時,就要編寫測試,但是一定要在實際編寫代碼之前做。一旦你開始了一項新任務,就要在功能測試的框架里清楚地描述這個任務的內容。你加入的新代碼的同時進行單元測試,開發工作就向前持續進行。 當所有的單元測試都進行通過後,再進行最初的功能測試來判斷項目是否可以通過,或是需要修改。理想的狀況下,功能測試小組的概念應該不存在的。開發者應該同用戶一同編寫功能測試。系統通過了一系列的單元測試後,負責進行功能測試的小組成員就要改變初試測試的參數,再進行系統的功能測試。 單元測試和功能測試之間的界線<BR></STRONG>一般情況下,很難劃清在單元測試和功能測試之間的界限。說實話,一直以來,我就不知道這個界線應該定在哪裡。當編寫單元測試時,我用以下幾個方法來判定單元測試是不是已經變成了功能測試:<BR>如果單元測試超越了類之間的界限,它可能變成了功能測試<BR>如果單元測試變得非常的復雜,它可能變成了功能測試<BR>如果單元測試變得很脆弱(即是說,它已經成為一個測試,但是卻因為要迎合不同用戶需求的改變而被動地變化),它可能變成了功能測試<BR>如果單元測試比需要測試的代碼還要難於編寫,它可能變成了功能測試 注意「它可能變成了功能測試」的說法,在這里沒有嚴格的標准。在單元測試和功能測試之間是有界線的,但是你必須自己判定它在哪裡。單元測試進行地順利,特定的測試逾越兩者界線的過渡就越明顯。 結論 單元測試以開發者的角度來編寫,並注重被測試類的特性。當編寫單元測試時,利用以下幾條指導: 在類代碼進行測試之前編寫單元測試 在單元測試里掌握代碼的注釋 測試所有執行特定功能的公用程序(即是說,和Java 語言中的Getting 和Setting 讀寫方法不同的方法。除非它們是通過一種特殊的方式來完成Getting 和Setting 功能的。) 將所有的測試項目同被測試的類打包在一起,並且分配它們對在模塊包內的和被保護成員的訪問許可權 在單元測試中避免使用某些特定的對象 功能測試也需要從用戶的角度出發來編寫,並且注重用戶所感興趣的系統功能。選擇一個適當的功能測試框架,或是開發出一種,並利用這些功能測試來制定用戶們想要的東西。通過這種方式,功能測試的人員可以獲得一個自動的工具,並且對使用工具的習慣有了一個好的起點。 將單元測試和功能測試作為開發進程的核心內容。這樣做,你就會確定系統在正常運轉。如果沒有,你恐怕不能保證系統是正常工作的。測試可能不是一件好玩的事情,但是從事單元測試和功能測試會使開發過程里含有更多的樂趣。 資源 「利用Ant 和JUnit 改進開發過程」(開發工作,2000 年12 月)揭示了單元測試的益處,尤其是應用了Ant 和Junit 之後。 開始了解極端編程的方法從極端編程的網頁上下載各種單元測試的框架【文章出處】
E. 極限編程的方法
基於敏捷的核心思想和價值目標,XP要求項目團隊遵循13個核心實踐
團隊協作(Whole Team)
規劃策略(The Planning Game);
結對編程(Pair programming)
測試驅動開發(Testing-Driven Development)
重構(Refactoring)
簡單設計(Simple Design)
代碼集體所有權(Collective Code Ownership)
持續集成(Continuous Integration)
客戶測試(Customer Tests)
小型發布(Small Release)
每周40小時工作制(40-hour Week)
編碼規范(Code Standards)
系統隱喻(System Metaphor) 計劃項目(PlanningGame)、驗收測試、小規模發布(SmallReleases)
XP開發小組使用簡單的方式進行項目計劃和開發跟蹤,並以此預測項目進展情況和決定未來的步驟。根據需求的商業價值,開發小組針對一組組的需求進行一系列的開發和整合,每次開發都會產生一個通過測試的、可以使用的系統。
F. xp是什麼
xp
極限編程(Extreme Programming,XP)是一門針對業務和軟體開發的規則,它的作用在於將兩者的力量集中在共同的、可以達到的目標上。它是以符合客戶需要的軟體為目標而產生的一種方法論,XP使開發者能夠更有效 XP的響應客戶的需求變化,哪怕是在軟體生命周期的後期。它強調,軟體開發是人與人合作進行的過程,因此成功的軟體開發過程應該充分利用人的優勢,而弱化人的缺點,突出了人在軟體開發過程中的作用。極端編程屬於輕量級的方法,認為文檔、架構不如直接編程來的直接。
目錄
第三方的身份的事故發生過對方規范化和規范
黑屏警告
反盜版「黑屏」舉措
XP的核心思想
XP的十二種方法
四個核心價值
帶給我們的變化
極限編程的有效實踐
展開
編輯本段
第三方的身份的事故發生過對方規范化和規范
xp
編輯本段
黑屏警告
微軟中國正式宣布 xp黑屏警告,將從2008年10月20日起同時推出兩個重要更新,使用XP專業版盜版系統與OfficeXPe2003、Office2007盜版軟體的用戶將分別遭遇電腦「黑屏」與「提醒標記」等警告。
被稱為Windows正版增值計劃通知和Office正版增值計劃通知的這兩個項目均是可選擇式的服務。用戶可以通過微軟更新站點或自動跟新選擇下載安裝、經過驗證過程後了解自己使用的WindowsXP或Office產品是否為正版並獲得了相應的授權。
微軟方面透露,驗證通過的用戶直接使用WindowsXP或Office程序即可。對於因不同原因未通過驗證的用戶,將收到相應的系統通知。如:產品未激活或使用試用版下的「未激活驗證失敗」;因同步超時等原因引起的「驗證無法完成」;或「非正版驗證失敗」。
XP
xp如果WindowsXP用戶沒有通過正版驗證,將會體驗到:用戶開機進入後,桌面背景變為純黑色,用戶可以重新設置桌面背景,但是每隔60分鍾,桌面背景將重新變回黑色;會看到一個登錄中斷的對話框,並在屏幕的右下角會出現一個永久通知和持續提醒的對話框顯示「您可能是軟體盜版的受害者」等提示信息。
如果Office用戶沒有通過正版驗證,用戶體驗將分為三個階段:驗證失敗後的第1-14天內,客戶將在每天首次打開Office軟體和此後2小時分別收到一次對話框提醒;從驗證失敗後的第15天開始,提示信息將告知用戶如不採取行動,將在14天後,Office軟體被添加視覺標記;客戶在收到這些對話框通知30天後,Office軟體的Word、Excel,PowerPoint和Outlook程序的菜單欄中將被添加視覺標記。
微軟方面認為,這兩項計劃是旨在幫助中國用戶甄別電腦中安裝的微軟Windows操作系統和Office應用軟體是否是獲得授權的正版軟體,從而幫助那些在不知情的情況下安裝和使用了盜版軟體的用戶免受侵害。
XP實際上是一種經歷過很多實踐考驗的一種軟體開發的方法,它誕生了大概有5 年,它已經被成功的應用在許多大型的公司,如:Bayeris che Landesbank,Credit Swis s Life,DaimlerChrysler,First Union National BankFord Motor Company and UBS.XP 的成功得益於它對客戶滿意度的特別強調,XP 是以開發符合客戶需要的軟體為目標而產生的一種方法論,XP 使開發者能夠更有效的響應客戶的需求變化,哪怕在軟體生命周期的後期。
編輯本段
反盜版「黑屏」舉措
xp微軟中國正式宣布,將從2008年10月20日起同時推出兩個重要更新,使用XP專業版盜版系統與OfficeXP、Office2003、Office2007盜版軟體的用戶將分別遭遇電腦「黑屏」與「提醒標記」等警告。
XP
新聞發布後即引起了網友的極大反應。截止18:00,已有4萬名網友通過搜狐新聞的調查表達了自己的意見,其中22.7%的網友反對「黑屏」,認為微軟此舉太過分了。而66%的網友則堅稱要將盜版使用到底。
支持微軟的網友只佔7.8%。
不少堅稱繼續使用盜版。「不是不想用正版,而是太貴了。」類似該網友,希望微軟繼續降價的網友也不在少數。
XP-概述
同時,XP 也很強調團隊合作。團隊包括:項目經理,客戶,開發者。團結在一起來保證高質量的軟體。XP 其實是一種保證成功的團隊開發的簡單而有效的方法。
XP 強調四種價值:交流,簡易,回饋,勇氣。XP 程序員之間緊密的相互交流,XP 程序員也和客戶緊密的交流。他們總是保持他們的設計簡單明了。項目一開始,XP 就強調通過對軟體的不斷測試來獲得反饋,程序員盡可能早的把軟體交給客戶,並實現客戶對軟體需求提出的變化,有了這些基礎,XP 程序員就可以自信的面對需求和軟體技術的變化。
XP
XP 是與眾不同的,它有點象快步的舞蹈。XP 開發過程包括許多的小卡片,獨立的看,這些小卡片沒有什麼意義,但是當它們組合在一起,一幅完整的美麗的圖片就可以看見,XP方法有別於傳統軟體開發,它是軟體開發的一種新的重要的發展。它改變了用戶開發程序的傳統思維方式。下面用戶將介紹它帶給我們那些改變。
xpXP屬於輕量開發方法中較有影響的一種方法。輕量開發方法是相對於傳統的重量開發方法而言。簡單地理解,「量」的輕重是指用於軟體過程管理和控制的、除程序量以外的「文檔量」的多少。XP等輕量開發方法認識到,在當前很多情況下,按傳統觀念建立的大量文檔,一方面需要消耗大量開發資源,同時卻已失去幫助「預見、管理、決策和控制的依據」的作用。因此必須重新審視開發環節,去除臃腫累贅,輕裝上陣。
編輯本段
XP的核心思想
從長遠看,早期發現錯誤以及降低復雜度可以節約成本。極限編程強調我們將任務/系統細分為可以在較短周期解決的一個個子任務/模塊,並且強調測試、代碼質量和及早發現問題。通常,通過一個個短小的迭代周期,我們就可以獲得一個個階段性的進展,並且可以及時形成一個版本供用戶參考,以便及時對用戶可能的需求變更作出響應。
編輯本段
XP的十二種方法
規劃策略(The Planning Game);
結對編程(Pair programming)
測試(Testing)
重構(Refractoring)
xp簡單設計(Simple Design)
代碼集體所有權(Collective Code Ownership)
持續集成(Continuous Integration)
現場客戶(On-site Customer)
小型發布(Small Release)
每周40小時工作制(40-hour Week)
編碼規范(Code Standards)
系統隱喻(System Metaphor)
編輯本段
四個核心價值
極限編程中有四個核心價值是我們在開發中必須注意的:溝通(Communication)、簡單(Simplicity)、反饋(Feedback)和勇氣(Courage)。
XP
XP用「溝通、簡單、反饋和勇氣」來減輕開發壓力和包袱;無論是術語命名、專著敘述內容和方式、過程要求,都可以從中感受到輕松愉快和主動奮發的態度和氣氛。這是一種幫助理解和更容易激發人的潛力的手段。XP用自己的實踐,在一定范圍內成功地打破了軟體工程「必須重量」才能成功的傳統觀念。
XP精神可以啟發我們如何學習和對待快速變化、多樣的開發技術。成功學習XP的關鍵,是用「溝通、簡單、反饋和勇氣」的態度來對待XP;輕松愉快地來感受XP的實踐思想;自己認真實踐後,通過對真實反饋的分析,來決定XP對自己的價值;有勇氣接受它,或改進它。
編輯本段
帶給我們的變化
通過軟體工程設計的簡單而優美的軟體並不比那些設計復雜而難以維護的軟體有價值。這是真的嗎?XP認為事實並非如此。
一個典型的項目花在人力上的金錢是花在硬體上的時間的20 倍,這意味著一個項目每年要花200 萬美元在程序員身上,而僅僅花10 萬美元在電腦設備上。很多聰明的程序員說:「我們如此聰明,發現一種方法可以節省20%的硬體開銷」,然後他們使得源程序大而且難懂和難以維護,他們會說:「但是我們節省了20%或者2 萬美元每年,很大的節省」。反之,如果我們寫我們的程序簡單而且容易擴展,我們將至少節省10%的人力開銷,一筆更大的節省,這是你客戶一定會注意到的一些事情。
另外一個對客戶來說很重要的問題就是程序的BUGS 。XP 不只是強調測試,而且要求正確的測試。測試必須是能自動進行的,以便為程序和客戶提供一個安全的環境。在編碼的所有階段,我們不斷增加測試用例。當找到bug 時,我們就添加新的測試,一個緊密的安全網就這樣產生了。同一個BUG 不出現兩次,這些一定會引起用戶的注意。你的客戶必須注意的另外一件事情:XP 開發者擁抱需求變化。XP 使我們能夠接受需求的變化。
一般情況下,客戶只有在系統被開發完成以後能真正去體會它。XP 卻不一樣,它通過加強客戶的反饋來縮短開發的周期,同時獲得足夠的時間來改變功能和獲得用戶的認同。在XP 中,你的客戶應該明確的知道這一點。
XP開發過程的大多的革命是在軟體開發的方法上,代碼質量的重要程度超出人們一般所認為的。僅僅因為用戶的客戶不能明白用戶的源代碼並不意味著用戶可以不努力去管理代碼的質量。
五、用戶什麼時候用XP
XP方法的產生是因為難以管理的需求變化,從一開始你的客戶並不是很完全的知道他們要的系統是怎麼樣的,你可能面對的系統的功能一個月變化多次。在大多數軟體開發環境中不斷變化的需求是唯一的不變,
XP
這個時候應用XP 就可以取得別的方法不可能取得的成功。XP 方法的建立同時也是為了解決軟體開發項目中的風險問題。假如你的客戶在特定的時間內,需要一個相當難開發的系統,而且對於你的項目組來說,這個系統是一個新的挑戰(從來沒有做過),那風險就更大了,如果這個系統對於整個軟體行業來說都是新的挑戰,那麼它的風險就更大了,採用XP 將可以減少風險,增加成功的可能。
XP方法是為小團體開發建立的,在2-10 個人之間。假如你的團體恰好合適,你就不需要用其他的軟體工程方法了,就用XP ,但是要注意你不能將XP 方法應用於大團體的開發項目中。用戶應該注意,在需求一慣呈動態變化或者高具有高風險的項目中,你就會發現XP 方法在小團體的開發中的作用要遠遠高於在大團體的開發。
XP方法需要一個擴展的開發團體,XP 團體不僅僅包括開發者,經理、客戶也是其中的一員,所有的工作一環扣一環,問問題,商討方法和日程,增加功能測試,這些問題的解決不僅僅涉及到軟體的開發者。
另一個需要是可測試性,你必須能增加自動的單元測試和功能測試,然而在你進行這個需求的時候,你會發現有許多的問題很難測試,這需要充分發揮你的測試的經驗和智慧,而且你有時還要改變你的設計以便它可以更容易的進行測試。記住:那兒有需求,那兒就應該有測試的方法。
在XP方法的好處的清單上,最後一條是生產力。在同樣的合作環境下,XP 項目都一致的表現出比使用其他方法高的多的生產力。但這從來不是XP 方法學的真正目標。XP 真實追求的目標是:在規定的時間生產出滿足客戶需要的軟體。假如對於你的開發來說,這是很重要的方面,你就可以選擇XP 了。
編輯本段
極限編程的有效實踐
完整團隊
XP
XP項目的所有參與者(開發人員、客戶、測試人員等)一起工作在一個開放的場所中,他們是同一個團隊的成員。這個場所的牆壁上隨意懸掛著大幅的、顯著的圖表以及其他一些顯示他們進度的東西。
計劃游戲
計劃是持續的、循序漸進的。每2周,開發人員就為下2周估算候選特性的成本,而客戶則根據成本和商務價值來選擇要實現的特性。
客戶測試
作為選擇每個所期望的特性的一部分,客戶可以根據腳本語言來定義出自動驗收測試來表明該特性可以工作。
簡單設計
團隊保持設計恰好和當前的系統功能相匹配。它通過了所有的測試,不包含任何重復,表達出了編寫者想表達的所有東西,並且包含盡可能少的代碼。
結對編程
所有的產品軟體都是由兩個程序員、並排坐在一起在同一台機器上構建的。
測試驅動開發
編寫單元測試是一個驗證行為,更是一個設計行為。同樣,它更是一種編寫文檔的行為。編寫單元測試避免了相當數量的反饋循環,尤其是功功能能驗證方面的反饋循環。程序員以非常短的循環周期工作,他們先增加一個失敗的測試,然後使之通過。
改進設計
隨時利用重構方法改進已經腐化的代碼,保持代碼盡可能的干凈、具有表達力。
持續集成
團隊總是使系統完整地被集成。一個人拆入(Check in)後,其它所有人責任代碼集成。
集體代碼所有權
任何結對的程序員都可以在任何時候改進任何代碼。沒有程序員對任何一個特定的模塊或技術單獨負責,每個人都可以參與任何其它方面的開發。
編碼標准
系統中所有的代碼看起來就好像是被單獨一人編寫的。
隱喻
將整個系統聯系在一起的全局視圖;它是系統的未來影像,是它使得所有單獨模塊的位置和外觀變得明顯直觀。如果模塊的外觀與整個隱喻不符,那麼你就知道該模塊是錯誤的。
可持續的速度
團隊只有持久才有獲勝的希望。他們以能夠長期維持的速度努力工作,他們保存精力,他們把項目看作是馬拉松長跑,而不是全速短跑。
編輯本段
程序
:
XP,是英文Experience(體驗)的縮寫, 自從微軟發布windows XP後,成為軟體流行命名概念。
Windows XP原來的代號是Whistler。Windows XP的外部版本是2002,內部版本是5.1,正式版的Build是2600。 微軟最初發行了兩個版本:專業版(Windows XP Professional)和家庭版(Windows XP Home Edition)。
2001年10月,Windows XP問世了,這個版本在Windows 2000基礎上開發。微軟此次為Windows XP造勢的規模相當大,XP(eXPerience)這個詞隨之深入人心,越來越多的軟體公司為了搭這個順風車,不管相干不相干都為自己的軟體名字後面加一個XP,甚至連AMD的0.13微米Athlon也「非常巧合」地命名為Athlon XP,不過AMD對XP的解釋是eXtreme Performance。
編輯本段
停售
美國微軟公司從2007年6月30日起,停止向零售商和幾家主要電腦生產商銷售視窗xp操作系統。
據美國媒體30日報道,微軟今後將不再向戴爾、惠普等主要電腦生產商提供視窗xp操作系統,但這些廠商庫存的裝有xp系統的電腦仍將繼續銷售。從這些商家購買新電腦的消費者,如果仍想安裝xp,也只能先接受Vista操作系統,然後再合法地將操作系統「降級」至xp。
不過微軟宣布,到2008年1月之前,該公司仍將允許一些家庭經營的電腦商店等小型零售商銷售xp操作系統。此外,微軟仍會銷售一款針對超低價個人電腦的XP系統。
XP操作系統上市至今已有8年。Vista是微軟繼xp系統之後推出的最新版視窗操作系統,於2007年1月30日面向普通消費者發售。但一些消費者認為,Vista系統對硬體配置的要求太高。另外,2008-2009適逢「上網本」開始快速發展。「上網本」即目前日趨成為筆記本電腦中的主流的一類個人終端,搭載有無線網卡,方便隨時隨地登錄互聯網,這類電腦的配置普遍較低,價格便宜,適合對於移動網路要求比較高而對硬體配置要求並不高的用戶。Windows xp顯然是這類電腦的首選。迫於上述原因,2009年4月16日:微軟決定延長國內xp主流支持服務。
編輯本段
疾病
XP也是著色性干皮病(xroderma pigmentosa)的縮寫。著色性干皮病是一種發生在暴露部位的色素變化,萎縮,角化及癌變的遺傳性疾病,屬常染色體隱性遺傳病。在某些家族中,顯示性聯遺傳。表現暴露部位發生針頭至1mm以上大小的淡暗棕色斑和皮膚乾燥,日曬後可發生急性曬傷樣或較持久的紅斑,雀斑可相互融合成不規則的色素沉著斑。也可發生角化棘皮瘤,可自行消退,疣狀角化可發生惡變。避免日曬,不宜室外工作。可用2-5%二氧化鈦霜外用,腫瘤及早切除。
編輯本段
口語
在如今網路終於豐富多彩的時候,XP在一些不願說臟字的人嘴裡就代替了牛X。
基督Χριστοs 的首兩位簡寫 ,羅馬皇帝君士坦丁大帝曾在夢中夢到基督,醒來後便讓手下正准備出征的戰士在盾牌上刻上XP,即基督之意。後來君士坦丁使基督教獲得了前所未有的地方,讓基督教真正的與政治統治結合了起來。
編輯本段
eXtreme programming
XP(Extreme Programming),它是由Kent Beck大師提出的。大師在經歷傳統軟體開發的痛苦之後,希望能夠找到一種優秀的軟體開發方法。大師總結了大量的軟體的成功和失敗的因素之後,提出了改進軟體開發方法的四個要素:溝通(communication)、簡單化(simplicity)、反饋(feedback)、勇氣(courage)。這形成了XP的核心價值觀。在經歷了數年的發展,XP在軟體開發的各方面都發展出了眾多的方法來支持軟體開發。
經驗值
在某些單機游戲與網路游戲中,XP就是EXP的簡稱,指的是經驗值。
G. 極限編程是什麼意思 《法語助手》法漢
極限編程(Extreme Programming,XP)是一門針對業務和軟體開發的規則,它的作用在於將兩者的力量集中在共同的、可以達到的目標上。它是以符合客戶需要的軟體為目標而產生的一種方法論,XP使開發者能夠更有效的響應客戶的需求變化,哪怕是在軟體生命周期的後期。它強調,軟體開發是人與人合作進行的過程,因此成功的軟體開發過程應該充分利用人的優勢,而弱化人的缺點,突出了人在軟體開發過程中的作用。極端編程屬於輕量級的方法,認為文檔、架構不如直接編程來的直接。
H. 什麼是極限編程
極限編程是一個輕量級的、靈巧的軟體開發方法;同時它也是一個非常嚴謹和周密的方法。它的基礎和價值觀是交流、樸素、反饋和勇氣;即,任何一個軟體項目都可以從四個方面入手進行改善:加強交流;從簡單做起;尋求反饋;勇於實事求是。XP是一種近螺旋式的開發方法,它將復雜的開發過程分解為一個個相對比較簡單的小周期;通過積極的交流、反饋以及其它一系列的方法,開發人員和客戶可以非常清楚開發進度、變化、待解決的問題和潛在的困難等,並根據實際情況及時地調整開發過程。
I. 冒煙測試和回歸測試的區別
1、測試目的不同
冒煙測試:用於確認代碼中的更改會按預期運行,且不會破壞整個版本的穩定性。
回歸測試:以確認修改沒有引入新的錯誤或導致其他代碼產生錯誤。
2、測試過程不同
冒煙測試:是在將代碼更改嵌入到產品的源樹中之前對這些更改進行驗證的過程。
回歸測試:是指漏洞由開發人員修改之後再次測試的過程。
3、問題解決方式不同
冒煙測試:冒煙測試中是發現問題然後反饋給開發人員進行修改。
回歸測試:回歸測試是修改完之後進行驗證再進行的工程。
4、測試周期不同
冒煙測試:冒煙測試只集中考慮了一開始的那個問題,而忽略其它的問題,這就可能引起了新的Bug,SmokeTest優點是節省測試時間。
回歸測試:回歸測試作為軟體生命周期的一個組成部分,在整個軟體測試過程中佔有很大的工作量比重,軟體開發的各個階段都會進行多次回歸測試。
5、測試意義不同
冒煙測試:冒煙測試是對軟體質量的總體檢驗,是測試人員對測試流程的熟悉,是軟體測試過程中一個不可或缺的節點,一個好的冒煙測試過程,對於軟體測試效率的提升具有重要意義。
回歸測試:回歸測試是軟體測試中的一個十分重要且成本昂貴的過程。對針對如何減少回歸測試成本,提高回歸測試效率的研究將具有十分重要的意義。