PHP Elegant Testing in Laravel

Die Programmiersprache PHP ist seit Jahrzehnten im Bereich der Webanwendungen für viele Entwickler die erste Wahl. Seit der Einführung objektorientierter Sprachfeatures mit der Version 5 wurde PHP erwachsen. Große Projekte lassen sich nun in eine saubere und vor allem wartbare Architektur bringen. Ein markanter Unterschied zwischen kommerzieller Softwareentwicklung und einem Hobby-Programmierer, der die Vereinshomepage zusammengebaut hat und betreut, ist der automatisierte Nachweis, dass die Anwendung festgelegte Vorgaben einhält. Hiermit betreten wir also das Terrain der automatisierten Softwaretests.

Ein wichtiger Grundsatz von automatisierten Softwaretests ist, dass diese ohne zusätzliche Interaktion nachweisen, dass die Anwendung ein zuvor festgesetztes Verhalten an den Tag legt. Softwaretests können nicht sicherstellen, dass eine Anwendung fehlerfrei ist, dennoch erhöhen sie die Qualität und reduzieren die Menge der möglichen noch enthaltenen Fehler. Der wichtigste Aspekt in automatisierten Softwaretests ist, dass ein bereits in Tests formuliertes Verhalten jederzeit in kurzer Zeit überprüft werden kann. Das stellt sicher, dass, wenn Entwickler eine bestehende Funktion erweitern oder in ihrer Ausführungsgeschwindigkeit optimieren, die vorhandene Funktionalität nicht beeinflusst wird. Kurz gesagt, haben wir ein leistungsfähiges Mittel, um sicherzustellen, dass wir bei unserer Arbeit nichts kaputtprogrammiert haben, ohne mühselig alle Möglichkeiten von Hand aus jedes Mal aufs Neue durchzuklicken.

Fairerweise muss man auch erwähnen, dass die automatisierten Tests entwickelt werden müssen, was wiederum im ersten Moment Zeit kostet. Dieser ‚vermeintliche‘ Mehraufwand kompensiert sich aber zügig, sobald die Testfälle mehrfach ausgeführt werden, um sicherzustellen, dass der Status Quo sich nicht verändert hat. Natürlich gehört es auch dazu, dass die erstellten Testfälle ebenfalls gepflegt werden müssen.

Wird etwa ein Fehler erkannt, schreibt man zuerst für diesen Fehler einen Testfall, der diesen Fehler nachstellt. Die Reparatur ist dann erfolgreich abgeschlossen, wenn der beziehungsweise die Testfälle erfolgreich sind. Aber auch Änderungen im Verhalten vorhandener Funktionalität erfordern immer ein entsprechendes Anpassen der zugehörigen Tests. Dieses Konzept, zur Implementierung der Funktion parallel Tests zu schreiben, ist in vielen Programmiersprachen umsetzbar und wird testgetriebene Entwicklung genannt. Aus eigener Erfahrung empfehle ich, auch bei vergleichsweise kleinen Projekten bereits testgetrieben vorzugehen. Kleine Projekte haben oft nicht die Komplexität großer Anwendungen, für die auch im Bereich des Testens einige Tricks benötigt werden. In kleinen Projekten hat man hingegen die Möglichkeit, im überschaubaren Rahmen seine Fertigkeiten auszubauen.

Testgetriebene Softwareentwicklung ist auch in PHP keine neue Sache. Das Unit-Test Framework PHPUnit von Sebastian Bergmann gibt es bereits seit 2001. Das um 2021 erschiene Test-Framework PEST setzt auf PHPUnit auf und erweitert dies um eine Vielzahl an neuen Möglichkeiten. PEST steht für PHP elegant Testing und definiert sich selbst als ein Werkzeug der neuen Generation. Da viele, vor allem kleinere Agenturen, die in PHP ihre Software entwickeln, in aller Regel auf manuelles Testen beschränken, möchte ich mit diesem kleinen Artikel eine Lanze brechen und aufzeigen, wie leicht es ist, PEST zu nutzen. Natürlich gibt es zu dem Thema testgetriebene Softwareentwicklung ein Füllhorn an Literatur, die auf die Art und Weise, wie man Tests in einem Projekt möglichst optimal organisiert. Dieses Wissen ist ideal für Entwickler, die bereits erste Gehversuche mit Test-Frameworks gemacht haben. Denn in diesen Büchern kann man lernen, wie man mit möglichst wenig Aufwand unabhängige, wartungsarme und performante Tests entwickelt. Um aber an diesen Punkt zu gelangen, muss man zuerst einmal die Einstiegshürde, die Installation der gesamten Umgebung, bewerkstelligen.

