Обнаружение клона 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 литералы с японскими символами.

Другие вопросы по тегам