Допустим есть такой код с ошибкой:
struct Cmd {
Operation op = Operation::...;
double subtractor = 0.;
double multipler = 0.;
};
void randomModifSubtractor(Cmd& cmd) {
double& v = cmd.multipler; // <- ЭТО ОШИБКА, д.б. subtractor
v = static_cast<double>(rand()) / RAND_MAX; // для демо сойдет
}
void randomModifCmd(Cmd& cmd) {
if (rand() % 2 == 0)
randomModifSubtractor(cmd);
else
randomModifMultipler(cmd);
}
В данном коде ошибка в подмене названия. Значения полей уже инициализированно рандомно, и здесь оно меняется на новое. У каждого из полей свои правила модификации, и в реальности сложней. Эта ошибка отчасти ухудшает работу программы, но не ломает. А какова д.б. нормальная работа заранее не известно.
Как может тестироваться такая ошибка? Или может быть можно по другому написать этот код, что бы ошибка тестировалась или минимизировалась ее вероятность?