溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

web開發(fā)中測(cè)試是不是一件浪費(fèi)時(shí)間的事

發(fā)布時(shí)間:2021-09-18 09:17:10 來源:億速云 閱讀:107 作者:柒染 欄目:web開發(fā)

本篇文章為大家展示了測(cè)試是一件浪費(fèi)時(shí)間的事,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

讓我們?cè)敿?xì)地說明

作為開發(fā)人員,我們都知道我們應(yīng)該測(cè)試我們的代碼。我們應(yīng)該寫單元測(cè)試,但這也通常是我們發(fā)現(xiàn)沒時(shí)間時(shí)跳過的***步。

作為團(tuán)隊(duì)的***或者管理者我們都知道測(cè)試是必要的,但是當(dāng)截止日期臨近的時(shí)候,我們傾向于減少測(cè)試,而把更多的重點(diǎn)放到編碼上。

這樣看測(cè)試領(lǐng)域似乎很緊張。我們都知道測(cè)試對(duì)我們是有利的,但是一旦項(xiàng)目面臨壓力時(shí)我們就不再測(cè)試了。

web開發(fā)中測(cè)試是不是一件浪費(fèi)時(shí)間的事

我們?yōu)槭裁礈y(cè)試?

Edsger W Dijkstra 說過:測(cè)試可以用來找到顯式的缺陷(bug),但是無法顯示潛伏的軟件缺陷(bug)。

這意味著測(cè)試不能***保證你的軟件沒有缺陷(bug),但是它確實(shí)很有幫助。我們也可以換種說法,如果我們不進(jìn)行測(cè)試我們幾乎可以***保證我們 的軟件會(huì)有缺陷(bug),除非我們是在編寫像“hello  world!”那樣簡(jiǎn)單的程序。但是即使這么簡(jiǎn)單的程序你也會(huì)測(cè)試,因?yàn)橐坏┠爿斎胪昴愕拇a你就會(huì)很好奇它的輸出是不是真的是“hello  world!”。

而這就是***類形式的測(cè)試,也是我們一直在做的: 手工測(cè)試. 我們編寫程序,然后啟動(dòng)它去檢驗(yàn)運(yùn)行結(jié)果。 對(duì)于一個(gè)簡(jiǎn)單的“hello  world”這可能是足夠的,但是對(duì)于復(fù)雜度更高的程序這可能會(huì)導(dǎo)致時(shí)間的浪費(fèi),這是對(duì)一個(gè)已知的行為結(jié)果集的手工重復(fù)。這難道不是我們發(fā)明計(jì)算機(jī)的初衷 嗎?

對(duì)于“hello  world”這不是大問題,但是當(dāng)你創(chuàng)建一個(gè)web應(yīng)用時(shí),測(cè)試場(chǎng)景是在翻頁十次,點(diǎn)擊某些按鈕,在大量表單中輸入(正確的)數(shù)據(jù)之后再測(cè)試某些特定條 件,你就看到自動(dòng)化會(huì)節(jié)省大量的時(shí)間。如果你能通過測(cè)試運(yùn)行器(test  runner)直接執(zhí)行你想要測(cè)試的函數(shù),而不是必須花費(fèi)半分鐘手工執(zhí)行到那個(gè)函數(shù),你會(huì)節(jié)省很多時(shí)間!

但這也意味著我們需要多一點(diǎn)點(diǎn)編程,而更多的編程意味著更多的時(shí)間和精力。所以它會(huì)花費(fèi)更多的時(shí)間而你的項(xiàng)目可能因此完工的晚些。

也許未必

讓我們創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序來計(jì)算***公約數(shù)(GCD)的兩個(gè)整數(shù)。有很多方法可以解決這個(gè)問題,但為簡(jiǎn)單起見,我們將

1.輸入兩個(gè)整數(shù)

2.不管其算法怎么樣,計(jì)算一下 GCD

3.顯示輸出

讓我們?yōu)g覽一下正常的開發(fā)周期。我們通常寫一個(gè) main() 函數(shù),得到了兩個(gè)整數(shù),以及調(diào)用一個(gè)函數(shù)來計(jì)算一下 GCD,然后顯示結(jié)果。

測(cè)試。在你的控制臺(tái)中輸入 2  個(gè)整數(shù)會(huì)花一些時(shí)間,這將變得相當(dāng)無聊,如果你需要多次重復(fù)你的代碼。這也很容易在控制臺(tái)應(yīng)用程序中輸入出錯(cuò),導(dǎo)致程序崩潰。這意味著你必須重新啟動(dòng)程 序,輸入兩位數(shù),然后再次驗(yàn)證結(jié)果。請(qǐng)你要記住,我們討論的是一個(gè)控制臺(tái)應(yīng)用程序,只需要兩個(gè)輸入值,不需要點(diǎn)擊(在 web  應(yīng)用程序中),我們已經(jīng)看到,這將需要花費(fèi)一些時(shí)間。

然后,我們很可能會(huì)想要測(cè)試一些更多意味著重啟程序的值,進(jìn)入兩位數(shù)(正確地),然后測(cè)試。。。所以我們即使看到也不會(huì)立即這樣做,因?yàn)樗ㄙM(fèi)太多的時(shí)間。Edge 案例將會(huì)被遺忘,錯(cuò)誤只會(huì)在生產(chǎn)中被發(fā)現(xiàn)!

