WikiDer > Java Pathfinder
Разработчики) | НАСА |
---|---|
Стабильный выпуск | 6.0 / 30 ноября 2010 г. |
Написано в | Ява |
Операционная система | Кроссплатформенность |
Размер | 1,6 МБ (в архиве) |
Тип | Проверка программного обеспечения инструмент, Виртуальная машина |
Лицензия | Лицензия Apache версии 2 |
Интернет сайт | https://github.com/javapathfinder/ |
Java Pathfinder (JPF) - это система проверки исполняемого файла Байт-код Java программы. JPF был разработан в НАСА Исследовательский центр Эймса и был открыт в 2005 году. Аббревиатуру JPF не следует путать с несвязанными Платформа плагинов Java проект.
Ядром JPF является Виртуальная машина Java. JPF выполняет нормально Байт-код Java программ и может сохранять, сопоставлять и восстанавливать состояния программ. Его основное применение было Проверка модели из параллельные программы, чтобы найти такие дефекты, как гонки данных и тупиковые ситуации. С соответствующими расширениями JPF также может использоваться для множества других целей, включая
- проверка моделей распределенных приложений
- модельная проверка пользовательских интерфейсов
- генерация тестового случая с помощью символьного выполнения
- проверка программы низкого уровня
- программный инструментарий и мониторинг времени выполнения
JPF не имеет фиксированного понятия ветвей пространства состояний и может обрабатывать как данные, так и варианты планирования.
Пример
Следующая тестируемая система содержит простое условие гонки между двумя потоки доступ к той же переменной d
в утверждениях (1) и (2), что может привести к делению на ноль исключение если (1) выполняется до (2)
общественный учебный класс Гонщик орудия Работоспособен { int d = 42; общественный пустота пробег () { сделай что-нибудь(1001); d = 0; // (1) } общественный статический пустота главный (Нить[] аргументы){ Гонщик гонщик = новый Гонщик(); Нить т = новый Нить(гонщик); т.Начните(); сделай что-нибудь(1000); int c = 420 / гонщик.d; // (2) Система.из.println(c); } статический пустота сделай что-нибудь (int п) { пытаться { Нить.спать(п); } ловить (InterruptedException ix) {} }}
Без какой-либо дополнительной настройки JPF найдет и сообщит о делении на ноль. Если JPF настроен для проверки отсутствия условий гонки (независимо от их потенциальных последствий в нисходящем направлении), он выдаст следующий вывод, объясняющий ошибку и показывающий пример счетчика, ведущего к ошибке
JavaPathfinder v6.0 - (C) RIACS / NASA Ames Research Center ==================================== ================== тестируемая система: Racer.java ... ====================== ================================ error # 1gov.nasa.jpf.listener.PreciseRaceDetectorrace для поля [email protected] main на Racer.main (Racer.java:16) "int c = 420 / racer.d;": getfield Thread-0 на Racer.run (Racer.java:7) "d = 0;": putfield === ================================================== = трассировка # 1 ---- переход # 0 поток: 0 ...---- переход # 3 поток: 1gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet [id = "sleep", isCascaded: false, {main ,> Thread-0}] [3 insn без источников] Racer.java:22: попробуйте {Thread.sleep (n); } catch (InterruptedException ix) {} Racer.java:23:} Racer.java:7: d = 0; ...---- transition # 5 thread: 0gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet [id = "sharedField", isCascaded: false, {> main, Thread-0}] Racer.java:16: int c = 420 / гонщик.d;
Расширяемость
JPF - это открытая система, которую можно расширять множеством способов. Основные конструкции расширения:
- слушатели - для реализации сложных свойств (например, временных свойств)
- сверстники - для выполнения кода на уровне хоста JVM (вместо JPF), который в основном используется для реализации собственных методов
- фабрики байт-кода - для обеспечения альтернативной семантики выполнения инструкций байт-кода (например, для реализации символьного выполнения)
- генераторы выбора - для реализации ветвей пространства состояний, таких как выбор расписания или наборы значений данных
- сериализаторы - реализовать абстракции состояния программы
- издатели - для создания различных форматов вывода
- политика поиска - использовать различные алгоритмы обхода пространства состояний программы
JPF включает систему модулей времени выполнения для упаковки таких конструкций в отдельные Проекты расширения JPF. Ряд таких проектов доступен на основном сервере JPF, включая символьный режим выполнения, числовой анализ, обнаружение состояния гонки для расслабленных моделей памяти, проверку модели пользовательского интерфейса и многое другое.
Ограничения
- JPF не может анализировать Собственные методы Java. Если тестируемая система вызывает такие методы, они должны быть предоставлены в одноранговых классах или перехвачены слушателями.
- как средство проверки моделей JPF восприимчив к Комбинаторный взрыв, хотя он работает на лету Частичное сокращение заказа
- система конфигурации для модулей JPF и параметров времени выполнения может быть сложной
Смотрите также
- Лунатик - аналогично Java PathFinder, но для программ .NET вместо программ Java
внешняя ссылка
- Новое программное обеспечение НАСА обнаруживает «ошибки» в компьютерном коде Java
- НАСА разрабатывает новое программное обеспечение для обнаружения «ошибок» в компьютерном коде Java
Рекомендации
- Виллем Виссер, Корина С. Пэсэряну, Сарфраз Хуршид. Создание тестового ввода с помощью Java PathFinder. В: Джордж С. Аврунин, Грегг Ротермел (ред.): Материалы Международного симпозиума ACM / SIGSOFT по тестированию и анализу программного обеспечения 2004 г. ACM Press, 2004 г. ISBN 1-58113-820-2.
- Виллем Виссер, Клаус Хавелунд, Гийом Брат, Сынджун Парк, Флавио Лерда, Программы проверки моделей, Автоматизированная разработка программного обеспечения 10 (2), 2003.
- Клаус Хавелунд, Виллем Виссер, Проверка модели программы как новая тенденция, STTT 4 (1), 2002.
- Клаус Хавелунд, Томас Прессбургер, Проверка моделей Java-программ с использованием Java PathFinder, STTT 2 (4), 2000.