Уровень программистов
О тестировании функций
На одном форуме, где в основном зарплата пишущих 2К5Б и выше, встрял на свою голову в диспут о тестировании функций.
Я просто спросил, сколько надо сделать проверок для функции на С++ вида
float funk(float f);
Варианты были разнообразные, и неинтересные. Интересно другое, никто из порядка 10 программистов не сказал, что для этого надо код функции посмотреть.
Ну, хорошо, предположим, что кто-то попросил бы код функции.
Предлагаю рассмотреть такой вариант:
float funk(float f) {
float ff;
// чего-нибудь 1
...
memcpy(ff,f,sizeof(f));
// чего-нибудь 2
...
return ff;
}
Вопрос тот же, сколько надо сделать проверок для этой функции?
К сожалению, судя по комментариям в топике habrahabr.ru/...blogs/development/116468
с правильным ответом опять будут проблемы.
Кроме того, правильный ответ будет зависеть не только от операционки, библиотеки, компилятора, но и от процессора. И даже на разных х86 ответ будет разный. Например, AMD или Intel. И кстати, на 64 бита проверок надо больше, чем 32.
А ведь есть ещё ассемблерные команды вычисления адреса перехода!
К тому же, при работе прерываний во время исполнения функции memcpy или других ниток в переменной f могут произойти неожиданные изменения. То есть, даже при автономной проверке ошибка в программе может маскироваться другой ниткой или прерыванием, не верите?
Однажды такое было на практике.
109 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів