白盒測(cè)試詳細(xì)總結(jié)

白盒測(cè)試基本要求

  • 保證一個(gè)模塊中的所有獨(dú)立路徑至少被執(zhí)行一次;
  • 對(duì)所有的邏輯值均需要測(cè)試真俏竞、假兩個(gè)分支至非;
  • 在上下邊界及可操作范圍內(nèi)運(yùn)行所有循環(huán);
  • 檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性勾怒。

測(cè)試覆蓋標(biāo)準(zhǔn)

  1. 語(yǔ)句覆蓋:是一個(gè)比較弱的測(cè)試標(biāo)準(zhǔn)婆排,它的含義是:選擇足夠的測(cè)試用例,使得程序中每個(gè)語(yǔ)句至少都能被執(zhí)行一次笔链。
  • 它是最弱的邏輯覆蓋段只,效果有限,必須與其它方法交互使用鉴扫。
  1. 判定覆蓋(也稱為分支覆蓋):執(zhí)行足夠的測(cè)試用例赞枕,使得程序中的每一個(gè)分支至少都通過(guò)一次
  • 判定覆蓋只比語(yǔ)句覆蓋稍強(qiáng)一些坪创,但實(shí)際效果表明炕婶,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯(cuò)誤莱预。因此柠掂,還需要更強(qiáng)的邏輯覆蓋準(zhǔn)則去檢驗(yàn)判斷內(nèi)部條件。
  1. 條件覆蓋:執(zhí)行足夠的測(cè)試用例依沮,使程序中每個(gè)判斷的每個(gè)條件的每個(gè)可能取值至少執(zhí)行一次涯贞。
  • 條件覆蓋深入到判定中的每個(gè)條件,但可能不能滿足判定覆蓋的要求悉抵。
  1. 判定/條件覆蓋:執(zhí)行足夠的測(cè)試用例肩狂,使得判定中每個(gè)條件取到各種可能的值,并使每個(gè)判定取到各種可能的結(jié)果姥饰。
  2. 條件組合覆蓋:執(zhí)行足夠的例子傻谁,使得每個(gè)判定中條件的各種可能組合都至少出現(xiàn)一次
  • 這是一種相當(dāng)強(qiáng)的覆蓋準(zhǔn)則列粪,可以有效地檢
    查各種可能的條件取值的組合是否正確审磁。
  • 它不但可覆蓋所有條件的可能取值的組合,還可覆蓋所有判斷的可取分支岂座,但可能有的路徑會(huì)遺漏掉态蒂。
  • 測(cè)試還不完全。

主要方法

  1. 邏輯驅(qū)動(dòng)測(cè)試
  • 語(yǔ)句覆蓋
  • 判定覆蓋
  • 條件覆蓋
  • 判定/條件覆蓋
  • 條件組合覆蓋
  1. 路徑測(cè)試
  • 路徑測(cè)試就是設(shè)計(jì)足夠多的測(cè)試用例费什,覆蓋被測(cè)試對(duì)象中的所有可能路徑钾恢。這是最強(qiáng)的覆蓋準(zhǔn)則。
  • 基本路徑測(cè)試:設(shè)計(jì)足夠多的測(cè)試用例,運(yùn)行所測(cè)程序瘩蚪,要覆蓋程序中所有可能的路徑泉懦。但在路徑數(shù)目很大時(shí),真正做到完全覆蓋是很困難的疹瘦,必須把覆蓋路徑數(shù)目壓縮到一定限度崩哩。例如程序中的循環(huán)體只執(zhí)行一次。

語(yǔ)句覆蓋

例1:

PROCEDURE  M(VAR A言沐,B邓嘹,X:REAL);  
BEGIN 
IF ((A>1) AND (B=0))  THEN X:=X/A险胰; 
IF ((A=2) OR (X>1))   THEN X:=X+1汹押; 
END.
流程圖

