小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

90%程序員寫(xiě)不出無(wú)BUG的二分查找程序

 liema2000 2008-12-16

90%程序員寫(xiě)不出無(wú)BUG的二分查找程序?

《編程珠璣》(第二版)一書(shū)第四章中提及過(guò)100多名專業(yè)程序員使用兩個(gè)小時(shí)的充足時(shí)間編寫(xiě)一個(gè)簡(jiǎn)單的二分查找程序,結(jié)果發(fā)現(xiàn)90%的人編出的代碼都有BUG,Knuth也在他的《Sorting and Searching》一書(shū)中提過(guò),第一個(gè)二分查找程序在1946年已經(jīng)公布,但是到了1962年才出現(xiàn)第一個(gè)沒(méi)有BUG的二分查找程序,期間經(jīng)歷了16年的時(shí)間。那么為什么一個(gè)簡(jiǎn)單的二分查找程序會(huì)這么容易出錯(cuò)呢?看一看有序表的查找的測(cè)試用例設(shè)計(jì)也許能明白為什么。

要對(duì)有序表查找進(jìn)行用例設(shè)計(jì),我們可以先分析輸入域,實(shí)際上有兩個(gè)輸入域,一個(gè)是要查找的數(shù)據(jù),另外一個(gè)是有序表,可以先對(duì)有序表數(shù)據(jù)的個(gè)數(shù)進(jìn)行分類,有序表中可能有01,23,個(gè)數(shù)據(jù)。因此我們可以將目標(biāo)數(shù)據(jù)分為以下幾個(gè)類:

 

完成第1級(jí)分類后,我們可以再對(duì)數(shù)據(jù)的特點(diǎn)進(jìn)行分類,因?yàn)橛行虮硎且粋€(gè)有順序的表,是有大小順序的,因此可以根據(jù)數(shù)據(jù)特點(diǎn)再進(jìn)行分類,以3個(gè)數(shù)據(jù)為例可以進(jìn)行以下分類:

有序表有0、12、4個(gè)以上數(shù)據(jù)的情況都可以按照以上的類似的方式進(jìn)行再分類。

當(dāng)按有序表中分類好后,可以再按要查找的數(shù)據(jù)進(jìn)行分類

當(dāng)對(duì)查找的數(shù)據(jù)和有序表分別分好類后,就可以把這兩種分類組合起來(lái),比如將有序表有3個(gè)數(shù)據(jù)的分類情況和查找數(shù)據(jù)的分類情況組合起來(lái)就可以得到以下的分類:

 

組合完后,還需要將一些不可能或不需要的組合刪除掉,比如在3個(gè)數(shù)據(jù)都相等的情況下,查找數(shù)據(jù)介于集合兩個(gè)相鄰數(shù)據(jù)之間的情況就不存在,需要?jiǎng)h除掉這種情況,查找數(shù)據(jù)在有序表中的3種分類也由于集合中數(shù)據(jù)都相等而變成了一個(gè)分類,下圖便是3個(gè)數(shù)據(jù)都相等情況下的一個(gè)分類:

這樣7個(gè)最終分類減少到只有4個(gè)最終分類,查找數(shù)據(jù)為空的情況并不是所有情況下都需要測(cè)試的,其實(shí)只要測(cè)試有序表中有數(shù)據(jù)和沒(méi)有數(shù)據(jù)兩種情況就夠了,因此查找數(shù)據(jù)為空的情況如果在其他情況中有了分類,那么也可以將其刪去,這樣3個(gè)數(shù)據(jù)都相等的情況就只有3個(gè)最終分類,如下圖所示:

有序表有0個(gè)數(shù)據(jù)時(shí)可以所見(jiàn)成測(cè)試兩種情況,一種是查找的數(shù)據(jù)為空,一種是查找的數(shù)據(jù)不為空。

有序表中有1個(gè)數(shù)據(jù)時(shí)的分類可以縮減成以下3種分類情況:

 

有序表中有2個(gè)數(shù)據(jù)的分類可以縮減成以下8種分類:

這樣一來(lái),即使不考慮4個(gè)以上數(shù)據(jù)以及3個(gè)數(shù)據(jù)在有兩個(gè)數(shù)據(jù)相等情況下的分類,總共的最終分類也有20多種,每種分類至少需要設(shè)計(jì)一個(gè)測(cè)試用例,總共至少需要20多個(gè)測(cè)試用例,一個(gè)簡(jiǎn)單的二分查找的測(cè)試用例都至少需要20多個(gè),看到這里大家也許會(huì)明白為什么90%的專業(yè)程序員寫(xiě)不出一個(gè)無(wú)BUG的二分查找程序來(lái)。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多