浅谈“灰盒”测试
作者:网络转载 发布时间:[ 2011/6/14 15:19:01 ] 推荐标签:
(3) 根据分析写出测试用例脚本,详细的测试用例脚本由于篇幅太长,故不在这里一一写出。然后将测试用例脚本在测试环境里运行出结果。
但是在后面的测试工作中出现了意外,虽然测试用例的结果获得了通过,但是在做代码的“白盒”覆盖率时,未达到规定的覆盖率要求。为什么这么简单的一个单元测试失败了呢?在重新分析了需求和测试脚本以后,我们排除了这两方面带来的问题,原因很可能出在根据需求设计的脚本和源代码的实现有出入。
(4) 分析相应的源代码
找到源代码的相应模块,如下所示:
//
//========================================================================
const float MAX_VALID_ANGLE = 180.0;
bool TcasAircraftInputSignallfcClass::getTrueHeading(int *argValue)
{
static const float scalingFactor = 16384.0 / 90.0;
float roundFactor =(((1.0 / 16384.0)/2.0)*90.0);
float temp;
if (trueHeading->get(&temp))
{
temp=(temp<MAX_VALID_ANGLE -roundFactor ? temp : MAX_VALID_ANGLE - roundFactor);
temp=(temp>+-MAX_VALID_ANGLE+roundFactor?temp : -MAX_VALID_ANGLE+roundFactor);
if (temp < 0)
{
roundFactor = -roundFactor;
}
*argValue = (int)((temp + roundFactor)*scalingFactor);
return(true);
}
else
{
//return false signal is invalid
return(false);
}
}
经过对源代码的仔细分析,果然发现了问题所在。由于“黑盒”测试的特征以及DO-178B的规范,测试人员是完全根据需求文档来设计的测试用例。而需求文档在设计的时候设置的磁角度精确值统一为0.1,但是在实际软件开发过程中,因为可靠性的要求,精确度提升到了0.001。需求文档却未相应更新,导致终的覆盖率失败。在这里,不能取179.9,而必须取179.998,才能完全覆盖到语句,这是“黑盒”测试与“白盒”测试相结合的产物。

sales@spasvo.com