Notes of testing and debugging

今天復(fù)習(xí)了MIT計(jì)算機(jī)導(dǎo)論的lecture7戳杀,關(guān)于測試和調(diào)試的概念有了一些基本了解,記錄下來怕忘記信卡。

測試基礎(chǔ)

  1. The most important thing to say about testing is that its purpose is to show that bugs exist, not to show that a program is bug-free.

  2. The key to testing is finding a collection of inputs, called a test suite, that has a high likelihood of revealing bugs, yet does not take too long to run.
    Test suites based on exploring paths through the code called glass-box testing. based on exploring paths through the specification(說明書) called black-box testing.

  3. in black-box testing, we must consider two kinds of conditions

  • typical conditions through the specification
  • boundary conditions
  1. in glass-box testing, the test suite is path-conmplete, there are a few rules of thumb thatare usually worth following:
    2.1 Exercise both branches of all if statements.
    2.2 Make sure that each except clause is executed.
    For each for loop, have test cases in which
    2.3 The loop is not entered (e.g., if the loop is iterating over theelements of a list, make sure that it is tested on the empty list)
    2.4 The body of the loop is executed exactly once, and
    The body of the loop is executed more than once.

2.5 For each while loop,

  • Look at the same kinds of cases as when dealing with for loops,and
  • Include test cases corresponding to all possible ways of exiting the loop. For example, for a loop starting with
    while len(L) > 0 and not L[i] == efind cases where the loop exits because len(L) is greater than
    zero and cases where it exits because L[i] == e.

2.6 For recursive functions, include test cases that cause the function toreturn with no recursive calls, exactly one recursive call, and more thanone recursive call.

測試過程

  1. 單元測試(unit test)
  2. 集成測試(integration test)
  3. 反復(fù)上述過程多次
    一個(gè)有用的方法是建立一段測試驅(qū)動(dòng)(test driver),即一段用來測試的代碼

調(diào)試

我們可以把調(diào)試看作一個(gè)檢索問題傍菇,如果某段代碼錯(cuò)誤,我們需要找出一個(gè)解釋丢习,到底是哪個(gè)部分造成代碼產(chǎn)生了不符合我們預(yù)期的結(jié)果,我們通常使用二分檢索和打印語句來完成這一過程咐低。
具體步驟是,如果某段代碼錯(cuò)誤见擦,我們?cè)谶@段代碼的中間位置放一個(gè)打印語句,若是打印語句不符合預(yù)期损痰,那我們知道這段代碼在打印語句之前就產(chǎn)生了錯(cuò)誤,那我們就關(guān)注打印語句之前的那一部分卢未,在這部分的中間放一個(gè)打印語句堰汉,運(yùn)行觀察代碼辽社,反之衡奥,則觀察打印語句之后的部分爹袁,如此循環(huán)往復(fù)矮固,直到調(diào)試成功。

一個(gè)常犯卻不易被發(fā)現(xiàn)的錯(cuò)誤--aliasing bug

如下列代碼
def isPal(x):

assert type(x) == list
temp = x
temp.reverse
if temp == x:
    return True
else:
return False

def silly(n):

result = []
for i in range(n):
    elem = raw_input('Enter element: ')
    result.append(elem)
if isPal(result):
    print('Yes')
else:
    print('No')

