背景:我正在處理的代碼庫非常大,大量使用斷言。測試中發現的大量問題最終與單個斷言(文件和行號)相關聯。但是,如果有人修改了源代碼,與assert關聯的行號可能會改變,並且很難追蹤它何時重新出現。如何將斷言與唯一ID相關聯?
例子: 在測試過程中,說測試者遇到幾個聲稱在main.cpp中:1808。針對這一斷言,我們的缺陷跟蹤系統會記錄一個錯誤。第二天有人修改main.cpp。當測試人員重新執行測試時,仍然會發生相同的斷言,但現在報告發生在main.cpp:1790。因此很難確定這是否是一個新的斷言或者在不查看源代碼的情況下重新發現之前看到的斷言。
問: 是可能每個人斷言()有唯一的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)
}
ASSERT的文本是否被認爲是「unqiue」的,這樣你的缺陷系統就可以看到這個文件?絕對不完美。也許如果與功能名稱相結合,它會變得足夠好? – JaredC
如果可能的話,從您的SCM工具添加版本號或散列。這可能需要與您的構建系統集成,並且不會跟蹤該行,但這確實意味着您在檢查缺陷時可以檢出相同的版本。 – Useless
請勿使用ASSERT。編寫自己的斷言宏,該文件從文件的開始處開始計數,並添加分配給該特定模塊的值,或者只接受UID parm。 –