<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>CosmoCode Blog – Detlef Hüttemann</title><description>Blog posts by Detlef Hüttemann</description><link>https://www.cosmocode.de/</link><item><title>KI klaut unseren Traffic, und wir holen ihn uns mit KI zurück</title><link>https://www.cosmocode.de/en/blog/dhue/20260924-ki-traffic-zurueckholen/</link><guid isPermaLink="true">https://www.cosmocode.de/en/blog/dhue/20260924-ki-traffic-zurueckholen/</guid><description>Weniger Besuche durch KI-Antworten: Wie wir KI mit Search-Console-Daten, Inhalten und Änderungshistorie verknüpfen, um gezielt gegenzusteuern.</description><pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Wir spüren den Traffic-Rückgang deutlich. Dreißig bis vierzig Prozent weniger Besuche sind kein Ausschlag, das ist ein
Bruch. KI-basierte Antworten nutzen unsere Inhalte, ohne dass jemand unsere Seiten besucht. Verhindern können wir das
nicht. Aber wir haben uns gefragt, ob wir genau diese Technologie nutzen können, um gegenzusteuern.&lt;/p&gt;
&lt;p&gt;Was wir aktuell ausprobieren, ist kein schnellerer Reporting-Zyklus, sondern etwas anderes: Wir verknüpfen KI mit den
echten Suchdaten, Inhalten und der Änderungshistorie einer Website, um Einsichten zu bekommen, deren Fragen wir früher gar nicht
gestellt hätten. So können wir nicht nur Änderungen dokumentieren, sondern rückwirkend bewerten, ob sie wirklich etwas
gebracht haben.&lt;/p&gt;
&lt;h2 id=&quot;fragen-stellen-wenn-sie-entstehen&quot;&gt;Fragen stellen, wenn sie entstehen&lt;/h2&gt;
&lt;p&gt;Suchmaschinenoptimierung war immer ein iterativer Prozess. Man analysiert die Sichtbarkeit einer Website, identifiziert
Schwächen, nimmt Änderungen vor und schaut einige Wochen oder Monate später, was daraus geworden ist.&lt;/p&gt;
&lt;p&gt;Das Problem dabei ist, dass solche Analysen vorbereitet werden müssen. Daten müssen gesammelt, Berichte definiert und
Auswertungen programmiert werden. Neue Fragen bedeuten neuen Aufwand. Und häufig merkt man erst im laufenden Prozess,
dass man eigentlich etwas ganz anderes wissen möchte.&lt;/p&gt;
&lt;p&gt;Genau an dieser Stelle verändert KI für uns die Arbeitsweise. Wir müssen Analysefragen nicht mehr im Voraus festzurren.
Wir können sie dann stellen, wenn sie sich aus einer konkreten Beobachtung heraus ergeben und können sie dann auf die vorhandene
Historie anwenden.&lt;/p&gt;
&lt;p&gt;Dafür verbinden wir die Daten der Google Search Console mit den Inhalten und Strukturen einer Website. Bei
dateibasierten Systemen können zusätzlich Änderungen aus der Git-Historie einfließen, bei datenbankbasierten Systemen
die jeweiligen Änderungsprotokolle. Das LLM einer KI-Anwendung bekommt so einen holistischen Blick auf die Inhalte und kann Zusammenhänge erkennen, die wir nicht oder nur mit viel Rechercheaufwand sehen.&lt;/p&gt;
&lt;h2 id=&quot;vom-befund-zum-to-do&quot;&gt;Vom Befund zum To-do&lt;/h2&gt;
&lt;p&gt;Analysen helfen uns allerdings nur, wenn wir daraus etwas tun können. Das System sucht deshalb gezielt nach
Verbesserungspotenzialen: Offensichtliche Schwächen, aber auch weniger sichtbare Chancen. Seiten, die knapp vor den vorderen Positionen stehen,
Themen, die noch nicht gut genug beantwortet sind, Kannibalisierungen oder veraltete Inhalte.&lt;/p&gt;
&lt;p&gt;Daraus entstehen To-dos, die nach der Umsetzung wieder in die Historie einfließen. Diese Spur ist nicht in erster Linie
für uns gedacht, sondern für das System selbst. Es kann später nachvollziehen, warum etwas geändert wurde, was danach
passiert ist und wie sich Kennzahlen entwickelt haben. So entsteht eine Erfahrungsbasis, auf die das
System bei künftigen Analysen zurückgreifen kann.&lt;/p&gt;
&lt;h2 id=&quot;wann-funktioniert-ein-neuer-artikel&quot;&gt;Wann funktioniert ein neuer Artikel?&lt;/h2&gt;
&lt;p&gt;Ein Beispiel hat uns besonders deutlich gezeigt, was dadurch möglich wird. Wir wollten eine Frage beantworten, die uns
eigentlich schon immer begleitet: Wann kann man überhaupt beurteilen, ob ein neuer Artikel funktioniert? Wann ist er im
Index? Wann kommen die ersten Impressionen und Klicks? Ab wann sind Daten belastbar genug, um Entscheidungen zu treffen?
Die Search Console liefert einzelne Datenpunkte, aber keine direkte Antwort darauf.&lt;/p&gt;
&lt;p&gt;Das LLM hat selbstständig eine Kohortenanalyse erstellt. Alle neuen Webseiten wurden automatisch mit dem Median der gleich alten Seiten verglichen – so konnten wir sehen, ob sich ein Artikel besser, schlechter oder im Rahmen entwickelt.&lt;/p&gt;
&lt;p&gt;Neu war für uns dabei weniger das statistische Verfahren an sich, sondern wie schnell die KI die passende Analyse für unsere Fragestellung ausgewählt und umgesetzt hat … und wie einfach sich diese Analyse anpassen lässt, wenn wir andere Schwerpunkte setzen wollen.&lt;/p&gt;
&lt;h2 id=&quot;wie-es-weitergeht&quot;&gt;Wie es weitergeht&lt;/h2&gt;
&lt;p&gt;Die nächste Herausforderung liegt für uns darin, die Analyse mit der Struktur der Website zu verbinden. Gute Websites
bilden fachliche Zusammenhänge ab und verwenden unterschiedliche Dokumenttypen und semantische Modelle. Diese Semantik
muss verstanden und technisch angebunden werden. Nicht nur zum Lesen, sondern perspektivisch auch, um freigegebene
Änderungen gezielt zurückzuschreiben.&lt;/p&gt;
&lt;p&gt;Daran arbeiten wir gerade mit unserem Werkzeug Trailmarks. Aktuell setzen wir es vor allem auf eigenen Websites ein. Im
nächsten Schritt wollen wir die gewonnenen Erfahrungen auf unsere &lt;a href=&quot;https://www.cosmocode.de/de/leistungen/cms/typo3/&quot;&gt;TYPO3-Projekte&lt;/a&gt; übertragen.&lt;/p&gt;</content:encoded><author>huettemann@cosmocode.de (Detlef Hüttemann)</author></item><item><title>Tarifrechner testen mit PICT</title><link>https://www.cosmocode.de/en/blog/dhue/20260615-pict-einfuehrung/</link><guid isPermaLink="true">https://www.cosmocode.de/en/blog/dhue/20260615-pict-einfuehrung/</guid><description>Tarifrechner testen mit PICT: Kombinatorische Testdatengenerierung für Versicherungen</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Finanzprodukte wie beispielsweise Versicherungen berechnen Beiträge mit komplexen mathematischen Verfahren. Je nach
Produkt fließen mehr oder weniger viele Einflussgrößen in die Berechnung ein, um unterschiedliche Risiken angemessen zu
berücksichtigen.
Wenn diese Berechnungsverfahren in Softwarelösungen implementiert werden, müssen die Algorithmen gegen die fachlichen
Vorgaben getestet werden. Das stellt Softwareingenieure vor eine besondere Herausforderung, denn Berechnungsfunktionen
verhalten sich häufig nicht überall stetig im mathematischen Sinne. Schon geringe Änderungen an den Eingabewerten können
größere Änderungen an den Prämien hervorrufen.&lt;/p&gt;
&lt;h2 id=&quot;funktionen-mit-sprüngen&quot;&gt;Funktionen mit Sprüngen&lt;/h2&gt;
&lt;p&gt;Die Ursache liegt häufig im Modell der Produktentwicklung. Versicherungsprodukte werden von Aktuaren oft zunächst mit
Excel entwickelt. In Excel ist es vergleichsweise einfach, das Verhalten von Parametern über Lookup-Tabellen zu
definieren. Diese Lookups sind mathematisch betrachtet Stützstellen einer Funktion. Der Lookup in Excel entspricht dann
häufig einer Treppenfunktion.
Warum ist das wichtig? Als Softwaretester liegt es nahe, ein konsistentes Verhalten einer Anwendung zu erwarten. Wenn
ich das Verhalten der Anwendung an den Extremwerten und in der Mitte teste, könnte ich erwarten, dass sie sich auch an
den Zwischenwerten entsprechend gutartig verhält.
Genau das ist bei einem stützstellenbasierten Ansatz mit Excel-Lookup-Algorithmen aber nicht zwingend der Fall.
Zusätzlich wird es komplexer, wenn solche Variablen im Excel-Algorithmus mit Bedingungen verknüpft werden, wie zum
Beispiel:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Wenn Tarifgruppe &amp;gt; 100 und Schadenquote &amp;gt; 1 dann Tarifgruppe -= 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mit Tests nach Gefühl kommt man hier nicht weiter. Das macht man ja sowieso nie — oder man nennt es exploratives Testen.
Ohne Kenntnis des tatsächlichen Algorithmus lassen sich die neuralgischen Parameterkombinationen, bei denen die
Berechnungsfunktion ihr Verhalten ändert, nicht zuverlässig vorhersagen.
&lt;strong&gt;Die Testabdeckung muss entsprechend hoch angesetzt werden.&lt;/strong&gt;
Testen ist allerdings teuer. Besonders bei Ende-zu-Ende-Tests ist die Durchführungsdauer hoch. Eine Automatisierung der
Testdurchführung kann zwar den Personaleinsatz beim Testen reduzieren, erhöht aber die Last auf dem System. Auch das
verursacht Kosten. Da das Testen in einen Projektrahmen eingebettet ist, führt eine längere Testdauer außerdem zu einer
verlängerten Projektdauer und damit zu Zusatzkosten durch die längere Bereithaltung des Projektteams.
Während sich die Werte einer einzelnen Variablen noch vergleichsweise gut bestimmen lassen, zum Beispiel durch
Extraktion der Wertetabellen aus den Lookups, ist das Zusammenspiel mehrerer Variablen deutlich schwieriger zu
überschauen. Eine Analyse des Referenzrechners in Bezug auf abhängige Variablen ist mit KI zwar gut machbar, löst das
Problem aber nicht vollständig. Denn im Soll-Ist-Vergleich zwischen Referenzsystem und dem zu testenden System bleibt
das Testsystem eine Blackbox, die durch bewusste oder unbewusste Programmierentscheidungen ein anderes Verhalten
aufweisen kann.&lt;/p&gt;
&lt;h2 id=&quot;paarweise-unabhängige-kombinationen--pict&quot;&gt;Paarweise unabhängige Kombinationen – PICT&lt;/h2&gt;
&lt;p&gt;Ein ökonomischer Weg, eine sinnvolle Testabdeckung in den Parameterkombinationen zu erreichen, ist das PICT-Verfahren.
PICT steht für Pairwise Independent Combinatorial Testing. Der Begriff beschreibt den Ansatz recht genau: Ausgehend von
den Testwerten der Einzelparameter sorgt das PICT-Verfahren dafür, dass für je zwei Parameter alle Wertekombinationen
dieser beiden Parameter abgedeckt sind.
Da ein Testdatensatz nicht nur die beiden jeweils betrachteten Parameter enthalten muss, sondern auch die übrigen
Parameter, entstehen automatisch auch bestimmte 3er- und 4er-Kombinationen.
PICT ersetzt damit nicht die fachliche Teststrategie. Es hilft aber, eine große Menge möglicher Eingabekombinationen
systematisch auf eine kleinere, besser handhabbare Menge von Testfällen zu reduzieren.&lt;/p&gt;
&lt;h2 id=&quot;beispiel&quot;&gt;Beispiel&lt;/h2&gt;
&lt;p&gt;Ein Beispiel soll das PICT-Verfahren verdeutlichen.
Nehmen wir ein Versicherungsprodukt, beispielsweise eine Hausratversicherung, mit den prämienrelevanten Einflussgrößen
Laufzeit, Wohnfläche, Schmuck und einem Bonusrabatt.
Wir halten die Problemgröße bewusst klein, um die kombinatorische Entwicklung intuitiv einschätzen zu können. Für jeden
dieser Parameter legen wir die zu testenden Werte fest.&lt;/p&gt;
&lt;h3 id=&quot;parameter-und-werte-des-beispiels&quot;&gt;Parameter und Werte des Beispiels&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Laufzeit&lt;/strong&gt;: 1, 3, 5 Jahre&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Wohnfläche&lt;/strong&gt;: 30 qm, 50 qm, 100 qm, 200 qm&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Schmuck mitversichert im Wert von&lt;/strong&gt;: 0 €, 100 €, 1.000 €&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bonusrabatt&lt;/strong&gt;: ja, nein
Rechnerisch ergeben sich 72 Kombinationen. Eine vollständige Abdeckung hätte also 72 Testdatensätze.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.cosmocode.de/_astro/pict-beispielprodukt.DpW9LMen_ZRhNSJ.webp&quot; alt=&quot;Beispiel Versicherungsprodukt&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;426&quot; height=&quot;160&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;parameterpaare-und-deren-kombinationen&quot;&gt;Parameterpaare und deren Kombinationen&lt;/h3&gt;
&lt;p&gt;Das PICT-Verfahren betrachtet nun alle Parameterpaare und sorgt dafür, dass in diesen Paaren jeweils alle
Wertekombinationen abgedeckt sind.
Laufzeit hat 3 Werte, Wohnfläche 4 Werte. Für die Kombination Laufzeit × Wohnfläche ergeben sich also 12 Kombinationen.
Bricht man dies für alle Parameterpaare herunter, kommt man auf 53 Paar-Kombinationen. Das ist allerdings noch naiv
gerechnet, weil die übrigen Parameter in realen Testdatensätzen bereits mitverteilt werden und dadurch mehrere
Paar-Kombinationen gleichzeitig abgedeckt werden können.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.cosmocode.de/_astro/pict-kombinationen.KkcUSdcb_10yUFg.webp&quot; alt=&quot;Parameterpaare&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1326&quot; height=&quot;356&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;datenpacking-im-pict-verfahren&quot;&gt;Datenpacking im PICT-Verfahren&lt;/h3&gt;
&lt;p&gt;Das PICT-Verfahren versucht nun, die Kombinationen in gemeinsame Testdatensätze zu packen.
Das Ergebnis sind in diesem Beispiel 14 dicht gepackte Testdatensätze.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.cosmocode.de/_astro/pict-alle-testfaelle.COA3T6OK_1hEDPS.webp&quot; alt=&quot;Alle Testfälle&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;425&quot; height=&quot;437&quot;&gt;&lt;/p&gt;
&lt;p&gt;14 PICT-Testfälle bei 72 rechnerischen Kombinationen: In diesem kleinen Beispiel hat das noch keine große praktische
Bedeutung. Interessant wird es, wenn wir mehr Werte oder mehr Parameter zulassen.
Der Einfachheit halber nehmen wir an, dass alle Parameter genau 10 Werteausprägungen haben.
Ein Testlauf des PICT-Verfahrens zeigt, dass die Zahl der PICT-Testdatensätze bei der weiteren Hinzunahme von Parametern
nur moderat anwächst.&lt;/p&gt;
&lt;p&gt;In der Praxis wächst die Zahl der Testfälle bei paarweiser Abdeckung meist deutlich langsamer als die vollständige
kartesische Produktmenge. Das ist der entscheidende wirtschaftliche Vorteil des Verfahrens: Jeder zusätzliche Parameter
erhöht den Testumfang, aber nicht in dem Maße, wie es bei einer vollständigen Kombination aller Werte der Fall wäre.&lt;/p&gt;
&lt;p&gt;Die grüne Linie in der folgenden Grafik zeigt die Summe aller 2-er Kombinationen. die blaue Linie zeigt die Anzahl der
pairwise Kombinationen, die rote Linie die Anzahl der 3-wise.&lt;/p&gt;
&lt;p&gt;Auf der horizontalen Achse ist die Anzahl der Parameter eingetragen.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.cosmocode.de/_astro/pict-verlauf-2-3-wise.ZlyWW9mh_Z2dd1Tw.webp&quot; alt=&quot;Asymptotisches Verhalten&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2888&quot; height=&quot;1500&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;3-wise-und-sub-models&quot;&gt;3-wise und Sub-Models&lt;/h2&gt;
&lt;p&gt;Wenn bekannt ist, dass die Parameterabhängigkeiten im Wesentlichen von mehr als zwei Parametern abhängen, kann das
Verfahren entsprechend erweitert werden — mit dem Preis steigender Testfallzahlen.
Anstatt hierbei alles auf 3-wise umzustellen, kann man über Sub-Models das 3-wise-Verhalten für einzelne
Parametergruppen erzwingen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# PICT-Beispiel: Versicherungsprodukt mit 7 Parametern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Standard: paarweise Kombinationen über alle Parameter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Aufruf z. B.: pict versicherung.txt /o:2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Laufzeit: 1 Jahr, 3 Jahre, 5 Jahre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Wohnfläche: 30 qm, 50 qm, 100 qm, 200 qm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Schmuck: 0 EUR, 100 EUR, 1000 EUR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Bonusrabatt: ja, nein&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Zahlweise: monatlich, vierteljährlich, jährlich&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Selbstbeteiligung: 0 EUR, 150 EUR, 300 EUR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Tarifvariante: Basis, Komfort, Premium&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Für die beitragsrelevanten Kernparameter wird zusätzlich 3-wise Coverage erzwungen.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{ Laufzeit, Wohnfläche, Schmuck, Selbstbeteiligung } @ 3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Damit werden weiterhin alle Parameter grundsätzlich paarweise kombiniert. Für die definierte Gruppe aus Laufzeit,
Wohnfläche, Schmuck und Selbstbeteiligung wird zusätzlich sichergestellt, dass alle 3er-Kombinationen innerhalb dieser
Gruppe abgedeckt sind.
Das ist besonders hilfreich, wenn fachlich bekannt ist, dass bestimmte Parameter gemeinsam auf die Prämie wirken, man
aber nicht den gesamten Testraum auf 3-wise anheben möchte.&lt;/p&gt;
&lt;h2 id=&quot;negative-tests-mit-ungültigen-werten&quot;&gt;Negative Tests mit ungültigen Werten&lt;/h2&gt;
&lt;p&gt;PICT eignet sich nicht nur für gültige Kombinationen, sondern kann auch bei negativen Tests helfen. Damit sind Testfälle
gemeint, bei denen bewusst ungültige oder fachlich fehlerhafte Werte verwendet werden, um die Validierung des Systems zu
prüfen. Bei einem Versicherungsprodukt könnte das zum Beispiel eine negative Wohnfläche, eine Laufzeit von 0 Jahren oder
ein nicht erlaubter Schmuckwert sein.
Solche Werte können in PICT mit einer Tilde &lt;code&gt;~&lt;/code&gt; gekennzeichnet werden:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Laufzeit: 1 Jahr, 3 Jahre, 5 Jahre, ~0 Jahre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Wohnfläche: 30 qm, 50 qm, 100 qm, 200 qm, ~-10 qm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Schmuck: 0 EUR, 100 EUR, 1000 EUR, ~-500 EUR&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Der Vorteil dieser Kennzeichnung ist, dass PICT ungültige Werte kontrolliert behandelt. &lt;strong&gt;In der Regel wird pro Testfall
nur ein negativer Wert verwendet&lt;/strong&gt;. Das ist wichtig, weil ein Testfall mit mehreren ungültigen Eingaben oft schwer
auszuwerten ist: Wenn gleichzeitig die Laufzeit, die Wohnfläche und der Schmuckwert falsch sind, ist nicht mehr
eindeutig erkennbar, welche Validierung genau fehlgeschlagen ist.
Negative Tests sollten deshalb bewusst sparsam eingesetzt werden. Sie ersetzen keine vollständige Validierungsstrategie,
können aber sehr gut helfen, typische Fehleingaben systematisch in die generierten Testfälle aufzunehmen.&lt;/p&gt;
&lt;h2 id=&quot;gewichtung-von-werten&quot;&gt;Gewichtung von Werten&lt;/h2&gt;
&lt;p&gt;Nicht alle Werte sind in der Praxis gleich wichtig. Manche Tarifvarianten werden besonders häufig verkauft, bestimmte
Laufzeiten kommen öfter vor, und einzelne Kombinationen sind geschäftlich relevanter als andere. PICT ermöglicht es,
solche Werte zu gewichten.
Eine Gewichtung wird direkt hinter dem Wert angegeben:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Tarifvariante: Basis, Komfort, Premium (3)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Zahlweise: monatlich (2), vierteljährlich, jährlich&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In diesem Beispiel wird &lt;code&gt;Premium&lt;/code&gt; stärker bevorzugt als &lt;code&gt;Basis&lt;/code&gt; oder &lt;code&gt;Komfort&lt;/code&gt;. Ebenso wird die monatliche Zahlweise
häufiger berücksichtigt als die anderen Zahlweisen. Das bedeutet allerdings nicht, dass PICT daraus eine exakte
statistische Verteilung erzeugt. Die Gewichtung beeinflusst die Auswahl der Werte, aber das eigentliche Ziel bleibt
weiterhin die kombinatorische Abdeckung.
Gewichtung ist besonders dann sinnvoll, wenn bestimmte Werte im Test stärker sichtbar sein sollen, ohne dass man dafür
eigene Sondertestfälle schreiben möchte. Sie kann helfen, realistischere Testdaten zu erzeugen, etwa wenn ein Produkt in
der Praxis überwiegend mit bestimmten Optionen abgeschlossen wird. Gleichzeitig sollte man Gewichtung nicht mit
fachlicher Priorisierung verwechseln: Kritische Kombinationen sollten weiterhin explizit modelliert werden, zum Beispiel
über Sub-Models mit höherer Teststärke oder über zusätzliche manuelle Testfälle.&lt;/p&gt;
&lt;h2 id=&quot;ausschluss-ungültiger-kombinationen&quot;&gt;Ausschluss ungültiger Kombinationen&lt;/h2&gt;
&lt;p&gt;Ein Testmodell enthält oft Kombinationen, die theoretisch möglich wären, fachlich aber keinen Sinn ergeben. Solche
Kombinationen sollten nicht als Testfälle erzeugt werden, weil sie das Ergebnis verfälschen und unnötigen Aufwand
verursachen. PICT erlaubt deshalb den Ausschluss ungültiger Kombinationen über Constraints.
Ein Beispiel: Ein hoher Schmuckwert ist möglicherweise nur in der Premium-Variante erlaubt.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IF [Schmuck] = &amp;quot;1000 EUR&amp;quot; THEN [Tarifvariante] = &amp;quot;Premium&amp;quot;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Oder: Ein Bonusrabatt soll erst ab einer längeren Laufzeit möglich sein.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IF [Bonusrabatt] = &amp;quot;ja&amp;quot; THEN [Laufzeit] &amp;lt;&amp;gt; &amp;quot;1 Jahr&amp;quot;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Solche Regeln sorgen dafür, dass PICT keine fachlich unzulässigen Testfälle erzeugt. Das ist besonders wichtig, wenn
Testfälle später automatisiert ausgeführt oder an Fachbereiche zur Abnahme gegeben werden. Ein Testfall, der in der
Realität gar nicht vorkommen darf, ist sonst schwer zu bewerten: Scheitert er wegen eines Fehlers im System oder weil
der Testfall selbst ungültig ist?
Wichtig ist aber die Unterscheidung zwischen „ungültig“ und „ungewöhnlich“. Eine kleine Wohnfläche mit einem
Premiumtarif mag selten sein, kann aber fachlich durchaus erlaubt sein. Eine solche Kombination sollte nicht
ausgeschlossen werden. Constraints sollten nur dort verwendet werden, wo eine Kombination tatsächlich fachlich verboten
ist.
Ein vollständiger Ausschnitt aus einer PICT-Datei könnte dann so aussehen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Laufzeit: 1 Jahr, 3 Jahre, 5 Jahre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Wohnfläche: 30 qm, 50 qm, 100 qm, 200 qm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Schmuck: 0 EUR, 100 EUR, 1000 EUR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Bonusrabatt: ja, nein&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Zahlweise: monatlich, vierteljährlich, jährlich&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Selbstbeteiligung: 0 EUR, 150 EUR, 300 EUR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Tarifvariante: Basis, Komfort, Premium&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IF [Schmuck] = &amp;quot;1000 EUR&amp;quot; THEN [Tarifvariante] = &amp;quot;Premium&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IF [Bonusrabatt] = &amp;quot;ja&amp;quot; THEN [Laufzeit] &amp;lt;&amp;gt; &amp;quot;1 Jahr&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IF [Tarifvariante] = &amp;quot;Basis&amp;quot; THEN [Selbstbeteiligung] &amp;lt;&amp;gt; &amp;quot;0 EUR&amp;quot;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Durch solche Ausschlüsse wird das Modell fachlich genauer. PICT erzeugt dann nicht einfach beliebige Kombinationen,
sondern Kombinationen, die innerhalb der definierten Geschäftsregeln gültig sind.&lt;/p&gt;
&lt;h2 id=&quot;typischer-ablauf-in-einem-testprojekt&quot;&gt;Typischer Ablauf in einem Testprojekt&lt;/h2&gt;
&lt;p&gt;In einem konkreten Testprojekt beginnt die Arbeit nicht mit PICT selbst, sondern mit der fachlichen Analyse des
Tarifrechners. Zunächst müssen die relevanten Eingabeparameter bestimmt werden. Danach werden für jeden Parameter
sinnvolle Werteklassen gebildet: Grenzwerte, typische Standardwerte, fachliche Sonderfälle und Werte unmittelbar vor
oder nach einem Sprung in der Berechnungslogik.&lt;/p&gt;
&lt;p&gt;Im nächsten Schritt werden fachliche Einschränkungen ergänzt. Nicht jede theoretisch mögliche Kombination darf auch im
Testmodell vorkommen. Ungültige Kombinationen werden daher über Constraints ausgeschlossen. Für besonders kritische
Parametergruppen kann zusätzlich eine höhere Kombinationsstärke definiert werden.&lt;/p&gt;
&lt;p&gt;Erst danach werden mit PICT die eigentlichen Testdaten erzeugt. Diese Testdaten können anschließend gegen den
Referenzrechner, zum Beispiel einen Excel-Rechner, ausgeführt werden. Die dort berechneten Sollwerte werden dann mit den
Ergebnissen des Zielsystems verglichen. Auf diese Weise entsteht ein nachvollziehbarer Soll-Ist-Vergleich zwischen
fachlicher Referenz und technischer Implementierung.&lt;/p&gt;
&lt;h2 id=&quot;grenzen-des-verfahrens&quot;&gt;Grenzen des Verfahrens&lt;/h2&gt;
&lt;p&gt;PICT reduziert die Anzahl der Testfälle, aber nicht die Verantwortung für ein gutes Testmodell. Die Qualität der
erzeugten Testfälle hängt wesentlich davon ab, ob die richtigen Parameter ausgewählt, passende Werteklassen gebildet und
fachliche Abhängigkeiten korrekt modelliert wurden.&lt;/p&gt;
&lt;p&gt;Das Verfahren ersetzt außerdem keine Grenzwertanalyse, keine fachlichen End-to-End-Szenarien und keine gezielten
Regressionstests für bereits bekannte Fehler. Gerade bei Tarifrechnern bleiben zusätzliche Tests an fachlich relevanten
Schwellenwerten wichtig, weil dort die größten Sprünge in der Berechnung auftreten können.&lt;/p&gt;
&lt;p&gt;PICT ist deshalb am stärksten, wenn es als Baustein einer umfassenden Teststrategie eingesetzt wird: Es sorgt für eine
systematische kombinatorische Abdeckung, während fachliche Analyse, Grenzwerttests und Regressionstests die inhaltliche
Tiefe ergänzen.&lt;/p&gt;
&lt;h2 id=&quot;fazit&quot;&gt;Fazit&lt;/h2&gt;
&lt;p&gt;PICT ist kein Ersatz für fachliches Testdesign, aber ein sehr nützliches Werkzeug, um aus vielen Eingabeparametern eine
überschaubare und dennoch systematische Menge von Testfällen zu erzeugen.&lt;/p&gt;
&lt;p&gt;Gerade bei Tarifrechnern, deren Verhalten
durch Lookup-Tabellen, Bedingungen und Sonderregeln geprägt ist, hilft das Verfahren dabei, relevante
Parameterkombinationen nicht nur zufällig, sondern nachvollziehbar abzudecken.&lt;/p&gt;
&lt;p&gt;Wichtig ist dabei, dass das PICT-Modell sorgfältig erstellt wird. Die Auswahl der Parameter, die Bildung sinnvoller
Werteklassen, der Ausschluss fachlich ungültiger Kombinationen und die gezielte Erhöhung der Teststärke für kritische
Parametergruppen entscheiden darüber, wie aussagekräftig die generierten Testfälle am Ende sind.&lt;/p&gt;
&lt;p&gt;In einem Folgeartikel zeige ich an einem konkreten Beispiel, wie PICT in der Praxis zusammen mit einem Excel-Rechner
eingesetzt werden kann: von der Modellierung der Eingabeparameter über die Generierung der Testdaten bis zum Vergleich
der berechneten Ergebnisse mit dem Zielsystem.&lt;/p&gt;</content:encoded><author>huettemann@cosmocode.de (Detlef Hüttemann)</author></item><item><title>Hello again, World</title><link>https://www.cosmocode.de/en/blog/dhue/20260526-hello-again-world/</link><guid isPermaLink="true">https://www.cosmocode.de/en/blog/dhue/20260526-hello-again-world/</guid><description>Reaktivierung unseres Blogs: Warum wir wieder einen eigenen Ort für unsere Gedanken brauchen.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Wenn man die Geburt eines Blogs üblicherweise mit einem „Hello World“-Post begrüßt, wie sollte dann der Titel für einen wieder ins Leben gerufenen Blog lauten? Vielleicht: „Hello again, World“?&lt;/p&gt;
&lt;p&gt;Viele Jahre lang hatten wir auf unserer Website einen Blog. Er brachte auch durchaus guten Traffic. Als wir vor einigen Jahren unsere Homepage relauncht haben, haben wir uns allerdings entschieden, den Blog nicht zu übernehmen.&lt;/p&gt;
&lt;p&gt;Der Hintergrund war, dass viele der alten Artikel zwar in hohem Maße SEO-relevant waren, zugleich aber auch alt und inhaltlich nicht mehr auf dem Stand, den wir heute vertreten würden.&lt;/p&gt;
&lt;p&gt;Das ist nicht unbedingt das beste Aushängeschild: Wenn ein möglicher Interessent oder Neukunde ausgerechnet über einen veralteten Artikel auf uns aufmerksam wird, entsteht womöglich ein Eindruck, zu dem wir heute nicht mehr stehen würden.&lt;/p&gt;
&lt;h2 id=&quot;was-uns-ohne-blog-gefehlt-hat&quot;&gt;Was uns ohne Blog gefehlt hat&lt;/h2&gt;
&lt;p&gt;Bei unserem kürzlich stattgefundenen Seminar in Lübbenow haben wir beschlossen, den Blog wieder zu reaktivieren.&lt;/p&gt;
&lt;p&gt;Denn uns fehlt ein wichtiger Aspekt der Öffentlichkeitsarbeit: ein Ort, an dem wir nicht ganz so formell auftreten müssen wie in Referenzen oder Case Studies. Ein Ort, an dem wir freier erzählen können — über Entwicklungen in unserer Firma, über unser Team oder über Technologien, die wir gerade einsetzen.&lt;/p&gt;
&lt;p&gt;Natürlich ist damit auch die Hoffnung verbunden, den einen oder anderen Leser zu erreichen — und vielleicht auch den einen oder anderen Interessenten.&lt;/p&gt;
&lt;p&gt;Vielleicht stehen wir in ein paar Jahren wieder vor dem Problem veralteter Inhalte. Der Unterschied ist: Inhalte zu identifizieren, zu prüfen und entsprechend zu markieren, wird inzwischen deutlich einfacher. Schon heute lassen sich solche Aufgaben mit KI-Agenten unterstützen. In fünf Jahren werden vermutlich noch einmal ganz andere Werkzeuge zur Verfügung stehen, um Inhalte zu auditieren, einzuordnen und bei Bedarf zu aktualisieren.&lt;/p&gt;
&lt;h2 id=&quot;warum-nicht-einfach-linkedin&quot;&gt;Warum nicht einfach LinkedIn?&lt;/h2&gt;
&lt;p&gt;Als wir den Blog seinerzeit gestrichen hatten, gab es auch die Idee, stattdessen stärker in anderen Medien über uns zu berichten: auf sozialen Plattformen, über Medium oder über LinkedIn.&lt;/p&gt;
&lt;p&gt;LinkedIn ist eine Plattform mit Relevanz. Aber es ist eben auch ein durchoptimiertes System, das — wie alle sozialen Plattformen — die Aufmerksamkeit der Akteure vermarktet.&lt;/p&gt;
&lt;p&gt;Auf LinkedIn spielen wir alle nach denselben Regeln. Wir strampeln uns ab, um in möglichst vielen Feeds zu erscheinen. Und dazu gehört auch, immer mehr und immer kräftiger strampeln zu müssen, wenn die anderen auf LinkedIn dasselbe tun — notfalls mit automatisierten Posts, die von KI geschrieben werden.&lt;/p&gt;
&lt;p&gt;LinkedIn ist als Nutzer- oder Konsumentenplattform durchaus brauchbar. Als Produzent geht es dort aber irgendwann nicht mehr nur um kluge Inhalte, sondern auch um Dauerfeuer.&lt;/p&gt;
&lt;h2 id=&quot;ein-eigener-ort-für-eigene-gedanken&quot;&gt;Ein eigener Ort für eigene Gedanken&lt;/h2&gt;
&lt;p&gt;Wenn ich mir schon viele Gedanken über ein Thema mache und an der schriftlichen Ausarbeitung feile, dann empfinde ich es als angemessener, diesen Text in einem Rahmen zu veröffentlichen, der uns gehört: auf unserer eigenen Bühne.&lt;/p&gt;
&lt;p&gt;Natürlich stehen auch Blogposts in einem Aufmerksamkeitswettbewerb — nämlich dem der Suchmaschinen und KI-Content-Aggregatoren. Aber in meinem privaten Blog habe ich den Eindruck gewonnen, dass sich guter Content immer noch lohnt und dass er auch gelesen wird. Meine anfängliche Skepsis, dass LLMs die Inhalte lediglich als Knowledge scrapen, um daraus eigene Inhalte zu formen, und nur noch Bots, aber keine Menschen mehr auf die Blogs gehen, hat sich nicht bestätigt. Noch nicht.&lt;/p&gt;
&lt;h2 id=&quot;happy-rebirth-cosmoblog&quot;&gt;Happy Rebirth, CosmoBlog&lt;/h2&gt;
&lt;p&gt;Also versuchen wir es mit einem neuen Blog auf CosmoCode.&lt;/p&gt;
&lt;p&gt;Happy Rebirth, CosmoBlog. Hereinspaziert, liebe Welt.&lt;/p&gt;</content:encoded><author>huettemann@cosmocode.de (Detlef Hüttemann)</author></item></channel></rss>