文档章节

MIT6.00.1X 计算机科学和PYTHON编程导论 第四周

ElfenS
 ElfenS
发布于 2016/07/16 14:55
字数 1221
阅读 111
收藏 0

第七讲    调试

    测试

        测试是为了找出代码中的错误,调试是通过错误修改代码使其达到预期的效果

        通过将代码分解成独立的模块,从而进行独立的测试和调试。

        代码设计好之后,就需要进行测试。

        为了测试,需要:

            1, 确保代码可以运行

            2, 摸索出一套预期的结果,对于一个特定的输入,程序的输出是什么

        测试方法:

        将输入分解成一系列子集,并且保证每个元素都在一个子集里。然后构建一个测试集,其中少包含每个子集中的一个元素。从每一个子集中,我们挑选一个输入元素,然后运行测试,看它能否成功运行。

        测试方法分为两类:

            1, 通过特定分类使用启发式的方法探索路径。我们称之为黑盒测试。

            2, 基于代码本身使用启发式方法探索路径。我们称之为白盒测试。

    黑盒测试 :

        黑盒,即一个表面全黑的盒子,因此我们看不到它的里面。因此,事实上,这个检测套件的设计使人们无需查看代码。它的优点在于实施者以外的其他人也可以使用它进行测试。

        具体方式:根据函数接受的数据,将输入分解成一系列子集,明确边界情况,对每一个输入子集及边界情况至少检测一次。

    白盒测试 :

        白盒,意味着我们可以看到代码的内容,白盒测试使用代码本身来引导测试用例的设计,这是一个更全面的手段,它可以找出存在潜在错误的地方,白盒测试也被称作穷举路径测试,其中代码的每一条可能路径至少都被检测了一次。

        具体方式:根据函数的所有执行路径,将输入分解成一系列子集,明确边界情况,对每一个输入子集及边界情况至少检测一次。对于循环,可以分为0次,1次, 多次的情况。

        测试将从单元测试入手,单元测试会选择一个模块,比如说一个函数,然后检测它。
以确保该模块运行良好。这里就就会抓住一些算法错误,这些就是我会遇到错误的地方,要么
会发生在编写算法时,要么会发生在思考该代码的时候。发现错误并修改,然后重新测试,直到模块正常运行。

        完成了对模块的检验之后,接着进行集成测试,以检验作为整体的系统是否工作正常如果我们有若干个相互作用的函数,我需要确保即便这些模块运行正常,那么整个系统也得工作正常。一般地,这将会抓住所谓的交互错误。这个的意思是说,在一些地方,不正确的数值将会传递给另一个函数。发现错误并修改之后再回头对模块进行单元测试,之后进行集合测试,往复多次,直到我们认为已经抓到了所有可能的错误

     调试 :

        找到错误可能所在位置的理念是,使用白盒测试和黑盒测试设计检测套件,首先证明
确实有错误出现,然后使用代码本身来发现错误可能的位置。

        使用通过打印语句查看运行时的变量,使用二分查找来定位错误的具体位置。

 

    第八讲    断言和异常

        异常 :

            python提供了异常处理:

def divide(x, y):
    try:                  #try代码块中的代码如果发生异常会被捕获
        result = x / y
    except ZeroDivisionError, e:
    #except 是处理异常的代码块,可以指定要处理的异常类型这里是ZeroDivisionError,
    #如果指定了类型,则只会处理指定类型的异常,当然你可以捕获多个异常
        print "division by zero! " + str(e)
    except TypeError:
        divideNew(int(x), int(y))
    else:                 # else: 用于没有异常时执行的语句
        print "result is", result
    finally:             #finally 中的代码,不管有没有异常都会执行,通常用于关闭文件等操作
        print "executing finally clause"

            防御式编程:

                在处理数据前检测数据的正确性,使用assert  断言,可以很好的限制输入

def avg(grades, weights):
    assert not len(grades) == 0, 'no grades data' 
    #断言  assert 表达式[,输出语句] 如果表达式为真则继续执行,否则停止程序抛出异常或者输出自定义信息
    newgrades = [convertLetterGrade(elt) for elt in grades]
    return dotProduct(newgrades, weights)/len(newgrades)

 

© 著作权归作者所有

ElfenS
粉丝 1
博文 6
码字总数 7791
作品 0
万州
程序员
私信 提问
网贷环绕四周,许多人深陷其中,Python揭露网贷不为人知的一面!

网贷 一些网络贷款平台面向在校大学生开展的贷款业务。据调查,校园消费贷款平台的风控措施差别较大,个别平台存在学生身份被冒用的风险。此外,部分为学生提供现金借款的平台难以控制借款流...

Python新世界
2018/07/17
0
0
福利 | Python专场竞技,这些书给你加把力!

端午节将至,各地龙舟备战竞技,粽子部队也整装待发。小编掐指一算,这种热闹的时节,是时候展现真正的技(fu)术(li)了! (“Python号”龙舟闪亮登场!) Python作为当下最流行的编程语言...

2018/06/15
0
0
数据分析师的基本素养——论如何成为一名数据科学家 Part 2

更多深度文章,请关注: https://yq.aliyun.com/cloud 本文为《数据分析师的基本素养——论如何成为一名数据科学家》文章的第二部分,第一部分请点击这里。 Pronojit Saha,数据发烧友 数据科...

【方向】
2017/02/17
0
0
Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
05/26
58
0
数据科学家告诉你哪些计算机科学书籍是你应该看的

文章发布于公号【数智物语】 (ID:decision_engine),关注公号不错过每一篇干货。 转自|程序员书库(公众号ID:OpenSourceTop) 原文链接 | https://fivebooks.com/best-books/computer-...

数智物语说
04/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

启动参数

常用启动参数,通过 -Dxx.yy=zz注入应用参数 -Deureka.instance.metadata-map.starkGroup=test3 -Dserver.port=8989 本地调试过程中,可改变端口来启动多个相同服务。修改启动的VM参数即可...

ZH-JSON
6分钟前
3
0
ES配置修改

查看配置 GET /_cluster/settings 修改配置 PUT /_cluster/settings{ "persistent" : { "xpack" : { "monitoring" : { "collection" : { "enabled" : ......

messud4312
18分钟前
2
0
Spring事务传播属性有那么难吗?看这一篇就够了

Spring事务传播属性有那么难吗?看这一篇就够了 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过...

不学无数的程序员
18分钟前
2
0
VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
43分钟前
4
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
52分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部