Eine typische Umgebung für eigene entwickelte Web-Projekte ist das Laravel-Framework. Beim Anlegen eines neuen Laravel-Webprojektes besteht die Möglichkeit, sich zwischen PHPUnit und PEST zu entscheiden. Laravel kümmert sich um alle notwendigen Details. Als notwendige Voraussetzung wird eine funktionierende PHP Umgebung benötigt. Dies kann zum einen ein Docker Container sein, eine native Installation oder die Serverumgebung XAMPP von Apache Friends. Für unser kurzes Beispiel verwende ich die PHP CLI in einem Debian Linux.

sudo apt-get install php-cli php-mbstring php-xml php-pcov

Nach Ausführen des Kommandos in der Konsole kann über den Befehl php -v der Erfolg der Installation getestet werden. Im nächsten Schritt benötigen wir einen Paketmanager, mit dem wir andere PHP Bibliotheken für unsere Anwendung bereitstellen können. Composer ist ein solcher Paketmanager. Dieser ist mit wenigen Anweisungen ebenfalls schnell auf dem System bereitgestellt.

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'ed0feb545ba87161262f2d45a633e34f591ebb3381f2e0063c345ebea4d228dd0043083717770234ec00c5a9f9593792') { echo 'Installer verified'.PHP_EOL; } else { echo 'Installer corrupt'.PHP_EOL; unlink('composer-setup.php'); exit(1); }"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Damit wird die aktuelle Version der Datei composer.phar in das aktuelle Verzeichnis heruntergeladen, in dem der Befehl ausgeführt wird. Zudem wird auch automatisch der korrekte Hash überprüft. Damit Composer auch global über die Kommandozeile verfügbar ist, kann entweder der Pfad in die Pfadvariable aufgenommen werden oder man setzt eine Link der composer.phar in ein Verzeichnis, dessen Pfad bereits in der Bash integriert ist. Ich bevorzuge letztere Variante und erreiche dies über:

ln -d composer.phar $HOME/.local/bin/composer

Wenn alles korrekt ausgeführt wurde sollte nun mit composer list die Version inklusive der verfügbaren Kommandos ausgegeben werden. Ist dies der Fall, können wir global in das Composer Repository den Lavarel Installer installieren.

php composer global require laravel/installer

Damit wir nun auch über die Bash Lavarel installieren können, muss die Path-Variable COMPOSER_HOME gesetzt werden. Um herauszufinden, wo Composer das Repository angelegt hat, genügt der Befehl composer config -g home. Den hierüber ermittelten Pfad, der in meinem Fall /home/ed/.config/composer lautet, bindet man dann in die Variable COMPOSER_HOME. Nun können wir in einem leeren Verzeichnis

php $COMPOSER_HOME/vendor/bin/laravel new MyApp

ausführen, um ein neues Laravel-Projekt anzulegen. Die zugehörige Ausgabe auf der Konsole schaut wie folgt aus:

ed@P14s:~/Downloads/test$ php $COMPOSER_HOME/vendor/bin/laravel new MyApp

   _                               _
  | |                             | |
  | |     __ _ _ __ __ ___   _____| |
  | |    / _` |  __/ _` \ \ / / _ \ |
  | |___| (_| | | | (_| |\ V /  __/ |
  |______\__,_|_|  \__,_| \_/ \___|_|


  Which starter kit would you like to install? ────────────────┐
  None                                                         
 └──────────────────────────────────────────────────────────────┘

  Which testing framework do you prefer? ──────────────────────┐
  Pest                                                         
 └──────────────────────────────────────────────────────────────┘

Creating a "laravel/laravel" project at "./MyApp"
Installing laravel/laravel (v12.4.0)
  - Installing laravel/laravel (v12.4.0): Extracting archive
Created project in /home/ed/Downloads/test/MyApp
Loading composer repositories with package information

Die so erzeugte Verzeichnisstruktur enthält den Ordner tests, in dem die Testfälle abgelegt sind, sowie die Datei phpunit.xml, welche die Konfiguration der Tests vorhält. Laravel definiert zwei Test Suiten: Unit und Feature, die bereits jeweils einen Demo Test enthalten. Um die beiden Demotestfälle auszuführen, nutzen wir das von Laravel mitgelieferte Kommandozeilenwerkzeug artisan [1]. Um die Tests auszuführen, genügt im Root-Verzeichnis einzig der Befehl php artisan test.

Damit wir die Qualität der Testfälle beurteilen können, müssen wir die zugehörige Testabdeckung ermitteln. Die Coverage erhalten wir ebenfalls durch artisan mit der Anweisung test, die durch den Parameter –coverage ergänzt wird.

php artisan test --coverage

Für die von Lavarel mitgelieferten Demo Testfälle ist die Ausgabe wie folgt:

Leider sind die Möglichkeiten von artisan zum Ausführen der Testfälle sehr eingeschränkt. Um den vollen Funktionsumfang von PEST nutzen zu können, sollte von Beginn an gleich der PEST Exekutor verwendet werden.

php ./vendor/bin/pest -h

Den PEST Exekutor findet man im Verzeichnis vendor/bin/pest und mit dem Parameter -h wird die Hilfe ausgegeben. Neben diesem Detail beschäftigt uns der Ordner tests, den wir bereits erwähnt haben. Im initialen Schritt sind über die Datei phpunit.xml zwei Testsuiten vorkonfiguriert. Die Testdateien selbst sollten mit dem Suffix Test enden, wie im Beispiel ExampleTest.php.

Im Vergleich zu anderen Test Suiten, versucht PEST möglichst viele Konzepte der automatisierten Testausführung zu unterstützen. Um dabei den Durchblick nicht zu verlieren, sollte jede Teststufe in einer eigenen Test Suite abgelegt werden. Neben den klassischen UnitTests werden Browsertests, Stresstests, Architekturtests und sogar das neu aufgekommene Mutation Testing ermöglicht. Natürlich kann dieser Artikel nicht alle Aspekte von PEST behandeln, zudem sind mittlerweile auch viele hochwertige Tutorials für das Schreiben klassischer Komponententests in PEST verfügbar. Deswegen beschränke ich mich auf einen Überblick und ein paar weniger verbreitete Konzepte.

Architektur-Test

Der Sinn von Architekturtests ist es auf einfache Weise zu überprüfen, ob die Vorgaben durch die Entwickler auch eingehalten werden. Dazu zählt, dass unter anderem Klassen, die Datenmodelle repräsentieren, in einem festgelegten Verzeichnis liegen und nur über spezialisierte Klassen aufgerufen werden dürfen.

test('models')
->expect('App\Models')
->toOnlyBeUsedOn('App\Repositories')
->toOnlyUse('Illuminate\Database');

Mutation-Test

Diese Form des Testens ist etwas Neues. Zweck der Übung ist es durch Veränderungen, z. B. in Bedingungen der originalen Implementierungen, sogenannte Mutanten zu erzeugen. Wenn die zu den Mutanten zugeordneten Tests weiterhin korrekt durchlaufen werden, anstatt fehl zuschlagen, kann das ein starker Hinweis darauf sein, dass die Testfälle möglicherweise fehlerhaft sind und keine Aussagekraft haben.

Original: if(TRUE) → Mutant: if(FALSE)

Stress-Test

Eine andere Bezeichnung für Stresstests sind Penetrationstests, die besonders auf die Performance einer Anwendung abgesehen haben. Damit kann man also sicherstellen, dass die Web-App beispielsweise mit einer definierten Anzahl an Zugriffen zurechtkommt.

Natürlich sind noch viele andere hilfreiche Funktionen vorhanden. So kann man Tests beispielsweise gruppieren und die Gruppen können dann einzeln aufgerufen werden.

// definition
pest()->extend(TestCase::class)
->group('feature')
->in('Feature');

// calling
php ./vendor/bin/pest --group=feature

Für alle diejenigen, die nicht mit dem Lavarel Framework arbeiten und dennoch nicht auf das Testen in PHP mit PEST verzichten möchten, können das PEST Framework auch so in ihre Anwendung einbauen. Dazu muss lediglich in der Composer Projektkonfiguration PEST als entsprechende Entwicklungsabhängigkeit definiert werden. Anschließend kann im Wurzelverzeichnis des Projektes das Initial Test Setup angestoßen werden.

php ./vendor/bin/pest --init

Wie wir sehen konnten, sind allein die hier kurz vorgestellten Optionen sehr mächtig. Die offizielle Dokumentation von PEST ist auch sehr ausführlich und sollte grundsätzlich die erste Anlaufstelle sein. In diesem Artikel ging es mir vor allem darum, die Einstiegshürden für testgetriebene Entwicklung in PHP zu minimieren. Denn auch PHP bietet mittlerweile ein gutes Füllhorn an Möglichkeiten, sehr effizient und zuverlässig kommerzielle Softwareprojekte umzusetzen.

Ressourcen

Professionelle Screenshots anfertigen

So ziemlich jeder Computernutzer kommt im Laufe der vielen Stunden, die er vor diesem tollen Gerät verbringen darf, in die Notwendigkeit, den Bildschirminhalt als Grafik abzuspeichern. Den Vorgang, vom Inhalt des Monitors ein Bild zu erzeugen, nennen eingeweihte Profis einen Screenshot erstellen.

Wie bei so vielen Dingen führen auch beim Erstellen von Screenshots viele Wege nach Rom, beziehungsweise zum Ziel. Ganz findige Zeitgenossen lösen das Problem, indem sie einfach mit dem Smartphone auf den Monitor halten und ein Foto machen. Warum auch nicht, solange man anschließend auch noch etwas erkennen kann, ist ja alles gut. Aber hier soll die kleine Anleitung nicht zu Ende sein, sondern wir schauen uns die vielen Möglichkeiten zum Erstellen von Screenshots etwas genauer an. Denn auch Profis, die zum Beispiel gelegentlich mal eine Anleitung schreiben dürfen, müssen die ein oder andere Tücke überwinden.

Bevor wir auch gleich zum Eingemachten kommen, ist es wichtig zu erwähnen, dass es einen Unterschied macht, ob man den ganzen Bildschirm, das Browserfenster oder sogar den nicht sichtbaren Bereich einer Webseite als Screenshot abspeichern möchte. Die vorgestellte Lösung für den Webbrowser funktioniert so ziemlich bei allen Webbrowsern auf allen Betriebssystemen gleich. Screenshots, die den Monitorbereich abdecken sollen und keine Webseite, nutzen Techniken des vorhandenen Betriebssystems. Aus diesem Grund unterscheiden wir auch zwischen Linux und Windows. Beginnen wir mit dem häufigsten Szenario: Browser-Screenshots.

Browser

Gerade bei Onlinebestellungen hat so mancher ein angenehmeres Gefühl, wenn er den Kauf zusätzlich durch einen Screenshot dokumentieren kann. Aber auch gelegentlich das Sichern einer Anleitung von einer Homepage, für später zu speichern, ist nicht unüblich. Oft steht man beim Erstellen von Screenshots von Webseiten vor dem Problem, dass die einzelne Seite länger ist als der auf dem Monitor angezeigte Bereich. Natürlich ist der Wunsch, nun den gesamten Inhalt zu sichern und nicht nur den angezeigten Bereich. Genau für diesen Fall haben wir lediglich die Möglichkeit, auf ein Browserplugin zurückzugreifen.

Mit Fireshot, steht uns für alle gängigen Browser wie Brave, Firefox und Microsoft Edge ein Plug-in zur Verfügung, mit dem wir Screenshots inklusive verdeckter Inhalte von Webseiten erstellen. Fireshot ist eine Browsererweiterung, die schon seit sehr langer Zeit auf dem Markt ist. Fireshot kommt mit einer kostenlosen Version, die bereits für das beschriebene Szenario ausreichend ist. Wer zusätzlich bereits bei der Erstellung des Screenshots noch einen Bildeditor benötigt, um unter anderem Bereiche hervorzuheben und Beschriftungen vorzunehmen, kann die kostenpflichtige Pro Version nutzen. Der integrierte Editor hat den Vorteil, im professionellen Bereich, wie beim Erstellen von Anleitungen und Dokumentationen, den Arbeitsfluss erheblich zu beschleunigen. Natürlich erreicht man gleiche Ergebnisse mit einem externen Fotoeditor wie Gimp. Gimp ist ein freies Bildbearbeitungsprogramm, ähnlich leistungsfähig und professionell wie das kostenpflichtige Photoshop, das für Windows und Linux verfügbar ist.

Linux

Wollen wir wiederum Screenshots außerhalb des Webbrowsers erstellen, so können wir problemlos auf die Bordmittel des Betriebssystems zurückgreifen. In Linux benötigt man kein weiteres Programm zu installieren, alles Notwendige ist bereits vorhanden. Mit dem Drücken der Print Taste auf der Tastatur öffnet sich bereits das Werkzeug. Man muss lediglich mit der Maus den Rahmen um den zu fotografierenden Bereich ziehen und im erscheinenden Control Feld auf Capture drücken. Es ist kein Problem, wenn der Controlbereich im sichtbaren Bereich des Screenshots liegt, es wird nicht im Screenshot angezeigt, Auf deutschen Tastaturen findet man oft anstatt Print die Taste Druck. Der fertige Screenshot landet dann mit einem Zeitstempel im Dateinamen im Ordner Screenshots, der ein Unterordner in Pictures innerhalb des Benutzerverzeichnisses ist.

Windows

Der einfachste Weg, unter Windows Screenshots anzufertigen, ist die Verwendung des Snipping Tools, das in der Regel ebenfalls bereits Bestandteil der Windows-Installation ist. Auch hier ist die Bedienung intuitiv.

Ein anderer sehr alter Weg in Windows, ohne ein spezielles Programm zum Erstellen von Screenshots, ist das gleichzeitige Drücken der Tasten Strg und Druck. Anschließend öffnen wir ein Grafikprogramm, wie das in jeder Windows-Installation vorhandene Paint. Im Zeichenbereich drücken wir dann die Tasten Strg + V gleichzeitig und der Screenshot erscheint und kann sofort bearbeitet werden.

Meistens werden diese Screenshots im Grafikformat JPG erstellt. JPG ist eine verlustbehaftete Komprimierung, sodass man nach Erstellung des Screenshots die Lesbarkeit überprüfen sollte. Gerade bei aktuellen Monitoren mit Auflösungen um die 2000 Pixel erfordert die Verwendung der Grafik in einer Homepage noch manuelle Nachbearbeitung. Ein Punkt ist das Reduzieren der Auflösung von den knapp 2000 Pixeln zu den auf der Homepage üblichen knapp 1000 Pixel. Ideal ist es, die fertig skalierte und bearbeitete Grafik im neuen WEBP Format zu speichern. WEBP ist eine verlustfreie Grafikkomprimierung, die die Datei gegenüber JPG noch einmal reduziert, was sehr positiv für die Ladezeiten der Internetseite ist.

Damit haben wir auch schon eine gute Bandbreite zum Erstellen von Screenshots besprochen. Natürlich könnte man noch mehr dazu sagen, das fällt dann allerdings in den Bereich des Grafikdesigns und der effizienten Verwendung von Bildbearbeitungssoftware.


User Tracking und Shadowbanned

Der Wunsch von Webseitenbetreibern, möglichst viele Informationen über ihre Nutzer zu bekommen, ist so alt wie das Internet selbst. Einfache Zähler für Seitenaufrufe oder das Erkennen des Webbrowsers und der Bildschirmauflösung sind dabei die einfachsten Anwendungsfälle des Usertrackings. Mittlerweile sind die Betreiber von Internetseiten nicht mehr alleine auf Google angewiesen, um Informationen über ihre Besucher zu sammeln. Es gibt ausreichend kostenlose Werkzeuge, um einen eigenen Tracking-Server zu unterhalten. In diesem Artikel gehe ich ein wenig auf die historischen Hintergründe, Technologien und gesellschaftlichen Aspekte ein.

Als um die Jahrtausendwende immer mehr Unternehmen den Weg in die Weiten des WWW fanden, begann das Interesse, mehr über die Besucher der Homepages herauszufinden. Anfänglich begnügte man sich damit, auf der Startseite sogenannte Besucherzähler zu platzieren. Nicht selten wurden recht abenteuerliche Zahlen von diesen Besucherzählern angezeigt. Sicher spielte das Ego der Webseitenbetreiber auch eine Rolle dabei, denn viele Besucher auf der Homepage wirken nach außen und machen auch ein wenig Eindruck auf die Besucher. Wer allerdings ernsthaft über seine Webseite Geld verdienen wollte, merkte recht schnell, das fiktive Zahlen keinen Umsatz generieren. Also brauchte man verlässlichere Möglichkeiten.

Damit Nutzer nicht jedes Mal beim Aufrufen der Startseite mehrfach gezählt wurden, begann man damit, die IP-Adresse zu speichern, und setzte einen Timeout von einer Stunde, bevor wieder gezählt wurde. Das nannte sich dann Reloadsperre. Natürlich war das keine sichere Erkennung. Denn zu dieser Zeit waren Verbindungen über das Telefonnetz per Modem üblich und es kam öfter vor, dass die Verbindung abbrach und man sich neu einwählen musste. Dann gab es auch eine neue IP-Adresse. Die Genauigkeit dieser Lösung hatte also noch viel Potenzial nach oben.

Als um circa 2005 Webspace mit PHP und MySQL-Datenbanken bezahlbar wurde, ging man dazu über, die besuchten Seiten in kleinen Textdateien, den sogenannten Cookies, im Browser zu speichern. Diese Analysen waren schon sehr aussagefähig und haben den Unternehmen geholfen zu sehen, welche Artikel die Leute interessieren. Dumm war nur, wenn argwöhnische Nutzer bei jeder Gelegenheit ihre Cookies löschten. Deshalb ist man dazu übergegangen, alle Requests auf dem Server zu speichern, in sogenannten Sessions. In den meisten der Anwendungsfälle genügt die dadurch erzielte Genauigkeit, um das Angebot besser an die Nachfrage anzupassen.

Ein verbreitetes Werkzeug für Nutzertracking ist das in PHP geschriebene Matomo. Mit dieser selbst gehosteten Open Source Software kann man Google umgehen und erreicht auch eine bessere DSGVO-Konformität, da die erhobenen Daten nicht an Dritte weitergegeben werden. Zudem können personalisierte Daten nach einem festgelegten Zeitraum, zum Beispiel bei Monatsbeginn, anonymisiert werden. In diesem Fall werden Informationen wie IP-Adressen gegen zufällige Identifier ausgetauscht.

Das ganze Thema wird sofort auf ein ganz anderes Niveau gehoben, wenn Geld mit im Spiel ist. Früher waren das Firmen, die auf gut besuchten Internetseiten Werbebanner platzierten und dann pro 1000 Anzeigen einen kleinen Betrag bezahlt haben. Heutzutage sind Streamingdienste wie Spotify oder YouTube daran interessiert, exakt zu ermitteln, wie oft ein bestimmter Inhalt, beziehungsweise wie lange ein Titel angeschaut wurde. Denn in dem Moment, in dem Geld im Spiel ist, gibt es ein großes Interesse, mit kleinen oder großen Tricksereien sich ein wenig mehr Geld zu ergaunern, als einem eigentlich zustehen würde. Ebendarum sind Firmen wie Google und Co. stetig damit beschäftigt, herauszufinden, wie viele Nutzer die Inhalte wie lange konsumieren. Neben Trackingfunktionen in den Anwendungen nutzen diese Unternehmen auch ein komplexes Monitoring, das auf Originaldaten der Serverlogs und des Netzwerkverkehrs zugreifen kann. Hier kommen Tools wie der ELK-Stack oder Prometheus und Grafana ins Spiel.

Wenn wir als Beispiel einmal YouTube herausgreifen, hat dieser Dienst einige Hürden zu meistern. Viele nutzen YouTube als TV‑Ersatz, da sie aus einem enormen Fundus an Content die Dinge selbst heraussuchen können, die sie interessieren. Ein typisches Szenario ist das stundenlange automatische Abspielen von Ambientmusik. Wenn ausreichend viele Personen so etwas tun, ohne wirklich den Inhalten Aufmerksamkeit zu schenken, belastet das nur sinnlos die Serverinfrastruktur und verursacht für den Betreiber erhebliche Kosten. Auch diese automatische Autoplay-Funktion in der Vorschau ist noch keine wirkliche Interaktion und eher als Teaser gedacht.

Um die Nutzer in ständiger Aktion zu halten, gibt es aktuell zwei Strategien. Eine davon sind kurze Videos, die so lange in einer Endlosschleife laufen, bis man manuell zum nächsten übergeht. So kann man einerseits kurze Werbevideos untermischen, aber auch Nachrichten oder Meinungen platzieren. Natürlich muss das Usertracking bei einem Endlosdurchlauf eines monetarisierten Shorts die Wiederholungen herausnehmen. Das führt natürlich zu Korrekturen der Impressionen-Anzeige. Eine andere sehr exzessiv eingesetzte Strategie bei langen Videos ist das unverhältnismäßig langer Werbeunterbrechungen in relativ kurzen Abständen. Was die Nutzer dazu nötigt, diese Werbung jedes Mal aktiv wegzuklicken und somit Aufmerksamkeit abverlangt.

Nun gibt es Themen, bei denen Dienste wie YouTube, aber auch X oder Facebook Interesse daran haben, ihre Nutzer in eine bestimmte Richtung zu beeinflussen. Das kann die Bildung von Meinungen zu politischen Themen sein oder einfach Kommerz. Jetzt könnte man meinen, es wäre eine gängige Strategie, die Sichtbarkeit unerwünschter Meinungen zu unterdrücken, indem man die Aufrufzahlen der Beiträge nach unten korrigiert. Das wäre allerdings nicht förderlich, den die Leute haben den Beitrag ja dann bereits gesehen. Daher ist eine andere Strategie viel zielführender. Im ersten Schritt würde der Kanal oder der Beitrag von der Monetarisierung ausgenommen, so erhält der Betreiber keine zusätzliche Vergütung. Im nächsten Schritt erhöht man die Zahl der Aufrufe, so das der Content Creator im Glauben ist ein breites Publikum zu erreichen, und weniger Maßnahmen unternimmt, mehr Sichtbarkeit zu erlangen. Zusätzlich lassen sich die Aufrufe von Inhalten mit Methoden aus DevOps wie dem A/B Testing unter Verwendung von Feature Flags und Load Balancern nur die Personen auf die Beiträge leiten, die explizit danach suchen. So erweckt man keinen Verdacht, Zensur auszuüben, und die Sichtbarkeit ist signifikant reduziert. Natürlich tauchen unerwünschte Beiträge nur bei den Personen in den Empfehlungen auf, die Kanäle explizit abonniert haben.

In der Netflix-Produktion ‚Das Dilemma mit den sozialen Medien‘ wird zudem beklagt, dass sich Blasen bilden, in denen sich Personen mit bestimmten Interessen sammeln. Dies ist ein Effekt sogenannter Recommender-Systeme. Diese Empfehlungsgeber sind Algorithmen aus dem Bereich der künstlichen Intelligenz. Diese funktionieren recht statisch über statistische Auswertungen. Vorhandene Inhalte werden in Kategorien klassifiziert und anschließend wird geschaut, welche Personengruppen mit welcher Gewichtung Interesse an einer bestimmten Kategorie haben. Entsprechend werden dann Inhalte im Verhältnis der Interessen aus dieser Kategorie ausgespielt. Die so erfassten Inhalte können natürlich problemlos mit zusätzlichen Labels wie „gut geeignet“ oder „ungeeignet“ markiert werden. Entsprechend der Meta-Markierungen können dann unerwünschte Inhalte in den Tiefen der Datenbasis verschüttet werden.

Damit diese ganzen Maßnahmen auch richtig greifen können, ist es wiederum notwendig, möglichst viele Informationen über die Nutzer zu sammeln. So schließt sich wiederum der Kreis zum Usertracking. Das Tracking ist mittlerweile so ausgefeilt, dass Browsereinstellungen, die regelmäßig Cookies löschen, oder das grundsätzliche Nutzen des Inkognito-Modus vollständig wirkungslos sind.

Die einzige Möglichkeit, sich aus der Abhängigkeit der großen Plattformanbieter zu befreien, ist die bewusste Entscheidung, dies möglichst nicht mehr mit Inhalten zu versorgen. Ein Schritt in diese Richtung wäre das Betreiben einer eigenen Homepage mit entsprechendem eigenen Monitoring für das Usertracking. Umfangreiche Inhalte wie Video und Audio können auf mehrere unbekannte Plattformen ausgelagert werden und in die Homepage embedded werden. Hier sollte man auch nicht alle Inhalte auf einer einzigen Plattform wie Odysee oder Rumble hochladen, sondern die Inhalte geschickt auf mehrere Plattformen verteilen, ohne diese dupliziert zu haben. Solche Maßnahmen binden die Besucher an die eigene Homepage und nicht an die entsprechenden Plattformbetreiber.

Wer etwas mehr finanzielle Freiheit hat, kann auch auf freie Software wie den PeerTube zurückgreifen und eine eigene Videoplattform hosten. Hier gibt es einiges an Möglichkeiten, die allerdings einen hohen Aufwand und einiges an technischem Know-how von den Betreibern abverlangen.