DE102008056434A1 - Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen - Google Patents

Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen Download PDF

Info

Publication number
DE102008056434A1
DE102008056434A1 DE200810056434 DE102008056434A DE102008056434A1 DE 102008056434 A1 DE102008056434 A1 DE 102008056434A1 DE 200810056434 DE200810056434 DE 200810056434 DE 102008056434 A DE102008056434 A DE 102008056434A DE 102008056434 A1 DE102008056434 A1 DE 102008056434A1
Authority
DE
Germany
Prior art keywords
software components
verification
verifying
conditions
software
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE200810056434
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Martin Luther Universitaet Halle Wittenberg
Original Assignee
Martin Luther Universitaet Halle Wittenberg
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Martin Luther Universitaet Halle Wittenberg filed Critical Martin Luther Universitaet Halle Wittenberg
Priority to DE200810056434 priority Critical patent/DE102008056434A1/de
Publication of DE102008056434A1 publication Critical patent/DE102008056434A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3616Software analysis for verifying properties of programs using software metrics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen gekennzeichnet dadurch, dass nach Laden der zu verifizierenden Bedingungen für jeden ausgewählten Softwarebaustein, Zusammenführen der für die Verifikation erforderlichen Softwarebausteine zu Systemabstraktionen und Zusammenführen beider zu kombinierten Systemabstraktionen mittels sich wiederholender Interaktionen ein Mechanismus zur Verifikation in Abwesenheit der Quellcodes erzeugt wird.

