(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,才能完全覆盖到语句,这是“黑盒”测试与“白盒”测试相结合的产物。