Проверка структурных закономерностей в контрактах на изменение программного обеспечения

Я делаю свой проект, чтобы создать инструмент, который может находить изменения в структурных закономерностях (структурные закономерности - это правила, которые должны соблюдаться в исходном коде) между двумя версиями конкретного программного обеспечения и проверять, не нарушала ли самая новая версия структурные закономерности. старой версии.

Я использую язык запросов под названием EKEKO (Метапрограммирование библиотеки Clojure в рабочей области Eclipse). Я создал предикаты, которые я собираюсь использовать, а также я могу найти разницу между двумя версиями.

Но моя проблема в том, чтобы найти способ сказать, например: все методы, вызываемые toString в старой версии должно быть новое имя, которое print, Поэтому в этом случае мне нужно проверить, соответствует ли новая версия структурному договору (о соглашениях об именах).

(defn differenceInContract1 
    [?projectName1 ?projectName2 f]
    (def result1 (projectResults ?projectName1 f))
    (def result2 (projectResults ?projectName2 f))

    (def tuple1 (set (map (partial map str) result1)))
    (def tuple2 (set (map (partial map str) result2)))
    (clojure.set/difference tuple1 tuple2))

В предыдущем коде я могу различить две версии проекта. Что мне нужно сделать, это будет что-то вроде следующего кода:

(defn changeContract
    [?proj1 ?proj2 f1 f2]
    (and (projectResults ?projec1 f1)
         (projectResults ?projec2 f2)))

Где projectResults применить среду Ekeko к данному проекту и найти результат указанного предиката, который в этом случае (f1 и f2).

Но я также должен быть осторожен с операцией сравнения, потому что один и тот же класс в разных проектах не означает, что они равны.

Любые идеи, которые помогут мне двигаться дальше? Заранее спасибо!

0 ответов

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