{"id":1756,"date":"2026-04-08T09:01:24","date_gmt":"2026-04-08T09:01:24","guid":{"rendered":"https:\/\/www.pickplace.de\/?post_type=glossary&#038;p=1756"},"modified":"2026-04-08T09:01:42","modified_gmt":"2026-04-08T09:01:42","slug":"unit-test","status":"publish","type":"glossary","link":"https:\/\/www.pickplace.de\/en\/glossar\/unit-test\/","title":{"rendered":"Unit Test"},"content":{"rendered":"<p>Ein Unit Test bezeichnet einen automatisierten Test, der eine klar abgegrenzte Softwareeinheit isoliert &#xFC;berpr&#xFC;ft. Eine solche Unit ist typischerweise ein einzelnes Modul, eine Funktion oder eine Klasse. Ziel ist es, das Verhalten dieser Einheit unabh&#xE4;ngig vom restlichen System zu verifizieren, indem definierte Eingaben mit erwarteten Ergebnissen verglichen werden. Unit Tests sind bewusst klein, schnell ausf&#xFC;hrbar und so gestaltet, dass sie Fehler eindeutig einer konkreten Codeeinheit zuordnen. Unit Tests sind Grundbestandteil moderner <a href=\"https:\/\/www.pickplace.de\/software-entwicklung\/\" data-type=\"page\" data-id=\"907\"><a class=\"glossaryLink\"  aria-describedby=\"tt\"  data-cmtooltip=\"cmtt_e7cfd26b192bb2977fae6bc5dc38b507\"  href=\"https:\/\/www.pickplace.de\/glossar\/embedded-software\/\"  data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex='0' role='link'>Embedded Software<\/a> Entwicklung<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Inhalt<\/h2><nav><ul><li class=\"\"><a href=\"#fff\">Unit Tests bei Embedded Systems<\/a><ul><li class=\"\"><a href=\"#w\">Was ist eine &#x201E;Unit&#x201C;<\/a><\/li><li class=\"\"><a href=\"#u\">Unit Tests ohne Framework<\/a><\/li><\/ul><\/li><li class=\"\"><a href=\"#unit-tests-in-der-funktionalen-sicherheit\">Unit Tests in der funktionalen Sicherheit<\/a><\/li><li class=\"\"><a href=\"#unit-test-tools\">Unit Test Tools<\/a><ul><li class=\"\"><a href=\"#zertifizierte-qualifizierbare-tools-do-178-c-iso-26262\">Zertifizierte \/ qualifizierbare Tools (DO-178C, ISO 26262)<\/a><\/li><li class=\"\"><a href=\"#freie-unit-test-frameworks\">Freie Unit-Test Frameworks<\/a><\/li><\/ul><\/li><li class=\"\"><a href=\"#zusammenfassung\">Zusammenfassung<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fff\">Unit Tests bei Embedded Systems<\/h2>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-4f9a122\" data-block-id=\"4f9a122\"><p class=\"stk-block-text__text\">Im Kontext von Embedded Systems erh&auml;lt der Begriff eine spezifische Auspr&auml;gung. Ein Unit Test Embedded Systems beschreibt die isolierte Pr&uuml;fung von Firmware-Komponenten, die in der Regel nicht auf der Zielhardware, sondern auf einem Entwicklungsrechner oder Build-Server ausgef&uuml;hrt wird (off-target). Diese Entkopplung ist notwendig, da <a class=\"glossaryLink\"  aria-describedby=\"tt\"  data-cmtooltip=\"cmtt_e7cfd26b192bb2977fae6bc5dc38b507\"  href=\"https:\/\/www.pickplace.de\/glossar\/embedded-software\/\"  data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex='0' role='link'>Embedded Software<\/a> h&auml;ufig direkt mit Hardware interagiert, die w&auml;hrend der Entwicklung nicht immer verf&uuml;gbar ist oder deren Nutzung Tests verlangsamen w&uuml;rde.<\/p><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"w\">Was ist eine &#x201E;Unit&#x201C;<\/h3>\n\n\n\n<p>Eine Unit ist eine in sich geschlossene Implementierungseinheit, typischerweise ein einzelnes Modul oder eine Klasse, h&#xE4;ufig repr&#xE4;sentiert durch eine <code>.c<\/code>&#x2013; oder <code>.cpp<\/code>-Datei. Diese Einheit wird in eine Testumgebung eingebettet, die ihre isolierte Ausf&#xFC;hrung erm&#xF6;glicht.<\/p>\n\n\n\n<div class=\"wp-block-stackable-image stk-block-image stk-block stk-53301fe\" data-block-id=\"53301fe\"><style>.stk-53301fe .stk-img-figcaption{text-align:center !important;}.stk-53301fe .stk-img-wrapper{width:70% !important;}<\/style><figure><span class=\"stk-img-wrapper stk-image--shape-stretch\"><img loading=\"lazy\" decoding=\"async\" class=\"stk-img wp-image-1757\" src=\"https:\/\/www.pickplace.de\/wp-content\/uploads\/2026\/04\/Unit-Test.svg\" width=\"2159\" height=\"1488\" alt=\"Struktur von Unit Test bei Embedded Systems\"\/><\/span><figcaption class=\"stk-img-figcaption\">Struktur von Unit Test bei Embedded Systems<\/figcaption><\/figure><\/div>\n\n\n\n<p>Ein Test Case beschreibt einen konkreten Testfall, der entweder besteht oder fehlschl&#xE4;gt. Er setzt sich aus einer Initialisierung (Setup) und einer oder mehreren &#xDC;berpr&#xFC;fungen zusammen. Diese &#xDC;berpr&#xFC;fungen werden &#xFC;ber Test Assertions formuliert, also Aussagen &#xFC;ber erwartete Zust&#xE4;nde oder R&#xFC;ckgabewerte.<\/p>\n\n\n\n<p>Mehrere Test Cases werden zu einer Test Suite zusammengefasst, die als ausf&#xFC;hrbares Programm l&#xE4;uft und die Gesamtheit der Tests repr&#xE4;sentiert.<\/p>\n\n\n\n<p>Die getestete Einheit selbst wird als Code Under Test (CUT) bezeichnet. Ihre direkten Abh&#xE4;ngigkeiten hei&#xDF;en Depended on Components (DOC), w&#xE4;hrend indirekte Abh&#xE4;ngigkeiten als Transitively Depended on Components (TDOC) bezeichnet werden. Diese Unterscheidung ist im Embedded-Bereich relevant, da Hardwarezugriffe h&#xE4;ufig &#xFC;ber mehrere Abstraktionsebenen hinweg erfolgen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"u\">Unit Tests ohne Framework<\/h3>\n\n\n\n<p>Neben etablierten Frameworks existiert im Embedded-Bereich ein pragmatischer Ansatz: <strong>framework-lose Unit Tests<\/strong>, h&#xE4;ufig realisiert als einfache <code>.c<\/code>-Dateien mit direkten Assertions.<\/p>\n\n\n\n<p>Ein typisches Beispiel ist die Verwendung von <code>assert()<\/code> aus der Standardbibliothek:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int main(void)\n{\n    CanConfig config = {0};\n    CanUnit   unit   = {0};\n\n    bool result = CAN_Init(&amp;config, &amp;unit, 500000U, 2000000U);\n\n    assert(result == true);\n    assert(config.ctrl_baudrate == 500000U);\n    assert(config.data_baudrate == 2000000U);\n    assert(config.fd_enabled == true);\n\n    assert(unit.initialized == true);\n    assert(unit.active_ctrl_baudrate == 500000U);\n    assert(unit.active_data_baudrate == 2000000U);\n    assert(unit.fd_active == true);\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Dieser Ansatz verzichtet vollst&#xE4;ndig auf Testframeworks, Test Runner oder Mocking-Infrastruktur. Die Tests werden als eigenst&#xE4;ndige Programme kompiliert und ausgef&#xFC;hrt.<\/p>\n\n\n\n<p>Zudem werden Assertions innerhalb von Funktionen verwendet, die der Absicherung von Vorbedingungen dienen. Dies sind Defensivpr&#xFC;fungen im Code. Sie pr&#xFC;fen zum Beispiel, ob &#xFC;bergebene Parameter g&#xFC;ltig sind, und stoppen die Ausf&#xFC;hrung fr&#xFC;hzeitig bei Verst&#xF6;&#xDF;en. Diese Pr&#xFC;fungen sind Bestandteil der Implementierung und adressieren die korrekte Nutzung der Schnittstelle durch den Aufrufer. Beides ist nicht scharf voneinander zu trennen: Asserts k&#xF6;nnen Defensivpr&#xFC;fungen oder Unit Tests sein. <\/p>\n\n\n\n<p>Im Embedded-Kontext ist dieser Ansatz insbesondere dort relevant, wo klassische Unit-Test-Infrastrukturen schwer einzusetzen sind &#x2013; beispielsweise bei direktem Zugriff auf Hardware-Register oder bei stark hardwaregekoppelter Logik. Hier kann ein einfacher, kontrollierter Testaufbau helfen, Verhalten zumindest punktuell zu verifizieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"unit-tests-in-der-funktionalen-sicherheit\">Unit Tests in der funktionalen Sicherheit<\/h2>\n\n\n\n<p>Im Kontext der funktionalen Sicherheit sind Unit Tests nicht nur ein Entwicklungswerkzeug, sondern Bestandteil eines strukturierten Nachweiskonzepts. Sie dienen dazu, die korrekte Implementierung von Softwareeinheiten gegen ihre spezifizierten Anforderungen zu verifizieren und sind typischerweise im linken Ast des V-Modells verankert.<\/p>\n\n\n\n<p>Im V-Modell erfolgt die Entwicklung entlang von Spezifikationsebenen (System, Softwarearchitektur, Module), w&#xE4;hrend die Verifikation spiegelbildlich auf der rechten Seite stattfindet. Unit Tests sind dabei der untersten Verifikationsebene zugeordnet und pr&#xFC;fen, ob einzelne Softwareeinheiten ihre spezifizierten Funktionen korrekt erf&#xFC;llen. Sie stehen in direkter Beziehung zu Low-Level Requirements.<\/p>\n\n\n\n<p>Ein zentrales Kriterium in diesem Umfeld ist die <strong>Code Coverage<\/strong>, also die Abdeckung des Codes durch Tests. Diese dient nicht als Selbstzweck, sondern als Nachweis daf&#xFC;r, dass relevante Teile der Implementierung tats&#xE4;chlich ausgef&#xFC;hrt und &#xFC;berpr&#xFC;ft wurden.<\/p>\n\n\n\n<p>Wichtige Metriken sind dabei:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Statement Coverage<\/strong> beschreibt, welcher Anteil der Anweisungen im Code mindestens einmal ausgef&#xFC;hrt wurde. Sie gibt eine grundlegende Aussage dar&#xFC;ber, ob der Code &#xFC;berhaupt erreicht wurde.<\/li>\n\n\n\n<li><strong>Branch Coverage<\/strong> geht einen Schritt weiter und betrachtet Entscheidungsstrukturen. Sie misst, ob alle m&#xF6;glichen Verzweigungen, beispielsweise in <code>if<\/code>&#x2013; oder <code>switch<\/code>-Konstrukten, durchlaufen wurden.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"unit-test-tools\">Unit Test Tools<\/h2>\n\n\n\n<p>Im Embedded-Umfeld unterscheidet man zwischen <strong>zertifizierten (qualifizierbaren) Tools<\/strong> f&#xFC;r regulierte Branchen und <strong>freien Frameworks<\/strong> f&#xFC;r die Entwicklung.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"zertifizierte-qualifizierbare-tools-do-178-c-iso-26262\">Zertifizierte \/ qualifizierbare Tools (DO-178C, ISO 26262)<\/h3>\n\n\n\n<p>Diese Werkzeuge sind auf funktionale Sicherheit ausgelegt und unterst&#xFC;tzen Anforderungen wie Coverage, Traceability und Audit-Nachweise.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.razorcat.com\/en\/product-tessy.html?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">TESSY (Razorcat)<\/a><br>Automatisiert den gesamten Unit-Test-Prozess inklusive Testdesign, Ausf&#xFC;hrung und Reporting sowie Coverage und Traceability .<br>Zertifiziert f&#xFC;r Standards wie ISO 26262 und IEC 61508 .<\/li>\n\n\n\n<li><a href=\"https:\/\/www.qa-systems.com\/tools\/cantata\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">QA Systems Cantata<\/a><br>Unit- und Integrationstest-Tool f&#xFC;r C\/C++ mit Fokus auf automatisierte Testausf&#xFC;hrung, Reporting und Integration in Embedded-Toolchains .<\/li>\n\n\n\n<li><a href=\"https:\/\/www.parasoft.com\/products\/parasoft-c-ctest\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">Parasoft C\/C++test<\/a><br>Kombiniert Unit Testing, statische Analyse, Code Coverage und Requirements Traceability. T&#xDC;V-zertifiziert f&#xFC;r sicherheitskritische Anwendungen und unterst&#xFC;tzt Standards wie ISO 26262 und DO-178C .<\/li>\n\n\n\n<li><a href=\"https:\/\/www.parasoft.com\/solutions\/c-cpp-testing-tools\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">VectorCAST (Overview)<\/a><br>Industrietool f&#xFC;r automatisiertes Unit Testing und Coverage im sicherheitskritischen Umfeld, h&#xE4;ufig im Avionik- und Automotive-Bereich eingesetzt.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"freie-unit-test-frameworks\">Freie Unit-Test Frameworks<\/h3>\n\n\n\n<p>Diese Tools sind nicht zertifiziert, aber technisch weit verbreitet und Grundlage vieler Embedded-Teststrategien.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.parasoft.com\/webinar\/integrating-googletest-in-safety-critical-systems-with-confidence\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">GoogleTest<\/a><br>Standard im C++-Umfeld mit guter Integration und Mocking-Unterst&#xFC;tzung. F&#xFC;r sicherheitskritische Projekte sind zus&#xE4;tzliche Tools f&#xFC;r Coverage und Traceability notwendig .<\/li>\n\n\n\n<li><a href=\"https:\/\/www.parasoft.com\/webinar\/integrating-googletest-in-safety-critical-systems-with-confidence\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">CppUTest<\/a><br>Leichtgewichtiges Framework speziell f&#xFC;r Embedded Systems, mit Fokus auf kleine Footprints und einfache Integration.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.parasoft.com\/solutions\/c-cpp-testing-tools\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noopener\">Unity \/ Ceedling<\/a><br>Weit verbreitet im C-Umfeld, insbesondere durch automatische Mock-Generierung (CMock) und einfache Toolchain-Integration.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zusammenfassung\">Zusammenfassung<\/h2>\n\n\n\n<p>Die Bedeutung von Unit Tests ist im Embedded-Bereich besonders hoch, da Systeme oft unter restriktiven Bedingungen betrieben werden, lange Lebenszyklen haben und im Fehlerfall schwer zug&#xE4;nglich sind. Unit Tests erm&#xF6;glichen es, Fehler fr&#xFC;h im Entwicklungsprozess zu erkennen und die Wartbarkeit der Software &#xFC;ber die gesamte Lebensdauer hinweg sicherzustellen. Sie sind zudem eine Grundlage f&#xFC;r moderne Entwicklungsans&#xE4;tze wie Test-Driven Development, bei dem Tests aktiv den Implementierungsprozess steuern.<\/p>\n\n\n\n<p>Insgesamt stellen Unit Tests &#x2013; insbesondere im Embedded-Kontext &#x2013; ein zentrales Werkzeug dar, um Software systematisch, reproduzierbar und unabh&#xE4;ngig von Hardwarezust&#xE4;nden zu verifizieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein Unit Test bezeichnet einen automatisierten Test, der eine klar abgegrenzte Softwareeinheit isoliert \u00fcberpr\u00fcft. Eine solche Unit ist typischerweise ein einzelnes Modul, eine Funktion oder eine Klasse. Ziel ist es, das Verhalten dieser Einheit unabh\u00e4ngig vom restlichen System zu verifizieren, indem definierte Eingaben mit erwarteten Ergebnissen verglichen werden. Unit Tests sind bewusst klein, schnell ausf\u00fchrbar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"footnotes":""},"class_list":["post-1756","glossary","type-glossary","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/www.pickplace.de\/en\/wp-json\/wp\/v2\/glossary\/1756","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pickplace.de\/en\/wp-json\/wp\/v2\/glossary"}],"about":[{"href":"https:\/\/www.pickplace.de\/en\/wp-json\/wp\/v2\/types\/glossary"}],"author":[{"embeddable":true,"href":"https:\/\/www.pickplace.de\/en\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":1,"href":"https:\/\/www.pickplace.de\/en\/wp-json\/wp\/v2\/glossary\/1756\/revisions"}],"predecessor-version":[{"id":1758,"href":"https:\/\/www.pickplace.de\/en\/wp-json\/wp\/v2\/glossary\/1756\/revisions\/1758"}],"wp:attachment":[{"href":"https:\/\/www.pickplace.de\/en\/wp-json\/wp\/v2\/media?parent=1756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}