Насколько я знаю, теперь есть способ сравнить семантику двух классов Java.Возьмем, к примеру, следующие два метода:
public String m1(String a, int b) { ... }
и
public String m2(String x, int y) { ... }
Часть из изменений в именах переменных и методов, их сигнатура одинакова: тот же тип возврата и тот же вводтипы.Однако это не является гарантией того, что оба метода семантически эквивалентны.Например, m1
может возвращать строку, состоящую из первых b
символов a
, в то время как m2
может возвращать строку, состоящую из y
повторений x
.Как видите, хотя меняются только переменные и имена, семантика двух методов совершенно различна.
Я не вижу легкого выхода из вашей проблемы.Возможно, вы можете сделать некоторое предположение и попробовать следующий подход:
- предположить, что имена методов в двух классах одинаковы
- записать тестовые случаи (например, с JUnit) для всехметоды в первом классе
- запускают контрольные примеры во втором классе
- гарантируют, что во втором классе нет других (непроверенных) методов (например, с использованием отражения)
Этот подход дает вам представление об эквивалентной семантике, но он делает серьезное предположение.
В качестве последнего замечания позвольте мне добавить, что указание семантики программ является интересной и открытой темой исследования.Некоторые интересные разработки в этой области включают исследование Semantic Web Services .Широко принятый подход для придания программам семантики, обрабатываемой машиной, заключается в определении их IOPE: типов ввода и вывода (как в приведенных выше методах Java), а также их предварительных условий и эффектов.Предварительные условия - это, по сути, логические условия, которые должны выполняться для успешного вызова программы, а эффекты - это формальное описание изменений (в состоянии мира), вызванных успешным выполнением программы.Даже с IOPE есть много проблем ... которые я пропускаю в этом коротком описании.