代码性能优化:
(1). 在满足正确性, 可靠性, 健壮性, 可读性等质量因素的前提下, 设法提高程序的质量.
(2). 以提高程序的全局效率为主, 提高局部效率为辅.
(3). 在优化程序效率时, 应先找出限制效率的瓶颈.
(4). 先优化数据结构和算法, 再优化执行代码.
(5). 时间效率和空间效率可能是对立的, 应当分析哪一个因素更重要, 再做出适当的折衷.
(6). 从一开始就要考虑程序性能, 不要期待在开发结束后再做一些快速调整.
(7). 正确的代码要比速度快的代码重要, 任何优化都不能破坏代码的正确性.
代码优化过程步骤: 证明需要进行优化 à 找出优化关键部分 à 测试代码 à 优化代码 à 评测优化后的代码
测试数据的选择很重要, 选择的测试数据要能够代表实际的使用情况.
不要在没有执行前后性能评估的情况下尝试对代码进行优化.
Python 代码性能优化:
(1)改进算法, 选择合适的数据结构.
良好的算法对性能起到关键作用, 因此性能改进的首要点是对算法改进.
(2)对成员的查找访问等操作, 字典要比列表更快.
(3)集合的并交差的操作比列表的 迭代要快
(4)循环优化的基本原则: 尽量减少循环过程中的计算量, 在多重循环的时候, 尽量将内层的计算提到上一层.
(5)字符串的优化: Python 的字符串对象是不可改变的. 字符串连接的使用尽量使用 join()而不是 +. 当对字符串可以使用正则表达式或者内置函数处理时, 选择内置函数.
(6)使用列表解析和生成表达式: 列表解析要比在循环中重新构建一个新的 list 更为高效, 因此可以利用这一特性来提高运行的效率.
********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
单元测试
单元测试内容:
模块接口: 对通过所有被测试模块数据流进行测试
局部数据结构: 检查模块中的数据结构是否正确的定义和使用
边界条件: 检查数据流或控制流中条件或数据处于边界时的出错的可能性
独立路径: 检查由于计算错误, 判定错误, 控制流错误导致的程序错误.
出错处理: 检查可能引发错误处理的路径以及进行错误处理的路径.
单元测试原则:
快速的: 单元测试应能快速运行, 如果运行缓慢, 就不会愿意频繁的运行它.
独立的: 单元测试应相互独立, 某个测试不应为下一个测试设定条件. 当测试相互依赖时, 一个没通过就会导致一连串的失败, 难以定位问题.
可重复的: 单元测试应该是可以重复执行的, 并且结果是可以重现的.
自我验证的: 单元测试应该有布尔输出, 无论是通过或失败, 不应该查看日志文件或手工对比不同的文本文件来确认测试是否通过.
及时的: 及时编写单元测试代码, 应恰好在开发实际的单元代码之前.
单元测试质量:
测试通过率: 是指在测试过程中执行通过的测试用例所占比例, 单元测试通常要求测试用例通过率达到 100%
测试覆盖率: 是用来度量完整性的一个手段, 通过覆盖率数据, 可以了解测试是否充分以及弱点在哪里. 代码覆盖率是单元测试的一个衡量标准, 但也不能一味地去追求覆盖率.
单元测试方法:
静态测试: 通过人工分析或动态测试: 程序正确性证明方式来确认程序正确性: 通过动态分析和程序测试等方法来检查和确认程序是否有问题.
黑盒测试: 又称功能测试, 它将测试对象看作一个黑盒子, 完全不考虑程序内部的逻辑结构和内部特性, 只依据程序的需求规格说明书, 检查程序的功能是否符合它的功能说明.
白盒测试: 又称结构测试, 它把测试对象看作一个透明的盒子, 允许测试人员利用程序内部的逻辑结构以及有关信息, 设计或选择测试用例, 对程序所有逻辑路径进行测试.
Unit 通常试用于以下场景的测试:
单个函数, 一个类或者几个功能相关类的测试
尤其适用于纯函数测试或者接口级别的测试
xUnit 无法适用于复杂场景的测试
被测对象依赖关系复杂, 甚至无法简单创建出这个对象
对于一些失败场景的测试
被测对象中涉及多线程合作
被测对象通过消息与外界交互的场景
单元测试之 Mock
Mock 测试是在测试过程中对于某些不容易构造或者不容易获取的对象, 用一个虚拟的对象 (即 Mock 对象) 来创建以便测试的方法.
测试用例:
后缀值可以细分为验证值和结束命令
验证值: 查看测试用例值结果所用到的值
结束命令: 终止程序或返回到稳定状态所用到的值
例子: 打电话
测试用例设计:
(1). 具有代表性和典型性
(2). 寻求系统设计和功能设计的弱点
(3). 既有正确输入也有错误和异常输入
(4). 考虑用户实际的诸多使用场景
黑盒测试技术:
等价类划分: 是将输入域划分成尽可能少的若干子域, 在划分中要求每个子域两两互不相交, 每个子域称为一个等价类.
等价类类型: 有效等价类, 无效等价类
有效等价类: 有合理的输入数据构成的集合
无效等价类: 不合理输入数据构成的集合, 检查程序是否有一定的容错性.
边界值分析: 是对输入或输出的边界值进行测试的一种方法, 它通常作为等价类划分法的补充, 这种情况下的测试用例来自等价类的边界.
基本思想: 故障往往出现在程序输入变量的边界值附近.
边界值分析法是基于可靠性理论中称为 "单故障" 的假设, 即有两个或两个以上故障同时出现而导致失效的情况很少.
对程序每个变量重复: 每次保留一个变量, 让其余的变量取正常值, 被保留的变量依次取 min,min+,nom,max - 和 max.
健壮性测试: 是作为边界值分析的一个简单的扩充, 它除了对变量的 5 个边界值分析取值外, 还要增加一个略大于最大值 (max+) 以及略小于最小值 (min-) 的取值, 检查超过极限值时系统的情况.
错误推测法:
错误推测法是人们根据经验或直觉推测程序中可能存在的各种错误, 从而有针对地编写检查这些错误的测试用例的方法.
白盒测试技术:
控制流图: 是一个过程或程序的抽象表示.
来源: http://www.bubuko.com/infodetail-2990932.html