Разные экземпляры прибора могут быть укомплектованы разным набором модулей. И вот данный конкретный экземпляр имел только Module2. И его эксплуатировали 4 месяца не включая этот модуль. Но понадобилось включить. И оказалось, что модуль не работает.
Начинаю отлаживать ПО. И вижу картину маслом:
void InitModule2()
{
if(Settings.bModule1Installed==false)
return;
//далее инициализация модуля2
}
То есть: если в приборе НЕ установлен модуль 1 (а он и не был установлен), прекратить инициализацию модуля 2! Модули более-менее независимы. Это меня удивило. Я сделал svn blame. Эта команда позволяет установить, кто является автором каждой строчки кода (и у неё есть синоним -- svn praise, лол). В результате этого я выяснил, что данную строчку написал начальник. Как раз 4 месяца назад. И тогда же обновляли ПО на данном приборе.
Я подумал, может быть в этом есть глубокий смысл? Спросил его. Но оказалось, что это всего-навсего последствия невнимательного копипаста при рефакторинге. В первом модуле текст был правильным. Инициализация отличалась несильно. Поэтому начальник просто скопировал текст инициализации первого модуля и подправил нужные места. Но не все...