[Test] 测试 测试用例 数据集

单元测试 系统测试

单元测试unit testing

“单元”是指函数和类等程序的组成部分,当我们对单元进行独立测试的时候,一旦错误发生,我们就能确定在哪里寻找错误——错误一定是在我们所测试的单元中。

系统测试system testing

系统测试只能告诉我们系统中存在错误,一种典型情况是,当我们完成单元测试后,在系统测试中发现了错误,那么可能是单元之间的交互出现了问题。

一般性的策略:做好自己编写的单元的测试

黑盒测试 白盒测试

白盒测试

(你可以看到被测单元的实现细节)

黑盒测试

(你只能看到被测单元的接口)

回归测试 regression testing

被测单元的代码可能会被修改(你或其他人),这就需要进行回归测试。
不断去除无关代码直到错误消失为止,然后将最后一次去除的代码重新加入。不断持续这一过程直到候选代码可删为止。

The way we find that minimal program is to keep removing code until the error disappears — and then reinsert the last bit of code we removed.
This we do until we run out of candidates for removal.

用例选择标准

  • 很可能导致错误的测试(找出大多数错误)
  • 可能导致严重错误的测试(找出可能导致最坏结果的错误)

与其他工作相比,测试就是一种发挥我们的创造性思维,来达到“如何让这个程序运行不正常”目的的活动。
因此,最好的测试人员不但要有系统性思维,还要非常“狡猾”(当然,要有正当的理由)。

数据集

  • 空集
  • 小数据集
  • 大数据集
  • 极限分布的数据集
  • 序列末尾处可能发生问题的数据集(边界)
  • 包含重复元素的数据集
  • 包含奇数和偶数个元素的数据集
  • 由随机数组成的数据集

测试代码

写测试代码不应该是“剪切和粘贴”式编程,我们应该像写其他代码一样编写测试程序。
比如,从序列两段和中部各选择一个值(不在序列中的值),构造测试用例,在测试数值序列或者数值范围程序时非常有用。

错误代码

  • 与“其他代码”微妙的相关性:检查全局变量(比如,cin,cout)、非常量引用参数、指针等的使用
  • 资源管理:查找内存管理new delete操作、文件使用、锁等
  • 查找循环:检查终止条件
  • if和switch语句(也称为“分支语句”):查找这些程序中的逻辑错误

考虑如何才能写出更简洁(更清晰)的函数,有时是思考测试方法的很好途径。

及早测试

在编写程序单元之前就编写好了单元测试

  • 使用定义良好的接口,这样你可以测试这些接口的使用
  • 设计用文字描述各种操作的方式,这样它们就可以被存储、分析和重放,包括输出
  • 在调用代码中嵌入对未检查假设(要求、前置条件等)的检测,以便在系统测试之前捕获错误参数
  • 最小化依赖性,并且保持各自依赖关系清晰可见
  • 有一个清晰的资源管理策略

对大多数系统来说,在最终(发布)版本中留下相当多代价比较低的检查代码是个好主意:因为一些“不可能”的情况发生的时候,我们更希望通过一个明确的错误信息来了解情况,

而不是一个简单的系统崩溃。

“糟糕的设计”(“非算法”的性能问题)

  • 信息的重复计算
  • 重复检查(比如,在循环中每次都检查数据的索引)
  • 重复访问硬盘(或网络)

显示运行时间

// Unix

g++ x.cpp
time g++ x.cpp

时间记录

代码

#include 
#include 
using namespace std;

void do_something() {}

int main()
{
    int n = 10000000; // repeat do_something() n times
    auto t1 = chrono::system_clock::now(); // begin time
    
    for (int i = 0; i(t2-t1).count() << " milliseconds\n";
}

输出

do_something() 10000000 times took 32 milliseconds

可选参数

chrono::duration_cast(t2-t1).count() 
  • 秒级 seconds
  • 毫秒级 milliseconds
  • 纳秒级 nanoseconds

REF 参考

Programming -- Principles and Practice Using C++ (Second Edition)
http://www.stroustrup.com/Programming/

std::chrono::system_clock - cppreference.com
http://en.cppreference.com/w/cpp/chrono/system_clock

你可能感兴趣的:([Test] 测试 测试用例 数据集)