此外,當(dāng)我們改變一些我們需要再次運(yùn)行所有的測(cè)試(手動(dòng)),使用一個(gè)被遺忘的,或者使用快捷鍵的高風(fēng)險(xiǎn)的測(cè)試。

在那兒,不會(huì)有跟蹤我們的測(cè)試工作。不寫入日志文件,在整個(gè)測(cè)試期間,除非你增加這個(gè)你做的事情列表工作(手動(dòng))。

消極反饋循環(huán)

通常,當(dāng)項(xiàng)目(因?yàn)槟撤N原因)延期了,則容易陷入一種消極反饋循環(huán)。有時(shí)我們會(huì)先決定跳過編寫測(cè)試代碼,而這則會(huì)造成情況如下圖所示:

web開發(fā)中測(cè)試是不是一件浪費(fèi)時(shí)間的事

項(xiàng)目延期,造成我們不得不去編寫更多的代碼。所以與其“浪費(fèi)時(shí)間”去不停地測(cè)試代碼,不如不停地去開發(fā)項(xiàng)目。而這樣做的結(jié)果就是代碼質(zhì)量進(jìn)一步下 降,并最終(或早或晚)導(dǎo)致返工。返工又通常會(huì)在最有限的時(shí)間里變得十分緊急(有些人叫這種現(xiàn)象為“墨菲是個(gè)樂天派!”)。其實(shí)返工什么也改變不了,項(xiàng)目 現(xiàn)在只會(huì)進(jìn)一步被延遲。很奇怪吧,我們編寫越多的代碼,我們的項(xiàng)目完工越晚。一種常用應(yīng)對(duì)措施是讓更多的開發(fā)人員被參與到項(xiàng)目的研發(fā)中,然而這樣的作用也 只是加劇消極反饋循環(huán)而已。

若項(xiàng)目缺乏測(cè)試,在驗(yàn)收和生產(chǎn)環(huán)境時(shí),通常用戶則會(huì)發(fā)現(xiàn)許多  bug,這將會(huì)快速地降低用戶對(duì)項(xiàng)目的信任度,從而產(chǎn)生消極反饋。這種反饋傳遞給(工作過度的)開發(fā)人員,就造成開發(fā)人員“疲勞”現(xiàn)象。后果就是開發(fā)人員 工作積極性下降,開發(fā)人員離職,……,項(xiàng)目又進(jìn)一步延遲了。

打破消極循環(huán)

我想你已經(jīng)想到有一個(gè)辦法可以解決這種現(xiàn)象。讓我們來繪制一幅不同的場(chǎng)景:

web開發(fā)中測(cè)試是不是一件浪費(fèi)時(shí)間的事

我們可以從一個(gè)理想計(jì)劃“項(xiàng)目按時(shí)完工”開始。我們開發(fā)代碼,然后立即測(cè)試它。測(cè)試***是自動(dòng)化(編碼實(shí)現(xiàn))的,這樣我們可以輕松有效的去執(zhí)行它 們。我們把開發(fā)和測(cè)試緊密的結(jié)合在一起,每個(gè)開發(fā)測(cè)試循環(huán)可以很快速的執(zhí)行。當(dāng)一個(gè)開發(fā)測(cè)試循環(huán)結(jié)束時(shí)我們有信心保證代碼質(zhì)量是很高的,因?yàn)樗呀?jīng)通過了 測(cè)試。而且用戶因?yàn)榘l(fā)現(xiàn)缺陷(bug)的數(shù)目變少而對(duì)我們繼續(xù)高度信任。即使他們發(fā)現(xiàn)了一個(gè)缺陷(這依然是有可能的),我們也可以擴(kuò)充我們的測(cè)試集合,去 避免相關(guān)缺陷的重現(xiàn)。

如此下去,返工將不再是必須的,項(xiàng)目得有繼續(xù)。

如果我們的項(xiàng)目已經(jīng)延期了,就需要我們花些時(shí)間來采用這種方法論。對(duì)新功能的凍結(jié)也許是必須的。停止開發(fā)新的代碼,取而代之去為最嚴(yán)重的(惱人的-清晰的-高代價(jià)的)缺陷編寫測(cè)試。

項(xiàng)目延期的情況下再去為你完整的代碼庫編寫測(cè)試是不可行的,只針對(duì)其中的一些部分就可以,不要去浪費(fèi)你的時(shí)間。但是要記住其它部分也還是需要編寫測(cè) 試的。我在這種情況下會(huì)去找出最嚴(yán)重的問題(劃分優(yōu)先級(jí)),然后為它們編寫測(cè)試。之后“快速”修改代碼就會(huì)變的更容易,并且可以保證在修改其他部分是它不 會(huì)出錯(cuò)。自動(dòng)化測(cè)試可以很頻繁的執(zhí)行,從而降低了缺陷(bug)重現(xiàn)的風(fēng)險(xiǎn)。好了,現(xiàn)在可以開始去有效的強(qiáng)健我們項(xiàng)目了

上面這些通常會(huì)要求進(jìn)行代碼重構(gòu),從而使它可測(cè)試化。

大部分的項(xiàng)目中,會(huì)考慮測(cè)試和編碼之間的平衡。不過我希望大家都能清楚,測(cè)試其實(shí)是項(xiàng)目的加速器,而不是在浪費(fèi)時(shí)間。

上述內(nèi)容就是測(cè)試是一件浪費(fèi)時(shí)間的事,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI