Проверка структурных закономерностей в контрактах на изменение программного обеспечения
Я делаю свой проект, чтобы создать инструмент, который может находить изменения в структурных закономерностях (структурные закономерности - это правила, которые должны соблюдаться в исходном коде) между двумя версиями конкретного программного обеспечения и проверять, не нарушала ли самая новая версия структурные закономерности. старой версии.
Я использую язык запросов под названием 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).
Но я также должен быть осторожен с операцией сравнения, потому что один и тот же класс в разных проектах не означает, что они равны.
Любые идеи, которые помогут мне двигаться дальше? Заранее спасибо!