Mav*_*ick 5 c++ testing debugging
背景:我正在研究的代码库非常庞大并且大量使用断言.测试中发现的大量问题最终与单个断言(文件和行号)相关联.但是,如果有人修改了源代码,则与断言关联的行号可能会发生变化,并且在重新发生时很难跟踪.
示例:在测试期间,测试者在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)
}
Run Code Online (Sandbox Code Playgroud)
一些代码更改后
#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)
}
Run Code Online (Sandbox Code Playgroud)
我认为没有办法证明代码更改。通常,代码跟踪软件无法正确识别代码的哪一部分已更改。所以任何自动跟踪都可能会失败。我建议编写一个简单的程序来枚举所有现有的assert没有 uid 的程序。该程序应该更改aasert为诸如此类的内容ASSERT(height < 10, "aagcodkv73");。并将该脚本连接到提交阶段。
这样,每次有人添加新断言时,它都会获得自己的 uid。并且该 uid 将由开发人员保留
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |