Jump to content

Java-следопыт

Java-следопыт
Разработчик(и) НАСА
Стабильная версия
6.0 / 30 ноября 2010 г. ( 30.11.2010 )
Написано в Ява
Операционная система Кросс-платформенный
Размер 1,6 МБ (в архиве)
Тип проверки программного обеспечения Инструмент , виртуальная машина
Лицензия Лицензия Apache версии 2
Веб-сайт https://github.com/javapathfinder/

Java Pathfinder (JPF) — это система проверки исполняемых программ Java с байт-кодом . JPF был разработан в НАСА Исследовательском центре Эймса и открыт в 2005 году. Аббревиатуру JPF не следует путать с несвязанным проектом Java Plugin Framework .

Ядром JPF является виртуальная машина Java . JPF выполняет обычные программы с байт-кодом Java и может сохранять, сопоставлять и восстанавливать состояния программы. Его основным применением была проверка моделей параллельных программ для обнаружения дефектов, таких как гонки данных и взаимоблокировки . С соответствующими расширениями JPF также можно использовать для множества других целей, включая

  • проверка модели распределенных приложений
  • проверка моделей пользовательских интерфейсов
  • генерация тестовых примеров посредством символьного выполнения
  • проверка программы низкого уровня
  • инструментирование программы и мониторинг времени выполнения

JPF не имеет фиксированного понятия ветвей пространства состояний и может обрабатывать как данные, так и варианты планирования.

Следующая тестируемая система содержит простое состояние гонки между двумя потоками, обращающимися к одной и той же переменной. d деления на ноль, в операторах (1) и (2), что может привести к исключению если (1) выполняется до (2)

public class Racer implements Runnable {
     int d = 42;

     public void run() {
          doSomething(1001);
          d = 0;                              // (1)
     }

     public static void main(String[] args) {
          Racer racer = new Racer();
          Thread t = new Thread(racer);
          t.start();

          doSomething(1000);
          int c = 420 / racer.d;              // (2)
          System.out.println(c);
     }
     
     static void doSomething(int n) {
          try { Thread.sleep(n); } catch (InterruptedException ix) {}
     }
}

Без какой-либо дополнительной настройки JPF найдет и сообщит о делении на ноль. Если JPF настроен на проверку отсутствия условий гонки (независимо от их потенциальных последствий в дальнейшем), он выдаст следующий вывод, объясняющий ошибку и показывающий встречный пример, приводящий к ошибке.

JavaPathfinder v6.0 - (C) RIACS/NASA Ames Research Center
====================================================== system under test
application: Racer.java
...
====================================================== error #1
gov.nasa.jpf.listener.PreciseRaceDetector
race for field [email protected]
  main at Racer.main(Racer.java:16)
		"int c = 420 / racer.d;               "  : getfield
  Thread-0 at Racer.run(Racer.java:7)
		"d = 0;                               "  : putfield

====================================================== trace #1
---- transition #0 thread: 0
...
---- transition #3 thread: 1
gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet[id="sleep",isCascaded:false,{main,>Thread-0}]
      [3 insn w/o sources]
  Racer.java:22                  : try { Thread.sleep(n); } catch (InterruptedException ix) {}
  Racer.java:23                  : }
  Racer.java:7                   : d = 0;                      
...
---- transition #5 thread: 0
gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet[id="sharedField",isCascaded:false,{>main,Thread-0}]
  Racer.java:16                  : int c = 420 / racer.d;

Расширяемость

[ редактировать ]

JPF — открытая система, которую можно расширять различными способами. Основные конструкции расширения:

  • слушатели — для реализации сложных свойств (например, временных свойств)
  • одноранговые классы — для выполнения кода на уровне JVM хоста (вместо JPF), который в основном используется для реализации собственных методов.
  • фабрики байт-кода — для обеспечения альтернативной семантики выполнения инструкций байт-кода (например, для реализации символьного выполнения)
  • генераторы выбора - для реализации ветвей пространства состояний, таких как выбор планирования или наборы значений данных.
  • сериализаторы — для реализации абстракций состояния программы.
  • издатели - для создания различных выходных форматов
  • политики поиска - использовать различные алгоритмы обхода пространства состояний программы.

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

Ограничения

[ редактировать ]
  • JPF не может анализировать собственные методы Java . Если тестируемая система вызывает такие методы, они должны быть предоставлены в одноранговых классах или перехвачены слушателями.
  • в качестве средства проверки модели JPF подвержен комбинаторному взрыву , хотя он выполняет на лету частичное уменьшение порядка.
  • система конфигурации модулей JPF и параметров времени выполнения может быть сложной

См. также

[ редактировать ]
  • MoonWalker — аналог Java PathFinder, но для программ .NET вместо программ 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.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3c0eff32efcb0c30cbdc395ffd631cac__1706205540
URL1:https://arc.ask3.ru/arc/aa/3c/ac/3c0eff32efcb0c30cbdc395ffd631cac.html
Заголовок, (Title) документа по адресу, URL1:
Java Pathfinder - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)