Как заставить сплав работать с набором данных, чтобы проверить все правила

Я создал программу сплава для проверки некоторых правил системы. Теперь я хочу проверить правила в реальной системе. Для этого у меня есть все данные из реальной системы. Например,

Мой инструмент сплава проверяет правила поиска общего друга между двумя пользователями. Я могу сделать это, дав простое правило сплава. Теперь я хочу проверить это на большом наборе данных. Предположим, у меня есть набор данных друзей в Facebook. Теперь, как я могу передать свой набор данных Facebook в сплав для поиска общего друга пользователя Facebook с помощью Alloy.

Можно ли будет написать оболочку javascript/python/java, чтобы сделать связь между моим анализатором сплавов и данными json?


person faysal    schedule 05.05.2019    source источник


Ответы (2)


ИМХО, Alloy не подходит для анализа больших наборов данных.

При этом я считаю, что вы могли бы использовать aRby, встраивание Alloy на Ruby, который позволит вам не только заскриптовать импорт вашего набора данных, но и указать так называемые «частичные экземпляры», т.е. экземпляры, частично заполненные вашими данными, которые можно дополнить анализом.

Если вы предпочитаете использовать Java, вы можете работать напрямую с Alloy API (добавьте банку Alloy в путь сборки проекта).

Прежде чем начать, убедитесь, что масштабируемость не является ключевым требованием, поскольку оба подхода, безусловно, потребуют от вас определенного объема работы и самоотверженности при их реализации.

person Loïc Gammaitoni    schedule 06.05.2019
comment
Спасибо за вашу помощь и ссылки. Я хотел бы сначала использовать Java, так как мне удобно с этим языком по сравнению с Ruby. Можете ли вы указать мне пример кода, который будет полезен для решения моей проблемы? На данный момент я скачал JAR-файл из банки Alloy 4.2. - person faysal; 06.05.2019
comment
В скачанном вами банке пакет edu.mit.csail.sdg.alloy4whole содержит примеры. ExampleUsingTheAPI.java может быть хорошим началом. - person Loïc Gammaitoni; 07.05.2019

Я работал над правильным API для Alloy, в настоящее время он находится в PR. на Гитхабе. С этим API довольно легко использовать Alloy в качестве верификатора.

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

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

person Peter Kriens    schedule 06.05.2019
comment
Спасибо. Я ценю ваше предложение за помощь мне. Я прошел через ваш сайт github. У вас есть пример использования этого API в проекте? - person faysal; 06.05.2019
comment
Как говорится, работа в процессе. Однако вы можете посмотреть на проект org.alloytools.alloy.classic.test. Он содержит ряд тестовых случаев. Я попытался сделать javadoc в проекте org.alloytools.alloy.api максимально понятным. - person Peter Kriens; 07.05.2019
comment
В реальной жизни набор больших данных, как упоминалось в OP, может легко достигать миллиона записей. В прошлый раз, когда я пытался проанализировать даже не очень большой файл xml в A4Solution, я столкнулся с проблемами масштабируемости: instance-using-a4solutionrea" title="capacityexceededexception при чтении очень большого экземпляра с использованием a4solutionrea"> stackoverflow.com/questions/35703242/ - person Loïc Gammaitoni; 07.05.2019
comment
Кроме того, я считаю, что OP заинтересован в том, чтобы сделать больше, чем простая проверка (например, получение общих друзей из дружеских отношений). - person Loïc Gammaitoni; 07.05.2019
comment
Я думаю, что это допустимые варианты использования, поэтому мы должны попытаться заставить их работать. Я определил интерфейсы для важных классов. Это делает теоретически возможным определение «ленивого» TupleSet, отображаемого файлами. Это один из драйверов попытки API. Просто вопрос времени. - person Peter Kriens; 07.05.2019