Java Yol Bulucu - Java Pathfinder

Java Yol Bulucu
Geliştirici (ler)NASA
Kararlı sürüm
6.0 / 30 Kasım 2010 (2010-11-30)
YazılmışJava
İşletim sistemiÇapraz platform
Boyut1,6 MB (arşivlenmiş)
TürYazılım doğrulama araç Sanal makine
LisansApache Lisans Sürümü 2
İnternet sitesihttps://github.com/javapathfinder/

Java Yol Bulucu (JPF), çalıştırılabilirliği doğrulamak için bir sistemdir Java bayt kodu programları. JPF şu tarihte geliştirildi: NASA Ames Araştırma Merkezi ve 2005 yılında açık kaynaklı. JPF kısaltması, ilgisiz ile karıştırılmamalıdır. Java Eklenti Çerçevesi proje.

JPF'nin özü bir Java Sanal Makinesi. JPF normal şekilde çalışır Java bayt kodu programlar ve program durumlarını saklayabilir, eşleştirebilir ve geri yükleyebilir. Birincil uygulaması Model kontrolü nın-nin eşzamanlı programlar gibi kusurları bulmak için veri yarışları ve kilitlenmeler. İlgili uzantılarıyla JPF, aşağıdakiler dahil çeşitli başka amaçlar için de kullanılabilir:

  • dağıtılmış uygulamaların model kontrolü
  • kullanıcı arayüzlerinin model kontrolü
  • sembolik yürütme yoluyla test senaryosu oluşturma
  • düşük seviye program denetimi
  • program enstrümantasyonu ve çalışma zamanı izleme

JPF'nin sabit durum alanı dalları kavramı yoktur ve hem verileri hem de zamanlama seçeneklerini işleyebilir.

Misal

Aşağıdaki test edilen sistem, ikisi arasındaki basit bir yarış durumunu içerir İş Parçacığı aynı değişkene erişmek d (1) ve (2) numaralı ifadelerde, sıfıra bölünmeye yol açabilir istisna (1), (2) 'den önce yürütülürse

halka açık sınıf Yarışçı uygular Runnable {     int d = 42;     halka açık geçersiz koşmak () {          bir şey yap(1001);          d = 0;                              // (1)     }     halka açık statik geçersiz ana (Dize[] argümanlar){          Yarışçı yarışçı = yeni Yarışçı();          Konu t = yeni Konu(yarışçı);          t.Başlat();          bir şey yap(1000);          int c = 420 / yarışçı.d;              // (2)          Sistem.dışarı.println(c);     }          statik geçersiz bir şey yap (int n) {          Deneyin { Konu.uyku(n); } tutmak (Kesilen İstisna ix) {}     }}

Herhangi bir ek yapılandırma olmadan, JPF bölümü sıfıra göre bulur ve bildirir. JPF, yarış koşullarının yokluğunu doğrulayacak şekilde yapılandırılmışsa (potansiyel aşağı akış etkilerinden bağımsız olarak), aşağıdaki çıktıyı üretecek, hatayı açıklayacak ve hataya yol açan bir karşı örnek gösterecektir.

JavaPathfinder v6.0 - (C) RIACS / NASA Ames Araştırma Merkezi ==================================== ================== test edilen sistem: Racer.java ... ====================== ================================ error # 1gov.nasa.jpf.listener.PreciseRaceDetectorrace for field [email protected] main at Racer.main (Racer.java:16) "int c = 420 / racer.d;": Racer.run'da getfield Thread-0 (Racer.java:7) "d = 0;": putfield === ================================================ = trace # 1 ---- geçiş # 0 iş parçacığı: 0 ...---- geçiş # 3 iş parçacığı: 1gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet [id = "uyku", isCascaded: false, {ana ,> Thread-0}] [Kaynaklar olmadan 3 insn] Racer.java:22: {Thread.sleep (n); } catch (InterruptedException ix) {} Racer.java:23:} Racer.java:7: d = 0; ...---- geçiş # 5 iş parçacığı: 0gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet [id = "sharedField", isCascaded: false, {> main, Thread-0}] Racer.java:16: int c = 420 / yarışçı.d;

Genişletilebilirlik

JPF, çeşitli şekillerde genişletilebilen açık bir sistemdir. Ana uzantı yapıları

  • dinleyiciler - karmaşık özellikleri uygulamak için (örneğin, geçici özellikler)
  • akran sınıfları - çoğunlukla yerel yöntemleri uygulamak için kullanılan ana bilgisayar JVM düzeyinde (JPF yerine) kod yürütmek için
  • bayt kodu fabrikaları - bayt kodu komutlarının alternatif yürütme semantiğini sağlamak için (ör. sembolik yürütmeyi gerçekleştirmek için)
  • seçim üreteçleri - zamanlama seçenekleri veya veri değeri kümeleri gibi durum alanı dallarını uygulamak için
  • serileştiriciler - program durumu soyutlamalarını uygulamak için
  • yayıncılar - farklı çıktı formatları üretmek için
  • arama politikaları - farklı program durumu uzay geçiş algoritmalarını kullanmak için

JPF, bu tür yapıları ayrı ayrı paketlemek için bir çalışma zamanı modülü sistemi içerir. JPF uzatma projeleri. Sembolik bir yürütme modu, sayısal analiz, rahat bellek modelleri için yarış durumu tespiti, kullanıcı arayüzü model kontrolü ve çok daha fazlasını içeren bu tür bir dizi proje ana JPF sunucusundan temin edilebilir.

Sınırlamalar

  • JPF analiz edemez Java yerel yöntemleri. Test edilen sistem bu tür yöntemleri çağırırsa, bunlar eş sınıflar içinde sağlanmalı veya dinleyiciler tarafından durdurulmalıdır.
  • bir model denetleyicisi olarak JPF, Kombinatoryal patlama anında performans göstermesine rağmen Kısmi sipariş azaltma
  • JPF modülleri ve çalışma zamanı seçenekleri için konfigürasyon sistemi karmaşık olabilir

Ayrıca bakınız

Dış bağlantılar

Referanslar

  • Willem Visser, Corina S. Păsăreanu, Sarfraz Khurshid. Java PathFinder ile Girdi Oluşturmayı Test Edin. In: George S. Avrunin, Gregg Rothermel (Eds.): ACM / SIGSOFT Uluslararası Yazılım Test ve Analizi Sempozyumu Bildirileri 2004. ACM Press, 2004. ISBN  1-58113-820-2.
  • Willem Visser, Klaus Havelund, Guillaume Brat, Seungjoon Park, Flavio Lerda, Model Kontrol Programları, Otomatik Yazılım Mühendisliği 10 (2), 2003.
  • Klaus Havelund, Willem Visser, Yeni Bir Trend Olarak Program Modeli Kontrolü, STTT 4 (1), 2002.
  • Klaus Havelund, Thomas Pressburger, Java PathFinder kullanarak Java Programlarının Model Kontrolü, STTT 2 (4), 2000.