Обнаружение клона COBOL с ConQAT?
Документ ConQAT утверждает, что он может обнаружить клон по коду COBOL, но я не могу найти подходящий блок в списке включенных блоков.
Единственное, что можно рассмотреть, это StatementCloneAnalysis
но это будет смущено номерами строк, которые предшествуют каждой строке:
016300******************************************************************0058
2 ответа
Интересный инструмент. Я бросил быстрый взгляд, и мне кажется, что простым решением может быть предварительная обработка исходного кода COBOL, чтобы перезаписать столбцы с 1 по 6 пробелами и обрезать все после столбца 72.
Пройдя некоторое время, я наткнулся на файл определения сканера NextToken для COBOL. Похоже, что он "с радостью" подберет токены из области порядкового номера, а также после столбца 72. Токенайзер выглядит так, как будто он имеет дело только с исходным кодом COBOL после того, как он прошел фазу обработки библиотеки компиляции (т.е. после компилятора такие директивы, как COPY/REPLACE были обработаны). COPY/REPLACE были указаны в качестве ключевых слов, но я действительно не понимаю, как этот токенизатор будет правильно с ними обращаться, особенно когда речь идет о псевдотексте.
При работе с компилятором IBM COBOL вы можете указать опцию MDECK для компиляции, чтобы создать подходящий исходный файл для анализа. Я не знаком с другими поставщиками, поэтому не могу прокомментировать, как создать исходную колоду для манипулирования текстом.
Уровень обнаружения обнаружения клонов для COBOL, по-видимому, очень ограничен по сравнению с другими языками (например, Java). Я подозреваю, что вам придется потратить много часов, чтобы получить что-то большее, чем простое обнаружение клонов для программ на языке COBOL. Однако это может быть очень полезным проектом, учитывая интенсивное использование вырезания / вставки кодирования в типичных программах на языке COBOL (программисты на языке COBOL часто подшучивают над этим: когда-либо была написана только одна программа на языке COBOL, остальные - просто ее модифицированные копии), Я желаю тебе всего хорошего.
Учитывая, что ConQat плохо работает с COBOL, вы можете взглянуть на наш инструмент CloneDR.
У него есть версия, которая явно работает с IBM Enterprise COBOL с использованием точного синтаксического анализатора, и он правильно обрабатывает всю эту чепуху с порядковым номером. (Он даже будет читать код COBOL в своем родном ECBDIC, что означает, что литеральная строка, содержащая символ новой строки ASCII, не нарушает анализатор). [Если ваш COBOL не является IBM COBOL, это вам не поможет, но в противном случае вам не нужно "тратить много часов, чтобы что-то получить"].
Мы считаем, что метод обнаружения на основе AST обнаруживает лучшие клоны более точно, чем метод обнаружения на основе токенов ConQat. Сайт подробно объясняет, почему, и показывает образцы клонов COBOL, обнаруженных CloneDR.
Специально для ОП, который, кажется, работает в Японии: в качестве бонуса CloneDR обрабатывает наборы японских символов, потому что он реализован поверх базовой инструментальной инфраструктуры, которая поддерживает Unicode и Shift-JIS. У нас не было большого опыта работы с японским языком COBOL, поэтому, возможно, остался сбой; см. G литералы с японскими символами.