為使程序中每個(gè)語(yǔ)句至少執(zhí)行一次,只需設(shè)計(jì)一個(gè)能通過(guò)路徑ace的例子就可以了鸯乃,例如選擇輸入數(shù)據(jù)為: A=2鲸阻,B=0,X=3
從上例可看出缨睡,語(yǔ)句覆蓋實(shí)際上是很弱的鸟悴,如果第一個(gè)條件語(yǔ)句中的AND錯(cuò)誤地編寫成OR,上面的測(cè)試用例是不能發(fā)現(xiàn)這個(gè)錯(cuò)誤的奖年;又如第三個(gè)條件語(yǔ)句中X>1誤寫成X>0细诸,這個(gè)測(cè)試用例也不能暴露它,此外陋守,沿著路徑abd執(zhí)行時(shí)震贵,X的值應(yīng)該保持不變,如果這一方面有錯(cuò)誤水评,上述測(cè)試數(shù)據(jù)也不能發(fā)現(xiàn)它們猩系。

例2:

void  DoWork(int x,int y,int z)
{  int  k=0,j=0;
   if((x>3)&&(z<10))
   {  k=x*y-1;     //語(yǔ)句塊1
      j=sqrt(k);
   }
   if((x= =4)||(y>5))
   {  j=x*y+10;   //語(yǔ)句塊2
   }
   j=j%3;             //語(yǔ)句塊3
}

流程圖

為了測(cè)試語(yǔ)句覆蓋率只要設(shè)計(jì)一個(gè)測(cè)試用例就可以把三個(gè)執(zhí)行語(yǔ)句塊中的語(yǔ)句覆蓋了。測(cè)試用例輸入為:x=4中燥、y=5寇甸、z=5,程序執(zhí)行的路徑是:abd
該測(cè)試用例雖然覆蓋了可執(zhí)行語(yǔ)句疗涉,但并不能檢查判斷邏輯是否有問(wèn)題拿霉,例如在第一個(gè)判斷中把&&錯(cuò)誤的寫成了||,則上面的測(cè)試用例仍可以覆蓋所有的執(zhí)行語(yǔ)句咱扣。

判定覆蓋

例1:
如果設(shè)計(jì)兩個(gè)例子绽淘,使它們能通過(guò)路徑ace和abd,或者通過(guò)路徑acd和abe闹伪,就可達(dá)到“判定覆蓋”標(biāo)準(zhǔn)沪铭,為此壮池,可以選擇輸入數(shù)據(jù)為:
① A=3,B=0伦意,X=1(沿路徑acd執(zhí)行)
② A=2火窒,B=1,X=3(沿路徑abe執(zhí)行)
例2:
如果設(shè)計(jì)兩個(gè)測(cè)試用例則可以滿足條件覆蓋的要求驮肉。測(cè)試用例的輸入為:
x=4、y=5已骇、z=5【a b d】
x=2离钝、y=5、z=5【a c e】
上面的兩個(gè)測(cè)試用例雖然能夠滿足條件覆蓋的要求褪储,但是也不能對(duì)判斷條件進(jìn)行檢查卵渴,例如把第二個(gè)條件y>5錯(cuò)誤的寫成y<5,、上面的測(cè)試用例同樣滿足了分支覆蓋鲤竹。
注意:程序中含有判定的語(yǔ)句包括IF-THEN-ELSE浪读、DO-WHILE、REPEAT-UNTIL等辛藻,除了雙值的判定語(yǔ)句外碘橘,還有多值的判定語(yǔ)句,如PASCAL中的CASE語(yǔ)句吱肌、FORTRAN中帶有三個(gè)分支的IF語(yǔ)句等痘拆。所以“分支覆蓋”更一般的含義是:使得每一個(gè)分支獲得每一種可能的結(jié)果

條件覆蓋

