软件测试的深度剖析:何时过度、侵入性及各类测试的作用
1. 何时测试过度
在软件测试中,我们常常会陷入一种误区,认为测试用例越多,软件就测试得越充分。就像医院里监测心跳的机器,它通过检测电信号来判断心脏是否跳动,但电信号正常并不一定意味着心脏在有效跳动。在一个故事中,孩子的心跳监测机器显示电信号正常,然而医生听诊却发现没有心跳,最终确定是心脏周围的肿胀压迫心脏导致无法跳动。
在软件测试里,我们也可能犯类似的错误。比如有一个测试添加过滤器文字的例子:
TEST("Tag values can be used to filter messages")
{
MereTDD::SetupAndTeardown<TempFilterClause> filter;
MereMemo::addFilterLiteral(filter.id(),
Count(100, MereMemo::TagOperation::GreaterThan));
}
我们本可以验证过滤器是否确实添加到了集合中,也可以调用 getFilterClauses
函数来检查每个子句并查找刚添加的文字,甚至确认文字本身是否按预期工作并被赋予了值100。但这个测试并没有这么做,因为查找集合中的过滤器就如同监测心跳电信号, getFilterClauses
函数只是为了将日志库包含在单个头文件中而存在的细节,并非供客户调用的。测试应该关注设置过滤器后的结果,即设置过滤器后,记录一些消息并确保结果符合预期。
如果项