aicas news - aicas.com

Werbung
aicas news l Sommer 2010
aicas
realtime
aicas news
News für Software-Entwickler kritischer Anwendungen Editorial
JamaicaVM 6.0 jetzt erhältlich
Liebe Leser,
JamaicaVM integriert OpenJDK
kürzere Innovationszyklen erhöhen den
Druck, qualitativ hochwertige Anwendungen in immer kürzerer Zeit zu produzieren. Die Kundenwünsche wachsen und der Wettbewerb wird härter.
Zur Steigerung der Produktivität sind
gute Werkzeuge daher unabdingbar.
Version 6.0 von JamaicaVM, der hart
echtzeitfähigen „Embedded Java“-Lösung von aicas, ist nun erhältlich. Die
neue Version unterstützt den Java 1.6
Standard, was durch den Versionssprung von 3.4 auf 6.0 verdeutlicht wird.
Wir bieten Ihnen Werkzeuge, mit denen
Sie diese Herausforderung bewältigen
können. Die jüngste Version der JamaicaVM ist nicht nur die bisher vollständigste „Embedded Java“-Plattform. Mit
Features wie Smart Linking und einem
effizienten Compiler ist sie optimiert,
um maximale Leistung bei minimalem
Speicherverbrauch und kürzester Startzeit zu erzielen. Unser neues Werkzeug
VeriFlux hilft Ihnen, Fehler in Ihrer Anwendung aufzuspüren ud somit die
Qualität Ihrer Produkte noch weiter zu
verbessern.
Neben der Vorstellung dieser neuen
und erweiterten Produkte werfen wir in
dieser Ausgabe einen Blick auf die Neuerungen in den Zertifizierungsstandards
der Luftfahrtindustrie und deren Auswirkungen auf die Software-Entwicklung. Ebenso wie gute Werkzeuge sind
gut durchdachte Klassenhierarchien entscheidend für die Zertifizierung.
Ich hoffe, Sie finden die Artikel in unserem Newsletter hilfreich und freue
mich auf Ihr Feedback.
Dr. James J. Hunt, CEO aicas
Sommer 2010
Das aicas-Team hat die Umstellung der
JamaicaVM von Classpath-basierenden
Standardklassen auf OpenJDK-Klassen nun vollendet. Ermöglicht wurde dies durch die Veröffentlichung von SUNs
Standardklassen unter der Classpath-Lizenz, welche die Verwendung auch in
kommerziellen Projekten gestattet. Alle
Änderungen, die das aicas-Team an dieser Code-Basis vorgenommen hat, wurden an die Community weitergegeben,
um sie in neue
OpenJDK-Versionen einfliessen zu
lassen.
Ergänzt
wurde
Ja-
maicaVM 6 um Optimierungen an der
eigenen RTSJ-Implementierung, Speicherverwaltung und statischen Kompilierung. Auch die Unterstützung für einige Betriebssysteme wurde deutlich
verbessert. Im Vergleich zur Vorgängerversion konnte JamaicaVM 6.0 seinen Wettbewerbsvorsprung hinsichtlich
Echtzeitfähigkeit und Portierbarkeit sogar noch ausbauen.
Markenzeichen von aicas‘ Echtzeit-Java-Technologie war stets die breite Verfügbarkeit auf einer großen Anzahl
verschiedener Betriebssysteme und Prozessorarchitekturen. JamaicaVM 6.0 ergänzt nun die bislang fehlende Grafikunterstützung unter Windows und
QNX Neutrino. Bei QNX können sowohl Photon als auch GF als mögliche
Grafikbibliotheken vom System angesteuert werden. VxWorks, WindowsCE, Linux, Solaris und OS9 werden selbstverständlich auch
weiterhin mit Grafik unterstützt.
Alle Grafikplattformen profitieren
von der erweiterten Implementierung von AWT, Swing und Java2D.
Darüber hinaus bietet JamaicaVM auch Unterstützung für verschiedene Versionen von OpenGL
zur 3D-Darstellung. Dies eröffnet neue
Möglichkeiten für Embedded-Grafik
mit Java, inklusive OpenGL ES sowie
OpenGL SC für kritische Systeme. Weitere Informationen zu OpenGL finden
Sie auf der Rückseite.
Eine voll funktionsfähige Evaluierungsversion von JamaicaVM 6.0 steht online
bereit unter:
http://www.aicas.com/download.html
News
Echtzeit-Java in der Luftfahrt
GL Studio für JamaicaVM
JamaicaVM für Multicore
Die neue “Object Oriented and Related
Technology”-Ergänzung zu DO-178C/ED12C wurde vom SC-205/WG-71 Plenum
verabschiedet. Dieses Dokument bereitet
den Weg für die Nutzung von EchtzeitJava-Technologie mit deterministischer
Speicherverwaltung. Durch konsistenter
Regeln zur Zertifizierung von Interpretern
und deterministischer Speicherverwaltung
wird die Nutzung von Java-Technologie in
sicherheitskritischen Systemen stark vereinfacht.
GL Studio 4 von DiSTI kann nun mit JamaicaVM 6.0 auf OpenGL-Plattformen genutzt werden. Das GUI erleichtert die Entwicklung von OpenGL-Anwendungen, die
aus grafischen Objekten zusammengesetzt
und wiederverwendet werden können.
Das Werkzeug ermöglicht Entwicklern die
schnelle und effiziente Erstellung von Anzeigen für echtzeit- und eingebettete JavaProgramme. Auf der Rückseite ist eine mit
GL Studio erstellte Anwendung zu sehen,
die von JamaicaVM ausgeführt wird.
JamaicaVM für Multicore- und Multiprozessorsysteme mit Intel x86-Prozessoren
wurde erfolgreich von ersten Pilotkunden getestet. Die Speicherverwaltung ist
vollständig parallelisiert, so dass einer
oder mehrere Prozessoren einen Teil der
Speicherbereinigung simultan durchführen können ohne andere Prozessoren zu
stören. Somit können optimale Leistung
und kurze Antwortzeiten erreicht werden.
Versionen für andere Prozessoren werden
im Laufe des Jahres verfügbar sein.
aicas news l Sommer 2010
Design einer sicheren Klassenhierarchie
Die Bedeutung der DO-178C für objekt-orientierte Techologie in Avionik-Software
Das „Joint Avionics“-Plenum ist dabei, die
neuen Zertifizierungsstandards für Avionik-Software fertigzustellen. Der neue
Standard soll Ende des Jahres verabschiedet werden. Dies wirkt sich nicht nur auf
die Richtlinien für „in-flight“- und Bodenbasierte Software aus, sondern auch auf
Software-Entwicklung für andere sicherheitskritische Anwendungsgebiete.
Während die derzeitigen Zertifizierungsstandards auf prozeduralen Paradigmen
beruhen, sind die neuen Standards allgemeiner. Die Änderungen erweitern die bestehenden Richtlinien für Software-Zertifizierung in der Luftfahrt und bieten
verschiedene Technologie-spezifische Ergänzungen. Dazu gehören WerkzeugQualifizierung, Modell-basierte Entwicklung, objektorienterte und verwandte
Technologien, sowie formale Methoden.
Für den Einsatz von Echtzeit-Java sind alle
diese Ergänzungen relevant. Am wichtigsten ist dabei die „Object Oriented and Related Technology (OOT)“-Ergänzung.
Die OOT-Ergänzung liefert das nötige Framework, um in Java geschriebene Avionik-Software zu zertifizieren. Sie enthält
klare Richtlinien für die Zertifizierung eines
Echtzeit-Garbage-Collectors, beispielsweise den work-based Garbage-Collector in
JamaicaVM. Andere Aspekte der Zertifizierung einer Java Virtual Machine (JVM), wie
z.B. Interpretation, werden ebenfalls abgedeckt. Diese Änderungen werden das
Risiko für den Einsatz von Echtzeit-JavaTechnologie in der Luftfahrt eliminieren.
Folgt ein JVM-Anbieter den Richtlinien des
Tools-Supplement, kann er die Kosten der
Zertifizerung über mehrere Projekte hinweg amortisieren, und reduziert dabei die
Kosten der einzelnen Projekte. Der Einsatz von Java-Technologie in sicherheitskritischen Projekten kann die Produktivität
als auch die Stabilität der Anwendungen
verbessern.
Um davon zu profitieren, ist ein Umdenken bei der Entwicklung von Avionik-Software erforderlich. Verglichen mit prozeduralen Sprachen ermöglicht OOT bessere
Kapselung und bedeutet gleichzeitig einen
dynamischeren Kontrollfluss. Dies ist das
zentrale Feature objekt-orientierten Designs und Programmierens und beeinflusst
die Entwicklung von Anwendungs-Code
am stärksten.
“Dynamic Dispatch” und Sicherheit
Die „Safety Critical Community“ hat bisher
objekt-orientierte Technologie mit Skepsis
betrachtet. Die Sorge galt vor allem der sicheren Nutzung von Vererbung, „Method
Override“ und dem in Java für Methoden
Aufrufe verwendeten „Dynamic Dispatch“.
SC-205/WG-71 Plenary
DO-178B/ED-12B
DO-248/ED-109
Mit diesen Features ist bei lokaler CodeBetrachtung nicht erkennbar, welche Methode tatsächlich an einem beliebigen
„Call Point“ ausgeführt wird. Oft wird aber
übersehen, dass „Dynamic Dispatch“ sicherstellt, dass der zur Bearbeitung jedes
Datentyps richtige Code ausgeführt wird.
Da Code direkt mit den Daten verbunden
ist, auf denen er arbeitet, wird es viel einfacher zu verstehen, was für diese Daten
gemacht werden muss. Es ist kein Zufall,
dass die am weitesten verbreitete Modellierungssprache Unified Modeling Language (UML), eine objekt-orientierte Sprache
ist. Richtig genutzt kann objekt-orientierte
Programmierung die verbesserte Modularität nutzen, um die Sicherheit und Robustheit von Programmen zu erhöhen.
Das liskovsche Substitutionsprinzip
Die Frage ist, was macht die vernünftige
Nutzung von Vererbung, „Method Overriding“ und „Dynamic Dispatch“ aus?
Wenn diese Frage nicht beantwortet werden könnte, dann müsste man jeden möglichen Dispatch an jedem „Call Point“ testen, analog zum Test verschachtelter
Anweisungen. Darauf zu bestehen würde
eine kombinatorische Explosion von Testfällen hervorrufen. Zum Glück gibt es eine
Antwort: Nutzen Sie das Typensystem um
sicheres Dispatching zu gewährleisten.
Viele objekt-orientierte Sprachen, wie Java,
C++ und Object Ada, besitzen statische Typisierung. Das Typsystem stellt sicher, dass
nur die deklarierte Klasse oder eine ihrer
Unterklassen zu jedem Zeitpunkt im Programm genutzt werden kann. Mit anderen Worten, wenn eine Variable oder ein
Feld als Klasse „A“ deklariert ist, dann können nur Instanzen von „A“ oder eine ihrer
Unterklassen dieser Variable oder diesem
Feld zugeordnet werden. Aus der Typisierungsperspektive ist eine Unterklasse einer Klasse ein Untertyp dieser Klasse. Dies reduziert die Zahl der beim Aufruf einer
überladenen Methode in Frage kommenden Implementierungen erheblich.
Damit ein Typ ein korrekter Untertyp
ist, muss er das gleiche Verhalten wie jeder seiner Obertypen zeigen. Mit anderen Worten, jeder Untertyp eines bestimmten Typen sollte an jeder Stelle nutzbar
sein, an der dieser Typ verwendet wird. Eine Unterklasse, die sich nicht an das Prinzip der Ersetzbarkeit hält, ist unzulässig, da
sie das Typsystem unsicher machen würde: Die Typenprüfung kann derartige Fehler nicht erkennen.
Dieses Prinzip, als liskovsches Substitutionsprinzip (LSP) bekannt, definiert formal,
was einen korrekten Untertypen auszeichnet. Liskov formulierte das Prinzip kurz
und bündig:
Sei q(x) eine beweisbare Eigenschaft von
Objekten x des Typs T. Dann soll auch q(y)
für Objekte y des Typs S wahr sein, wobei S
ein Untertyp von T ist.
Das LSP definiert die Grenzen des Verhaltens einer Unterklasse. Jede Methode, die in einer Unterklasse neu definiert wurde, muss die Anforderungen der
gleichen Methode in jeder ihrer Oberklassen erfüllen:
• Vorbedingungen können nicht gestärkt,
• Nachbedingungen nicht geschwächt
werden.
Zusätzlich dürfen Invarianten, die auf dem
Zustand einer Klasse definiert sind, nicht
geschwächt werden.
Das LSP ist der Schlüssel um sicherzustellen, dass Vererbung, „Method Overriding“
und „Dynamic Dispatch“ sicher genutzt
werden können. Solange sicher gestellt
ist, dass in einer Anwendung Unterklassen einer gegebenen Klasse stets auch korrekte Untertypen des Typs der Klasse sind,
kann man sich auf das Typsystem verlassen um zu argumentieren, dass die Nutzung von „Dynamic Dispatch“ in einem
Programm sicher ist.
Typsicherheit gewährleisten
Da Dispatching durch das Typsystem eingeschränkt wird, ist es dem Programmierer überlassen zu zeigen, dass alle Klassen dieser eingeschränkten Menge durch
ihre deklarierte Klasse ersetzbar sind. Das
bedeutet, dass für jeden Methoden-Aufruf jeder Teil der Menge möglicher Klassen, welcher ein Ziel für einen Dispatch
sein könnte, alle Anforderungen der deklarierten Klasse erfüllt.
Die einfachste Möglichkeit, Ersetzbarkeit
zu gewährleisten, ist zu zeigen, dass die
gesamte Klassenhierarchie eine korrekte
Typenhierarchie ist. Anders ausgedrückt
erfüllt jede einzelne Klasse die Anforderungen aller ihrer Oberklassen. Das kleine,
schmutzige Geheimnis objekt-orientierter
Sprachen ist, dass selbst Standardbibliotheken nicht vollständig korrekte Typenhierarchien sind.
Das bedeutet aber nicht, dass man keine
sicheren Programme schreiben kann. Das
wesentliche Problem ist, ob alle „dynamic
dispatches“ sicher sind oder nicht. Dies ist
primär ein lokales Problem.
Lokale contra globale Konsistenzen
Typenkonsistenz kann lokal oder global
betrachtet werden. Globale Typenkonsistenz ist Typenkonsistenz durch die gesamte Klassenhierarchie des Systems. Lokale Typenkonsistenz ist eine Untermenge
einer globalen Typenkonsistenz in einem
Kontext wo Ersetzbarkeit auftreten kann.
Ein lokaler Kontext kann der Kontext einer
Variablen, eines Attributs oder eines Para-
aicas news l Sommer 2010
meters sein. Es ist allgemein ausreichend,
lokale Typenkonsistenz für die Typensicherheit zu betrachten. Diese Eigenschaft
kann genutzt werden, um sicherzustellen,
dass nur anwendbare Methoden aufgerufen werden können.
Die OOT-Ergänzung benötigt nur lokale Typenersetzbarkeit. Dies bedeutet, dass
jede Klasse, die nicht in einem System als
deklarierte Klasse genutzt wird, oder eine Unterklasse davon ist, nicht für das
LSP betrachtet werden muss. Wenn neuer Code eingeführt wird, müssen die neuen Deklarationen natürlich in die LSP-Analyse aufgenommen werden. Allgemein gilt,
je niedriger eine Klasse in ihrer Klassenhierarchie ist, desto größer ist die Chance,
dass sie LSP-kompatibel mit ihrer Elternklasse sein muss.
Diese begrenzte Ersetzarbeit kann durch
formale Analyse oder Tests demonstriert
werden. Zu gewährleisten, dass alle Unterklassen einer Klasse alle Anforderungen
der Basisklasse erfüllen, bedeutet entweder, dass alle nötigen Tests der Basisklasse auch auf alle Unterklassen angewendet
werden müssen, oder die Bedingungen,
welche zum Beweis der Korrektheit der
Basisklasse genutzt wurden, auch für den
Beweis der Korrektheit aller Unterklassen
genutzt werden müssen. Somit wird das
Testen der Klassen von den Stellen entkoppelt, wo dispatching auftritt, und verhindert so die kombinatorische Explosion
von Tests und Verifizierungsfällen.
Druckerbeispiel
Ein Beispiel hilft dabei zu zeigen, wie
das LSP in der Praxis funktioniert. Nehmen Sie an, ein System hätte eine Klasse um Dokumente auszudrucken. Die Basisklasse könnte den Druck auf normalem
Papier implementieren. Wenn das Normalpapier Teil der Spezifikationen wäre,
könnte man keinen Untertyp spezifizieren, der auf Briefbögen druckt. Wenn andererseits der Papiertyp aber nicht Teil der
Spezifikation des Basistyps wäre, könnten
die Nutzer sich nicht auf die Eigenschaften
des Papiers verlassen. Wird ein Normalpapier-Drucker an irgend einer Stelle benötigt, dann muss eine Unterklasse dafür zur
Verfügung gestellt werden, selbst wenn sie
nichts anderes macht als die abstrakte Basisklasse.
Im Auge des Betrachters
Dieses einfache Beispiel macht einen
wichtigen Punkt deutlich. Wie eine Klasse spezifiziert ist, hat großen Einfluss darauf, wo eine Klasse als Implementierung
genutzt werden kann. Eine gute Klassenhierarchie aufzubauen ist nicht nur eine Frage der Implementierung, sondern auch der
Spezifikation. Die „Low Level“-Spezifikation eines Luftfahrtsystems muss das Design der Klassenhierarchie mit einschließen. Die Spezifikation einer Klasse sollte
ausreichen, um die korrekte Nutzung zu
gewährleisten, ohne vernünftiges „Subclassing“ zu unterbinden.
Die falsche Spur
Einige behaupten, es wäre unmöglich das
LSP auf Software-Entwicklung im normalen Arbeitsalltag anzuwenden. Ein Beispiel, dass genannt wird, ist die „ist gleich“Methode in Java. Nehmen wir an, man hat
eine „ist gleich“-Methode für eine Klasse
„Vector“ und eine Unterklasse „ColoredVector“. Wie soll dort ein „ist gleich“ funktionieren?
Generics bieten einen parametrischen Polymorphismus. Da Generics in Java mit
einem einzelnen Rumpf-Code implementiert sind, stellen sie nicht das gleiche Risiko wie Templates in C++ dar. Sie bieten
die Möglichkeit Code gemeinsam zu nutzen, der nicht den gleichen Typen wiederverwendet. Generics sind besonders hilfreich bei Objekten die eine Menge von
Dingen enthalten. Deshalb können eine
Liste von Wegpunkten und eine Liste von
Passagieren die gleiche Implementierung
teilen, haben aber charakteristische Typen.
Wenn die Elternklasse nur die Richtung
und Größe betrachtet, und die Un-
Die „Static Dispatch“-Falle
terklasse Richtung, Größe und Farbe,
dann wäre das Resultat eines „ist gleich“,
dass jeweils eine Instanz von „Vector“ und
„ColoredVector“ vergleicht, abhängig davon, auf welche Methode es angewandt
wurde, sprich die Reihenfolge der Operationen. Dies würde aber eine der fundamentalen Anforderungen von „ist gleich“
verletzen: Austauschbarkeit.
Nicht nur für sicherheitskritische
Anwendungen
Dieses Beispiel zeigt aber nicht, dass es
unmöglich ist das LSP anzuwenden, sondern nur, dass diese Implementierung,
und vielleicht die Spezifikation, inkorrekt
sind. Man hat unterschiedliche Möglichkeiten diese Sackgasse zu umgehen. Man
könnte voraussetzen, dass „ist gleich“ den
eigentlichen Typen ebenfalls betrachtet, so
dass Instanzen verschiedener Klassen niemals „gleich“ sind. Man könnte „ist gleich“
auf „Vector“ so definieren, dass keine zusätzlichen Zustände berücksichtigt werden. Schlussendlich könnte man sicherstellen, dass „Vector“ und „ColoredVector“
zwei Objekte als „gleich“ betrachten, in
dem sie eine „halbgleich“-Methode definieren und in beiden Permutationen testen. Es hängt davon ab, was angemessen
ist, wie man „ist gleich“ nutzt. Man kann
sogar verschiedene Arten von „ist gleich“
nutzen.
Delegation und Generics
Oft wird Vererbung genutzt um Code gemeinsam zu nutzen, aber es gibt sicherere
Wege dies zu tun. Eine Technik, die in den
meisten objekt-orientieren Sprachen dafür
genutzt werden kann, ist „Delegation“. Eine Methode kann eine Methode eines Objekts in einem privaten Feld aufrufen, um
die nötige Arbeit zu erledigen. Java bietet
dafür einen weiteren Mechanismus: Generics.
Das ist alles schön und gut, aber wäre ein „static dispatch“ nicht besser?
Dies ist ein weitverbreiterter Irrtum.
Zwar ist bei „static dispatch“ eindeutig, welcher Code bei einem Aufruf
zur Ausführung kommt. Dafür
ist es jedoch deutlich schwieriger sicherzustellen, dass
die Methode mit den Daten,
auf denen sie operiert, sinnvoll umgehen kann. Ist eine
Methode statisch dispatched
und wird überschrieben, ist es
schwer, das korrekte Verhalten zu gewährleisten.
Eine vernünftige Klassenhierarchie zu entwerfen ist nicht nur für sicherheitskritische
Projekte wichtig. Jedes objekt-orientierte
Programm kann von ordentlichem „Subtyping“ profitieren, das dabei hilft, dass
ein sich ständig weiter entwickelndes System korrekt funktioniert, auch wenn neue
Klassen hinzugefügt werden. Das Ergebnis sind bessere Test-Strategien und robustere Systeme.
Schlussfolgerung
Das Erscheinen des neuen Avionik-Standards wird das Risiko eliminieren, objektorientierte Technologien in der Luftfahrt
zu verwenden. Insbesondere der Einsatz
von Java-Technologie wird erheblich erleichtert. Durch die Bereitstellung klarer Richtlinien für die Entwicklung von
Java-Runtime-Systemen mit Speicherbereinigung (Garbage Collection), kann ein
Großteil der Last der dynamischen Speicherverwaltung vom Anbieter der JavaEntwicklungswerkzeuge übernommen
werden. Trotzdem muss der Anwendungsprogrammierer den Entwurf der Klassenhierarchien während der Ausarbeitung
der Anforderungen im Auge behalten, sowie einen korrekten Entwurf der Hierarchie und der Implementierung sicherstellen. Effektives und effizientes Testen, als
auch Verifizierungsstrategien hängen von
gutem System-Design ab. Obwohl dieses
Konzept nicht wirklich neu ist, bieten die
OOT-Ergänzungen bessere Richtlinien für
Entwickler und Sicherheitsgutachter.
aicas news l Sommer 2010
OpenGL
JamaicaVM unterstützt den Industriestandard für 3D-Grafik
Die standardisierte OpenGL API ermöglicht die Erstellung komplexer 3D-Szenen
unabhängig von der Plattform, und ist auch
für 2D-Rendering verwendbar. JamaicaVM
ermöglicht nun den Einsatz von OpenGL
auch in Echtzeit-Java-Anwendungen.
OpenGL ist in drei Varianten erhältlich: Neben dem vollwertigen OpenGL, wie es
vor allem in PCs zum Einsatz kommt, definiert der Standard außerdem die Untermengen OpenGL-ES und OpenGL-SC.
OpenGL-ES wurde entwickelt, um die Bedürfnisse von Embedded Systems, zum
Beispiel geringere Belastung der GrafikHardware, zu erfüllen ohne die Leistung
von OpenGL zu beeinträchtigen. OpenGLES wird oft in mobilen Geräten, wie z.B.
Navigationsgeräten, genutzt. OpenGL-SC
richtet sich an die Anforderungen von sicherheitskritischen Anwendungen, zum
Beispiel Grafik in Avionik-Systemen. Es basiert auf OpenGL-ES. Implementierungen
von OpenGL-SC, die auf DO-178B Level A
zertifiziert wurden, sind bereits kommerziell erhältlich.
Die neueste JamaicaVM bietet Java Bindings für alle drei Varianten von OpenGL,
und ermöglicht Kunden so den direkten
Zugriff auf OpenGL aus ihren Echtzeit-Java-Applikationen, die mit der JamaicaVMTool-Chain gebaut wurden. Sie können
zwischen Bindings für die Spezifikationen
JSR 231 und JSR 239 aus dem Java Community Process wählen. JSR 231, auch als
JOGL bekannt, bietet die Integration der
AWT und Swing Widget Sets. aicas bietet
JSR 231-kompatible JOGL Bindings sowohl
zum Zugriff auf vollwertiges OpenGL als
auch auf OpenGL ES an. JSR 239 ermöglicht direkten Zugriff auf OpenGL mittels
EGL. Dies ist eine schlanke Grafikschnittstelle, die durch OpenGL definiert ist, und
eingesetzt werden kann, wenn eine Fenster-Verwaltung wie X11 nicht verfügbar
oder nicht gewünscht ist. JSR 239 ist be-
Events
Wir würden uns freuen Sie auf den
folgenden Veranstaltungen begrüßen zu dürfen.
Java Forum Stuttgart
Stuttgart, 1. Juli 2010
JTRES
Prag, 19.-21. August 2010
ESC Boston 2010
Boston, MA, USA, 20.-23. Sept. 2010
SPS/IPC/Drives
Nürnberg, 23.-25. November 2010
sonders gut für mobile Geräte und
zur Zertifizierung geeignet. JamaicaVM bietet Bindings nach JSR 239
für OpenGL-ES und OpenGL-SC.
Alle 3 OpenGL-Varianten sind für
die JamaicaVM 6.0 Tool Chain verfügbar. Wenden Sie Sich einfach
an unser Vertriebsteam, das Ihnen
gerne dabei helfen wird, die passende OpenGL-Konfiguration für
Ihre Bedürfnisse zu finden.
VeriFlux
GL Studio OpenGL Anwendung mit JamaicaVM
Verbesserung der Code-Qualität durch formale Analyse
Eine zuverlässige Anwendung zu bauen
ist nicht nur Frage einer guten Entwicklungsumgebung, sondern auch von guten Verifizierungs-Werkzeugen. Glücklicherweise sind Java-Programme an sich
einfacher zu analysieren als Programme
in älteren Sprachen wie C und C++: Syntax und Semantik von Java-Programmen
sind strenger und damit weniger fehleranfällig. Gleichzeitig ist der Abstraktionsgrad höher. Das aicas-Team hat sich
seine Compiler-Technologie zu Nutze gemacht und VeriFlux, ein hochmodernes
Analyse-Werkzeug für Java-Programme,
entwickelt.
VeriFlux hilft sicherzustellen, dass verschiedene Fehlertypen vollständig aus ihren Java-Programmen eliminiert werden.
Das Werkzeug betrachtet alle möglichen
Ausführungspfade einer Anwendung,
um darin Fehler aufzuspüren,
die durch nicht-lokale Effekte
schwer erkennbar sind. Sowohl Laufzeitfehler wie
• ArithmeticException,
• ArrayStoreException,
• ClassCastException,
• IndexOutOfBoundsException,
• NegativeArraySizeException,
• NullPointerException und
• IllegalAssignmentError,
als auch Threading-Probleme wie Deadlocks und Race Conditions werden gefunden.
Anders als die meisten statischen Analyse-Werkzeuge ist VeriFlux sicher. Mit anderen Worten bedeutet dies, wenn für
einen bekannten Fehlertyp kein Fehler
gefunden wird, dann gibt es auch keinen
Fehler dieses Typs im analysierten Programm. Fehler, die durch normale Tests
nur schwer auffindbar sind, können so
durch VeriFlux vollständig eliminiert werden.
VeriFlux arbeitet auf Java Bytecode. Jedes
Programm, das kompiliert, kann auch
analysiert werden. Die Analyse beginnt
an einem festgelegten Eintrittspunkt. Mittels Datenflussanalyse und abstrakter Interpretation wird für jedes Vorkommen
einer Variablen im gesamten Aufrufbaum
die mögliche Wertemenge bestimmt. Die
abstrakte Interpretation minimiert dabei
unbegründete Warnungen.
VeriFlux unterstützt Reflektion und kann
viele einfache Fälle von Reflektion vollständig automatisch lösen. Komplexere
Fälle können mit minimaler Entwickler-Unterstützung analysiert werden. Mit
dem gleichen Mechanismus kann auch
nativer Code behandelt werden.
Das Werkzeug ermöglicht partielle ebenso wie vollständige Programm-Analyse.
Entwickler können VeriFlux dadurch bereits früh im Entwickungsprozess einsetzen, ebenso wie während der Systemintegration. Kontinuierliche
Nutzung von VeriFlux kann durch
frühzeitige Fehlererkennung die Entwicklungskosten senken. Das Resultat sind
weniger Fehler und robusterer Code.
Contact
aicas GmbH
Haid-und-Neu-Straße18
76131 Karlsruhe, Germany
+49 721 663 968-0
aicas incorporated
6 Landmark Square, Suite 400
Stamford, CT 06901, USA
+1 203-676-9807
aicas SARL
9 Allée de l’Arche
92671 Paris La Defense. France
+33 1 49 97 17 62
email
web
[email protected]
www.aicas.com
Zugehörige Unterlagen
Herunterladen