一個(gè)判定中往往包含了若干個(gè)條件氮墨,如例1的程序中纺蛆,判定 (A>1) AND (B=0)包含了兩個(gè)條件: A>1以及 B=0,所以可引進(jìn)一個(gè)更強(qiáng)的覆蓋標(biāo)準(zhǔn)——“條件覆蓋”规揪。

  • 例1的程序有四個(gè)條件:
    A>1桥氏、 B=0、A=2猛铅、X>1
    為了達(dá)到“條件覆蓋”標(biāo)準(zhǔn)字支,需要執(zhí)行足夠的測(cè)試用例使得在a點(diǎn)有: A>1、A≤1奕坟、B=0祥款、B≠0 等各種結(jié)果出現(xiàn),以及在b點(diǎn)有: A=2月杉、A≠2刃跛、X>1、X≤1 等各種結(jié)果出現(xiàn)苛萎。
    現(xiàn)在只需設(shè)計(jì)以下兩個(gè)測(cè)試用例就可滿足這一標(biāo)準(zhǔn):
    ① A=2桨昙,B=0检号,X=4 (沿路徑ace執(zhí)行)
    ② A=1,B=1蛙酪,X=1 (沿路徑abd執(zhí)行)

  • 對(duì)例2中的所有條件取值加以標(biāo)記齐苛。

  • 對(duì)于第一個(gè)判斷:
    條件x>3 取真值為T1,取假值為-T1
    條件z<10 取真值為T2桂塞,取假值為-T2

  • 對(duì)于第二個(gè)判斷:
    條件x=4 取真值為T3凹蜂,取假值為-T3
    條件y>5 取真值為T4,取假值為-T4

  • 則可以設(shè)計(jì)測(cè)試用例如下


    條件覆蓋測(cè)試用例

    注意:

  • “條件覆蓋”通常比“分支覆蓋”強(qiáng)阁危,因?yàn)樗挂粋€(gè)判定中的每一個(gè)條件都取到了兩個(gè)不同的結(jié)果玛痊,而判定覆蓋則不保證這一點(diǎn)。

  • “條件覆蓋”并不包含“分支覆蓋”狂打,如對(duì)語(yǔ)句IF(A AND B)THEN S 設(shè)計(jì)測(cè)試用例使其滿足"條件覆蓋",即使A為真并使B為假,以及使A為假而且B為真,但是它們都未能使語(yǔ)句S得以執(zhí)行擂煞。

如對(duì)例2設(shè)計(jì)了下面的測(cè)試用例,則雖然滿足了條件覆蓋趴乡,但只覆蓋了第一個(gè)條件的取假分支和第二個(gè)條件的取真分支对省,不滿足分支覆蓋的要求。


測(cè)試用例

分支(判定)/條件覆蓋

針對(duì)上面的問(wèn)題引出了另一種覆蓋標(biāo)準(zhǔn)——“分支(判定)/條件覆蓋”晾捏,它的含義是:執(zhí)行足夠的測(cè)試用例蒿涎,使得分支中每個(gè)條件取到各種可能的值,并使每個(gè)分支取到各種可能的結(jié)果粟瞬。

  • 對(duì)例1的程序同仆,前面的兩個(gè)例子
    ① A=2,B=0裙品,X=4 (沿ace路徑)
    ② A=1俗批,B=1,X=1 (沿abd路徑)
    是滿足這一標(biāo)準(zhǔn)的市怎。
  • 對(duì)例2岁忘,根據(jù)定義只需設(shè)計(jì)以下兩個(gè)測(cè)試用例便可以覆蓋8個(gè)條件值以及4個(gè)判斷分支。


    分支(判定)/條件覆蓋測(cè)試用例

    分支/條件覆蓋從表面來(lái)看区匠,它測(cè)試了所有條件的取值干像,但是實(shí)際上某些條件掩蓋了另一些條件。

  • 例如對(duì)于條件表達(dá)式(x>3)&&(z<10)來(lái)說(shuō)驰弄,必須兩個(gè)條件都滿足才能確定表達(dá)式為真麻汰。
  • 如果(x>3)為假則一般的編譯器不在判斷是否z<10了。對(duì)于第二個(gè)表達(dá)式(x==4)||(y>5)來(lái)說(shuō)戚篙,若x==4測(cè)試結(jié)果為真五鲫,就認(rèn)為表達(dá)式的結(jié)果為真,這時(shí)不再檢查(y>5)條件了岔擂。
  • 因此位喂,采用分支/條件覆蓋浪耘,邏輯表達(dá)式中的錯(cuò)誤不一定能夠查出來(lái)了。

