Поиск пустых методов
В настоящее время я работаю над проверкой безопасности / проверкой кода нашей системы. Это требует, чтобы я проверил все страницы в системе и удостоверился, что код содержит два метода, которые используются для проверки безопасности.
Иногда код в этих методах комментируется для облегчения тестирования.
Итак, мой вопрос: знает ли кто-нибудь простой способ поиска кода, чтобы убедиться, что методы присутствуют, и чтобы определить, какие из них не имеют кода или весь код закомментирован.
Это сделало бы мою работу намного проще, если бы я мог получить список вместо того, чтобы просматривать каждый файл...
Я уверен, что мог бы написать это сам, но я думал, что кто-то может знать о чем-то, что уже существует.
Спасибо!
3 ответа
В итоге я использовал NDepend и его CQL-функцию, чтобы найти эти методы. Я попробовал метод регулярных выражений, но через пару часов сдался (извините всех вас, мастеров регулярных выражений).
На каком языке написан код? для Java, возможно, checkstyle с пользовательским набором предпочтений может сделать эту работу.
для C++ вы можете запустить препроцессор для удаления всех комментариев, а затем grep для пустых методов (или комбинации sed/grep).
или используйте существующую грамматику для анализа вашей программы (взгляните на ANTLR) и добавьте правило для записи пустых функций / методов. это, вероятно, потребует некоторой работы, хотя.
Я не специалист по регулярным выражениям, но многие программы позволяют вам искать текст на основе регулярных выражений (notepad++, textpad, множество других, я готов поспорить) Возможно, вы могли бы сделать что-то вроде этого:
предположение: регулярное выражение (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)
Я нашел на межсетях успешно совпадает комментарии
--start of method one time-- --match comments surrounded by white space 0 or more times-- --end of method one time--
так что моя дрянная попытка регулярных выражений, которая может потребовать настройки, потому что я не очень хорош в регулярных выражениях
{((\s*)(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)))*(\s*)}
Я надеюсь, что это, по крайней мере, указывает вам правильное направление =)