北(běi)京軟件(jiàn)開(kāi)發敏捷軟件(jiàn)開(kāi)發是(shì)從(cóng)1990年(niá♥π ™n)代開(kāi)始逐漸引起廣泛關注的(de> ≥)一(yī)種新型軟件(jiàn)開(kāi)發方法©≈♠,是(shì)能(néng)夠應對(duì)快(↔ kuài)速變化(huà)的(de)需求的(d÷φ¶ e)一(yī)種軟件(jiàn)開(kāi)發能(néng)力,它作(zuò∏♠)為(wèi)一(yī)種新型的(de)開(kāi)發模式→φ,被越來(lái)越多(duō)地(dì)應用(yòng)到(dào)軟件(∏₽€>jiàn)項目中。
敏捷軟件(jiàn)測試指的(de)是(s←λ <hì)在敏捷軟件(jiàn)開(kāi)發過程中&Ω≠跟質量相(xiàng)關的(de)一(yī)系列活動,和(hé)傳統意義•&$™上(shàng)的(de)軟件(jiàn)測試有(yǒu)很(h ♠✘©ěn)多(duō)區(qū)别,因為(wèi)敏捷軟件(jiàn)α∑•測試的(de)概念一(yī)直比較模糊,所以經常會(huì)π♠→有(yǒu)人(rén)走入誤區(qū),我曾經在瀑布型的(de)軟件(Ωjiàn)開(kāi)發模式下(xià)做 απ∑(zuò)過幾年(nián)的(de)測試₩φ人(rén)員(yuán),所以在剛剛接觸敏捷項目的(de)時(s↕÷ε¥hí)候也(yě)曾有(yǒu)過一(yī)些(xiē)誤解,但(dàn∏★)是(shì)在敏捷軟件(jiàn)開(kāi)發團隊工(×<✔gōng)作(zuò)将近(jìn)5年(nián)後,對(du∞ ì)很(hěn)多(duō)問(wèn)題有(yǒu)了(le)新的(de)認β×識,以下(xià)針對(duì)幾個(gèδ≤™€)常見(jiàn)的(de)誤區(qū)♠Ω★和(hé)大(dà)家(jiā)分(fēn)享一(yī)下(xià)我的>←λ¥(de)理(lǐ)解。
不(bù)需要(yào)測試策略
測試策略關注的(de)是(shì)目标和(hé)方法,即怎樣在限定的(de£λ↔)時(shí)間(jiān)內(nèi)有(yǒu)效利用(yòng)有(y<÷ ✔ǒu)限的(de)資源達到(dào)提前制(zhì)定的( ₹de)目标,一(yī)般制(zhì)定測$$♣試策略時(shí)會(huì)首先明(míng)确測試目标,然≤↕後确定需要(yào)哪些(xiē)測試類型,各種測試類型所占"γ&♠的(de)大(dà)概比例,選擇測試框架,較後規劃一(y×<≠ī)下(xià)軟件(jiàn)發布前需要(yào)經曆哪♣φ 些(xiē)測試階段。
很(hěn)多(duō)人(rén)δ♦認為(wèi),敏捷軟件(jiàn)開(kāi)發以用(∏≤yòng)戶故事(shì)為(wèi)單≠<ε§元,是(shì)不(bù)是(shì)集中精力在用(yòng)戶故事(↕ shì)測試就(jiù)足夠了(le)?是(shì)不(bù)是(shì)根•&≤λ本不(bù)需要(yào)考慮測試策略?
其實這(zhè)是(shì)一(yīδ☆)個(gè)很(hěn)大(dà)的(de)誤解,因為(wèi)敏÷®∞捷軟件(jiàn)開(kāi)發通(tōng)常都(dōu)δ↕™α是(shì)叠代式的(de)發布,周期比較短(duǎn),♦♣資源非常有(yǒu)限,這(zhè)就(jiù)更需要(yào)我們統籌規劃↔✘γ,小(xiǎo)到(dào)一(yī)個(gè)用(yβ♠¥ òng)戶故事(shì),大(dà)到(♣β£★dào)一(yī)個(gè)完整的(de)用(yòng)戶特性,都(dō££&u)需要(yào)考慮怎麽合理(lǐ)利用(yòng)測試資源,所以敏捷項目∏ε是(shì)非常需要(yào)測試策略的(de)。
具體(tǐ)到(dào)實際項目中,通(tōng)常團隊會(huì)在項目 ₩初期(叠代0)制(zhì)定測試策略,明(míng)确目标(包括功能(néng∑✔)性需求的(de)目标以及非功能(néng)性需求的(de)目标)<≥,然後确定在開(kāi)發階段需要(yào)添加哪些(xiē)自(zì)動化(≥ε€≥huà)測試(包括單元測試,接口測試,契約測試,集♥δπ↓成測試,系統級别的(de)UI的(de)用(yòng)戶場(ch∏★↓ǎng)景測試),并規定這(zhè)些(xiē)測試的(♣"de)大(dà)概比率(符合測試金(jīn)字塔),選擇自(zì)γ♠動化(huà)測試框架(比如(rú)XUnit)以及需要(yào)哪些(xiē©>)手動測試(包括探索性測試,可(kě)用(yòng)性測試等),還(hái)要π'₹(yào)規劃每個(gè)發布周期需要(yào)進行(x¶✘"íng)的(de)測試階段(比如(rú)新功能(néng)測<£₩試,回歸測試等),之後測試策略會(huì)對(duì)敏捷團隊的(d₩♥♣e)開(kāi)發及測試起到(dào)非♥"≠$常重要(yào)的(de)指導作(zuò)用(yònσ'∑™g),當然,每個(gè)團隊因為(wèi)項目的(de)不(bù)同ε¶Ω∞策略也(yě)會(huì)不(bù)同。
不(bù)需要(yào)測試文(wén)≈≥ 檔
測試文(wén)檔通(tōng)常包括測試計(jì)劃, € 測試用(yòng)例,測試報(bào)告,測試缺陷等文(wén)檔以及相(x•™<iàng)對(duì)應的(de)可(kγ←'ě)以指導測試的(de)一(yī)部分(fē€σ≠₹n)需求文(wén)檔。
很(hěn)多(duō)人(rén)會( ✘πhuì)認為(wèi),敏捷軟件(jiàn)≥≤₩γ測試是(shì)不(bù)需要(yào)文(wén)檔的(de)↓'÷→,敏捷宣言中有(yǒu)一(yī)句&ldqu♣∏✘βo;工(gōng)作(zuò)的(de)軟件(jiàn) 高♠•(gāo)于 詳盡的(de)文(wén)•βδ'檔”,盡管敏捷宣言較後提到(dào)了(le)&ldqu↓®$o;右項也(yě)有(yǒu)價值,我們更重¥←≤視(shì)左項的(de)價值”,但(dàn)人(ré™↓₽>n)們往往會(huì)忽視(shì)右項的(de↔≈± )內(nèi)容,導緻在很(hěn)多(duō)αλΩ♥剛開(kāi)始實施敏捷開(kāi)發的(de)團隊中完全否定了(le€↕♥≤)測試文(wén)檔的(de)作(zuò)用(y±¥òng)。
首先不(bù)可(kě)否認,在實際←♦₹的(de)敏捷項目中,确實很(hěn)少(♥εshǎo)見(jiàn)傳統意義上(shàng)的(de)正式的(de)專門(×"mén)的(de)需求文(wén)檔和(hé)測試文(wén)檔,$λ₩但(dàn)這(zhè)并不(bù)代表敏捷項目沒有(yǒu÷∞)文(wén)檔,比如(rú)用(yòng)戶故事(shì)本身(shē♥☆n)就(jiù)是(shì)需求的(de)載體(tǐ),用(yò→✔ng)戶故事(shì)中的(de)驗收條件(jiàn)就♠σ (jiù)是(shì)敏捷測試文(wén)檔的(de)一(yī)部分(f®π∞ ēn), 另外(wài)很(hěn)多(duō)敏捷軟件(jiàn)項目✔→都(dōu)會(huì)采用(yòng)BDD的(de)方式進行(xδπ↑♣íng)開(kāi)發,将測試用(yòng)例用(yòng)業(yè)©"¶ 務人(rén)員(yuán)能(néng)£✘≠£夠看(kàn)懂(dǒng)的(de)自(zì)然語言描述,并結合±$自(zì)動化(huà)實現(xiàn),形成一(yī)個(gè)融需求÷♦和(hé)測試為(wèi)一(yī)體(tǐ)的(αγ∏de)文(wén)檔,而且為(wèi)了(le)應對 γ↔(duì)敏捷軟件(jiàn)測試變化(huà)快(kuà★↑φφi)文(wén)檔更新不(bù)及時(shí)導緻的(de)問(wèn↓α)題,很(hěn)多(duō)敏捷項目都(dōu)在使用↔α×(yòng)Living document。
純自(zì)動化(huà)測試 or 純手動測試
有(yǒu)些(xiē)剛接觸敏捷的(de<≈€)人(rén)認為(wèi)敏捷軟件(jiàn)開(kāi)發發"'φ€布周期很(hěn)短(duǎn), 測試人(rén)員(yuáγ÷↑ n)根本沒有(yǒu)時(shí)間(jδ₽←iān)做(zuò)手動測試, 所以應該采用(yòng)純¶σ自(zì)動化(huà)測試。
也(yě)有(yǒu)一(yī)些(xiē)人(rén)認為(wèi)>∞,敏捷開(kāi)發強調快(kuài)速響應變化(÷¶huà),如(rú)果投入成本在自(zì)動化(huà)測試上(shàn¶§€ g),那(nà)麽肯定會(huì)導緻維護自(zì)動化(hu&±≤δà)測試帶來(lái)的(de)資源浪費(fèi),所以應該采用(yòng)純π×α"手動測試。
這(zhè)是(shì)兩種極端的(de)誤解,雖然☆♠¥這(zhè)兩種觀點所考慮到(dào)的(de)難點确實存在πε>, 因為(wèi)在敏捷軟件(jiàn)開(kāi∞±)發過程中, 叠代通(tōng)常比較短(duǎn),确實不(☆"✔bù)會(huì)預留足夠多(duō)的ΩΩ÷(de)時(shí)間(jiān)來(lái)做(zuò)手動測"€✘試, 所以必須要(yào)有(yǒu)足夠多(duō)的(Ω de)自(zì)動化(huà)測試來(lá✔εσi)保障。
然而因為(wèi)測試代碼本身(shēn)可(kě)能(néng)存在缺陷παγ,而且有(yǒu)很(hěn)多(duō)部分(fēn€₹✘)難以被自(zì)動化(huà)測試覆蓋(比如(rú)&∑γ界面的(de)測試,可(kě)用(yòng)性測試,探索性α×測試等),所以敏捷測試也(yě)同樣離(÷₽σlí)不(bù)開(kāi)手動測試。
至于關于自(zì)動化(huà)測試維護成本的(dλ§e)顧慮,敏捷項目也(yě)确實存在變化(huà"')比較多(duō)的(de)特點,但(dàγ n)通(tōng)常變的(de)都(dōu)是(shì)比較接近(♣←← jìn)用(yòng)戶的(de)部分(★≠fēn),所以應該盡量減少(shǎo)用(yòng)戶級别的(de)依賴÷®•界面的(de)自(zì)動化(huà)測試,而多(duō)增加一(yī)些(x≤ $iē)不(bù)容易變化(huà)的(de)底層的(de)單元♣₹≈測試接口測試等。
推薦敏捷測試以自(zì)動化(huà)測試♣ ≤為(wèi)主,手動測試為(wèi)輔。
敏捷QA = 敏捷Tester
在很(hěn)多(duō)剛接觸敏捷實α"踐的(de)團隊中,大(dà)家(jiā)對(duì₩→×)敏捷QA的(de)認識還(hái)停留在Tester的(de)階段,認為₩↕(wèi)隻要(yào)用(yòng)戶故事©∞(shì)開(kāi)發完成之後,QA去(qù)專職地(dì±↔<ε)做(zuò)測試,發現(xiàn)缺陷就(jiù)夠了(le✔<)。
這(zhè)是(shì)一(yī)個(gè)很♥ ↔₽(hěn)大(dà)的(de)誤解,首先Q☆ φA(Quality Assurance/Analyst),不(bù)是(shì♣ ' )單純意義的(de)測試人(rén)員(yu<∞án),通(tōng)過這(zhè)個(gè)角色的(de)名稱我們可(k♥α$ě)以看(kàn)的(de)出來(lái)敏捷QA強調♠÷的(de)是(shì)質量保障和(hé)分(fē ♥£δn)析,而不(bù)單純是(shì)測試産品。
在實際的(de)項目中,敏捷QA通(tōng)常會(huì)從(cóng'∏•)需求分(fēn)析階段就(jiù)開(kāi)始參☆≤βσ與整個(gè)軟件(jiàn)開(kāi)發過程,通(tōng)過在♦π♦不(bù)同階段和(hé)團隊中的(de)不(bù)同角色合作(zuò),<♦∞幫助整個(gè)團隊對(duì)質量達成共識,并通(t&≥ōng)過在不(bù)同階段的(de)确認和(hé)驗證<β做(zuò)到(dào)缺陷預防,而不(bù)是(shì)等到(dào)軟件±¶$(jiàn)開(kāi)發完成後再去(qù)發現(xi♣♣↔$àn)缺陷,所以對(duì)于敏捷QA來(lái)λ↔ 說(shuō),其目标是(shì)軟件(j♦ iàn)開(kāi)發完成後能(néng)γ☆£¥夠發現(xiàn)的(de)缺陷越少(shǎo)>γ越好(hǎo),而對(duì)于Tester來(lá ∏™i)說(shuō),發現(xiàn)越多(duō)的("←<de)缺陷證明(míng)工(gōng)βααδ作(zuò)做(zuò)得(de)越優秀。
非功能(néng)性測試不(bù)重要(yào)
非功能(néng)性測試指的(de)是(shì)針對(duì)非功能£λ(néng)性需求(軟件(jiàn)本身φ→α(shēn)滿足用(yòng)戶需求所必需的(d>≥✘☆e)功能(néng)性需求以外(wài)的(de)一(yī)些(xiē)特性→← ≥,比如(rú)安全,性能(néng),可(kě)用(yòng)性,兼容性<→♥ 等)的(de)測試,通(tōng)常包括安全測< 試,性能(néng)測試,可(kě)用(yòng)性測試,兼容✘ γ₹性測試等。
在敏捷軟件(jiàn)項目中,需求被切割成了(le)很(hěγ≤αn)小(xiǎo)的(de)單元,在切割的(≈§♦de)過程中,非功能(néng)性需求是(shì)較容易被人(rén)'¶£φ忽略的(de)一(yī)部分(fēn),而這(zhè)導緻的(de)問(wèn€¶")題就(jiù)是(shì)非功能(néng)性測£↔<試經常被團隊忽略,久而久之,就(jiù)會(huì)↑↑形成這(zhè)樣一(yī)個(gè)誤解,認±♦✘為(wèi)非功能(néng)性測試是(shì)不(bù)®₹重要(yào)的(de)。
這(zhè)個(gè)觀點非常不(bù"•≠)對(duì),首先非功能(néng)性測試的(d±₽e)重要(yào)性并不(bù)會(huì©>)因為(wèi)軟件(jiàn)開(kāi)發模式的(±'¶de)不(bù)同而有(yǒu)所不(bεù)同,尤其安全測試和(hé)性能(néng)測試的(de)重要(yào)π 性正越來(lái)越多(duō)地(dì)✘σ被重視(shì)起來(lái),因為(wèi)很(hěn)多(duō)産品₽©必須考慮到(dào)用(yòng)戶敏感信息的(de)安全以及≠✘性能(néng)導緻的(de)用(yòng)戶滿意度,☆Ω∏₹在敏捷項目中由于軟件(jiàn)會(huì>₽×)盡早發布,如(rú)果這(zhè)些(xiē)非功能©®§λ(néng)性需求出現(xiàn)問(wèn)題,就(jiù)會£♦(huì)更早地(dì)造成影(yǐng≤ )響,很(hěn)可(kě)能(néng)在軟件(ji↑♥ àn)剛步入市(shì)場(chǎng)就(jiù)損失掉大(d↓₹à)多(duō)數(shù)的(de)用(yòng)戶。
所以非功能(néng)性的(de)測試和(hé)功能™β(néng)性測試同等重要(yào),在實際的(de)項目中,比較↔φ好(hǎo)的(de)做(zuò)法是(shì)将這(zhèλ§$)些(xiē)非功能(néng)性需求也(yě)加入到(dào)用(yòng)®←₹Ω戶故事(shì)的(de)驗收條件(jiàn)中,在整個(gè)敏捷開£♦(kāi)發流程中對(duì)這(zhè)些(xγ± λiē)非功能(néng)性需求進行(xíng)驗證。
質量是(shì)QA的(de)事(shì)兒(ér)€¥₽
受傳統觀念的(de)影(yǐng)響,很(hěn)多(duōβ£$)人(rén)還(hái)是(shì)會∏α(huì)認為(wèi)質量是(shì)QA的(de)♦∑≠↔事(shì)兒(ér),如(rú)果産品發布後質量©®★不(bù)好(hǎo)是(shì)QA的(dε≥ e)問(wèn)題,其他(tā)角色和(hé)質量沒有(yǒu)₩¥₽♦太大(dà)的(de)關系。
首先這(zhè)種認識太高(gāo)估了(le)QA對(du÷♦ì)質量的(de)作(zuò)用(yòng),軟件(jiàn)的(×$©de)質量是(shì)在軟件(jiàn)開(kāi)發過∞δ±程中逐步形成的(de), 從(cóng)需求分(fēn)析階段是(★¶shì)否真正的(de)了(le)解到(dào ±)了(le)客戶想要(yào)的(de)功能(néσ ng),到(dào)開(kāi)發階段是(s✔ hì)否增加了(le)足夠多(duō)的(de)自(z£$ì)動化(huà)測試保障,是(shì)→>↑π否寫了(le)足夠健壯的(de)産品代碼,到(dào)較後測試階段是(s♣ λπhì)否測試了(le)功能(néng)引入後整個(gè)系統的(de)可(kě≠ )用(yòng)性,不(bù)同用(yòng)戶路(lù)徑是(shì ♥$¶)否能(néng)正常工(gōng)作(zuò)等等,這(δ& zhè)些(xiē)都(dōu)是(shì)軟•β件(jiàn)質量的(de)組成部分(fē ≥n)。
可(kě)以看(kàn)得(de)出來(lái),在整個(↑∞ gè)過程中,軟件(jiàn)的(de)質量離(lí)不(bù)€δ✔開(kāi)敏捷團隊各種角色的(de)付出,其中有(y"∏ǒu)業(yè)務分(fēn)析人(rén)員(y€αuán)對(duì)需求的(de)準确把握,有(yǒu)開(α✘kāi)發人(rén)員(yuán)對(duì)産品代碼的(de)高(∞β>gāo)标準實現(xiàn),對(duì)←§↓自(zì)動化(huà)測試覆蓋率的(de¥∑)保障,還(hái)有(yǒu)QA在整個(gè)過程中∑>對(duì)質量相(xiàng)關活動的§Ω(de)實施和(hé)保障,包括需求分(fē←÷n)析階段從(cóng)QA的(de)視(shì)角對(duì)業(yè)務∑β的(de)補充,開(kāi)發階段對(duì)自(zì↔→")動化(huà)測試的(de)審查,以及∞¥←探索性測試可(kě)用(yòng)性測試等對™₩♥£(duì)産品質量的(de)進一(yī)步保障。
所以在敏捷測試中更多(duō)時(shí)候我們會(huì∏♠™↕)淡化(huà)角色的(de)概念,強調團隊人(rén)人(rén)都(dα±≥ōu)為(wèi)質量負責,這(zhè)樣更有(yǒu)助σ∏∏于團隊的(de)每一(yī)位成員(yuán)都(dōu)把↑∞質量作(zuò)為(wèi)非常重要(yào)的(de)一(yī)部₽↓&分(fēn),而不(bù)是(shì)依賴于某個(gè)人(rénΩ±γ)或者某個(gè)角色。
開(kāi)發可(kě)以寫測試,不(bù)≥$再需要(yào)QA了(le)
因為(wèi)敏捷團隊強調人(rén)人(rén)都(dōu)為(wèi) εε♣質量負責,開(kāi)發人(rén)員(yuán)會(♠©δhuì)采用(yòng)TDD等方式寫大(dà)量的(de)自(zì)§∏™動化(huà)測試,那(nà)麽是(shì)不(bù ©≤☆)是(shì)就(jiù)不(bù)需要(yào)QA了(le)?
對(duì)于這(zhè)個(gè)觀點,在社區(q> ū)有(yǒu)過很(hěn)多(duō)激烈的(de)討(tǎo)論,比如($ "≈rú)這(zhè)篇文(wén)章(zhāng)《我們需要γ<✔(yào)專職的(de)QA嗎(ma)?》就(jiù)曾經引起了(le¶φα☆)很(hěn)大(dà)的(de)争議(yì),其實個(gè)人(rén)認§為(wèi)這(zhè)篇文(wén)章(zhāng)裡(lǐ₽€ ∑)提到(dào)的(de)QA指的(de)π≠γγ是(shì)Tester,具體(tǐ)兩者的(de)區→✔α(qū)别可(kě)參考前面的(de)觀點Ω©×;抛開(kāi)這(zhè)個(gè),☆↔ 作(zuò)者的(de)某些(xiē)觀↔γ☆點其實是(shì)很(hěn)有(yǒu)價值的(de),比如(rú)作±π(zuò)者較後提到(dào)了(le)質量不(bù)是(shì)測☆≤出來(lái)的(de),要(yào)通(tōng)過軟件(jiàn)生(₹<shēng)命周期各個(gè)階段相(x♦'> iàng)關活動的(de)保障,而這(zhè)些(xγiē)活動都(dōu)離(lí)不(bù)開(kāi)QA₹★的(de)參與。
首先需求分(fēn)析階段,QA可(kě)以從(cóng)不(bù)$σ&σ同的(de)視(shì)角對(duì)于需求提出疑問(wèn) '♥&,補充,修改,因為(wèi)QA特有(yǒu♥✔)的(de)技(jì)術(shù)背景,對₩¶(duì)于軟件(jiàn)的(de)可(kě)用(yòng)性等♣有(yǒu)更深入的(de)理(lǐ)解,所以往往可•≤↑(kě)以提出不(bù)同于業(yè)務分(fēn)析師(shī)和(hé)開σ♦<(kāi)發人(rén)員(yuán)的(de)觀點;開(kāi)★∞發階段,QA也(yě)會(huì)審查開 (kāi)發人(rén)員(yuán)寫的(de)自(zì)動化(huà)©α測試,通(tōng)過QA的(de)專業(yè)測試££≤背景幫助開(kāi)發人(rén)員(yuá↕✘n)寫更有(yǒu)價值的(de)測試,≈↑>比如(rú)我們在項目中曾經發現(xiàn↓¶)開(kāi)發人(rén)員(yuán£♣)寫了(le)很(hěn)多(duō)沒有(yǒu)業(yè)務價值的(de)♦ ♠測試;測試階段,探索性測試,可(kě)用(yòng)性♦&測試,安全測試,性能(néng)測試等都≠•&(dōu)是(shì)QA們在做(zuò)的(de)事(shì)Ω情。
當然,如(rú)果業(yè)務分(fēn)析師(shī)從(cóng)各種✔'視(shì)角把業(yè)務分(fēn)析的(de)透徹完美¶ ↕(měi),開(kāi)發人(rén)員(yuán)♣可(kě)以寫非常有(yǒu)價值的(de)測試,也↔Ω£(yě)可(kě)以做(zuò)各種類型的(de)手φ±動測試,那(nà)麽去(qù)掉專職QA也(yě)不(bù)是(shì)不(שbù)可(kě)以,那(nà)樣的(de)話("∑←Ωhuà)不(bù)是(shì)不(bù)需要(£σ©yào)QA,而是(shì)人(rén)人(rén)都(→λ¶dōu)是(shì)QA。
結論
以上(shàng)列出來(lái)的(de)七點是(shì)剛剛接觸敏÷§π¥捷測試時(shí)很(hěn)容易進入的(de)誤區(qū),甚至有(♥↓♣∑yǒu)的(de)觀點在一(yī)些(xiē)已→₽₩經施行(xíng)敏捷很(hěn)長(chánα g)時(shí)間(jiān)的(de)團♥∞∏隊中仍然存在,這(zhè)些(xiē)觀點很(hěn)容α₽↔Ω易導緻敏捷測試走上(shàng)彎路(lù),以↔↑上(shàng)是(shì)結合實際項目βε經驗個(gè)人(rén)的(de)一(yī)些(xiē)思考,希望對(du≤₹π←ì)大(dà)家(jiā)有(yǒu)所幫助。