一切都是為了改變。
“當(dāng)源代碼被修改時(shí),我有哪些選擇來(lái)維護(hù)我現(xiàn)有的測(cè)試?” 這是我在與客戶(hù)交談時(shí)遇到的一個(gè)非常常見(jiàn)的問(wèn)題。
我的一些對(duì)話者指出他們必須重構(gòu)他們的軟件,其他一些人會(huì)談?wù)撝匦略O(shè)計(jì)的努力。
首先,我注意到這兩個(gè)與軟件更改相關(guān)的概念在人們的頭腦中并不總是很清楚,有時(shí)會(huì)在錯(cuò)誤的環(huán)境中使用。這些概念對(duì)您來(lái)說(shuō)可能非常清楚,但如果不是,這里有一些提示可以幫助您理解差異。
重新設(shè)計(jì)和重構(gòu)軟件有什么區(qū)別?
這些概念之間的主要區(qū)別在于:重新設(shè)計(jì)意味著您修改軟件以改變它的功能,而重構(gòu)則是努力修改它的工作方式。
出于多種原因進(jìn)行重新設(shè)計(jì)工作。例如,由于硬件更改,軟件需要在不同的 CPU 上運(yùn)行或必須處理新的外圍設(shè)備,因此需要修改或擴(kuò)展代碼以解決這些物理修改并提供新功能。當(dāng)軟件需要與新的或更新的 3 rd方庫(kù)交互時(shí),也可能發(fā)生重新設(shè)計(jì),這些庫(kù)提供了有益于您的應(yīng)用程序的新服務(wù)。您可能會(huì)找到許多其他重新設(shè)計(jì)的原因,但在大多數(shù)情況下,在此上下文中執(zhí)行的軟件更改會(huì)影響一般行為或修改后的應(yīng)用程序提供的功能。
與重新設(shè)計(jì)相反,重構(gòu)是努力優(yōu)化代碼的內(nèi)部實(shí)現(xiàn),以提高其可維護(hù)性并降低其總體運(yùn)營(yíng)成本。和許多人一樣,我相信 Martin Fowler 在他的“重構(gòu)書(shū)”中寫(xiě)了軟件重構(gòu)的最佳定義之一:
“對(duì)軟件的內(nèi)部結(jié)構(gòu)進(jìn)行了更改,使其更易于理解且修改成本更低,而不會(huì)改變其可觀察到的行為?!?/p>
鑒于此定義,重構(gòu)通常由開(kāi)發(fā)人員在以下情況下執(zhí)行:
需要將技術(shù)債務(wù)控制在可容忍的水平,即低于從頭開(kāi)始重新構(gòu)建整個(gè)代碼看起來(lái)更經(jīng)濟(jì)的線以下。
降低復(fù)雜性和內(nèi)部依賴(lài),使軟件更模塊化、更容易擴(kuò)展、對(duì)開(kāi)發(fā)團(tuán)隊(duì)中的新人更易讀和更易管理等。
確保隨著時(shí)間的推移,原始設(shè)計(jì)保持可理解和清晰,并保留其預(yù)期功能。..。..
鑒于我們現(xiàn)在對(duì)重新設(shè)計(jì)與重構(gòu)工作有了更清晰的了解,
哪些情況需要重新驗(yàn)證您的軟件?
好吧,軟件測(cè)試的本質(zhì)是它們主要檢查代碼是否符合其目的。換句話說(shuō),他們根據(jù)應(yīng)用程序的功能需求驗(yàn)證組成系統(tǒng)的每個(gè)軟件單元的行為是否符合預(yù)期。話雖如此,如果您嘗試重新設(shè)計(jì)代碼,則必須對(duì)其進(jìn)行測(cè)試以確保新功能已根據(jù)新引入的要求進(jìn)行驗(yàn)證,同時(shí)確保這些新擴(kuò)展不會(huì)在您現(xiàn)有的通過(guò)測(cè)試中引入回歸。
您可能會(huì)爭(zhēng)辯說(shuō),重構(gòu)工作只會(huì)影響軟件內(nèi)部結(jié)構(gòu),因此不一定會(huì)影響代碼接口和根據(jù)應(yīng)用程序需求交付的一般服務(wù)。是的,但是…… 像任何其他開(kāi)發(fā)活動(dòng)一樣,重構(gòu)是引入新錯(cuò)誤的一種非常簡(jiǎn)單的方法,因此您必須重新測(cè)試您的軟件。維護(hù)一組完整且詳盡的通過(guò)測(cè)試將確保您的重構(gòu)不會(huì)導(dǎo)致代碼中的回歸錯(cuò)誤未被檢測(cè)到。確實(shí),每當(dāng)您進(jìn)行小的更改時(shí),您都應(yīng)該重新執(zhí)行現(xiàn)有的測(cè)試作為安全網(wǎng),以檢查您沒(méi)有修改預(yù)期的行為。經(jīng)過(guò)一系列增量更改后,您將以安全的方式達(dá)到最初目標(biāo)的重構(gòu)狀態(tài)。
大多數(shù)組織希望通過(guò)在源代碼更改時(shí)更新這些測(cè)試來(lái)保留先前測(cè)試投資的價(jià)值。但這會(huì)導(dǎo)致高昂的測(cè)試維護(hù)成本。該解決方案并不像僅僅識(shí)別受代碼更改影響的受影響測(cè)試的子集以重新運(yùn)行(有時(shí)稱(chēng)為測(cè)試影響分析或基于更改的測(cè)試)那么簡(jiǎn)單。測(cè)試維護(hù)的昂貴部分是開(kāi)發(fā)人員花費(fèi)在識(shí)別依賴(lài)關(guān)系和更新相應(yīng)測(cè)試以確保它們與修改后的軟件同步的工作。
那么適當(dāng)?shù)臏y(cè)試自動(dòng)化如何降低這些測(cè)試維護(hù)成本呢?
1) 通過(guò) 對(duì)代碼變更和測(cè)試依賴(lài)的初步分析:
· 了解正在測(cè)試的代碼的更改(通過(guò)保留上次測(cè)試時(shí)的代碼信息并將其與更改的代碼進(jìn)行比較)
· 識(shí)別哪些測(cè)試受到代碼更改的影響
· 在單個(gè)視圖中識(shí)別影響測(cè)試的所有代碼更改
· 識(shí)別可能影響現(xiàn)有測(cè)試實(shí)現(xiàn)的代碼覆蓋率的代碼更改
2) 通過(guò)為開(kāi)發(fā)人員提供自動(dòng)測(cè)試更新的指導(dǎo)選擇,以便重新同步源代碼和測(cè)試:
? 對(duì)于每個(gè)代碼更改,建議對(duì)測(cè)試腳本和用例進(jìn)行適當(dāng)?shù)母?/p>
? 自動(dòng)重構(gòu)測(cè)試腳本以節(jié)省時(shí)間和成本
3) 對(duì)于主要影響軟件內(nèi)部結(jié)構(gòu)的代碼更改,自動(dòng)生成安全網(wǎng)或通過(guò)測(cè)試的基線,以便:
? 在回歸測(cè)試或持續(xù)集成期間查明故障
? 識(shí)別可測(cè)試性問(wèn)題,例如無(wú)法訪問(wèn)的代碼
作為專(zhuān)業(yè)的軟件供應(yīng)商,QA Systems 敏銳地意識(shí)到在軟件修改的情況下控制測(cè)試維護(hù)成本的重要性。為了解決這個(gè)問(wèn)題,我們開(kāi)發(fā)了作為我們的測(cè)試解決方案 Cantata的一部分,一個(gè)代碼更改分析和管理功能以及一個(gè)AutoTest生成框架,它們是在您的軟件項(xiàng)目的整個(gè)生命周期中自動(dòng)化單元和集成測(cè)試維護(hù)的獨(dú)特技術(shù)。當(dāng)您需要管理測(cè)試時(shí),重新設(shè)計(jì)或重構(gòu)您的軟件不再是(煩人的)問(wèn)題!
審核編輯:郭婷
-
cpu
+關(guān)注
關(guān)注
68文章
10902瀏覽量
213014 -
源代碼
+關(guān)注
關(guān)注
96文章
2946瀏覽量
66955
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論