背景: 我正在处理的代码库非常庞大,且大量使用断言。在测试中发现的许多问题最终都与一个特定的断言(文件和行号)有关。但是,如果有人修改了源代码,则与断言相关联的行号可能会更改,这将使跟踪其是否再次出现变得困难。
例如:在测试期间,假设测试人员在main.cpp:1808处遇到了几个断言。针对此断言,在我们的缺陷跟踪系统中记录了一个错误。第二天,有人修改了main.cpp。当测试人员重新执行测试时,相同的断言仍然会发生,但是现在报告的位置是main.cpp:1790。因此,很难确定这是新的断言还是先前看到的断言的再次发生,而不查看源代码。
问题: 是否可以将每个单独的assert()与唯一的ID相关联,该ID将持续存在于代码更改之间,而不是依赖于行号?我自己想不出解决方案。我希望比我聪明的人能提出一些想法。以下是我认为解决方案应该具备的功能:
例如:在测试期间,假设测试人员在main.cpp:1808处遇到了几个断言。针对此断言,在我们的缺陷跟踪系统中记录了一个错误。第二天,有人修改了main.cpp。当测试人员重新执行测试时,相同的断言仍然会发生,但是现在报告的位置是main.cpp:1790。因此,很难确定这是新的断言还是先前看到的断言的再次发生,而不查看源代码。
问题: 是否可以将每个单独的assert()与唯一的ID相关联,该ID将持续存在于代码更改之间,而不是依赖于行号?我自己想不出解决方案。我希望比我聪明的人能提出一些想法。以下是我认为解决方案应该具备的功能:
#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
//Can ASSERT to redefined to generate a UID?
#define ASSERT assert
void main(void)
{
std::string name;
int age;
std::cin >> name;
ASSERT(name.length() < 10); //Generate a UID if assert fails(ie 0001)
std::cin >> age;
ASSERT(age < 100); //Generate a UID if assert fails(ie 0002)
}
在进行了一些代码修改之后
#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
#define ASSERT assert
void main(void)
{
std::string name;
int age;
int height;
std::cin >> height;
ASSERT(height < 10); //Generate a UID if assert fails(ie 0003)
std::cin >> name;
ASSERT(name.length() < 10); //Generate a UID if assert fails(ie 0001)
std::cin >> age;
ASSERT(age < 100); //Generate a UID if assert fails(ie 0002)
}