November 11th, 2010

86. Две ошибки могут взаимокомпенсировать друг друга (и найти это - очень тяжело)

Очередной перевод - об анекдотичной ситуации про две ошибки, компенсирующие друг друга и ошибкой не являющиеся :)

А если серьезно, то проблема еще как актуальна! Не так давно это произошло в моей практике...

Мне пришлось портировать написанный до меня код, работающий в паре со специальным устройством, генерирующим разные сигналы, на новую версию этого устройства. Одна из функций в этом коде должна была определить знак генерируемого сигнала, и в ней изначально была ошибка, но она на старом устройстве просто не проявлялась. Новое же устройство генерировало немного более шумный сигнал, что приводило к тому, что из-за этой ошибки функция практически все время определяла знак неправильно. Но! Одновременно с этим само новое устройство генерировало этот сигнал с противоположным знаком! В результате две ошибки в большинстве случаев компенсировали друг друга, и на то, чтобы найти обе проблемы (и в функции, и в самом устройстве), ушло очень много времени, гораздо больше, чем найти каждую из них по отдельности...