條件組合覆蓋

針對(duì)上述問(wèn)題又提出了另一種標(biāo)準(zhǔn)——“條件組合覆蓋”塑崖。它的含義是:執(zhí)行足夠的例子七冲,使得每個(gè)判定中條件的各種可能組合都至少出現(xiàn)一次。滿足“條件組合覆蓋”的測(cè)試用例是一定滿足“分支覆蓋”规婆、“條件覆蓋”和“分支/條件覆蓋”的澜躺。

  • 再看例1的程序,我們需要選擇適當(dāng)?shù)睦恿兀沟孟旅?種條件組合都能夠出現(xiàn):
1) A>1, B=0    2) A>1, B≠0
3) A≤1, B=0    4) A≤1, B≠0
5) A=2, X>1    6) A=2, X≤1 
7) A≠2, X>1    8) A≠2, X≤1 

5)苗踪、 6)、 7)削锰、8)四種情況是第二個(gè) IF語(yǔ)句的條件組合,而X的值在該語(yǔ)句之前是要經(jīng)過(guò)計(jì)算的毕莱,所以還必須根據(jù)程序的邏輯推算出在程序的入口點(diǎn)X的輸入值應(yīng)是什么器贩。
下面設(shè)計(jì)的四個(gè)例子可以使上述 8種條件組合至少出現(xiàn)一次:

① A=2,B=0朋截,X=4  
    使 1)蛹稍、5)兩種情況出現(xiàn); 
② A=2部服,B=1唆姐,X=1
    使 2)、6)兩種情況出現(xiàn)廓八;
③ A=1奉芦,B=0,X=2
    使 3)剧蹂、7)兩種情況出現(xiàn)声功;
④ A=1,B=1宠叼,X=1
    使 4)先巴、8)兩種情況出現(xiàn)。

上面四個(gè)例子雖然滿足條件組合覆蓋冒冬,但并不能覆蓋程序中的每一條路徑伸蚯,例如路徑acd就沒(méi)有執(zhí)行,因此简烤,條件組合覆蓋標(biāo)準(zhǔn)仍然是不徹底剂邮。

  • 現(xiàn)對(duì)例2中的各個(gè)判斷的條件取值組合加以標(biāo)記如下:
1、x>3,z<10    記做T1 T2乐埠,第一個(gè)判斷的取真分支
2抗斤、x>3,z>=10   記做T1 -T2囚企,第一個(gè)判斷的取假分支
3、x<=3,z<10   記做-T1 T2瑞眼,第一個(gè)判斷的取假分支
4龙宏、x<=3,z>=10  記做-T1 -T2,第一個(gè)判斷的取假分支
5伤疙、x=4,y>5     記做T3 T4银酗,第二個(gè)判斷的取真分支
6、x=4,y<=5    記做T3 -T4徒像,第二個(gè)判斷的取真分支
7黍特、x!=4,y>5    記做-T3 T4,第二個(gè)判斷的取真分支
8锯蛀、x!=4,y<=5   記做-T3 -T4灭衷,第二個(gè)判斷的取假分支

根據(jù)定義取4個(gè)測(cè)試用例,就可以覆蓋上面8種條件取值的組合旁涤。
測(cè)試用例如下表:


條件組合覆蓋測(cè)試用例

上面的測(cè)試用例覆蓋了所有條件的可能取值的組合翔曲,覆蓋了所有判斷的可取分支,但是卻丟失了一條路徑abe劈愚。

路徑測(cè)試

  • 對(duì)于例1瞳遍,下面的測(cè)試用例則可對(duì)程序進(jìn)行全部的路徑覆蓋。


    路徑測(cè)試測(cè)試用例
  • 對(duì)于例2菌羽,下面的測(cè)試用例則可對(duì)程序進(jìn)行全部的路徑覆蓋掠械。


    路徑覆蓋測(cè)試用例

基本路徑測(cè)試

