}

}

现在我们再次运行数据流分析,得到的结果将只有两个问题:

这里我们可能使用了-1作为索引来访问了数组。这是由于整型变量index被设置的初始值为-1,并且存在一条可能通过if语句的路径在未将该整型变量正确的进行初始化之前便调用了printMessage()函数。运行时分析未检查到这样的一条路径,并且该路径很有可能在真实世界中永远不可能被执行到。这就是静态数据流分析相对于运真实运行时内存监测最主要的不足:数据流分析能检查出潜在的路径,这些路径可能包含在程序实际执行过程中不会执行到或不存在的路径。尽管如此,为了做到有备无患,我们删除了上述的不必要的条件(value》=0)以修改这个潜在的错误。

void handleSensorValue(int value)

{

initialize();

int index = -1;

if (value 《= 10) {

index = VALUE_LOW;

} else {

index = VALUE_HIGH;

}

printMessage(index, value);

}

相同地,我们也对最后一个报告的错误进行相应的处理。现在我们再次运行数据流分析,将不会再有错误被报告出来。

为了确保程序运行一切正常,我们重新运行整个分析过程。首先,我们开启运行时内存监测并运行应用程序,一切表现正常。然后我们开启内存监测并运行单元测试,一个任务被报告出来:

我们的单元测试检测到reportSensorFailure()函数的行为已经发生了改变。这是由于我们已经对finalize()函数进行了修改——为了纠正之前报告的一个问题所做的修改。此处报告的任务是为了让我们注意此修改,并提示我们应该对测试用例进行相应的审查,并且确定是否应该对代码或者测试用例进行相应的修改,以表示这种新的行为实际上是我们所预期的行为。在检查完代码之后,我们发现后者(修改)是正确的并且应该更新断言的正确条件。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查