Description

  • Es ist bekannt, dass Fehler in der Software zu hohen Kosten oder Personenschäden führen kann. Aus diesem Grund kommt der Verifikation, d. h. Sicherstellung der Einhaltung von definierten Bedingungen, große Bedeutung zu. Dazu ist es aber bisher erforderlich, den Quellcode jedes Teils der Software zur Verfügung zu stellen. Dies verhindert häufig den Einsatz von Verifikationsverfahren und ermöglicht gleichzeitig nicht die Verifikation von Software, die aus Bausteinen zusammengesetzt wurde, deren Bausteine dynamisch (z. B. nach Bedarf) eingebunden werden oder in verschiedenen Programmiersprachen entwickelt wurden.
  • Softwaresysteme werden in zunehmendem Maße aus vorgefertigten bzw. extra angefertigten, weitgehend abgeschlossenen Bausteinen erstellt. (Software-)Bausteine zeichnen sich zumeist dadurch aus, dass sie eine abgeschlossene Funktionalität über eine definierte Schnittstelle zur Verfügung stellen. Es ist möglich, dass verschiedene in einer Software benutzte Bausteine in verschiedenen Programmiersprachen implementiert wurden.
  • Die Kompatibilität dieser Bausteine wird nach aktuellem Stand der Technik auf technischer Ebene nur auf Basis von Schnittstellen, so genannten Signaturen, definiert. Probleme bereitet dabei die Kontrolle, ob ein bzw. mehrere Bausteine entsprechend dem Gesamtkonzept funktionieren. Schnittstellen sagen wenig über die dahinter verborgene Semantik aus. Diese Semantik wird deshalb häufig als textuelle Beschreibung (API-Dokumentation) zusätzlich zur technischen Beschreibung der Schnittstelle angegeben. Dies hat den Nachteil, dass eine Überprüfung nicht erfolgen kann.
  • Die Erfassung bzw. Überprüfung der Semantik eines Bausteins ist mittels Rückübersetzen (Decompilieren) möglich, wenn der Quellcode nicht zur Verfügung steht Diese Möglichkeit erweist sich nur in wenigen Fällen als Praxis tauglich, da die Rückübersetzung von Binärcodes zwar die Semantik erhält, im Allgemeinen aber nicht wieder den ursprünglichen Quellcode, sondern nur einen semantisch äquivalenten zumeist deutlich weniger kompakten Quellcode erzeugt. Einfacher stellt sich dies dar, wenn nur in eine Zwischensprache übersetzt wird und zur Ausführung eine virtuelle Maschine oder ähnliches zum Einsatz kommt. Unmöglich wird die Rückübersetzung, wenn der eingebundene Baustein nicht lokal verfügbar ist, sondern z. B. über das Internet eingebunden wird (z. B. als Webservice).
  • Testverfahren können nur sehr eingeschränkt eingesetzt werden, wenn Eigenschaften überprüft werden sollen, da kein Nachweis möglich ist, dass der verwendete Baustein, die gewünschten Eigenschaften aufweist. Besonders problematisch gestaltet es sich, wenn nicht nur Ergebnisse, sondern auch das Verhalten der eingebundenen Softwarebausteine überprüft werden sollen.
  • Liegt der Quellcode des Softwarebausteins vor, ist entweder der Einsatz eines hoch qualifizierten Entwicklers erforderlich, der sowohl die Programmiersprache versteht, als auch über fundierte Kenntnisse von Verifikationsverfahren verfügt, um die Semantik des Programmcodes in mathematische bzw. logische Formeln zu übersetzen und diese soweit möglich auch unter zu Hilfenahme von Werkzeugen zu überprüfen.
  • Eine weitere Möglichkeit besteht darin, bestimmte Eigenschaften des Quellcodes (halb-)automatisch zu verifizieren. Dadurch kann die Überprüfung verschiedener Kriterien mittels dafür vorgesehener Logiken bzw. Werkzeuge erfolgen, nachdem der Quellcode (halb-)automatisch in eine für das benutzte Werkzeug verständliche Darstellung überführt wurde. Eine solche Überprüfung kann aber sehr zeitaufwändig sein, wenn der zu überprüfende Programmcode groß ist oder die Problemstellung anspruchsvoll ist.
  • Bisher bekannte Verfahren überprüfen häufig logische Eigenschaften innerhalb eines Bausteins. Benötigt wird häufig ein Verfahren, das das Zusammenspiel von verschiedenen Komponenten überprüfen kann. Bereits in Nierstrasz /1/ wird eine statische Überprüfung von Objektlebenszyklen vorgeschlagen. Dabei werden aber nur reguläre Sprachen eingesetzt, um das dynamische Verhalten von Objekten zu beschreiben. In Löwe et al. /2/ werden Objektlebenszyklen benutzt, um Implementierungen austauschbar zu machen, wobei die Konformität beibehalten werden soll. Es werden ebenfalls reguläre Sprachen benutzt. In Tenzer und Stevens /3/ werden UML-Zustandsmaschinen verwendet, um die Objektlebenszyklen darzustellen. Um auch die Rekursion erfassen zu können, werden die regulären Sprachen um einen Mechanismus erweitert, der die Rekursion ermöglichen soll. In Zimmermann und Schaarschmidt /4/ werden kontextfreie Sprachen als Abstraktion verwendet, welche es ermöglichen, die Rekursion im vollen Umfang darzustellen. Des Weiteren wird ein Verfahren zum Zusammensetzen von Abstraktionen vorgestellt, welches es ermöglicht, Abstraktionen von Softwarebausteinen unabhängig zu erstellen und erst anschließend im Sinne der gewünschten Software zusammenzusetzen.
  • Die genannten Verfahren betrachten nur sequenzielles Verhalten der Software. Aus diesem Grund sind sie nur sehr eingeschränkt einsetzbar.
  • Es ist alternativ möglich, Petri-Netze zur Darstellung des Verhaltens von Bausteinen zu verwenden, s. Hinz et al. /5/. Diese stellen ein paralleles Verhalten sehr gut dar, erfassen aber keine sequenzielle Semantik.
  • Schmidt et al. /6/ verwendeten neben endlichen Automaten (reguläre Sprachen), um die Konformität zu überprüfen. Diese können paralleles Verhalten abbilden, aber nicht mit Rekursion im allgemeinen Fall umgehen.
  • Eine Alternative ist, zur abstrakten Darstellung der Semantik einer Software Prozess Algebren zu nutzen. Diese vereinigen Elemente parallelen und sequenziellen Verhaltens, s. Allen und Garlen /7/. Verschiedene technische Gegebenheiten beschränken jedoch die Möglichkeiten der Verifikation auf reguläre Sprachen oder verifizieren nicht die Interaktionen zwischen den Softwarebausteinen, s. Foster et al. /8/.
  • In Chaki et al. /9/ werden in der Programmiersprache C implementierte Softwarebausteine betrachtet, welche unabhängig von einander arbeiten. Es werden Kellerautomaten verwendet, so dass auch Rekursion erfasst werden kann. Dabei werden aber nur synchrone Interaktionen betrachtet.
  • Weitere Ansätze z. B. Chamber /10/ oder Ramalingam /11/ nutzen eine dynamische Überprüfung der vorgegebenen Eigenschaften. Dies ermöglicht aber nur eine statische Überprüfung, wenn gleichzeitig ein vollständiger Test durchgeführt wird, welcher praktisch nur selten durchführbar ist.
  • Es stellt sich somit das Problem, bereits vor Einsatz eines Bausteins zu verifizieren, ob dieser nach der Einbindung in ein Softwareprojekt die vorgegebenen Bedingungen erfüllt bzw. erfüllen wird. Diese Bedingungen umfassen die Interaktionsmöglichkeiten zwischen verschiedenen Bausteinen. Diese Interaktionen können sowohl asynchrones Verhalten (z. B. parallele Ausführung, asynchrone Methodenaufrufe, etc.), als auch synchrones Verhalten (z. B. Rekursion, synchrone Ausführung, etc.) enthalten.
  • Fehler, d. h. Verletzungen der Bedingungen, sollen ausgeschlossen bzw. in jedem Fall aufgefunden werden können. Darüber hinaus soll es möglich sein nachzuweisen, dass eine korrekte Abbildung des gewünschten Verhaltens existiert. Insbesondere soll es nicht erforderlich sein, vor der Überprüfung über ein vollständiges System zu verfügen und den Quellcode der benutzten Bausteine den Entwicklern des zu verifizierenden Bausteins zur Verfügung zu stellen.
  • Erfindungsgemäß wurde ein Verfahren entwickelt, welches sich wie folgt darstellen lässt.
    • 1. Erstellen bzw. Laden der Darstellung/Abstraktion jedes gewünschten Softwarebausteins. Angabe bzw. Laden der zu verifizierenden Bedingungen.
    • 2. Zusammenführen der durch den Anwender ausgewählten Softwarebausteine oder wahlweise aller für die Verifikation benötigten und vorhandenen Softwarebausteine zu so genannten Systemabstraktionen. Diese enthält alle Informationen der beteiligten Bausteine. Sollte die Abstraktion eines oder mehrerer Bausteine nicht verfügbar sein, so werden die dadurch nicht zusammenführbaren Teile automatisch durch Attrappen ersetzt, die die Funktionalität der Systemabstraktion sicherstellen. Der Anwender wird gegebenenfalls auf eine Ungenauigkeit in den Ergebnissen hingewiesen.
    • 3. Zusammenführen der zu überprüfenden Bedingungen bzw. Bedingungen mit komplementärer Bedeutung (Nachweis einer Verletzung einer Bedingung) mit den erzeugten Systemabstraktionen zur so genannten kombinierten Systemabstraktionen. Vor dem Zusammenführen werden aus den Systemabstraktionen genau die Interaktionen entfernt, die keine Bedeutung innerhalb der jeweils zu prüfenden Bedingung haben.
    • 4. Die kombinierten Systemabstraktionen werden jeweils überprüft. Existiert ein Pfad zu einer zu akzeptierenden Situation, so kann eine Aussage darüber getroffen werden, ob sich die beteiligten Softwarebausteine entsprechend der unter 3. angegebenen Fragestellung verhalten oder nicht. Soweit ein Pfad existiert, kann dieser dem Anwender zur Verfügung gestellt werden (Verifikationsergebnis). Dieser Pfad kann alle Informationen enthalten, die bei verfügbarem Quellcode direkt die beteiligten Teile des Quellcode referenzieren. Darüber hinaus ist es möglich, noch weitere Informationen über das Verhalten der Softwarebausteine zu treffen (u. a. sog. Metriken).
  • Die verwendete Darstellung/Abstraktion vereinigt die Eigenschaften von parallelem und sequenziellem Verhalten. Sie erfasst ebenfalls die Eigenschaften von Petri-Netzen und Kellerautomaten vollständig und kann aus beliebigem Programmcode erzeugt werden oder manuell erstellt werden. Die Darstellung/Abstraktion enthält alle Informationen, die für die Ausführung des/der Bausteine bzw. Software relevant sind bzw. diese verfeinern, soweit es dem Ziel möglichst genauer Ergebnisse dient.
  • Die zu überprüfenden Bedingungen werden als Sprache angegeben, die u. a. eine Nacheinanderausführung, als auch die Wiederholung von Interaktionen erlaubt. Darüber hinaus ist es möglich Situationen festzulegen, die beim Beginn einer Ausführung gelten sollen sowie Situationen, die als korrekt erkannt werden sollen. Die Bedingungen können für jeden Softwarebaustein einzeln festgelegt werden oder für eine Menge von Softwarebausteinen bzw. die komplette Software. Es ist möglich mehrere Bedingungen für einen Softwarebaustein festzulegen. Diese Bedingungen können durch einen Anwender festgelegt werden oder aus gegebenen technischen Beschreibungen erzeugt werden. Es ist darüber hinaus möglich, sie direkt in den Quellcode von Bausteinen einzubetten.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • - Nierstrasz [0008]
    • - Löwe et al. [0008]
    • - Tenzer und Stevens [0008]
    • - Zimmermann und Schaarschmidt [0008]
    • - Hinz et al. [0010]
    • - Schmidt et al. [0011]
    • - Allen und Garlen [0012]
    • - Foster et al. [0012]
    • - Chaki et al. [0013]
    • - Chamber [0014]
    • - Ramalingam [0014]

