背景: 私が取り組んでいるコード ベースは非常に大きく、アサートを多用しています。テストで見つかった多くの問題は、最終的に個々のアサート (ファイルと行番号) に関連付けられています。ただし、誰かがソース コードを変更すると、アサートに関連付けられた行番号が変更される可能性があり、アサートが再発した場合の追跡が難しくなります。
例: テスト中に、テスターが main.cpp:1808 でいくつかのアサートに遭遇したとします。このアサートに対してバグがバグ追跡システムに記録されます。翌日、誰かが main.cpp を変更します。テスト担当者がテストを再実行すると、同じアサートが引き続き発生しますが、main.cpp:1790 で発生することが報告されています。したがって、ソース コードを見ずに、これが新しいアサートなのか、以前に見られたアサートの再発なのかを判断することは困難です。
質問: 行番号に依存するのではなく、個々の assert() を一意の 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)
}