優(yōu)化軟件質(zhì)量單元測(cè)試和自動(dòng)化
單位測(cè)試 是第一道防線,這一層級(jí)的保護(hù)至關(guān)重要,因?yàn)樗鼮橄铝袦y(cè)試過程奠定了基礎(chǔ):集成測(cè)試、驗(yàn)收測(cè)試,最后是手動(dòng)測(cè)試,包括探索性測(cè)試。
在本文中,我將介紹單元測(cè)試與其他方法的區(qū)別,并將提供不進(jìn)行單元測(cè)試時(shí)我們能夠或不能夠做到的例子。我們還會(huì)談到?自動(dòng)化測(cè)試 ,這對(duì)確保代碼的可靠性和質(zhì)量起著重要作用。
單位測(cè)試
單元測(cè)試的思想是為每個(gè)不重要的功能或方法編寫測(cè)試。這使它能夠快速檢查最近的代碼更改是否造成了回歸,這意味著已經(jīng)測(cè)試過的程序的一些部分出現(xiàn)了錯(cuò)誤,這也使檢測(cè)和修復(fù)這些錯(cuò)誤變得更加容易。
當(dāng)單元測(cè)試過多時(shí)
任何沒有適當(dāng)測(cè)試覆蓋的長(zhǎng)期項(xiàng)目遲早會(huì)被重新編寫。單元測(cè)試對(duì)于大多數(shù)項(xiàng)目來說是必不可少的,但也有可能忽略這一步驟的情況。例如,您正在為演示目的創(chuàng)建一個(gè)項(xiàng)目。時(shí)間安排很難。您的系統(tǒng)是硬件和軟件的組合,在項(xiàng)目開始時(shí),還不完全清楚最終產(chǎn)品的樣子。軟件將在展覽或展示期間運(yùn)行1-2天。在這種情況下,沒有必要實(shí)現(xiàn)單元測(cè)試。
另一個(gè)例子是當(dāng)你在一個(gè)廣告網(wǎng)站,或簡(jiǎn)單的閃存游戲,或旗幟,涉及復(fù)雜的布局,動(dòng)畫和大量靜態(tài)內(nèi)容。以上所有內(nèi)容均適用于介紹。
如果您正在構(gòu)建一個(gè)簡(jiǎn)單的名片網(wǎng)站,網(wǎng)站上有一套靜態(tài)HTML頁(yè)面和單一的電子郵件提交表格,不需要單元測(cè)試。客戶很可能對(duì)這個(gè)滿意,不再需要任何東西了。最有可能的是,手動(dòng)檢查和測(cè)試所有東西會(huì)更快。
單元測(cè)試實(shí)施
在計(jì)劃單元測(cè)試時(shí),記住您的目標(biāo)是確保您的單元測(cè)試代碼覆蓋率超過80%。這意味著在運(yùn)行單元測(cè)試時(shí)至少執(zhí)行80%的代碼庫(kù)。因此,要開始將單元測(cè)試整合到您的開發(fā)過程中,請(qǐng)嘗試通過下面的步驟。
1.選擇合適的測(cè)試架構(gòu)
選擇一個(gè)適合你需要的框架,而不是重新設(shè)計(jì)車輪。例如,許多?.網(wǎng) 開發(fā)人員使用MSTST是因?yàn)樗鼛в锌梢暬ぷ魇?但是N單元或X單元可能為您的項(xiàng)目提供更好的功能。
2.決定測(cè)試什么
并非所有代碼都需要測(cè)試。簡(jiǎn)單的、無依賴性的代碼可能不需要測(cè)試,而具有許多依賴性的復(fù)雜代碼可能在測(cè)試前受益于重構(gòu)。重點(diǎn)測(cè)試復(fù)雜的、算法代碼和相互依存的組件,以確保清晰的交互和集成。
3.保持測(cè)試結(jié)構(gòu)的一致性
使用"安排"、"行動(dòng)"、"斷言"模式來實(shí)現(xiàn)清晰性和可維護(hù)性。
4.一次測(cè)試一件事
每個(gè)測(cè)試只需驗(yàn)證代碼的一個(gè)方面。對(duì)于復(fù)雜的過程,將它們分成較小的部分并分別測(cè)試。
5.用假貨處理依賴關(guān)系
用假實(shí)現(xiàn)替換真實(shí)的依賴關(guān)系,以避免測(cè)試不必要的組件。使用存根進(jìn)行預(yù)先定義的響應(yīng)和模擬以驗(yàn)證交互。
6.使用隔離框架
使用現(xiàn)有的框架,比如Moq或犀牛嘲笑來創(chuàng)建嘲笑和存根,而不是編寫自己的。這減少了錯(cuò)誤和維護(hù)開銷。
7.可測(cè)試性設(shè)計(jì)
最初編寫代碼時(shí)要考慮到可測(cè)試性。使用依賴項(xiàng)注入,避免在方法中直接實(shí)例化對(duì)象,并盡量減少使用靜態(tài)方法和邏輯構(gòu)造函數(shù)。
8.重構(gòu)遺留代碼
如果處理不可測(cè)試的遺留代碼,從重構(gòu)小的、可管理的部分開始,并在編寫單元測(cè)試之前用集成和驗(yàn)收測(cè)試來覆蓋它們。逐步將這一過程擴(kuò)大到代碼庫(kù)的更大部分。
自動(dòng)化測(cè)試
這個(gè)方法的名稱是不言而喻的:在自動(dòng)化測(cè)試中,測(cè)試用例是自動(dòng)執(zhí)行的。它發(fā)生的速度比手動(dòng)測(cè)試快得多,甚至可以在夜間進(jìn)行,因?yàn)檎麄€(gè)過程最少需要人為干擾。當(dāng)你需要快速的反饋時(shí),這種方法是絕對(duì)改變游戲的。然而,與任何自動(dòng)化一樣,在最初的設(shè)置階段,它可能需要大量的時(shí)間和財(cái)政資源。盡管如此,它完全值得使用,因?yàn)樗鼘⑹拐麄€(gè)過程更加高效,代碼更加可靠。
自動(dòng)化測(cè)試實(shí)施
這里的第一步是了解項(xiàng)目是否包含測(cè)試自動(dòng)化。您需要確保項(xiàng)目有一個(gè)健壯的測(cè)試自動(dòng)化框架。反過來,自動(dòng)化工程師應(yīng)精通工具棧(例如:遵守既定的自動(dòng)化準(zhǔn)則。
1.與手動(dòng)測(cè)試相比的自動(dòng)化覆蓋率
努力使高比例的測(cè)試用例實(shí)現(xiàn)自動(dòng)化,最好超過90%,以最大限度地提高效率,減少對(duì)手動(dòng)測(cè)試的依賴。
2.項(xiàng)目概覽和自動(dòng)化實(shí)施
自動(dòng)化測(cè)試一直是一個(gè)大型項(xiàng)目,涉及多個(gè)團(tuán)隊(duì)開發(fā)共享產(chǎn)品,每個(gè)團(tuán)隊(duì)中都有手動(dòng)質(zhì)量保證測(cè)試人員。測(cè)試集中在前端和后端方面。
3.了解項(xiàng)目
首先,我們需要了解產(chǎn)品的目的和用戶。這有助于確定自動(dòng)化工作的優(yōu)先次序。例如,如果產(chǎn)品是為企業(yè)服務(wù)的,那么就把重點(diǎn)放在測(cè)試法律合規(guī)性和支付交易上。對(duì)于面向消費(fèi)者的產(chǎn)品,優(yōu)先考慮關(guān)鍵操作,如卡到卡轉(zhuǎn)移和服務(wù)支付。自動(dòng)化應(yīng)全面應(yīng)用于整個(gè)產(chǎn)品,而不僅僅是單個(gè)團(tuán)隊(duì)。
4.確定主要利益攸關(guān)方
熟悉所有利益相關(guān)者是至關(guān)重要的,因?yàn)榕c他們的互動(dòng)是必要的。主要人員包括:
· 產(chǎn)品所有者 :他們是自動(dòng)化的客戶,并確定其要求。
· 質(zhì)量保證工程師 :他們是自動(dòng)化工具的最終用戶,他們的滿意程度是成功的衡量標(biāo)準(zhǔn)。
· 手動(dòng)測(cè)試引線 :他們幫助組織過程,并協(xié)調(diào)手動(dòng)測(cè)試。
· 前沿發(fā)展領(lǐng)導(dǎo) :它們影響自動(dòng)化測(cè)試的穩(wěn)定性和質(zhì)量。
· 采購(gòu)專家 :他們處理硬件分配,主要是服務(wù)器設(shè)備。
5.諒解小組
收集關(guān)于每個(gè)團(tuán)隊(duì)的項(xiàng)目范圍的信息,無論它包括前置、后端還是兩者。了解質(zhì)量保證團(tuán)隊(duì)如何測(cè)試他們的部門和他們對(duì)自動(dòng)化的熟悉程度。確定測(cè)試挑戰(zhàn)和自動(dòng)化領(lǐng)域的優(yōu)先次序。
6.制定自動(dòng)化要求
在大多數(shù)情況下,我們的目標(biāo)是采取一種沒有創(chuàng)新解決辦法的經(jīng)典辦法:
· 編程語(yǔ)言 :為聘用專家提供便利
· 前置測(cè)試
· 后端測(cè)試 :使用?安全的 休息時(shí)的互動(dòng)。
· 數(shù)據(jù)庫(kù)測(cè)試 :用于標(biāo)準(zhǔn)的Java圖書館
· 自動(dòng)化測(cè)試 :為培訓(xùn)手冊(cè)質(zhì)量保證測(cè)試人員和降低成本選擇黃瓜。
· 報(bào)告 :最后,但并非最不重要的是,使用吸引力的和信息豐富的報(bào)告。
7.演示和登機(jī)
為所有的利益相關(guān)者,包括產(chǎn)品所有者,質(zhì)量保證工程師,開發(fā)人員和分析師進(jìn)行演示,重點(diǎn)是清晰度。從前端團(tuán)隊(duì)開始創(chuàng)建可見的結(jié)果。開發(fā)5-10個(gè)自動(dòng)化測(cè)試,記錄它們,并使用圖解顯示結(jié)果。說明了自動(dòng)化基礎(chǔ)設(shè)施、主要目標(biāo)和效果,并比較了手動(dòng)和自動(dòng)化測(cè)試.
8.為自動(dòng)化準(zhǔn)備用戶界面
為確??煽亢头€(wěn)定的自動(dòng)測(cè)試,增加"data-test-id 在前端領(lǐng)導(dǎo)和產(chǎn)品所有者的合作下,集中屬性到UI元素。這一實(shí)踐大大提高了測(cè)試的可靠性,因?yàn)樗箿y(cè)試不受UI元素位置或內(nèi)容的改變的影響。
9.開發(fā)自動(dòng)化測(cè)試
在自動(dòng)化測(cè)試人員之間分配任務(wù)。使用模板創(chuàng)建自動(dòng)化項(xiàng)目框架。準(zhǔn)備步驟進(jìn)行正面測(cè)試,使這些步驟可在各個(gè)項(xiàng)目中重復(fù)使用,并設(shè)置了月球和詹金斯。通過建立存儲(chǔ)庫(kù),創(chuàng)建詹金斯工作,以及在GIT和開發(fā)環(huán)境中培訓(xùn)質(zhì)量保證,將團(tuán)隊(duì)整合到自動(dòng)化中。
然后,質(zhì)量保證手動(dòng)測(cè)試人員將編寫他們的自動(dòng)化測(cè)試,由自動(dòng)化工程師進(jìn)行審查和集成。最后的步驟開發(fā)將發(fā)生在業(yè)余時(shí)間的短跑。在每個(gè)沖刺結(jié)束時(shí),展示結(jié)果并在產(chǎn)品演示中宣布新的功能。
結(jié)論
如您所見,單元測(cè)試和自動(dòng)化測(cè)試是相輔相成的。通過每天使用它們來識(shí)別缺陷,可以減少每個(gè)階段的回歸測(cè)試時(shí)間。此外,這將逐步導(dǎo)致產(chǎn)品更快地投入生產(chǎn),從而節(jié)省時(shí)間和資源。