Claims (1)

  1. Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen gekennzeichnet dadurch, dass nach Laden der zu verifizierenden Bedingungen für jeden ausgewählten Softwarebaustein, Zusammenführen der für die Verifikation erforderlichen Softwarebausteine zu Systemabstraktionen und Zusammenführen beider zu kombinierten Systemabstraktionen mittels sich wiederholender Interaktionen ein Mechanismus zur Verifikation in Abwesenheit der Quellcodes erzeugt wird.
DE200810056434 2008-11-07 2008-11-07 Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen Withdrawn DE102008056434A1 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE200810056434 DE102008056434A1 (de) 2008-11-07 2008-11-07 Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE200810056434 DE102008056434A1 (de) 2008-11-07 2008-11-07 Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen

Publications (1)

Publication Number Publication Date
DE102008056434A1 true DE102008056434A1 (de) 2010-05-12

Family

ID=42096424

Family Applications (1)

Application Number Title Priority Date Filing Date
DE200810056434 Withdrawn DE102008056434A1 (de) 2008-11-07 2008-11-07 Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen

Country Status (1)

Country Link
DE (1) DE102008056434A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111221719A (zh) * 2018-11-23 2020-06-02 青岛海信网络科技股份有限公司 一种自动化测试系统及测试方法

Non-Patent Citations (11)

