Notes of testing and debugging

今天复习了MIT计算机导论的lecture7,关于测试和调试的概念有了一些基本了解,记录下来怕忘记。

测试基础

  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. 反复上述过程多次
    一个有用的方法是建立一段测试驱动(test driver),即一段用来测试的代码

调试

我们可以把调试看作一个检索问题,如果某段代码错误,我们需要找出一个解释,到底是哪个部分造成代码产生了不符合我们预期的结果,我们通常使用二分检索和打印语句来完成这一过程。
具体步骤是,如果某段代码错误,我们在这段代码的中间位置放一个打印语句,若是打印语句不符合预期,那我们知道这段代码在打印语句之前就产生了错误,那我们就关注打印语句之前的那一部分,在这部分的中间放一个打印语句,运行观察代码,反之,则观察打印语句之后的部分,如此循环往复,直到调试成功。

一个常犯却不易被发现的错误--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')

在这段代码中,有两个错误,当我们要调用一个列表的方法时,形式应该是a.reverse(), 若没有(),我们只会得到reverse这个函数,不能使列表转向。还有一个错误就是当我们执行到 if isPal(result) 语句时,我们假设result = [1, 2, 3], result 这个变量指向列表对象[1, 2, 3],当后来执行到 temp = x(temp = result)时,temp同样指向列表对象[1, 2, 3],当一个对象有多个引用的时候,并且引用有不同的名称,我们称这个对象有别名(aliase),因此当temp被转向时,x同样被转向,因为他们两个指向同一个对象,这种情况很容易发生别名错误,不过只发生在可变对象。改好的代码如下
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')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • 失眠和撞鬼一样 | 千万别说自己没有,也千万别说自己是专家 一、 喝什么茶? 不知道一切?如同不知道如何下嘴...
    造府秋香阅读 486评论 1 2
  • 悲观锁介绍(百科):悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)...
    Hello_DH阅读 316评论 0 0
  • 记得无论是在哪个求学阶段,班上总会有那么几个“坏坏”的男孩。成绩垫底、常被老师批评、顽劣闹腾、爱招惹班上的女孩……...
    lulufly阅读 1,137评论 0 0
  • 我喜欢,搬几把椅子, 和你一起坐在屋前,像这样的阳光底下。 我喜欢,在阳光底下,洗头发洗鞋子。 我喜欢,在阳光底下...
    小乐心阅读 238评论 0 0
  • 阶层固化,寒门难再出贵子,你努力的天花板只是别人的起点,这样的话题最近两年成为热点。我们是否以为只有中国如此? 1...
    武松打虎老马说股阅读 419评论 5 1