基本路徑測(cè)試在程序控制圖的基礎(chǔ)上,通過(guò)分析控制構(gòu)造的環(huán)行(圈注祖,loop)復(fù)雜性猾蒂,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測(cè)試用例的方法氓轰。設(shè)計(jì)出的測(cè)試用例要保證在測(cè)試中程序的每一個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次婚夫。 包括以下4個(gè)步驟和一個(gè)工具方法。

4個(gè)步驟:
  1. 程序的控制流圖:描述程序控制流的一種圖示方法
  2. 程序圈復(fù)雜度:McCabe復(fù)雜性度量署鸡。從程序的環(huán)路復(fù)雜性可導(dǎo)出程序基本路徑集合中的獨(dú)立路徑條數(shù)案糙。
  3. 導(dǎo)出測(cè)試用例:根據(jù)圈復(fù)雜度和程序結(jié)構(gòu)設(shè)計(jì)用例數(shù)據(jù)輸入和預(yù)期結(jié)果。
  4. 準(zhǔn)備測(cè)試用例:確毖デ欤基本路徑集中的每一條路徑的執(zhí)行时捌。
一個(gè)方法:

圖形矩陣:是在基本路徑測(cè)試中起輔助作用的軟件工具,利用它可以實(shí)現(xiàn)自動(dòng)地確定一個(gè)基本路徑集炉抒。

控制流圖的符號(hào)
  • 在介紹基本路徑方法之前奢讨,必須先介紹一種簡(jiǎn)單的控制流表示方法,即流圖焰薄。

  • 流圖是對(duì)待測(cè)試程序過(guò)程處理的一種表示拿诸。

  • 流圖使用下面的符號(hào)描述邏輯控制流扒袖,每一種結(jié)構(gòu)化構(gòu)成元素有一個(gè)相應(yīng)的流圖符號(hào)。


    控制流圖的符號(hào)
  • 流圖只有二種圖形符號(hào)

  • 圖中的每一個(gè)圓稱為流圖的結(jié)點(diǎn)亩码,代表一條或多條語(yǔ)句季率。

  • 流圖中的箭頭稱為邊或連接,代表控制流描沟。

  • 在將程序流程圖簡(jiǎn)化成控制流圖時(shí)飒泻,應(yīng)注意:

  • 在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個(gè)匯聚結(jié)點(diǎn)吏廉。

  • 邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域泞遗,當(dāng)對(duì)區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)記為一個(gè)區(qū)域席覆。


    程序流程圖簡(jiǎn)化成控制流圖
  • 如果判斷中的條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符 (OR, AND, NAND, NOR) 連接的復(fù)合條件表達(dá)式史辙,則需要改為一系列只有單條件的嵌套的判斷。例如:

  1 if a or b
  2    x
  3 else
  4    y

對(duì)應(yīng)的邏輯為


Paste_Image.png
獨(dú)立路徑

獨(dú)立路徑:至少沿一條新的邊移動(dòng)的路徑


獨(dú)立路徑
  • 第一步:畫出控制流圖
  • 流程圖用來(lái)描述程序控制結(jié)構(gòu)佩伤。

  • 可將流程圖映射到一個(gè)相應(yīng)的流圖(假設(shè)流程圖的菱形決定框中不包含復(fù)合條件)髓霞。

  • 在流圖中,每一個(gè)圓畦戒,稱為流圖的結(jié)點(diǎn),代表一個(gè)或多個(gè)語(yǔ)句结序。

  • 一個(gè)處理方框序列和一個(gè)菱形決測(cè)框可被映射為一個(gè)結(jié)點(diǎn)障斋,流圖中的箭頭,稱為邊或連接徐鹤,代表控制流垃环,類似于流程圖中的箭頭。

  • 一條邊必須終止于一個(gè)結(jié)點(diǎn)返敬,即使該結(jié)點(diǎn)并不代表任何語(yǔ)句(例如:if-else-then結(jié)構(gòu))遂庄。

  • 由邊和結(jié)點(diǎn)限定的范圍稱為區(qū)域

  • 計(jì)算區(qū)域時(shí)應(yīng)包括圖外部的范圍劲赠。


    代碼

    第一步
  • 第二步:計(jì)算圈復(fù)雜度

