Обнаружение клонов COBOL с помощью ConQAT?

Документ ConQAT утверждает, что он может обнаруживать клоны в коде COBOL, но я могу нет подходящего блока в списке включенных блоков.

Единственное, что можно было бы рассмотреть, - это StatementCloneAnalysis, но его бы сбили с толку номера строк, которые предшествуют каждой строке:

016300******************************************************************0058

person Nicolas Raoul    schedule 24.02.2012    source источник


Ответы (2)


Интересный инструмент. Я быстро посмотрел и мне кажется, что простое исправление может заключаться в предварительной обработке исходного кода COBOL, чтобы перезаписать столбцы с 1 по 6 пробелами и обрезать все, что находится после столбца 72.

Поковырявшись некоторое время, я наткнулся на файл определения сканера NextToken для COBOL < / а>. Похоже, он «с радостью» заберет токены из области порядковых номеров, а также после столбца 72. Токенизатор выглядит так, как будто он работает с исходным кодом COBOL только после того, как он прошел фазу библиотечной обработки компиляции (то есть после компилятора были обработаны такие директивы, как COPY / REPLACE). COPY / REPLACE были указаны как ключевые слова, но я действительно не понимаю, как этот токенизатор будет обрабатывать их должным образом, особенно когда задействован псевдотекст.

Если вы работаете с компилятором IBM COBOL, вы можете указать опцию MDECK для компиляции, чтобы сгенерировать подходящий исходный файл для анализа. Я не знаком с другими поставщиками, поэтому не могу дальше комментировать, как сгенерировать исходную колоду текстовых манипуляций.

Уровень обнаружения клонов, обеспечиваемый COBOL, по-видимому, очень ограничен по сравнению с другими языками (например, java). Я подозреваю, что вам придется потратить много часов, чтобы получить что-то большее, чем простое обнаружение клонов для программ COBOL. Однако это может быть очень полезный проект, учитывая интенсивное использование кодирования вырезания / вставки в типичных программах на COBOL (программисты COBOL часто шутят над этим: когда-либо была написана только одна программа на COBOL, остальные - это просто модифицированные ее копии) . Желаю тебе всего наилучшего.

person NealB    schedule 24.02.2012

Учитывая, что ConQat плохо справляется с COBOL, вы можете изучить наш инструмент CloneDR.

У него есть версия, которая явно работает с IBM Enterprise COBOL, используя точный синтаксический анализатор, и правильно обрабатывает всю эту бессмыслицу с порядковыми номерами. (Он даже будет читать код COBOL в своем собственном ECBDIC, что означает, что буквальная строка, содержащая символ новой строки ASCII, не нарушает синтаксический анализатор). [Если ваш COBOL не является IBM COBOL, это вам не поможет, но в противном случае вам не «придется тратить много часов, чтобы что-то получить»].

Мы думаем, что метод обнаружения на основе AST обнаруживает лучшие клоны более точно, чем обнаружение на основе токенов ConQat. Сайт подробно объясняет, почему, и показывает образцы клонов COBOL, обнаруженных с помощью CloneDR.

Специально для OP, который, похоже, работает в Японии: в качестве бонуса CloneDR обрабатывает японские наборы символов, потому что он реализован поверх базовая инфраструктура инструмента, поддерживающая Unicode и Shift-JIS. У нас не было большого опыта работы с японским COBOL, так что может остаться глюк; см. литералы G с японскими символами.

person Ira Baxter    schedule 26.06.2012