特定のソフトウェアの 2 つのバージョン間の構造的規則性 (構造的規則性はソース コードで従わなければならない規則) の変更を見つけ、最新バージョンが構造的規則性に違反しているかどうかを確認できるツールを作成するプロジェクトを行っています。古いバージョンの。
私はEKEKO
(Eclipseワークスペースに対するClojureライブラリメタプログラミング)と呼ばれるクエリ言語を使用しています。使用する述語を作成しました。また、2 つのバージョンの違いを見つけることができます。
しかし、私の問題は、たとえば、古いバージョンで呼び出されたすべてのメソッド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))
前のコードでは、プロジェクトの 2 つのバージョンの違いを取得できます。私がする必要があるのは、次のコードのようなものです。
(defn changeContract
[?proj1 ?proj2 f1 f2]
(and (projectResults ?projec1 f1)
(projectResults ?projec2 f2)))
projectResults は、指定されたプロジェクトに Ekeko 環境を適用し、指定された述語 (この場合は f1 と f2) の結果を見つけます。
しかしまた、異なるプロジェクトで同じクラスが同じであることを意味しないため、比較操作には注意が必要です。
先に進むのに役立つアイデアはありますか? 前もって感謝します!