圈復(fù)雜度是一種為程序邏輯復(fù)雜性提供定量測(cè)度的軟件度量涛目,將該度量用于計(jì)算程序的基本的獨(dú)立路徑數(shù)目。獨(dú)立路徑必須包含一條在定義之前不曾用到的邊凛澎。
有以下三種方法計(jì)算圈復(fù)雜度:

  1. 流圖中區(qū)域的數(shù)量對(duì)應(yīng)于環(huán)型的復(fù)雜性霹肝;
  2. 給定流圖G的圈復(fù)雜度V(G),定義為V(G)=E-N+2塑煎,E是流圖中邊的數(shù)量沫换,N是流圖中結(jié)點(diǎn)的數(shù)量;
  3. 給定流圖G的圈復(fù)雜度V(G)最铁,定義為V(G)=P+1讯赏,P是流圖G中判定結(jié)點(diǎn)的數(shù)量垮兑。


    計(jì)算圈復(fù)雜度
  • 第三步:導(dǎo)出測(cè)試用例

根據(jù)上面的計(jì)算方法,可得出四個(gè)獨(dú)立的路徑漱挎。(V(G)值正好等于該程序的獨(dú)立路徑的條數(shù)系枪。)

路徑1:4-14
路徑2:4-6-7-14
路徑3:4-6-8-10-13-4-14
路徑4:4-6-8-11-13-4-14

根據(jù)上面的獨(dú)立路徑,去設(shè)計(jì)輸入數(shù)據(jù)识樱,使程序分別執(zhí)行到上面四條路徑嗤无。

  • 第四步:準(zhǔn)備測(cè)試用例

為了確保基本路徑集中的每一條路徑的執(zhí)行怜庸,根據(jù)判斷結(jié)點(diǎn)給出的條件当犯,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測(cè)試到,滿足上面例子基本路徑集的測(cè)試用例是:


基本路徑測(cè)試用例

必須注意割疾,一些獨(dú)立的路徑嚎卫,往往不是完全孤立的,有時(shí)它是程序正常的控制流的一部分宏榕,這時(shí)拓诸,這些路徑的測(cè)試可以是另一條路徑測(cè)試的一部分。

工具方法:圖形矩陣
  • 導(dǎo)出控制流圖和決定基本測(cè)試路徑的過(guò)程均需要機(jī)械化麻昼,為了開(kāi)發(fā)輔助基本路徑測(cè)試的軟件工具奠支,稱為圖形矩陣的數(shù)據(jù)結(jié)構(gòu)很有用。
  • 利用圖形矩陣可以實(shí)現(xiàn)自動(dòng)地確定一個(gè)基本路徑集抚芦。
  • 一個(gè)圖形矩陣是一個(gè)方陣倍谜,其行/列數(shù)控制流圖中的結(jié)點(diǎn)數(shù),每行和每列依次對(duì)應(yīng)到一個(gè)被標(biāo)識(shí)的結(jié)點(diǎn)叉抡,矩陣元素對(duì)應(yīng)到結(jié)點(diǎn)間的連接(即邊)尔崔。
  • 在圖中,控制流圖的每一個(gè)結(jié)點(diǎn)都用數(shù)字加以標(biāo)識(shí)褥民,每一條邊都用字母加以標(biāo)識(shí)季春。
  • 如果在控制流圖中第i個(gè)結(jié)點(diǎn)到第j個(gè)結(jié)點(diǎn)有一個(gè)名為x的邊相連接,則在對(duì)應(yīng)的圖形矩陣中第i行/第j列有一個(gè)非空的元素x消返。

對(duì)每個(gè)矩陣項(xiàng)加入連接權(quán)值载弄,圖矩陣就可以用于在測(cè)試中評(píng)估程序的控制結(jié)構(gòu),連接權(quán)值為控制流提供了另外的信息侦副。最簡(jiǎn)單情況下侦锯,連接權(quán)值是 1(存在連接)或0(不存在連接),但是秦驯,連接權(quán)值可以賦予更有趣的屬性:

