zoukankan      html  css  js  c++  java
  • 测试与调试

    单元测试

    单元测试基于最小单元,也就是程序的基本部件,比如函数、类等,在隔离测试各部件,确保底层正确的前提下,在行组合向上完成套件测试。
    测试驱动开发(TDD)要求在编写代码之前,先构建测试,但这并不容易。多数时候,需求和架构的不成熟会导致算法剧烈变化,这样很难先行将测试确定下来。可以考虑和编码同步,在重构过程中剥离出测试用例。两厢对照,还可要求代码必须具备可测试性。
    请注意,测试用例要检查的是错误,而非目标正确返回。另外,单个用例要足够简单,仅测试一项功能,否则其本身就难以维护。可将复杂功能分解以测试套件的方式进行打包。另外,还应避免测试目标的私有成员,这会导致过高的耦合,让代码重构变得困难。同样第三方库也不是测试目标,或许有一个基于接口的隔离代理。

    性能测试

    1.timeit为标准库自带,用于测量少于代码片段的执行时间。其基本算法思路就是执行足够多的次数,从中选取最小平均值,以缩小测量误差。
    2.标准库的profile模块用于测量执行过程中函数的执行时间和调用次数
    标准库自带两个版本,调用接口基本一致。cProfile以C实现,额外开销小。
    profile是纯python实现,开销大,适合编写扩展分析器。
    3.获知引发性能问题的函数后,接下来需要进一步分析具体成因。line_profiler可以对函数内的代码逐行进行测量。
    4.memory profile用于逐行分析代码内存占用。
    当内存占用过多时,可能会引发物理内存不足,或者导致与硬盘的平凡交换,这些会导致严重的性能问题。
    5.pympler被用来统计对象实例的内存使用
    他的方法summary可以对整个解释器进程内的存活对象做出评估,以查证哪类对象可能存在问题。
    tracker可在不同执行点创建跟踪快照,这样通过输出快照的差异,就可能发现嫌疑目s标,以及问题代码的位置。
    sizeof找到嫌疑目标之后,我们开始对其进行个体检查,这需要使用asizeof.与sys.getsizeof不同,他递归统计所有成员和属性。

    代码调试

    pdb
    启动方式

    1.python -m pdb main.py # 命令行调试
    2.import pdb
    pdb.set_trace() # 特定位置插入断点,调试
    3.pdb.run('test()') # 直接调试
    

    插入断点后,语句就会停在该处,命令行显示pdb语句,输入help可看到pdb的命令。

    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    WP7 操作XML文件
    C#和C/C++指针实现swap交换
    感受
    我学到了什么 我思考了什么.
    hdu 2768 Cat vs. Dog (最大独立)
    hdu 1960 Taxi Cab Scheme (最小覆盖)
    hdu 1528 Card Game Cheater (最小覆盖)
    hdu 4160 Dolls (最大独立)
    hdu 2458 Kindergarten (最大独立集)
    hdu 2119 Matrix (最小覆盖)
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15549344.html
Copyright © 2011-2022 走看看