qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          軟件測(cè)試工程師如何參與代碼檢視

           測(cè)試人員參與代碼檢視的收益:

            a)測(cè)試人員可以在早期就能夠熟知系統(tǒng),提前發(fā)現(xiàn)代碼中的BUG;

            b)提高測(cè)試工程師閱讀代碼和寫代碼能力;

            c)測(cè)試工程師的經(jīng)驗(yàn)積累后,可以避免一些很常見,很普通低級(jí)的錯(cuò)誤;

            d)測(cè)試取得話語權(quán),促進(jìn)開發(fā)與測(cè)試的更多平等溝通;

            e)對(duì)于開發(fā)新員工的代碼,收益會(huì)加倍(新員工容易犯業(yè)務(wù)上的低級(jí)錯(cuò)誤)。

            第零步:(比如新參與某系統(tǒng)的測(cè)試)

            a)學(xué)習(xí)業(yè)務(wù)知識(shí);

            b)學(xué)習(xí)系統(tǒng)整體架構(gòu);

            c)開發(fā)同學(xué)講解設(shè)計(jì)架構(gòu)、代碼結(jié)構(gòu);

            d)熟悉使用系統(tǒng),找到閱讀代碼下手點(diǎn):從日志、業(yè)務(wù)入口、SqlMap等;

            e)從流程或者數(shù)據(jù)流閱讀下去,然后一步步深入到代碼中。

            第一步:(code review準(zhǔn)備)

            a)當(dāng)需求已經(jīng)確定,測(cè)試同學(xué)需要參與方案的討論;

            b)開發(fā)開始編寫代碼,測(cè)試進(jìn)行測(cè)試用例設(shè)計(jì);

            c)當(dāng)開發(fā)某個(gè)類或者功能或者方法已經(jīng)基本穩(wěn)定,讓開發(fā)串講實(shí)現(xiàn)方式(避免出現(xiàn)實(shí)現(xiàn)方式不合理);

            d)測(cè)試同學(xué)可以開始review開發(fā)的代碼,同時(shí)補(bǔ)充或者去重復(fù)測(cè)試用例(story或者sdv測(cè)試用例)。

            第二步:(code review進(jìn)行)

            a)對(duì)代碼的規(guī)范進(jìn)行檢視;

            b)對(duì)代碼的可測(cè)試性進(jìn)行檢視;

            c)從業(yè)務(wù)場(chǎng)景的角度去review代碼,如果實(shí)現(xiàn)存在的問題,那基本上可以發(fā)現(xiàn);

            d)對(duì)于發(fā)現(xiàn)的問題,建議分時(shí)段給開發(fā),否則會(huì)打亂開發(fā)的寫代碼節(jié)奏;

            e)如果你還不懂設(shè)計(jì)、不懂架構(gòu),那么可以從是否浪費(fèi)CPU、是否浪費(fèi)內(nèi)存的角度看代碼。

            第三步:(code review后)

            a)轉(zhuǎn)測(cè)試后,應(yīng)該不出現(xiàn)實(shí)現(xiàn)方案不合理的情況;

            b)有結(jié)果統(tǒng)計(jì),這個(gè)迭代review的記錄數(shù),可以橫向比較;

            c)迭代總結(jié),開發(fā)與測(cè)試一起進(jìn)行經(jīng)驗(yàn)教訓(xùn)分享。

          posted @ 2012-05-03 10:05 順其自然EVO 閱讀(634) | 評(píng)論 (0)編輯 收藏

          為功能測(cè)試正名,寫給廣大軟件測(cè)試同行

           首先,恭祝51testing生日快樂,感謝您一直是所有軟件測(cè)試人員成長的搖籃和精神支柱!

            從剛剛接觸軟件測(cè)試工作,到現(xiàn)在已經(jīng)有十年之久。

            十年前,畢業(yè)后就進(jìn)入了一家軟件公司,經(jīng)理分配的任務(wù)就是測(cè)試軟件,發(fā)現(xiàn)有錯(cuò)的地方就告訴他。這是我對(duì)軟件測(cè)試工作的第一印象,就是看系統(tǒng)是否報(bào)錯(cuò),各個(gè)功能按鈕是否能夠正確響應(yīng)。

            兩年后,由于公司經(jīng)營不善,我被公司裁員。其理由是:技術(shù)總監(jiān)認(rèn)為沒有必要設(shè)置軟件測(cè)試工程師的崗位。因此,競崗時(shí),我無崗可竟。

            恰巧,當(dāng)時(shí)中國軟件評(píng)測(cè)中心跟省科技廳聯(lián)合培訓(xùn),于是,我就第一次真正認(rèn)識(shí)到什么是軟件測(cè)試。同時(shí),也知道了51testing和測(cè)試時(shí)代這些軟件測(cè)試交流的專業(yè)平臺(tái)。

            之后,我就入職另一家軟件公司。當(dāng)時(shí),入職的職務(wù)是測(cè)試員,但公司的測(cè)試基本上和我第一次接觸軟件測(cè)試工作時(shí)的水平差不多。于是,我就從最基礎(chǔ)的缺陷管理測(cè)試用例、測(cè)試流程、測(cè)試規(guī)范、測(cè)試標(biāo)準(zhǔn)等等,一步步的將公司的測(cè)試規(guī)范建立起來,而我也因此成為了公司的測(cè)試部門經(jīng)理。從測(cè)試員到測(cè)試部門經(jīng)理,在這短短的八個(gè)月的時(shí)間里,可以說我取得的每一次進(jìn)步,掌握的每一種知識(shí),均來源于51testing和QQ群。可以說,如果沒有這些交流平臺(tái),就不可能有系統(tǒng)化學(xué)習(xí)的機(jī)會(huì)。

            為了挑戰(zhàn)質(zhì)量要求更高的項(xiàng)目,我離開了家鄉(xiāng),加入了現(xiàn)在的團(tuán)隊(duì)。這是一支由150多名技術(shù)人員組成的團(tuán)隊(duì),其中,測(cè)試人員有20人。我入職的職務(wù)是測(cè)試組長,兩周后任質(zhì)量經(jīng)理,八個(gè)月后任測(cè)試總監(jiān)。從各種測(cè)試標(biāo)準(zhǔn)的制定到測(cè)試規(guī)范的建立,再到測(cè)試體系的建立;從團(tuán)隊(duì)?wèi)?zhàn)略發(fā)展方向到團(tuán)隊(duì)梯隊(duì)建設(shè)再到測(cè)試知識(shí)庫的籌建;從技術(shù)培訓(xùn)到團(tuán)隊(duì)成員職業(yè)規(guī)劃;三年來 ,我和這支團(tuán)隊(duì)一起成長。

            從業(yè)近十年,參與的項(xiàng)目十余個(gè),其中千萬級(jí)以上的項(xiàng)目三個(gè)。項(xiàng)目涉及MIS、HIS、GIS、OA、三維應(yīng)用、BI、SOA、應(yīng)用系統(tǒng)集成等諸多方向,其測(cè)試類型包括:功能測(cè)試性能測(cè)試、接口測(cè)試。

            說了這么多,大家一定以為我寫跑題了,其實(shí)不然。之所以描述自己的成長經(jīng)歷,是想告訴大家我的體會(huì)來源于我的經(jīng)歷。

            無論是在各種測(cè)試論壇上,各個(gè)測(cè)試QQ群中,還是在招聘時(shí)的應(yīng)聘人員。我經(jīng)常會(huì)遇到這種問題,相信大多數(shù)同行們也都遇到過。

            1、做功能測(cè)試有前途么?
            2、做黑盒測(cè)試有前途么?
            3、我現(xiàn)在只能做功能測(cè)試,但我今后一定要做自動(dòng)化測(cè)試、性能測(cè)試!
            4、你們公司上自動(dòng)化了么?
            5、我會(huì)QTP、LR。

            廣大測(cè)試同行在投簡歷時(shí),也一定常見這種職位要求:要求熟練掌握LR、QTP、QC、TD、Bugzilla等工具之一。

            咱們先說說后面這種情況。一個(gè)公司在選擇測(cè)試人員時(shí),竟然將這些測(cè)試工具作為選人標(biāo)準(zhǔn)之一。我想問這樣招聘的公司幾個(gè)問題:

            1、貴公司的產(chǎn)品適合上自動(dòng)化么?
            2、貴公司的管理水平達(dá)到上自動(dòng)化的要求了么?
            3、LR能完全支撐貴公司產(chǎn)品的性能測(cè)試么?
            4、貴公司一年能有多少項(xiàng)目需要做性能測(cè)試?
            5、缺陷管理工具每個(gè)公司用的都不太一樣,其缺陷管理流程是需要結(jié)合公司管理流程的,這種工具即便人家不會(huì)或沒用過此類工具,你就不能培訓(xùn)么?很難么?

            除非公司是在招聘對(duì)口的技術(shù)人才,否則,我只能認(rèn)為這家公司的測(cè)試水平真的不咋的。甚至于寫招聘要求的人,壓根就不懂測(cè)試。

            咱們?cè)賮碚f說關(guān)于同行們對(duì)功能測(cè)試的誤解。好多人都認(rèn)為功能測(cè)試門檻低,沒技術(shù)含量,好像提起來做功能測(cè)試就低人一等似得。如果你有這種意識(shí),我只能說:兄弟,多干幾年吧。我承認(rèn)功能測(cè)試的入門門檻是低,但我不認(rèn)為功能測(cè)試沒技術(shù)含量。我甚至認(rèn)為一個(gè)能把功能測(cè)試做好的測(cè)試人員,才是一個(gè)合格的質(zhì)量負(fù)責(zé)人!

            大家先別拍我,讓我們來談一下什么是軟件測(cè)試。既然大家都是同行,相信大家都認(rèn)同:“通過測(cè)試手段,在用戶使用前,發(fā)現(xiàn)缺陷。”以及“軟件中不可能沒有缺陷。”這兩句話。不錯(cuò),測(cè)試是不能被窮舉的,因此,我們也不可能發(fā)現(xiàn)軟件中所有的缺陷。因此,我們是不是能夠換句話說:“軟件測(cè)試是通過一系列的測(cè)試手段,證明軟件具備一定的質(zhì)量。”

            如果你認(rèn)同這一觀點(diǎn),那么我們?cè)賮碚務(wù)劰δ軠y(cè)試的范圍。

            狹義的功能測(cè)試:這點(diǎn)點(diǎn),那點(diǎn)點(diǎn),看看能不能正確打開頁面、程序會(huì)不會(huì)崩潰、功能是不是能夠正確實(shí)現(xiàn)等等。這也就是大家之所以認(rèn)為功能測(cè)試沒技術(shù)含量的根本原因。因?yàn)檫@種測(cè)試也得叫它功能測(cè)試。

            廣義的功能測(cè)試:各種業(yè)務(wù)邏輯是否已正確實(shí)現(xiàn)?各種業(yè)務(wù)約束是否正確實(shí)現(xiàn)?各類特殊的數(shù)據(jù)是否能夠正確處理?軟件的容錯(cuò)機(jī)制如何?數(shù)據(jù)的完整性、唯一性、正確性是否已經(jīng)通過測(cè)試?系統(tǒng)及數(shù)據(jù)的安全性是否已通過測(cè)試?軟件的易用性是否滿足用戶的需要?等等等等。功能測(cè)試所包含的范圍實(shí)在是太大。

            我沒有貶低其他測(cè)試專業(yè)的意思,但有幾點(diǎn)是需要說明的。隨著各行各業(yè)對(duì)信息化建設(shè)的需求日益提高,其軟件的規(guī)模和復(fù)雜度正在翻倍的提高。而功能測(cè)試的難度也隨軟件的復(fù)雜度逐日提高。而相對(duì)來說,白盒測(cè)試依舊關(guān)注的是單個(gè)函數(shù)的代碼邏輯以及異常的處理;自動(dòng)化測(cè)試僅僅提高的是測(cè)試執(zhí)行效率,測(cè)試質(zhì)量依然是要靠功能測(cè)試用例來保障;性能測(cè)試其實(shí)關(guān)注的是業(yè)務(wù)發(fā)生的場(chǎng)景和如何生成負(fù)載和收集監(jiān)控指標(biāo),其變化就是需要監(jiān)控的對(duì)象更多,影響因素更為復(fù)雜。

            面對(duì)規(guī)模龐大,業(yè)務(wù)邏輯愈來愈復(fù)雜的系統(tǒng),保障其軟件質(zhì)量,就需要廣大功能測(cè)試人員具備更強(qiáng)的邏輯分析、設(shè)計(jì)能力;掌握更多的業(yè)務(wù)知識(shí)及技術(shù)。同時(shí),由于當(dāng)前國內(nèi)絕大多數(shù)企業(yè)對(duì)測(cè)試工作的認(rèn)知程度不足,大多數(shù)測(cè)試工作都是在時(shí)間緊、任務(wù)重的條件下完成的。那么,在有限的條件下,如何能夠提高軟件產(chǎn)品的質(zhì)量,即:如何證明軟件具備了一定的質(zhì)量。將是所有軟件質(zhì)量負(fù)責(zé)人首先考慮的問題。

            在這種前提下,我認(rèn)為,一個(gè)好的功能測(cè)試工程師應(yīng)具備豐富的行業(yè)知識(shí)(專家級(jí)),極強(qiáng)的邏輯分析能力,精于業(yè)務(wù)架構(gòu)、測(cè)試架構(gòu)、數(shù)據(jù)庫、測(cè)試用例的設(shè)計(jì)。公司的產(chǎn)品質(zhì)量,取決于測(cè)試負(fù)責(zé)人的組織能力及團(tuán)隊(duì)成員的技術(shù)能力,因此,功能測(cè)試工程師在測(cè)試團(tuán)隊(duì)中不可或缺。

            無論是白盒測(cè)試、自動(dòng)化測(cè)試、性能測(cè)試,都是不同的測(cè)試手段,但功能測(cè)試卻是產(chǎn)品質(zhì)量的根本保障! 請(qǐng)廣大正在從事功能測(cè)試的同行們,正視自己的工作,認(rèn)真對(duì)待,不要?dú)怵H或輕視自己的工作。將自己手頭上的事做好,人生的每一段經(jīng)歷都將是你的財(cái)富!

          posted @ 2012-05-03 10:04 順其自然EVO 閱讀(464) | 評(píng)論 (0)編輯 收藏

          誰能成為軟件測(cè)試架構(gòu)師

           軟件測(cè)試架構(gòu)師不是一種頭銜,而是一種角色,更重要的是一種能力—對(duì)團(tuán)隊(duì)的影響力。軟件測(cè)試工程師不是在某一天突然成為一個(gè)軟件架構(gòu)師的,雖然他可能會(huì)在某一天被某某經(jīng)理宣布為測(cè)試架構(gòu)師。任何一個(gè)人成為軟件架構(gòu)師,都是一個(gè)漸進(jìn)的過程,不斷積累經(jīng)驗(yàn),不斷提高自己的技術(shù)水平和業(yè)務(wù)能力,才能逐漸勝任測(cè)試架構(gòu)師的角色。

            1、對(duì)軟件測(cè)試架構(gòu)師的要求

            測(cè)試架構(gòu)師是測(cè)試團(tuán)隊(duì)的技術(shù)帶頭人,在系統(tǒng)非功能特性的測(cè)試、自動(dòng)化測(cè)試框架等方面發(fā)揮著主導(dǎo)作用,對(duì)開發(fā)團(tuán)隊(duì)具有很好的溝通能力和影響力。測(cè)試架構(gòu)師雖然不管理團(tuán)隊(duì),不通過管理權(quán)利來驅(qū)動(dòng)下屬執(zhí)行某項(xiàng)工作,但通過溝通與組織協(xié)作,讓成員愿意采納其建議,配合其完成某項(xiàng)工作,從而實(shí)現(xiàn)個(gè)人價(jià)值,為公司做出應(yīng)有的貢獻(xiàn)。

            測(cè)試架構(gòu)師應(yīng)具有較強(qiáng)的抽象能力和創(chuàng)新能力,通過一個(gè)全局的觀點(diǎn)、宏觀的視角來理解軟件系統(tǒng)作為一個(gè)整體是如何工作的,可以將具體問題抽象為一個(gè)模型,從而解決一類問題,并通過不斷創(chuàng)新,找到解決問題的新方法,推廣新的測(cè)試技術(shù)。同時(shí),測(cè)試架構(gòu)師作為測(cè)試技術(shù)帶頭人,就是為測(cè)試團(tuán)隊(duì)樹立技術(shù)標(biāo)桿,提供技術(shù)指導(dǎo)、做出技術(shù)決策,具體工作有:

            了解國內(nèi)外技術(shù)趨勢(shì),具有很好的前瞻性,做好測(cè)試團(tuán)隊(duì)的技術(shù)規(guī)劃,確保團(tuán)隊(duì)朝著正確的技術(shù)方向持續(xù)前進(jìn)。

            結(jié)合公司具體情況,引入和推廣適合公司需要的新技術(shù)。

            了解業(yè)界的普遍實(shí)踐,對(duì)測(cè)試自動(dòng)化或測(cè)試工具所涉及的技術(shù)提供很好的支持,或引導(dǎo)團(tuán)隊(duì)向正確的方向努力,不斷地改進(jìn)自動(dòng)化測(cè)試工作。

            具有豐富的技術(shù)經(jīng)驗(yàn),對(duì)技術(shù)可行性一般能做出正確的評(píng)估。

            具有一線的測(cè)試經(jīng)驗(yàn),可以融會(huì)貫通,使技術(shù)真正能為測(cè)試服務(wù)。

            業(yè)務(wù)基礎(chǔ)扎實(shí),能很好理解客戶需求,確定測(cè)試需求,能為各種技術(shù)困難的測(cè)試項(xiàng)目提供有效的解決方案。

            2、軟件測(cè)試架構(gòu)師的主要職責(zé)

            測(cè)試架構(gòu)師的主要職責(zé)如下。

            審查系統(tǒng)架構(gòu)、系統(tǒng)構(gòu)件/組件及其接口關(guān)系等設(shè)計(jì)是否合理。

            確保系統(tǒng)的可測(cè)試性。

            需要以全局的視角來把握軟件測(cè)試項(xiàng)目,不僅要關(guān)注功能性需求,而且要關(guān)注非功能性測(cè)試。

            制訂軟件系統(tǒng)的測(cè)試策略和方法,特別是在系統(tǒng)的性能、安全性、穩(wěn)定性、可靠性等方面的測(cè)試方法、技術(shù)線路和質(zhì)量標(biāo)準(zhǔn)。

            構(gòu)建復(fù)雜的系統(tǒng)測(cè)試環(huán)境,并分析、解決測(cè)試中出現(xiàn)的較深的技術(shù)問題(Troubleshooting),幫助做好缺陷的隔離。

            對(duì)系統(tǒng)(性能、安全性、穩(wěn)定性、可靠性)測(cè)試做出分析、評(píng)估,并提出為改善系統(tǒng)性能、可靠性而進(jìn)行的設(shè)計(jì)修改、代碼重構(gòu)的具體建議。

            設(shè)計(jì)測(cè)試自動(dòng)化的技術(shù)框架,主持重要的測(cè)試工具的研究、評(píng)估、設(shè)計(jì)。

            參與系統(tǒng)部署的設(shè)計(jì)。

            參與新技術(shù)的評(píng)估和引進(jìn)。

            幫助改進(jìn)測(cè)試流程、提高測(cè)試效率。

            測(cè)試架構(gòu)師通過上述技術(shù)活動(dòng),幫助測(cè)試項(xiàng)目、測(cè)試團(tuán)隊(duì)提高測(cè)試效率和質(zhì)量。為了更好地理解測(cè)試架構(gòu)師的職責(zé),在這里,將測(cè)試架構(gòu)師和軟件開發(fā)架構(gòu)師、測(cè)試經(jīng)理進(jìn)行比較,如表2-1、表2-2所示。

            表2-1  測(cè)試架構(gòu)師和軟件開發(fā)架構(gòu)師的比較

           

          測(cè)試架構(gòu)師

          軟件開發(fā)架構(gòu)師

          目標(biāo)

          ①提高測(cè)試的效率和質(zhì)量
          ②提高系統(tǒng)的可測(cè)試性,特別是非功能特性的可測(cè)試性

          滿足系統(tǒng)非功能特性的要求,如完成高性能、高可靠性和高安全性的系統(tǒng)設(shè)計(jì)

          主要工作

          設(shè)計(jì)測(cè)試平臺(tái)

          設(shè)計(jì)軟件產(chǎn)品的系統(tǒng)架構(gòu)

          關(guān)注

          產(chǎn)品的測(cè)試過程

          產(chǎn)品的研發(fā)過程

          影響范圍

          測(cè)試社區(qū)、開發(fā)團(tuán)隊(duì)

          開發(fā)社區(qū)、測(cè)試團(tuán)隊(duì)

          技術(shù)范圍

          ①系統(tǒng)架構(gòu)設(shè)計(jì)模式、自動(dòng)化技術(shù)、建模技術(shù)、測(cè)試用例設(shè)計(jì)技術(shù)等
          ②測(cè)試模型、方法、技術(shù)、工具等各方面創(chuàng)新

          ①系統(tǒng)架構(gòu)設(shè)計(jì)模式
          ②面向?qū)ο蟮男枨蠓治觥⒃O(shè)計(jì)和編程等全面技術(shù)能力
          ③熟練使用軟件開發(fā)平臺(tái)(如Eclipse)
          ④資深的編程技術(shù)及其他開發(fā)技術(shù)

          能力

          ①足夠的技術(shù)前瞻能力
          ②足夠的影響力
          ③掌握軟件系統(tǒng)架構(gòu)設(shè)計(jì)知識(shí)
          ④深刻理解測(cè)試流程
          ⑤精通測(cè)試技術(shù)、方法

          ①掌握軟件系統(tǒng)架構(gòu)設(shè)計(jì)知識(shí)
          ②掌握一類以上軟件開發(fā)技術(shù)
          ③精通一種以上開發(fā)語言

            表2-2  測(cè)試架構(gòu)師和測(cè)試經(jīng)理的比較

           

          測(cè)試架構(gòu)師

          測(cè)試經(jīng)理

          目標(biāo)

          ①提高測(cè)試的效率和質(zhì)量
          ②系統(tǒng)的可測(cè)試性,特別是非功能特性的可測(cè)試性

          ①提高測(cè)試的效率和質(zhì)量
          ②不斷改進(jìn)測(cè)試流程
          ③加強(qiáng)團(tuán)隊(duì)建設(shè),滿足組織發(fā)展的需求

          主要工作

          ①設(shè)計(jì)測(cè)試平臺(tái),包括自動(dòng)化測(cè)試框架
          ②確定測(cè)試方法和測(cè)試策略

          ①測(cè)試團(tuán)隊(duì)的管理
          ②測(cè)試項(xiàng)目的管理,主要包括計(jì)劃、人員安排和進(jìn)度監(jiān)控等

          責(zé)任、決策范圍

          ①測(cè)試方法的有效性
          ②技術(shù)解決方案,如自動(dòng)化測(cè)試框架的設(shè)計(jì)與實(shí)施
          ③測(cè)試技術(shù)規(guī)范,包括測(cè)試覆蓋率衡量
          ④從技術(shù)角度來幫助團(tuán)隊(duì)理解架構(gòu)
          ⑤團(tuán)隊(duì)的技術(shù)發(fā)展之路

          ①使客戶的價(jià)值最大化
          ②團(tuán)隊(duì)的能力和績效
          ③項(xiàng)目的結(jié)果,特別是軟件產(chǎn)品質(zhì)量評(píng)估結(jié)果
          ④事先定義的質(zhì)量標(biāo)準(zhǔn)
          ⑤和其他團(tuán)隊(duì)的溝通、協(xié)調(diào)
          ⑥非技術(shù)問題,包括測(cè)試資源調(diào)度、項(xiàng)目里程碑確定等

          關(guān)注

          技術(shù)儲(chǔ)備、技術(shù)問題和發(fā)展趨勢(shì)

          測(cè)試過程和測(cè)試人員的管理

          工作方式

          教練式技術(shù)指導(dǎo)

          疏通、引導(dǎo)等各種技術(shù)管理方式

          能力

          ①足夠的技術(shù)前瞻能力
          ②足夠的影響力
          ③掌握軟件系統(tǒng)架構(gòu)設(shè)計(jì)知識(shí)
          ④深刻理解測(cè)試流程
          ⑤精通測(cè)試技術(shù)、方法

          ①團(tuán)隊(duì)管理能力,包括溝通能力
          ②項(xiàng)目管理能力,包括問題分析和解決能力
          ③測(cè)試專業(yè)知識(shí),以及其他軟件工程知識(shí)

            3、軟件測(cè)試架構(gòu)師的成果

            軟件測(cè)試架構(gòu)師的成果如下。

            對(duì)軟件產(chǎn)品需求定義、系統(tǒng)設(shè)計(jì)和代碼編程等可測(cè)試性做出詳細(xì)要求的規(guī)范性文檔。

            對(duì)系統(tǒng)設(shè)計(jì)、單元測(cè)試等的驗(yàn)收標(biāo)準(zhǔn)。

            軟件新系統(tǒng)的測(cè)試方案,包括采用的測(cè)試策略、測(cè)試技術(shù)、測(cè)試工具等。

            自動(dòng)化測(cè)試框架,包括自動(dòng)化系統(tǒng)架構(gòu)設(shè)計(jì)、測(cè)試腳本語言等。

            得到改善的測(cè)試流程,特別是關(guān)系到技術(shù)層面的單元測(cè)試流程、自動(dòng)化測(cè)試實(shí)施流程等。

            測(cè)試過程性能、測(cè)試階段性成果質(zhì)量、產(chǎn)品質(zhì)量等的度量體系。

            軟件組織的測(cè)試技術(shù)規(guī)劃,包括測(cè)試技術(shù)發(fā)展趨勢(shì)、新技術(shù)引入研究和評(píng)估報(bào)告、未來待解決的關(guān)鍵測(cè)試技術(shù)列表等。

            特定的或?qū)m?xiàng)的測(cè)試方法或技術(shù)的研究成果。

            不同級(jí)別測(cè)試工程師所要掌握的各種技術(shù)能力集合及其技術(shù)等級(jí)評(píng)估辦法。

            提升測(cè)試效率的各種有效測(cè)試方法、實(shí)踐指導(dǎo)等文章。

          posted @ 2012-05-03 10:00 順其自然EVO 閱讀(446) | 評(píng)論 (0)編輯 收藏

          單元測(cè)試之誤解與困境

          認(rèn)為單元測(cè)試影響開發(fā)進(jìn)度,一是借口,拒絕對(duì)單元測(cè)試相關(guān)知識(shí)進(jìn)行學(xué)習(xí)(單元測(cè)試,代碼重構(gòu),版本管理是開發(fā)人員的必備);二是單元測(cè)試是“先苦后甜”,剛開始搭建環(huán)境,引入額外工作,看似“影響進(jìn)度”,但長遠(yuǎn)來看,由于程序質(zhì)量提升、代碼返工減少、后期維護(hù)工作量縮小、項(xiàng)目風(fēng)險(xiǎn)降低,從而在整體上贏了回來。

            誤解一:影響開發(fā)進(jìn)度

            一旦編碼完成,開發(fā)人員總是會(huì)迫切希望進(jìn)行軟件的集成工作,這樣他們就能夠看到系統(tǒng)實(shí)際運(yùn)行效果。這在外表上看來好像加快進(jìn)度,而像單元測(cè)試這樣的活動(dòng)被看作是影響進(jìn)度原因之一,推遲了對(duì)整個(gè)系統(tǒng)進(jìn)行集成測(cè)試的時(shí)間。

            在實(shí)踐中,這種開發(fā)步驟常常會(huì)導(dǎo)致這樣的結(jié)果:軟件甚至無法運(yùn)行。更進(jìn)一步的結(jié)果是大量的時(shí)間將被花費(fèi)在跟蹤那些包含在獨(dú)立單元里的簡單Bug上面,在個(gè)別情況下,這些Bug也許是瑣碎和微不足道的,但是總的來說,它們會(huì)導(dǎo)致推遲軟件產(chǎn)品交付的時(shí)間,而且也無法確保它能夠可靠運(yùn)行。

            在實(shí)際工作中,進(jìn)行了完整計(jì)劃的單元測(cè)試和編寫實(shí)際的代碼所花費(fèi)的精力大致上是相同的。一旦完成了這些單元測(cè)試工作,很多Bug將被糾正,開發(fā)人員能夠進(jìn)行更高效的系統(tǒng)集成工作。這才是真實(shí)意義上的進(jìn)步,所以說完整計(jì)劃下的單元測(cè)試是對(duì)時(shí)間的更高效利用。

            誤解二:增加開發(fā)成本

            如果不重視程序中那些未被發(fā)現(xiàn)的Bug可能帶來的后果。這種后果的嚴(yán)重程度可以從一個(gè)Bug引起的用戶使用不便到系統(tǒng)崩潰。這種后果可能常常會(huì)被軟件的開發(fā)人員所忽視,這種情況會(huì)長期損害軟件開發(fā)商的聲譽(yù),并且會(huì)對(duì)未來的市場(chǎng)產(chǎn)生負(fù)面影響。相反地,一個(gè)可靠的軟件系統(tǒng)的良好的聲譽(yù)將有助于一個(gè)軟件開發(fā)商獲取未來的市場(chǎng)。

            很多研究成果表明,無論什么時(shí)候作出修改都要進(jìn)行完整的回歸測(cè)試,在生命周期中盡早地對(duì)軟件產(chǎn)品進(jìn)行測(cè)試將使效率和質(zhì)量得到最好的保證。Bug發(fā)現(xiàn)得越晚,修改它所需的費(fèi)用就越高,因此從經(jīng)濟(jì)角度來看,應(yīng)該盡可能早地查找和修改Bug。而單元測(cè)試就是一個(gè)在早期抓住Bug的機(jī)會(huì)。

            相比后階段的測(cè)試,單元測(cè)試的創(chuàng)建更簡單,且維護(hù)更容易,同時(shí)可以更方便地進(jìn)行重構(gòu)。從全程的費(fèi)用來考慮,相比起那些復(fù)雜且曠日持久的集成測(cè)試,或是不穩(wěn)定的軟件系統(tǒng)來說,單元測(cè)試所需的費(fèi)用是很低的。

            誤解三:我是個(gè)編程高手,無須進(jìn)行單元測(cè)試

            在每個(gè)開發(fā)團(tuán)隊(duì)中都至少有一個(gè)這樣的開發(fā)人員,他非常擅長于編程,他開發(fā)的軟件總是在第一時(shí)間就可以正常運(yùn)行,因此不需要進(jìn)行測(cè)試。你是否經(jīng)常聽到這樣的借口?在現(xiàn)實(shí)世界里,每個(gè)人都會(huì)犯錯(cuò)誤。即使某個(gè)開發(fā)人員可以抱著這種態(tài)度在很少的一些簡單程序中應(yīng)付過去,但真正的軟件系統(tǒng)是非常復(fù)雜的。真正的軟件系統(tǒng)不可以寄希望于沒有進(jìn)行廣泛的測(cè)試和Bug修改過程就可以正常工作。編碼不是一個(gè)可以一次性通過的過程。在現(xiàn)實(shí)世界中,軟件產(chǎn)品必須進(jìn)行維護(hù)以對(duì)功能需求的改變作出及時(shí)響應(yīng),并且要對(duì)最初的開發(fā)工作遺留下來的Bug進(jìn)行修改。你希望依靠那些原始作者進(jìn)行修改嗎?這些制造出未經(jīng)測(cè)試的代碼的資深工程師們還會(huì)繼續(xù)在其他地方制造這樣的代碼。在開發(fā)人員做出修改后進(jìn)行可重復(fù)的單元測(cè)試,可以避免產(chǎn)生那些令人不快的負(fù)作用。

            誤解四:測(cè)試人員會(huì)測(cè)出所有Bug

            一旦軟件可以運(yùn)行了,開發(fā)人員又要面對(duì)這樣的問題:在考慮軟件全局復(fù)雜性的前提下對(duì)每個(gè)單元進(jìn)行全面的測(cè)試。這是一件非常困難的事情,甚至在創(chuàng)造一種單元調(diào)用的測(cè)試條件時(shí),要全面考慮單元被調(diào)用時(shí)的各種入口參數(shù)。在軟件集成階段,對(duì)單元功能全面測(cè)試的復(fù)雜程度遠(yuǎn)遠(yuǎn)超過獨(dú)立進(jìn)行的單元測(cè)試過程。

            最后的結(jié)果是測(cè)試將無法達(dá)到它所應(yīng)該有的全面性。一些缺陷將被遺漏,并且很多Bug將被忽略過去。讓我們類比一下,假設(shè)我們要清理一臺(tái)電腦主機(jī)中的灰塵,如果沒有把主機(jī)中各個(gè)部件(顯卡、內(nèi)存等)拆開,無論你用什么工具,一些灰塵還會(huì)隱藏在主機(jī)的某些角落無法清理。但我們換個(gè)角度想想,如果把主機(jī)每個(gè)部件一一拆開,這些死角中的灰塵就容易被發(fā)現(xiàn)和接觸到了,并且每一部件的灰塵都可以毫不費(fèi)力地進(jìn)行清理。

            單元測(cè)試之困境

            測(cè)試在軟件開發(fā)過程中一直都是備受關(guān)注的,測(cè)試不僅僅局限于軟件開發(fā)中的一個(gè)階段,它已經(jīng)開始貫穿于整個(gè)軟件開發(fā)過程。大家普遍認(rèn)識(shí)到,如果測(cè)試能在開發(fā)階段進(jìn)行有效執(zhí)行,程序的Bug就會(huì)被及早發(fā)現(xiàn),其質(zhì)量就能得到有效的保證,從而減少軟件開發(fā)總成本。但是,相對(duì)于測(cè)試這個(gè)詞的流行程度而言,大家對(duì)單元測(cè)試的認(rèn)知普遍存在一些偏差,特別是一些程序員很容易陷入一些誤區(qū),導(dǎo)致了測(cè)試并沒有在他們所在的開發(fā)項(xiàng)目中起到有效的作用。下面對(duì)一些比較具有代表性的誤區(qū)困境進(jìn)行剖析,并對(duì)于測(cè)試背后所蘊(yùn)含的一些設(shè)計(jì)思考進(jìn)行闡述,希望能夠起到拋磚引玉的作用。

            誤區(qū)、困境一:使用System.out.print跟蹤和運(yùn)行程序就夠了

            這個(gè)誤區(qū)可以說是程序員的一種通病,認(rèn)為使用System.out.print就可以確保編寫代碼的正確性,無須編寫測(cè)試用例,他們覺得編寫用例是在“浪費(fèi)時(shí)間”。使用System.out.print輸出結(jié)果,以肉眼觀察這種刀耕火種的方式進(jìn)行測(cè)試,不僅效率低下,而且容易出錯(cuò)。

            誤區(qū)、困境二:存在太多無法測(cè)試的東西

            在編碼的時(shí)候,確實(shí)存在一些看起來比較難測(cè)試的代碼,但是并非無法測(cè)試。并且在大多數(shù)情況下,還是由于被測(cè)試的代碼在設(shè)計(jì)時(shí)沒有考慮到可測(cè)試性的問題。編寫程序不僅與第三方一些框架耦合過緊,而且過于依賴其運(yùn)行環(huán)境,從而表現(xiàn)出被測(cè)試的代碼本身很難測(cè)試。

            誤區(qū)、困境三:測(cè)試代碼可以隨意寫

            編寫測(cè)試代碼時(shí)抱著一種隨意的態(tài)度,沒有弄清測(cè)試的真正意圖。編寫測(cè)試代碼只是為了應(yīng)付任務(wù)而已,先編寫程序?qū)崿F(xiàn)代碼,然后才去編寫一些單元測(cè)試。表現(xiàn)出來的結(jié)果是測(cè)試過于簡單,只走形式和花架,將大量Bug傳遞給系統(tǒng)測(cè)試人員。

            誤區(qū)、困境四:不關(guān)心測(cè)試環(huán)境

            手工搭建測(cè)試環(huán)境,測(cè)試數(shù)據(jù),造成維護(hù)困難,占據(jù)了大量時(shí)間,嚴(yán)重影響效率。對(duì)測(cè)試產(chǎn)生的“垃圾”不清除,不處理。造成測(cè)試不能重復(fù)進(jìn)行,導(dǎo)致脆弱的測(cè)試,需要維護(hù)好測(cè)試環(huán)境,做一個(gè)“低碳環(huán)保”的測(cè)試者。

            誤區(qū)、困境五:測(cè)試環(huán)境依賴性大

            測(cè)試環(huán)境依賴性大,沒有有效隔離測(cè)試目標(biāo)及其依賴環(huán)境,一是使測(cè)試不聚焦;二是常因依賴環(huán)境的影響造成失敗;三是因依賴環(huán)境太厚重從而降低測(cè)試的效率(如依賴數(shù)據(jù)庫或依賴網(wǎng)絡(luò)資源,如郵件系統(tǒng)、Web服務(wù))。

          posted @ 2012-05-03 09:53 順其自然EVO 閱讀(210) | 評(píng)論 (0)編輯 收藏

          我們?cè)撊绾卧O(shè)計(jì)數(shù)據(jù)庫

            數(shù)據(jù)庫該如何設(shè)計(jì),一直以來都是一個(gè)仁者見仁智者見智的問題。

            對(duì)于某一種數(shù)據(jù)庫設(shè)計(jì),并不能簡單的用好與不好來區(qū)分。或許真的應(yīng)了那句話,沒有最好,只有最適合。討論某種數(shù)據(jù)庫設(shè)計(jì)的時(shí)候,應(yīng)該在某種特定的需求環(huán)境下討論。

            下面來討論一下在項(xiàng)目中經(jīng)常碰到的用戶的聯(lián)系方式儲(chǔ)存的問題。

            我在這里套用之前網(wǎng)絡(luò)上流行“普通——文藝——二逼”的分類方式來描述我下文中提及的三種數(shù)據(jù)庫設(shè)計(jì)思路,并且通過查詢數(shù)據(jù)(對(duì)數(shù)據(jù)增刪改,三種設(shè)計(jì)要付出的代碼成本都差不多)和數(shù)據(jù)庫面臨需求變動(dòng)兩個(gè)方面來思考這三種設(shè)計(jì)各有怎樣的優(yōu)劣。

            普通青年:

            或許我們都這樣設(shè)計(jì)過數(shù)據(jù)庫

            學(xué)生表 tb_Student:

          Namevarchar(100)名字
          Telphonevarchar(200)聯(lián)系電話
          Emailvarchar(200)你懂的
          Faxvarchar(200)傳真

            這應(yīng)該是最容易想到的一種思路,簡單、明了。

            比如說我要查詢某個(gè)人的聯(lián)系方式,那么我只用一條語句就能實(shí)現(xiàn):

          select Name,Telphone,Email,Fax from 表 where 條件

            在查詢的時(shí)候,這種數(shù)據(jù)庫設(shè)計(jì)十分清晰,沒有任何思維的難度,沒有任何邏輯的挑戰(zhàn)。但是當(dāng)面臨需求變動(dòng)的時(shí)候,那將會(huì)是一場(chǎng)災(zāi)難。

            比如現(xiàn)在要新增一類用戶:校長。那么我們要如何處理?

            答案是:再加一張表 tb_Headmaster。

            事實(shí)上,再加一張表其實(shí)修改并不大,因?yàn)槲覀兺耆恍枰薷膶W(xué)生表的存儲(chǔ)邏輯,換句話說,這種設(shè)計(jì)是遵循了開閉原則的。

            但如果學(xué)生要添加一種聯(lián)系方式HomePhone的時(shí)候,災(zāi)難發(fā)生了,怎么辦?

            在tb_Student中加一列HomePhone?這意味著至少要修改整個(gè)Model層(或者說DAL層),這種改動(dòng)是十分巨大的,而且容易造成錯(cuò)誤。

            或者再建一張表tb_Student2,來儲(chǔ)存HomePhone,然后以ID來關(guān)聯(lián)兩張表?按改動(dòng)規(guī)模來說,這種改動(dòng)相對(duì)簡單而且不容易出錯(cuò),但是在今后的維護(hù)中會(huì)增加邏輯成本。當(dāng)你一而再再而三的以這樣的方式來應(yīng)對(duì)需求變動(dòng)的時(shí)候,你的程序?qū)⒆兊貌豢衫斫狻?/p>

            文藝青年:

          UserRoleint對(duì)應(yīng)用戶類型(None = 0, Student = 1, Teacher = 2, Headmaster = 4)
          OwnerIDint對(duì)應(yīng)用戶ID
          ContactMethodint聯(lián)系方式(None = 0, Email = 1, HomePhone = 8, WorkPhone = 16,MobilePhone = 32,Fax=64)
          ContactInfovarchar(255)聯(lián)系信息

            這種是一個(gè)多對(duì)多關(guān)系。當(dāng)我們要查詢某個(gè)用戶對(duì)應(yīng)的聯(lián)系方式的時(shí)候,那是一場(chǎng)邏輯上的浩劫:

          select ContactInfo from 表 where UserRole=某種用戶類型 and OwnerID=某用戶ID

            這種寫法是一次性取出某個(gè)用戶所有的聯(lián)系方式,包括Email,HomePhone,WorkPhone等,之后我們可以在程序中判斷ContactMethod的類型,將具體的聯(lián)系方式加以區(qū)分。你可以簡單的想到用switch-case的寫法,類似這樣:

          1. var contact = 上面的SQL語句取出來的用戶所有的聯(lián)系方式;  
          2.             foreach (var item in contact)  
          3.             {  
          4.                 switch (item.ContactMethod)  
          5.                 {  
          6.                     case ContactMethod.WorkPhone:  
          7.                         txtWorkPhone.Text = item.ContactInfo;break;  
          8.                     case ContactMethod.Email:  
          9.                         txtEmail.Text = item.ContactInfo;  
          10.                         break;  
          11.                     case ContactMethod.Fax:  
          12.                         txtFax.Text = item.ContactInfo;  
          13.                         break;  
          14.                     case ContactMethod.OtherPhone:  
          15.                         txtOtherPhone.Text = item.ContactInfo;  
          16.                         break;  
          17.                     case ContactMethod.MobilePhone:  
          18.                         txtMobilePhone.Text = item.ContactInfo;  
          19.                         break;  
          20.                 }  
          21.             }









          當(dāng)然你也可以嘗試下面這種寫法,我個(gè)人認(rèn)為這種寫法更優(yōu)雅

          1. var contact = 上面的SQL語句取出來的用戶所有的聯(lián)系方式;              
          2. txtWorkPhone.Text = (from a in contact  
          3.                      where a.ContactMethod == ContactMethod.Work_Phone  
          4.                      select a.ContactInfo).ToString();  
          5. //后面以此類推,你懂的

            注意,請(qǐng)不要試圖使用類似下面這類語句來查詢某用戶的聯(lián)系方式:

          1. select ContactInfo from 表 where UserRole=某種用戶類型 and OwnerID=某用戶ID and ContactMethod=1    //取出某用戶的Email  
          2. select ContactInfo from 表 where UserRole=某種用戶類型 and OwnerID=某用戶ID and ContactMethod=8    //取出某用戶的HomePhone

            相信我,這種做法非常愚蠢:每當(dāng)你要取出這個(gè)用戶的一種聯(lián)系方式,就要和數(shù)據(jù)庫建立一次連接,打開/關(guān)閉一次數(shù)據(jù)庫;這種做法代價(jià)是十分巨大的,即使有數(shù)據(jù)庫連接池,即使有數(shù)據(jù)庫緩存,都應(yīng)該避免這種愚蠢的做法.

            唔,用了那么多的代碼,終于查出了某個(gè)用戶的聯(lián)系信息了。反正我個(gè)人覺得這種設(shè)計(jì)方式在查詢的時(shí)候,是邏輯上的浩劫。什么?你說你很享受?好吧,看來是我腦容量不夠……

            不過當(dāng)我們面臨需求變動(dòng)的時(shí)候,那就非常愉快了。

            什么,要加一類用戶?簡單,UserRole加一個(gè)枚舉就好了。

            什么,要加一種聯(lián)系方式?ContactMethod加一個(gè)枚舉就OK。

            使用了這種表設(shè)計(jì)的時(shí)候,相信你會(huì)微笑著面對(duì)需求變動(dòng)的

            二逼青年

            昨天和同事也探討了下這個(gè)問題,按他的說法就是:哪個(gè)表要聯(lián)系方式,我就扔個(gè)字段進(jìn)去,存json

          Contactvarchar(8000)用于儲(chǔ)存json

            舉例來說,有這么一個(gè)用戶:

          ID:1Name:張三Telphone:1234Email:123@123.comFax:5678

            那么數(shù)據(jù)庫中就這樣存:

            [{"ID":1,"Name":"張三","Telphone":"1234","Email":"123@123.com","Fax":"5678"}]

            當(dāng)我聽到這種設(shè)計(jì)思路的時(shí)候,虎軀微微一震:靠,這都行。按這種設(shè)計(jì),我整張表都放進(jìn)一個(gè)json里面一股腦的存進(jìn)去就算了。不過震驚之后仔細(xì)想一想,其實(shí)這種設(shè)計(jì)也是有可取之處

            首先,從查詢來說,和普通青年一樣,只需一句SQL:

          select Contact from 表 where 條件

            查詢之后,就可以通過json處理函數(shù)將想要的數(shù)據(jù)取出來,在此就不贅述了

            那么當(dāng)面臨需求變動(dòng)的時(shí)候會(huì)發(fā)生什么:

            加一類用戶的時(shí)候,要添加一張表。也是符合開閉原則,原有代碼沒有改動(dòng)。

            加一種聯(lián)系方式,只用存json的時(shí)候多存一點(diǎn)東西。

            不過這種設(shè)計(jì)如果要更新某條數(shù)據(jù)的話要稍微麻煩一點(diǎn):先查詢一條數(shù)據(jù),重組json之后再Update。

            寫了那么多,希望已經(jīng)將想要表達(dá)的問題表達(dá)清楚了。不足之處望海涵,也歡迎留言斧正。

            PS:真的是一個(gè)規(guī)律,一個(gè)月才能寫出一篇博客……

            再PS:就快能回家了,高興,開心。

          posted @ 2012-05-03 09:45 順其自然EVO 閱讀(413) | 評(píng)論 (0)編輯 收藏

          maven環(huán)境快速搭建

             最近,開發(fā)中要用到maven,所以對(duì)maven進(jìn)行了簡單的學(xué)習(xí)。因?yàn)橛袀€(gè)maven高手在身邊,所以,很快就上手了,我這里算是自我總結(jié)吧。關(guān)于maven是什么東東,請(qǐng)參考其它文章。

          ----------------準(zhǔn)備工作-------------

          Jdk  1.5以上java開發(fā)環(huán)境。

          Eclipse IDE 一個(gè)。

          Maven 3.0.3下載地址: http://maven.apache.org/docs/3.0.3/release-notes.html

          ----//快速搭建步驟

           

          第一步:配置maven環(huán)境

           

          將下載文件解壓,然后設(shè)置maven環(huán)境

          如果你配置過jdk的話,這里對(duì)你應(yīng)該不難。如我的maven環(huán)境為:F:\maven\apache-maven-3.0.3

          我的電腦-----屬性----高級(jí)-----環(huán)境變量-----環(huán)境變量-----新建

          變量名:M2_HOME

          變量值:F:\maven\apache-maven-3.0.3

          找到path 

          在環(huán)境變量值尾部加入:;%M2_HOME%\bin;---前面注意分號(hào)

          當(dāng)然,你也可以直接在path 路徑下加入:;F:\maven\apache-maven-3.0.3\bin  只是上面的方式更優(yōu)雅一點(diǎn)。

          我新建立

          打開命令提示符(開始---運(yùn)行---cmd,檢查我們的java環(huán)境和maven環(huán)境是否有誤。

           

           

          第二步:修改倉庫位置

           

          修改我們倉庫地址,倉庫用于存放我們項(xiàng)目所依賴的所有jar包。

          我的倉庫路徑:F:\maven\repo----這個(gè)路徑是我自己創(chuàng)建,你可以將路徑創(chuàng)建在任何位置。

          我們打開…\apache-maven-3.0.3\conf\目錄下的setting.xml文件,設(shè)置成我們創(chuàng)建的倉庫路徑

          下面我們用一個(gè)命令驗(yàn)證一下。打開命令提示符,輸入:mvn help:system 

          該命令會(huì)打印出所有的java系統(tǒng)屬性和環(huán)境變量。這些信息對(duì)我們?nèi)粘5木幊坦ぷ骱苡袔颓摇?/span>

          如果運(yùn)行的過程中沒有錯(cuò)誤,打開我們倉庫(F:\maven\repo)會(huì)發(fā)現(xiàn)里面多了一些文件。這些文件就是我們從maven的中央倉庫下載到本地倉庫的。

           

          第三步:創(chuàng)建maven項(xiàng)目

          創(chuàng)建一個(gè)我們自己的項(xiàng)目。

          我們通過maven命令行方式創(chuàng)建一個(gè)項(xiàng)目

          mvn archetype:create -DgroupId=com.chongshi.test -DartifactId=hello -DpackageName=com.chongshi.test -Dversion=1.0

           

          因?yàn)槭堑谝淮螛?gòu)建項(xiàng)目,所有依賴的jar包都要從maven的中央倉庫下載,所以需要時(shí)間等待。等以后我們的本地倉庫中積累了我們常用的jar包后,我們的開發(fā)將變得非常規(guī)范和方便。^_^!!

           

          借助下載jar包的時(shí)間,我們來了解一下pom.xml文件。

           

          復(fù)制代碼
          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation
          ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>

          <groupId>com.chongshi.test</groupId>
          <artifactId>hello</artifactId>
          <version>1.0</version>
          <packaging>jar</packaging>

          <name>hello</name>
          <url>http://maven.apache.org</url>

          <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          </properties>

          <dependencies>
          <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
          </dependency>
          </dependencies>
          </project>
          復(fù)制代碼

          Ø project:pom.xml文件中的頂層元素; 
          Ø modelVersion:指明POM使用的對(duì)象模型的版本。這個(gè)值很少改動(dòng)。
          Ø groupId:指明創(chuàng)建項(xiàng)目的組織或者小組的唯一標(biāo)識(shí)。GroupId是項(xiàng)目的關(guān)鍵標(biāo)識(shí),典型的,此標(biāo)識(shí)以組織的完全限定名來定義。比如,org.apache.maven.plugins是所有Maven插件項(xiàng)目指定的groupId。 

          Ø artifactId: 指明此項(xiàng)目產(chǎn)生的主要產(chǎn)品的基本名稱。項(xiàng)目的主要產(chǎn)品通常為一個(gè)JAR文件。第二,象源代碼包通常使用artifactId作為最后名稱的一部分。典型的 產(chǎn)品名稱使用這個(gè)格式: <artifactId>- <version>. <extension>(比 如:myapp-1.0.jar)。 

          Ø version:項(xiàng)目產(chǎn)品的版本號(hào)。Maven幫助你管理版本,可以經(jīng)常看到SNAPSHOT這個(gè)版本,表明項(xiàng)目處于開發(fā)階段。 

          Ø name:項(xiàng)目的顯示名稱,通常用于maven產(chǎn)生的文檔中。 

          Ø url:指定項(xiàng)目站點(diǎn),通常用于maven產(chǎn)生的文檔中。 

          Ø description:描述此項(xiàng)目,通常用于maven產(chǎn)生的文檔中。

           

          對(duì)于一個(gè)項(xiàng)目中只有下面的一部分是是我們需要關(guān)注的:

          <groupId>com.chongshi.test</groupId>

           <artifactId>hello</artifactId>

           <version>1.0</version>

           

          第四步:編譯項(xiàng)目代碼

          我們的項(xiàng)目已經(jīng)創(chuàng)建完成。但我們點(diǎn)開目錄發(fā)現(xiàn),它并不是我們eclipse所需要的項(xiàng)目目錄格式。我們需要把它構(gòu)建成我們eclipse可以導(dǎo)入的項(xiàng)目。

          在命令提示符下進(jìn)入到我們的創(chuàng)建的項(xiàng)目目錄(F:\maven\hello)下,執(zhí)行:mvn clean compile

          Clean 告訴maven清理輸入出目錄target/,compile告訴maven編譯項(xiàng)目主代碼。

          不要急,我們又需要一段時(shí)間來下載,相關(guān)jar包。^_^!第一次用maven要學(xué)會(huì)淡定。

           

          項(xiàng)目是編譯完了,但項(xiàng)目的目錄結(jié)構(gòu)還不是我們想要的eclipse的項(xiàng)目結(jié)構(gòu),是不能導(dǎo)入到eclipse中的。所以,還需要執(zhí)行一個(gè)命令:mvn eclipse:eclipse

           

          命令執(zhí)行完成后就得我們需要的項(xiàng)目目錄了。

           

          第五步:導(dǎo)入eclipse工具

           

          打開的我們的eclipse工具。

          先配置maven倉庫路徑

          Window----Perferences-----java-----Build Path-----Classpath Variables

          New一個(gè)變量的類路徑。

          Name :M2_REPO   注意這個(gè)名字必須要大寫。

          Path :F:/maven/repo  點(diǎn)擊“Folder…”找到有本地倉庫的位置。

           

          下面,可以導(dǎo)入我的hello項(xiàng)目了。Eclipse如何導(dǎo)入項(xiàng)目,我這里就不說了,如果你是個(gè)java開發(fā)人員的話。

           

          第六步:包的更新與下載

           

          打開項(xiàng)目發(fā)現(xiàn)我們junit 是3.8.1的,有點(diǎn)老了。那我想換成4.7的,如何通過maven的方式更換呢。其實(shí),很簡單,打開我們項(xiàng)目下的的pom.xml文件。

          復(fù)制代碼
          ……
          <dependencies>
          <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.8.1</version>
          <scope>test</scope>
          </dependency>
          </dependencies>
          ……
          復(fù)制代碼

          更改變,junit的版本號(hào),然后重新執(zhí)行:mvn eclipse:eclipse  

          Maven 中央倉庫地址:http://search.maven.org

           

          假如,我們想下載一個(gè)struts jar包。在搜索框內(nèi)搜索strruts ,會(huì)要列出中央倉庫中的所有struts版本。

          列表的格式與我們pom.xml配置文件的格式是對(duì)應(yīng)的。

           

           

           

           

          我們?cè)趐om.xml中加入:

          <groupId>stuts</groupId>

           <artifactId>struts-scription</artifactId>

           <version>1.0.1</version>

          然后更新項(xiàng)目就可從中央倉庫下載我們想要的任意jar包(必須是開源的包)

           

          繼續(xù)學(xué)習(xí)內(nèi)容:

          1. 如何創(chuàng)建一個(gè)web項(xiàng)目?

            如果想讓maven應(yīng)用到項(xiàng)目開發(fā)中,這個(gè)是必須的。

          2. 如何使用jeety?

            maven提供的一個(gè)容器,類似于tomcat

          3. 如何創(chuàng)建一個(gè)代理倉庫?

          http://www.theserverside.com/news/1364121/Setting-Up-a-Maven-Repository
          一個(gè)團(tuán)隊(duì)要真正用好Maven,repository私服是免不了的,否則team mate們多好奇的目光,都會(huì)全部消耗在漫長的jar下載中。

              以前介紹過一個(gè)搭建私服的簡樸但很笨的辦法--將雷鋒同志下載好的.m2/repository目錄整個(gè)上傳到任意的Web服務(wù)器中。其實(shí)世上多的是專業(yè)的maven私服搭建器,見TheServiceSide的文章--Setting Up a Maven  Repository

              我用的是Artifactory,忽然間覺得,Java的服務(wù)應(yīng)用啥時(shí)候終于變得這么好用了,什么都不用裝,不用配,雙擊artifactory.bat,自己就會(huì)啟動(dòng)Jetty Web服務(wù)器,典型的拆箱即用。

              10分鐘入門到開動(dòng)

          • 雙擊artifactory.bat,啟動(dòng)默認(rèn)配置的Artifactory服務(wù)。
          • http://localhost:8081/artifactory/,用admin/password登錄進(jìn)管理界面看看。
          • 修改自己項(xiàng)目的pom.xml,增加私服定義
                <repositories>
                    
            <repository>
                        
            <id>artifactory</id>
                        
            <name>your local artifactory</name>
                        
            <url>http://localhost:8081/artifactory/repo</url>
                    </
            repository>
                </
            repositories>

                
            <pluginRepositories>
                    
            <pluginRepository>
                        
            <id>artifactory</id>
                        
            <name>your local artifactory</name>
                        
            <url>http://localhost:8081/artifactory/plugins-releases</url>
                        
            <snapshots>
                            
            <enabled>false</enabled>
                        </
            snapshots>
                    </
            pluginRepository>
                </
            pluginRepositories>
          • 正常運(yùn)行項(xiàng)目的maven命令,向artifactory索求jar。如果artifactory已經(jīng)下載了就會(huì)直接返回給你,還沒有的 就會(huì)去那幾個(gè)repo官方站下載。進(jìn)入到artifactory的管理界面,不斷刷新Browse the repository,會(huì)看到倉庫不斷豐富的情況。

          另外,官網(wǎng)服務(wù)器上還沒有的一些jar,也可以通過管理界面很方便的deploy到Artifactory中。

          最后你團(tuán)隊(duì)里的artifactory服務(wù)器不能直接連外網(wǎng),需要使用HTTP代理服務(wù)器的話,見http://www.jfrog.org/sites/artifactory/latest/configuration.html

          建議那些愿意為開源作實(shí)事的站點(diǎn),在帶寬充裕的服務(wù)器上,用Artifactory搭一個(gè)jar倉庫吧,SpringSide就可以直接連上去下載jar了:)


            如果是團(tuán)隊(duì)開發(fā),這個(gè)很有必要,我們不可能每次都到中央倉庫拿包,那樣很慢,如果開發(fā)人員A已經(jīng)下了某包,開發(fā)人員B還要下;創(chuàng)建代理倉庫,A第一次下的包會(huì)存入代理倉庫中,B要用時(shí)直接從代理倉庫取就行。

          本文更新一個(gè)命令。

          第一節(jié)中提示創(chuàng)建一個(gè)項(xiàng)目用archetype:create  create是個(gè)被廢棄或不被推薦使用的插件,在以后創(chuàng)建項(xiàng)目中請(qǐng)盡量使用archetype:generate

          創(chuàng)建一個(gè)項(xiàng)目,如下:

          mvn archetype:generate -DgroupId=com.chongshi.test -DartifactId=hello 

          -DpackageName=com.chongshi.test -Dversion=1.0

          第一節(jié)拋出了三個(gè)問題,本文將解決前兩個(gè)

          1. 如何創(chuàng)建一個(gè)web項(xiàng)目

          2. 如何使用jettey容器運(yùn)行

          如果對(duì)maven的基本配置不了解的,請(qǐng)先閱讀第一篇文章:

          http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html

          -----//創(chuàng)建一個(gè)文本項(xiàng)目

           

          1. 如何創(chuàng)建一個(gè)web項(xiàng)目。

          其實(shí)非常簡單,只是比普通項(xiàng)目多加一個(gè)參數(shù)DarchetypeArtifactId ,命令如下:

          mvn archetype:generate -DgroupId=com.chongshi.test -DartifactId=mywebapps  -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0 

          定位到創(chuàng)建項(xiàng)目的目錄下構(gòu)建成eclipse項(xiàng)目:

           F:\mywebapp>mvn eclipse:eclipse 

           

          通過maven構(gòu)建后就是我們eclipse所需要的項(xiàng)目目錄如下。

          由于本文不是講解struts2項(xiàng)目的創(chuàng)建與配置,所以就不寫struts2的配置過程,但為了不影響后面內(nèi)容的講解,所以這里提供一個(gè)基于struts2web項(xiàng)目

          例子介紹:http://www.mkyong.com/struts2/struts-2-hello-world-example/

          項(xiàng)目源碼下載:

          http://www.mkyong.com/wp-content/uploads/2010/08/Struts2-Hello-World-Example.zip

          我解壓到了本地D盤根目錄下,由于已經(jīng)是maven 的項(xiàng)目格式了,所以不需要對(duì)該項(xiàng)目運(yùn)行mvn  eclipse:eclipse命令進(jìn)行構(gòu)建。直接導(dǎo)入到eclipse工具中。項(xiàng)目目錄結(jié)構(gòu)如下:

           

           

          ----//如何使用Jetty容器

          2. 如何使用jetty容器運(yùn)行項(xiàng)目。

          使用添加jetty 運(yùn)行項(xiàng)目。

           Jettytomcat一樣也屬于web容器。Jettymaven中做為一個(gè)插件。我們要在pom.xml中添加jetty的插件,才能調(diào)用jetty

          <project>…</project>標(biāo)簽之間,插入如下信息:

           

          復(fù)制代碼
          <build>
          <finalName>Struts2Example</finalName>
          <plugins>
          <plugin>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>maven-jetty-plugin</artifactId>
          <version>6.1.10</version>
          <configuration>
          <scanIntervalSeconds>10</scanIntervalSeconds>
          <stopKey>foo</stopKey>
          <stopPort>9999</stopPort>
          </configuration>
          <executions>
          <execution>
          <id>start-jetty</id>
          <phase>pre-integration-test</phase>
          <goals>
          <goal>run</goal>
          </goals>
          <configuration>
          <scanIntervalSeconds>0</scanIntervalSeconds>
          <daemon>true</daemon>
          </configuration>
          </execution>
          <execution>
          <id>stop-jetty</id>
          <phase>post-integration-test</phase>
          <goals>
          <goal>stop</goal>
          </goals>
          </execution>
          </executions>
          </plugin>
          </plugins>
          </build>
          復(fù)制代碼

           

          在項(xiàng)目目錄下執(zhí)行mvn jetty:jetty   

           

          D:\java\Administrator\workspace3\Struts2Example>mvn jetty:jetty

          在慢長的等待插件下載過程中(公司網(wǎng)速不給力),我上了一次廁所、倒了一次水。在群里和朋友亂侃了一通。^_^!!

          等插件下載完成后就可以運(yùn)行jetty了,運(yùn)行命令:mvn jetty:run 

          這時(shí)就可以在瀏覽器中訪問我們的jsp頁面了。

           

          重啟Jetty,按鍵盤ctrl+c  根據(jù)提示按 y


          posted @ 2012-05-02 15:19 順其自然EVO 閱讀(6154) | 評(píng)論 (0)編輯 收藏

          使用JMeter創(chuàng)建FTP測(cè)試計(jì)劃

          FTP服務(wù)主要提供上傳和下載功能。有時(shí)間需要我們測(cè)試服務(wù)器上傳和下載的性能。在這里我通過JMeter做一個(gè)FTP測(cè)試計(jì)劃的例子。

          當(dāng)然,JMeter官方網(wǎng)站的用戶手冊(cè)也有例子,但由于版本較早,我也算是對(duì)自己學(xué)習(xí)的一個(gè)總結(jié),所以再整理一個(gè)。

          * 本人使用的是JMeter2.4版本。

          * 測(cè)試的服務(wù)器是IP:124.205.228.54  (由于找不到FTP站點(diǎn),所以在“主機(jī)屋網(wǎng)站http://www.zhujiwu.com申請(qǐng)了一個(gè)免費(fèi)的FTP空間”)

          1.創(chuàng)建一個(gè)線程組

          2.線程組--->添加--->配置元件--->FTP請(qǐng)求缺省值。

          3.線程組--->添加--->Sampler--->FTP請(qǐng)求

          說明:

          IP    為你FTP服務(wù)的IP

          Remote file 為你FTP服務(wù)器上的一個(gè)文件。

          local file  為本地你存放到本機(jī)上的路徑。

          選擇   get(RETR)  為下載方式。

          填寫你的FTP服務(wù)器的用戶名密碼。

          3.按照第二步的方式再添加一個(gè)“FTP請(qǐng)求”。

          說明:

          IP    為你FTP服務(wù)的IP

          Remote file 為你要上傳到FTP服務(wù)器上的文件路徑及文件名

          local file  為本地你要上傳的文件的路徑。

          選擇   put(RETR)  為上傳方式。

          填寫你的FTP服務(wù)器的用戶名密碼。

          4.添加一個(gè)監(jiān)控器:線程組--->添加--->監(jiān)控器--->Spline Visualizer

          一個(gè)FTP計(jì)劃創(chuàng)建成功 :)

          參考資料:

          http://jakarta.apache.org/jmeter/usermanual/build-ftp-test-plan.html

          http://www.51testing.com/?uid-23852-action-viewspace-itemid-16560

          分類: jmeter

          posted @ 2012-05-02 14:50 順其自然EVO 閱讀(427) | 評(píng)論 (0)編輯 收藏

          Eclipse連接MySQL數(shù)據(jù)庫(傻瓜篇)

            本來不想寫這么簡單人文章,在百度上搜索我這個(gè)標(biāo)題,完全符合標(biāo)題的一大堆。但我按照那些文章?lián)v鼓了很久,就是不行。

          我的環(huán)境:MySQL:mysql-essential-5.1.51-win32

               jdbc驅(qū)動(dòng):我已經(jīng)上傳到csdn上一個(gè):http://download.csdn.net/source/3451945

               Eclipse:任意版本,免費(fèi)的,可以百度的到。

          1。MySQL安裝,不會(huì)的朋友可以看連接:http://www.duote.com/tech/1/2430_1.html

              下面來創(chuàng)建一個(gè)數(shù)據(jù): 

          復(fù)制代碼
          mysql>CREATE DATABASE test;   //創(chuàng)建一個(gè)數(shù)據(jù)庫

          mysql
          >use test; //指定test為當(dāng)前要操作的數(shù)據(jù)庫

          mysql
          >CREATE TABLE user (name VARCHAR(20),password VARCHAR(20)); //創(chuàng)建一個(gè)表user,設(shè)置兩個(gè)字段。

          mysql
          >INSERT INTO user VALUES('huzhiheng','123456'); //插入一條數(shù)據(jù)到表中
          復(fù)制代碼

            

          2。打開Eclipse,創(chuàng)建一個(gè)項(xiàng)目(my),

          操作:右鍵點(diǎn)擊my--->build Path--->add external Archiver...選擇jdbc驅(qū)動(dòng),點(diǎn)擊確定。

          我的項(xiàng)目列表:



          3。驅(qū)動(dòng)已經(jīng)導(dǎo)入,下面我們來寫一個(gè)程序驗(yàn)證一下

          復(fù)制代碼
          import java.sql.*;
          public class MysqlJdbc {
          public static void main(String args[]) {
          try {
          Class.forName(
          "com.mysql.jdbc.Driver"); //加載MYSQL JDBC驅(qū)動(dòng)程序
          //Class.forName("org.gjt.mm.mysql.Driver");
          System.out.println("Success loading Mysql Driver!");
          }
          catch (Exception e) {
          System.out.print(
          "Error loading Mysql Driver!");
          e.printStackTrace();
          }
          try {
          Connection connect
          = DriverManager.getConnection(
          "jdbc:mysql://localhost:3306/test","root","198876");
          //連接URL為 jdbc:mysql//服務(wù)器地址/數(shù)據(jù)庫名 ,后面的2個(gè)參數(shù)分別是登陸用戶名和密碼

          System.out.println(
          "Success connect Mysql server!");
          Statement stmt
          = connect.createStatement();
          ResultSet rs
          = stmt.executeQuery("select * from user");
          //user 為你表的名稱
          while (rs.next()) {
          System.out.println(rs.getString(
          "name"));
          }
          }
          catch (Exception e) {
          System.out.print(
          "get data error!");
          e.printStackTrace();
          }
          }
          }
          復(fù)制代碼

          點(diǎn)擊運(yùn)行程序:  

          Success loading Mysql Driver!

          Success connect Mysql server!

          huzhiheng  

          出現(xiàn)上面結(jié)果,說明你連接數(shù)據(jù)庫成功。

          4。可以查看到MySQL里面的內(nèi)容,那我們是不是想往MySQL中插入數(shù)據(jù)呢。
          下面的例子,往MySQL的user表中插入100條數(shù)據(jù)
          復(fù)制代碼
          import java.sql.*;

          public class Myjproject {
          public static void main(String args[])
          {
          try {
          Class.forName(
          "com.mysql.jdbc.Driver"); //加載MYSQL JDBC驅(qū)動(dòng)程序
          //Class.forName("org.gjt.mm.mysql.Driver");
          System.out.println("Success loading Mysql Driver!");
          }
          catch (Exception e) {
          System.out.print(
          "Error loading Mysql Driver!");
          e.printStackTrace();
          }
          try {
          Connection connect
          = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test","root","198876");

          int num=100;
          PreparedStatement Statement
          =connect.prepareStatement("INSERT INTO user VALUES(?,?)");
          for(int i=0;i<num;i++) //定義個(gè)100次的循環(huán),往表里插入一百條信息。
          {
          Statement.setString(
          1,"chongshi"+i);
          Statement.setString(
          2,"bo"+i);
          Statement.executeUpdate();
          }

          // } catch (ClassNotFoundException e) {
          // TODO Auto-generated catch block
          // System.out.println("An error has occurred:"+e.toString());
          // e.printStackTrace();
          }catch(SQLException e)
          {
          }
          }
          }
          復(fù)制代碼

           

          5.下面我們打開MySQL數(shù)據(jù)庫進(jìn)行查看 

          mysql> show tatabases;  //查看所數(shù)據(jù)庫
          mysql> use  test;    //使test為當(dāng)前要操作的數(shù)據(jù)庫
          mysql> show tables; //查看當(dāng)前數(shù)據(jù)庫的所有表
          mysql> select *from user;  //查看當(dāng)前表(user)的所有信息


          注意:如果不能正常連接你的數(shù)據(jù)庫,請(qǐng)檢查你代碼中,驅(qū)動(dòng)、用戶名、密碼、表等信息是否對(duì)應(yīng)無誤,不要把別人的代碼直接復(fù)制過來,看也不看就用。

          分類: Java

          posted @ 2012-05-02 14:48 順其自然EVO 閱讀(534) | 評(píng)論 (0)編輯 收藏

          一種簡單的數(shù)據(jù)庫性能測(cè)試方法

             這兩天接到一個(gè)任務(wù),要測(cè)試一個(gè)服務(wù)器的性能,客戶要求向數(shù)據(jù)庫內(nèi) 1000/s(每插入一千條數(shù)據(jù))  的處理能力,當(dāng)時(shí)腦子賭賽了,想的是用LR來進(jìn)行,由于LR接觸不深,只知道LR實(shí)現(xiàn)參數(shù)化的時(shí)候可以調(diào)用數(shù)據(jù)庫里面的數(shù)據(jù),往里面大批量的插入數(shù)據(jù),以 前沒試過。

              翻閱了一下資料,找一到了一篇《一種特殊的數(shù)據(jù)庫性能測(cè)試》,大概思路是:通過編寫一java程序來循環(huán)插入數(shù)據(jù),編寫一個(gè)批處理文件來調(diào)用java程 序。再通過LR的system()函數(shù)來調(diào)用批處理文件來進(jìn)行壓力測(cè)試。但是對(duì)于我這種菜鳥來說,好多細(xì)節(jié)不懂。比如那個(gè)批處理就讓我很為難。呵呵。

            其實(shí),通過jmeter很簡單就可以完成,可以參考我以前的一篇文章《jmeter創(chuàng)建數(shù)據(jù)庫(MySql)測(cè)試》。

            前提條件:一個(gè)數(shù)據(jù)庫:test   數(shù)據(jù)庫下面有一張表:user   表中有兩個(gè)字段:username、passworld 。

            要求:往數(shù)據(jù)庫內(nèi)大批量插入數(shù)據(jù),1000/s  

          其實(shí)和之前的方法一樣,為了簡單,我還是把截圖貼出來吧。

          1.

          創(chuàng)建一個(gè)測(cè)試計(jì)劃,將我們所使用的數(shù)據(jù)庫驅(qū)動(dòng)包導(dǎo)入。

          2.

          添加一個(gè)線程組,并設(shè)置我們的虛擬用戶數(shù)、啟動(dòng)時(shí)間、和循環(huán)次數(shù)

          3.

          創(chuàng)建一個(gè)線程,并在線程下面,創(chuàng)建一個(gè)JDBC Connection Configuration ,設(shè)置相關(guān)信息。

          4.

          創(chuàng)建一個(gè)JDBC Request.我們需要對(duì)數(shù)據(jù)庫做插入操作。(詳細(xì)設(shè)置,看截圖上的說明)

          5.

          添加監(jiān)聽器,我們這里選擇添加“圖形結(jié)果”和“查看結(jié)果樹”,點(diǎn)擊菜單欄上的“啟動(dòng)”--->運(yùn)行。

          查看我們的運(yùn)行結(jié)果。

          在測(cè)試的過程中,通過數(shù)據(jù)庫命令,可以查看當(dāng)前數(shù)據(jù)庫插入了多少數(shù)據(jù)

          分類: jmeter

          posted @ 2012-05-02 14:35 順其自然EVO 閱讀(711) | 評(píng)論 (0)編輯 收藏

          LR有的JMeter也有之三“集合點(diǎn)”

          繼續(xù)上兩篇的文章內(nèi)容和思路進(jìn)行。(文思如尿崩,誰與我爭鋒----韓寒)哈哈!

           

          集合點(diǎn):簡單來理解一下,雖然我們的“性能測(cè)試”理解為“多用戶并發(fā)測(cè)試”,但真正的并發(fā)是不存在的,為了更真實(shí)的實(shí)現(xiàn)并發(fā)這感念,我們可以在需要壓力的地方設(shè)置集合點(diǎn),

          還拿那個(gè)用戶和密碼的地方,每到輸入用戶名和密碼登錄的地方,所有的虛擬用戶都相互之間等一等,然后,一起訪問。(紅軍排長說:等一等!大家一起沖啊!這樣給敵人的壓力是很大的。嘻嘻!)

          1.

          接著之前創(chuàng)建的腳本,右鍵點(diǎn)擊 step1---->定時(shí)器---->Synchronizing Timer

          這樣子就添加了一個(gè)“集合點(diǎn)”,下面來設(shè)置一下集合點(diǎn)。

           

          2.

          我們添加完之后的列表是這個(gè)樣子的,

           發(fā)現(xiàn)了沒,我們集合點(diǎn)的位置不對(duì),應(yīng)該在登錄的前面才對(duì)。怎么弄呢?

          點(diǎn)擊“synchronizing Timer”拖動(dòng)到“登錄”面前的位置,不要松鼠標(biāo)的左鍵,再點(diǎn)擊鼠標(biāo)的右鍵,選擇在“之前插入”---有點(diǎn)難噢,慢慢來!

                   

          OK!!

          posted @ 2012-05-02 14:34 順其自然EVO 閱讀(461) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共394頁: First 上一頁 331 332 333 334 335 336 337 338 339 下一頁 Last 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 庆元县| 康乐县| 资阳市| 黑山县| 临潭县| 东乌| 天等县| 镶黄旗| 乐陵市| 友谊县| 鹤山市| 昌平区| 呼玛县| 芜湖市| 庐江县| 灵山县| 醴陵市| 庆云县| 遂川县| 杨浦区| 通化市| 河北省| 尉犁县| 弥渡县| 尉氏县| 巴彦县| 紫云| 龙川县| 屯留县| 和田县| 漳平市| 内丘县| 桂林市| 桃园市| 广丰县| 银川市| 栾城县| 崇阳县| 五华县| 商洛市| 谢通门县|