08 January 2009
FxCop(Code Analysis) для Legacy кода
Нещодавно ми вирішили що нам потрібен Code Analysis. У нас є база з декількох десятків тисяч рядків коду яку ми підтримуємо, але активно не розробляємо. Код писався декілька років тому, і Code Analysis репортить майже стільки проблем скільки рядків коду. Фіксити усі ті тисячі попереджень, немає ні часу ні бажання, єдине чого кортить це перевірка в новому коді.
Перше що спадає на думку це повимикати усі неугодні рули. Але проблема в тому що і на новий код це діяти не буде! Більше того воно не буде діяти навіть коли ріками викликати Run Code Analyse! Як то кажуть “ф топку!” таке рішення.
Коротка версія
Зупинились на “тимчасовому” “придушенні” попереджень. Тобто виділили усі попередження, і зробили їм Suppress Message(s)/In ProjectSuppression File.
Повна версія
Отже, почали ми з того, що спробували пофіксити глобальні проблеми, ті які викликають більшу частину усіх попереджень. В нашому випадку це були назви неймспейсів, назви елементів нашого домену. Просто додали CustomDictionary.xml.
Потім Suppress Message(s)/In ProjectSuppression File для всіх попереджень.
І на при кінці, перейменували GlobalSuppressions.cs в GlobalSuppressionsTemp.cs, цим ми відокремили ті попередження які ми поки що не хочемо вирішувати, і ті які ми і справді будемо додавати для нового коду.
Проблеми
Перша проблема це те ще неможливо виділити більше за 200 попереджень. Ми цю проблему не вирішували. Але щось мені підказує що це не проблема трансформувати результати FxCop(це простий XML) в такий собі кастомний GlobalSuppressions.cs.
Друга проблема це рефакторінг. За рахунок того що “придушення” в файлі проекту, зрозуміло що навіть перейменування,призводить до того що “придушення” стають не актуальні. З цією проблемою ми боремось двома шляхами. Або просто додаємо “придушуємо” нові попередження, або фіксимо.
Третя проблема, це застарілі “придушення”. Але у нас поки що їх не так вже і багато… Так чи інакше ми це ще не вирішили.
Цікавлюсь DDD. Більшість часу витрачаю на доньку. А ще вел!