在這段代碼中盹兢,有兩個(gè)錯(cuò)誤,當(dāng)我們要調(diào)用一個(gè)列表的方法時(shí)绎秒,形式應(yīng)該是a.reverse(), 若沒有(),我們只會(huì)得到reverse這個(gè)函數(shù)见芹,不能使列表轉(zhuǎn)向剂娄。還有一個(gè)錯(cuò)誤就是當(dāng)我們執(zhí)行到 if isPal(result) 語句時(shí)玄呛,我們假設(shè)result = [1, 2, 3], result 這個(gè)變量指向列表對(duì)象[1, 2, 3],當(dāng)后來執(zhí)行到 temp = x(temp = result)時(shí)徘铝,temp同樣指向列表對(duì)象[1, 2, 3],當(dāng)一個(gè)對(duì)象有多個(gè)引用的時(shí)候怕午,并且引用有不同的名稱,我們稱這個(gè)對(duì)象有別名(aliase)郁惜,因此當(dāng)temp被轉(zhuǎn)向時(shí),x同樣被轉(zhuǎn)向扳炬,因?yàn)樗麄儍蓚€(gè)指向同一個(gè)對(duì)象,這種情況很容易發(fā)生別名錯(cuò)誤恨樟,不過只發(fā)生在可變對(duì)象疚俱。改好的代碼如下
def isPal(x):

assert type(x) == list
temp = x[:]
temp.reverse.()
if temp == x:
    return True
else:
return False

def silly(n):

result = []
for i in range(n):
    elem = raw_input('Enter element: ')
    result.append(elem)
if isPal(result):
    print('Yes')
else:
    print('No')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呆奕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绳泉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件零酪,死亡現(xiàn)場離奇詭異拇勃,居然都是意外死亡四苇,警方通過查閱死者的電腦和手機(jī)方咆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榆骚,“玉大人,你說我怎么就攤上這事妓肢。” “怎么了职恳?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵方面,是天一觀的道長。 經(jīng)常有香客問我恭金,道長,這世上最難降的妖魔是什么颓屑? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任耿焊,我火速辦了婚禮揪惦,結(jié)果婚禮上罗侯,老公的妹妹穿的比我還像新娘。我一直安慰自己钩杰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布措左。 她就那樣靜靜地躺著避除,像睡著了一般怎披。 火紅的嫁衣襯著肌膚如雪驹饺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天赏壹,我揣著相機(jī)與錄音,去河邊找鬼蝌借。 笑死昔瞧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的自晰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搓劫,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼混巧!你這毒婦竟也來了枪向?” 一聲冷哼從身側(cè)響起咧党,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎傍衡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倦畅,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绣的,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了被辑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谈山,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奏路,到底是詐尸還是另有隱情,我是刑警寧澤鸽粉,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布抓艳,位于F島的核電站触机,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏儡首。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一对供、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧产场,春花似錦、人聲如沸涝动。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽重归。三九已至厦凤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間较鼓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國打工博烂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禽篱。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像玛界,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慎框,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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

  • 失眠和撞鬼一樣 | 千萬別說自己沒有,也千萬別說自己是專家 一猎醇、 喝什么茶? 不知道一切硫嘶?如同不知道如何下嘴...
    造府秋香閱讀 524評(píng)論 1 2
  • 悲觀鎖介紹(百科):悲觀鎖,正如其名称近,它指的是對(duì)數(shù)據(jù)被外界(包括本系統(tǒng)當(dāng)前的其他事務(wù),以及來自外部系統(tǒng)的事務(wù)處理)...
    Hello_DH閱讀 329評(píng)論 0 0
  • 記得無論是在哪個(gè)求學(xué)階段衡未,班上總會(huì)有那么幾個(gè)“壞壞”的男孩。成績墊底缓醋、常被老師批評(píng)、頑劣鬧騰送粱、愛招惹班上的女孩……...
    lulufly閱讀 1,216評(píng)論 0 0
  • 我喜歡掂之,搬幾把椅子抗俄, 和你一起坐在屋前世舰,像這樣的陽光底下。 我喜歡跟压,在陽光底下洽胶,洗頭發(fā)洗鞋子裆馒。 我喜歡,在陽光底下...
    小樂心閱讀 263評(píng)論 0 0
  • 階層固化喷好,寒門難再出貴子,你努力的天花板只是別人的起點(diǎn)梗搅,這樣的話題最近兩年成為熱點(diǎn)效览。我們是否以為只有中國如此? 1...
    武松打虎老馬說股閱讀 442評(píng)論 5 1