1. 執(zhí)行連接(邊)的概率尺碰。
2. 穿越連接的處理時(shí)間。
3. 穿越連接時(shí)所需的內(nèi)存。
4. 穿越連接時(shí)所需的資源亲桥。
圖形矩陣

連接權(quán)為“1”表示存在一個(gè)連接洛心,在圖中如果一行有兩個(gè)或更多的元素“1”,則這行所代表的結(jié)點(diǎn)一定是一個(gè)判定結(jié)點(diǎn)题篷,通過(guò)連接矩陣中有兩個(gè)以上(包括兩個(gè))元素為“1”的個(gè)數(shù)词身,就可以得到確定該圖圈復(fù)雜度的另一種算法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末番枚,一起剝皮案震驚了整個(gè)濱河市法严,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葫笼,老刑警劉巖深啤,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異路星,居然都是意外死亡溯街,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門洋丐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呈昔,“玉大人,你說(shuō)我怎么就攤上這事友绝〉涛玻” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵迁客,是天一觀的道長(zhǎng)哀峻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)哲泊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任催蝗,我火速辦了婚禮切威,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丙号。我一直安慰自己先朦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布犬缨。 她就那樣靜靜地躺著喳魏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怀薛。 梳的紋絲不亂的頭發(fā)上刺彩,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼创倔。 笑死嗡害,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的畦攘。 我是一名探鬼主播霸妹,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼知押!你這毒婦竟也來(lái)了叹螟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤台盯,失蹤者是張志新(化名)和其女友劉穎罢绽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爷恳,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡有缆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了温亲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棚壁。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖栈虚,靈堂內(nèi)的尸體忽然破棺而出袖外,到底是詐尸還是另有隱情,我是刑警寧澤魂务,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布曼验,位于F島的核電站,受9級(jí)特大地震影響粘姜,放射性物質(zhì)發(fā)生泄漏鬓照。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一孤紧、第九天 我趴在偏房一處隱蔽的房頂上張望豺裆。 院中可真熱鬧,春花似錦号显、人聲如沸臭猜。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蔑歌。三九已至,卻和暖如春揽碘,著一層夾襖步出監(jiān)牢的瞬間次屠,已是汗流浹背园匹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帅矗,地道東北人偎肃。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浑此,于是被迫代替她去往敵國(guó)和親累颂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.測(cè)試與軟件模型 軟件開(kāi)發(fā)生命周期模型指的是軟件開(kāi)發(fā)全過(guò)程凛俱、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架紊馏。軟件項(xiàng)目的開(kāi)發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 21,961評(píng)論 7 278
  • 1.測(cè)試與軟件模型 軟件開(kāi)發(fā)生命周期模型指的是軟件開(kāi)發(fā)全過(guò)程蒲犬、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架朱监。軟件項(xiàng)目的開(kāi)發(fā)包括:需求、設(shè)...
    宇文臭臭閱讀 6,725評(píng)論 5 100
  • 本著共享主義原叮,本人將PPT考點(diǎn)梳理出來(lái)赫编,并且已經(jīng)翻譯成中文,供大家參考奋隶,歡迎各位指導(dǎo)擂送! 本次考試題型分為選擇、判斷...
    Moonsmile閱讀 4,164評(píng)論 13 28
  • 等價(jià)類劃分方法: 一.方法簡(jiǎn)介 1.定義是把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干部分(子集),然后從每一個(gè)...
    繼續(xù)hug閱讀 5,599評(píng)論 1 16
  • 在跟工作死磕的時(shí)候,老爸發(fā)來(lái)微信境氢,國(guó)考報(bào)名了嗎蟀拷?從前幾天國(guó)考公告公布以來(lái),這已經(jīng)是他第四次“提醒”我萍聊。 我來(lái)自祖國(guó)...
    藍(lán)小葉閱讀 362評(píng)論 0 1