* Cited by examiner, † Cited by third party
Title
Allen und Garlen
Chaki et al.
Chamber
Foster et al.
Hinz et al.
Löwe et al.
Nierstrasz
Ramalingam
Schmidt et al.
Tenzer und Stevens
Zimmermann und Schaarschmidt

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111221719A (zh) * 2018-11-23 2020-06-02 青岛海信网络科技股份有限公司 一种自动化测试系统及测试方法
CN111221719B (zh) * 2018-11-23 2023-04-14 青岛海信网络科技股份有限公司 一种自动化测试系统及测试方法

Similar Documents

Publication Publication Date Title
DE102005042126A1 (de) Verfahren und Vorrichtung zum automatisierten Bewerten der Qualität eines Software-Quellcodes
DE102017211433A1 (de) Verfahren zum Durchführen eines Funktionstests eines Steuergeräts in einem Hardware-in-the-Loop-Test, HIL-Test, sowie HIL-Prüfstand und Steuergerät
DE112006001222T5 (de) Halbleitertestprogramm-Diagnosevorrichtung
DE102010033861A1 (de) Auf einer formellen Analyse basierte Entwicklung von Anforderungsspezifikationen
EP3306295A1 (de) Verfahren und vorrichtung zum testen elektronischer steuerungen, insbesondere zum testen von automobilsteuerungen
DE102008056434A1 (de) Verfahren zur Verifikation von aus Softwarebausteinen zusammengesetzten Systemen
DE102017109132A1 (de) Verfahren und IT-Infrastruktur zum modellbasierten Testen von Software für ein Fahrzeug-Anwendungssystem und zum Bereitstellen entsprechender Testergebnisse
DE102009043287A1 (de) Verfahren und Anordnung zum Installieren und Konfigurieren eines Computersystems
EP1622022A1 (de) Automatische Erzeugung von Testfällen
EP1947567A2 (de) Verfahren und Vorrichtung zum automatischen Testen von modellbasierten Funktionen
WO2007068563A1 (de) Verfahren zur verarbeitung und erzeugung von diagnosedaten in einem softwareentwicklungsprozess
EP2482148A1 (de) Verfahren für die Projektierung und/oder Programmierung einer multifunktionalen Komponente einer industriellen Automatisierungsanordnung
DE102016115314A1 (de) Modifizieren und Simulieren der Betriebssoftware eines technischen Systems
EP3933593A1 (de) Verfahren und computerprogramm zum testen eines technischen systems
DE102022112141A1 (de) Verfahren zur Erstellung eines vereinfachten virtuellen Steuergeräts
DE102020213809A1 (de) Verfahren zum Betreiben eines Steuergeräts beim Testen einer Software des Steuergeräts und Verfahren zum Betreiben eines Testcomputers beim Testen einer Software eines Steuergeräts
DE102014105109A1 (de) Verfahren und Vorrichtung zum Erzeugen und Abarbeiten von Testfällen
DE102019212458A1 (de) Verfahren zum Testen eines Systems auf eine Anforderung
DE102017212612A1 (de) Verfahren zum automatischen Erzeugen von Tests für die Software eines Fahrzeugs
DE102022208030A1 (de) Verfahren zum kollaborativen Erstellen eines Softwareprodukts und Verfahren zur Reaktion auf einen Fehler
DE102013113745A1 (de) Testschaltung und verfahren zur durchführung eines testdurchlaufs
Börger et al. Abstract State Machines, B and Z: First International Conference, ABZ 2008, London, UK, September 16-18, 2008. Proceedings
DE102010047957A1 (de) Formelle online-Verifikation ausführbarer Modelle
DE102007018732A1 (de) Diagnosesystem und Verfahren zum Erstellen eines Prüfablaufs für eine Diagnose eines mechatronischen Gesamtsystems
DE102020209237A1 (de) Verfahren und Vorrichtung zur Untersuchung von Programmcode

Legal Events

Date Code Title Description
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20140603